Pioneer
Beam.h
Go to the documentation of this file.
1 // Copyright © 2008-2016 Pioneer Developers. See AUTHORS.txt for details
2 // Licensed under the terms of the GPL v3. See licenses/GPL-3.txt
3 
4 #pragma once
5 
6 #ifndef _BEAM_H
7 #define _BEAM_H
8 
9 #include "Body.h"
10 #include "Color.h"
11 #include "matrix4x4.h"
12 #include "vector3.h"
13 
14 class Camera;
15 class Space;
16 
17 namespace Graphics {
18  class Material;
19  class Renderer;
20  class RenderState;
21  class VertexArray;
22 } // namespace Graphics
23 
24 struct ProjectileData;
25 
26 class Beam : public Body {
27 public:
29 
30  static void Add(Body *parent, const ProjectileData &prData, const vector3d &pos, const vector3d &baseVel, const vector3d &dir);
31 
32  Beam() = delete;
33  Beam(Body *parent, const ProjectileData &prData, const vector3d &pos, const vector3d &baseVel, const vector3d &dir);
34  Beam(const Json &jsonObj, Space *space);
35  virtual ~Beam();
36  virtual void Render(Graphics::Renderer *r, const Camera *camera, const vector3d &viewCoords, const matrix4x4d &viewTransform) override final;
37  void TimeStepUpdate(const float timeStep) override final;
38  void StaticUpdate(const float timeStep) override final;
39  virtual void NotifyRemoved(const Body *const removedBody) override final;
40  virtual void PostLoadFixup(Space *space) override final;
41  virtual void UpdateInterpTransform(double alpha) override final;
42 
43  static void FreeModel();
44 
45 protected:
46  virtual void SaveToJson(Json &jsonObj, Space *space) override final;
47 
48 private:
49  float GetDamage() const;
50  double GetRadius() const;
51  Body *m_parent;
52  vector3d m_baseVel;
53  vector3d m_dir;
54  Color m_color;
55  float m_baseDam;
56  float m_length;
57  float m_age;
58  bool m_mining;
59  bool m_active;
60 
61  int m_parentIndex; // deserialisation
62 
63  static void BuildModel();
64 
65  static std::unique_ptr<Graphics::VertexArray> s_sideVerts;
66  static std::unique_ptr<Graphics::VertexArray> s_glowVerts;
67  static std::unique_ptr<Graphics::Material> s_sideMat;
68  static std::unique_ptr<Graphics::Material> s_glowMat;
69  static Graphics::RenderState *s_renderState;
70 };
71 
72 #endif /* _BEAM_H */
nlohmann::json Json
Definition: Json.h:8
Definition: Beam.h:26
void StaticUpdate(const float timeStep) override final
Definition: Beam.cpp:252
Beam()=delete
virtual void PostLoadFixup(Space *space) override final
Definition: Beam.cpp:181
static void FreeModel()
Definition: Beam.cpp:107
virtual void Render(Graphics::Renderer *r, const Camera *camera, const vector3d &viewCoords, const matrix4x4d &viewTransform) override final
Definition: Beam.cpp:294
virtual void UpdateInterpTransform(double alpha) override final
Definition: Beam.cpp:187
void TimeStepUpdate(const float timeStep) override final
Definition: Beam.cpp:200
virtual void SaveToJson(Json &jsonObj, Space *space) override final
Definition: Beam.cpp:164
virtual void NotifyRemoved(const Body *const removedBody) override final
Definition: Beam.cpp:194
static void Add(Body *parent, const ProjectileData &prData, const vector3d &pos, const vector3d &baseVel, const vector3d &dir)
Definition: Beam.cpp:357
virtual ~Beam()
Definition: Beam.cpp:160
OBJDEF(Beam, Body, PROJECTILE)
Definition: Body.h:54
Definition: Camera.h:76
Definition: RenderState.h:25
Definition: Renderer.h:39
Definition: Space.h:19
Definition: Background.h:13
Definition: Color.h:66
Definition: Projectile.h:9