Pioneer
Shields.h
Go to the documentation of this file.
1 // Copyright © 2008-2021 Pioneer Developers. See AUTHORS.txt for details
2 // Licensed under the terms of the GPL v3. See licenses/GPL-3.txt
3 
4 #ifndef _SHIELDS_H_
5 #define _SHIELDS_H_
6 /*
7  * Mesh shields for ships and other objects.
8  */
9 #include "JsonFwd.h"
10 #include "libs.h"
11 #include <deque>
12 
13 namespace Graphics {
14  class Renderer;
15 }
16 namespace SceneGraph {
17  class Model;
18  class StaticGeometry;
19 } // namespace SceneGraph
20 
22  static const Uint32 MAX_SHIELD_HITS = 5; // Also defined in ShieldMaterial.h
23  float strength;
24  float coolDown;
27  Sint32 numHits;
28 };
29 
30 class Shields {
31 public:
32  struct Shield {
33  Shield(const Color3ub &color, const matrix4x4f &matrix, SceneGraph::StaticGeometry *sg);
34  Color3ub m_colour; // I'm English, so it's "colour" ;)
37  };
38 
40  virtual ~Shields();
41  virtual void SaveToJson(Json &jsonObj);
42  virtual void LoadFromJson(const Json &jsonObj);
43 
44  void SetEnabled(const bool on) { m_enabled = on; }
45  void Update(const float coolDown, const float shieldStrength);
46  void SetColor(const Color3ub &);
47  void AddHit(const vector3d &hitPos);
48 
49  static void Init(Graphics::Renderer *);
51  static void Uninit();
52 
54 
55 protected:
56  struct Hits {
57  Hits(const vector3d &_pos, const Uint32 _start, const Uint32 _end);
59  Uint32 start;
60  Uint32 end;
61  };
62  typedef std::deque<Shields::Hits>::iterator HitIterator;
63  std::deque<Hits> m_hits;
64  std::vector<Shield> m_shields;
65  bool m_enabled;
66 
67  static bool s_initialised;
68 };
69 
70 #endif
nlohmann::json Json
Definition: Json.h:8
Definition: Renderer.h:39
Definition: Model.h:94
Definition: StaticGeometry.h:19
Definition: Shields.h:30
void Update(const float coolDown, const float shieldStrength)
Definition: Shields.cpp:267
std::deque< Shields::Hits >::iterator HitIterator
Definition: Shields.h:62
void AddHit(const vector3d &hitPos)
Definition: Shields.cpp:329
virtual void SaveToJson(Json &jsonObj)
Definition: Shields.cpp:224
std::vector< Shield > m_shields
Definition: Shields.h:64
Shields(SceneGraph::Model *)
Definition: Shields.cpp:176
static bool s_initialised
Definition: Shields.h:67
void SetEnabled(const bool on)
Definition: Shields.h:44
std::deque< Hits > m_hits
Definition: Shields.h:63
static void Uninit()
Definition: Shields.cpp:169
virtual ~Shields()
Definition: Shields.cpp:220
bool m_enabled
Definition: Shields.h:65
SceneGraph::StaticGeometry * GetFirstShieldMesh()
Definition: Shields.cpp:335
virtual void LoadFromJson(const Json &jsonObj)
Definition: Shields.cpp:243
static void Init(Graphics::Renderer *)
Definition: Shields.cpp:74
void SetColor(const Color3ub &)
Definition: Shields.cpp:322
static void ReparentShieldNodes(SceneGraph::Model *)
Definition: Shields.cpp:91
Definition: Background.h:13
Definition: CityOnPlanet.h:23
Definition: Color.h:152
Definition: Shields.h:21
static const Uint32 MAX_SHIELD_HITS
Definition: Shields.h:22
float coolDown
Definition: Shields.h:24
Sint32 numHits
Definition: Shields.h:27
float radii[MAX_SHIELD_HITS]
Definition: Shields.h:26
float strength
Definition: Shields.h:23
vector3f hitPos[MAX_SHIELD_HITS]
Definition: Shields.h:25
Definition: Shields.h:56
Uint32 start
Definition: Shields.h:59
Uint32 end
Definition: Shields.h:60
Hits(const vector3d &_pos, const Uint32 _start, const Uint32 _end)
Definition: Shields.cpp:68
vector3d pos
Definition: Shields.h:58
Definition: Shields.h:32
RefCountedPtr< SceneGraph::StaticGeometry > m_mesh
Definition: Shields.h:36
Color3ub m_colour
Definition: Shields.h:34
matrix4x4f m_matrix
Definition: Shields.h:35
Shield(const Color3ub &color, const matrix4x4f &matrix, SceneGraph::StaticGeometry *sg)
Definition: Shields.cpp:62