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 MeshObject;
21 } // namespace Graphics
22 
23 struct ProjectileData;
24 
25 class Beam : public Body {
26 public:
28 
29  static void Add(Body *parent, const ProjectileData &prData, const vector3d &pos, const vector3d &baseVel, const vector3d &dir);
30 
31  Beam() = delete;
32  Beam(Body *parent, const ProjectileData &prData, const vector3d &pos, const vector3d &baseVel, const vector3d &dir);
33  Beam(const Json &jsonObj, Space *space);
34  virtual ~Beam();
35  virtual void Render(Graphics::Renderer *r, const Camera *camera, const vector3d &viewCoords, const matrix4x4d &viewTransform) override final;
36  void TimeStepUpdate(const float timeStep) override final;
37  void StaticUpdate(const float timeStep) override final;
38  virtual void NotifyRemoved(const Body *const removedBody) override final;
39  virtual void PostLoadFixup(Space *space) override final;
40  virtual void UpdateInterpTransform(double alpha) override final;
41 
42  static void FreeModel();
43 
44 protected:
45  virtual void SaveToJson(Json &jsonObj, Space *space) override final;
46 
47 private:
48  float GetDamage() const;
49  double GetRadius() const;
50  Body *m_parent;
51  vector3d m_baseVel;
52  vector3d m_dir;
53  Color m_color;
54  float m_baseDam;
55  float m_length;
56  float m_age;
57  bool m_mining;
58  bool m_active;
59 
60  int m_parentIndex; // deserialisation
61 
62  static void BuildModel();
63 
64  static std::unique_ptr<Graphics::MeshObject> s_sideMesh;
65  static std::unique_ptr<Graphics::MeshObject> s_glowMesh;
66  static std::unique_ptr<Graphics::Material> s_sideMat;
67  static std::unique_ptr<Graphics::Material> s_glowMat;
68 };
69 
70 #endif /* _BEAM_H */
nlohmann::json Json
Definition: Json.h:8
Definition: Beam.h:25
void StaticUpdate(const float timeStep) override final
Definition: Beam.cpp:260
Beam()=delete
virtual void PostLoadFixup(Space *space) override final
Definition: Beam.cpp:189
static void FreeModel()
Definition: Beam.cpp:115
virtual void Render(Graphics::Renderer *r, const Camera *camera, const vector3d &viewCoords, const matrix4x4d &viewTransform) override final
Definition: Beam.cpp:302
virtual void UpdateInterpTransform(double alpha) override final
Definition: Beam.cpp:195
void TimeStepUpdate(const float timeStep) override final
Definition: Beam.cpp:208
virtual void SaveToJson(Json &jsonObj, Space *space) override final
Definition: Beam.cpp:172
virtual void NotifyRemoved(const Body *const removedBody) override final
Definition: Beam.cpp:202
static void Add(Body *parent, const ProjectileData &prData, const vector3d &pos, const vector3d &baseVel, const vector3d &dir)
Definition: Beam.cpp:365
virtual ~Beam()
Definition: Beam.cpp:168
OBJDEF(Beam, Body, PROJECTILE)
Definition: Body.h:57
Definition: Camera.h:80
Definition: Renderer.h:44
Definition: Space.h:19
Definition: Background.h:14
Definition: Color.h:66
Definition: Projectile.h:9