Pioneer
NavLights.h
Go to the documentation of this file.
1 // Copyright © 2008-2023 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 } // namespace Graphics
16 namespace SceneGraph {
17  class Model;
18  class Billboard;
19 } // namespace SceneGraph
20 
21 class NavLights {
22 public:
23  enum LightColor {
28  NAVLIGHT_OFF = 15
29  };
30 
31  struct LightBulb {
32  LightBulb(Uint8 group, Uint8 mask, Uint8 color, SceneGraph::Billboard *bb);
33  Uint8 group;
34  Uint8 mask; //bitmask: 00001111 light on half the period, 11111111 light on the entire period etc...
35  Uint8 color;
37  };
38 
39  NavLights(SceneGraph::Model *, float period = 2.f);
40  virtual ~NavLights();
41  virtual void SaveToJson(Json &jsonObj);
42  virtual void LoadFromJson(const Json &jsonObj);
43 
44  void SetEnabled(bool on) { m_enabled = on; }
45  void Update(float time);
46  void Render(Graphics::Renderer *renderer);
47  void SetColor(unsigned int group, LightColor);
48  void SetMask(unsigned int group, uint8_t mask);
49 
50  static void Init(Graphics::Renderer *);
51  static void Uninit();
52 
53 protected:
54  std::map<Uint32, std::vector<LightBulb>> m_groupLights;
55  float m_time;
56  float m_period;
57  bool m_enabled;
58 
60 };
61 
62 #endif
nlohmann::json Json
Definition: Json.h:8
Definition: Renderer.h:44
Definition: VertexArray.h:19
Definition: NavLights.h:21
void Render(Graphics::Renderer *renderer)
Definition: NavLights.cpp:200
static void Uninit()
Definition: NavLights.cpp:87
void SetEnabled(bool on)
Definition: NavLights.h:44
float m_time
Definition: NavLights.h:55
virtual void LoadFromJson(const Json &jsonObj)
Definition: NavLights.cpp:163
void Update(float time)
Definition: NavLights.cpp:175
void SetColor(unsigned int group, LightColor)
Definition: NavLights.cpp:211
float m_period
Definition: NavLights.h:56
bool m_enabled
Definition: NavLights.h:57
NavLights(SceneGraph::Model *, float period=2.f)
Definition: NavLights.cpp:97
LightColor
Definition: NavLights.h:23
@ NAVLIGHT_RED
Definition: NavLights.h:24
@ NAVLIGHT_GREEN
Definition: NavLights.h:25
@ NAVLIGHT_OFF
Definition: NavLights.h:28
@ NAVLIGHT_YELLOW
Definition: NavLights.h:27
@ NAVLIGHT_BLUE
Definition: NavLights.h:26
Graphics::VertexArray m_billboardTris
Definition: NavLights.h:59
std::map< Uint32, std::vector< LightBulb > > m_groupLights
Definition: NavLights.h:54
void SetMask(unsigned int group, uint8_t mask)
Definition: NavLights.cpp:223
virtual void SaveToJson(Json &jsonObj)
Definition: NavLights.cpp:153
static void Init(Graphics::Renderer *)
Definition: NavLights.cpp:49
virtual ~NavLights()
Definition: NavLights.cpp:149
Definition: Billboard.h:18
Definition: Model.h:88
Definition: Background.h:14
Definition: CityOnPlanet.h:31
Definition: NavLights.h:31
LightBulb(Uint8 group, Uint8 mask, Uint8 color, SceneGraph::Billboard *bb)
Definition: NavLights.cpp:41
Uint8 mask
Definition: NavLights.h:34
SceneGraph::Billboard * billboard
Definition: NavLights.h:36
Uint8 color
Definition: NavLights.h:35
Uint8 group
Definition: NavLights.h:33