Pioneer
NavLights.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 _NAVLIGHTS_H
5 #define _NAVLIGHTS_H
6 /*
7  * Blinking navigation lights for ships and stations
8  */
9 #include "JsonFwd.h"
10 #include "graphics/VertexArray.h"
11 #include "graphics/VertexBuffer.h"
12 
13 namespace Graphics {
14  class Renderer;
15  class RenderState;
16 } // namespace Graphics
17 namespace SceneGraph {
18  class Model;
19  class Billboard;
20 } // namespace SceneGraph
21 
22 class NavLights {
23 public:
24  enum LightColor {
29  NAVLIGHT_OFF = 15
30  };
31 
32  struct LightBulb {
33  LightBulb(Uint8 group, Uint8 mask, Uint8 color, SceneGraph::Billboard *bb);
34  Uint8 group;
35  Uint8 mask; //bitmask: 00001111 light on half the period, 11111111 light on the entire period etc...
36  Uint8 color;
38  };
39 
40  NavLights(SceneGraph::Model *, float period = 2.f);
41  virtual ~NavLights();
42  virtual void SaveToJson(Json &jsonObj);
43  virtual void LoadFromJson(const Json &jsonObj);
44 
45  void SetEnabled(bool on) { m_enabled = on; }
46  void Update(float time);
47  void Render(Graphics::Renderer *renderer);
48  void SetColor(unsigned int group, LightColor);
49  void SetMask(unsigned int group, uint8_t mask);
50 
51  static void Init(Graphics::Renderer *);
52  static void Uninit();
53 
54 protected:
55  std::map<Uint32, std::vector<LightBulb>> m_groupLights;
56  float m_time;
57  float m_period;
58  bool m_enabled;
59 
63 };
64 
65 #endif
nlohmann::json Json
Definition: Json.h:8
Definition: RenderState.h:25
Definition: Renderer.h:39
Definition: VertexArray.h:19
Definition: NavLights.h:22
void Render(Graphics::Renderer *renderer)
Definition: NavLights.cpp:181
static void Uninit()
Definition: NavLights.cpp:71
void SetEnabled(bool on)
Definition: NavLights.h:45
Graphics::RenderState * m_billboardRS
Definition: NavLights.h:62
float m_time
Definition: NavLights.h:56
virtual void LoadFromJson(const Json &jsonObj)
Definition: NavLights.cpp:144
void Update(float time)
Definition: NavLights.cpp:156
void SetColor(unsigned int group, LightColor)
Definition: NavLights.cpp:224
float m_period
Definition: NavLights.h:57
bool m_enabled
Definition: NavLights.h:58
NavLights(SceneGraph::Model *, float period=2.f)
Definition: NavLights.cpp:78
LightColor
Definition: NavLights.h:24
@ NAVLIGHT_RED
Definition: NavLights.h:25
@ NAVLIGHT_GREEN
Definition: NavLights.h:26
@ NAVLIGHT_OFF
Definition: NavLights.h:29
@ NAVLIGHT_YELLOW
Definition: NavLights.h:28
@ NAVLIGHT_BLUE
Definition: NavLights.h:27
RefCountedPtr< Graphics::VertexBuffer > m_billboardVB
Definition: NavLights.h:61
Graphics::VertexArray m_billboardTris
Definition: NavLights.h:60
std::map< Uint32, std::vector< LightBulb > > m_groupLights
Definition: NavLights.h:55
void SetMask(unsigned int group, uint8_t mask)
Definition: NavLights.cpp:236
virtual void SaveToJson(Json &jsonObj)
Definition: NavLights.cpp:134
static void Init(Graphics::Renderer *)
Definition: NavLights.cpp:49
virtual ~NavLights()
Definition: NavLights.cpp:130
Definition: Billboard.h:20
Definition: Model.h:94
Definition: Background.h:13
Definition: CityOnPlanet.h:23
Definition: NavLights.h:32
LightBulb(Uint8 group, Uint8 mask, Uint8 color, SceneGraph::Billboard *bb)
Definition: NavLights.cpp:41
Uint8 mask
Definition: NavLights.h:35
SceneGraph::Billboard * billboard
Definition: NavLights.h:37
Uint8 color
Definition: NavLights.h:36
Uint8 group
Definition: NavLights.h:34