Pioneer
Projectile.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 _PROJECTILE_H
5 #define _PROJECTILE_H
6 
7 #include "Body.h"
8 
9 struct ProjectileData {
11  lifespan(0.0f),
12  damage(0.0f),
13  length(0.0f),
14  width(0.0f),
15  speed(0.0f),
16  color(Color::WHITE),
17  mining(false),
18  beam(false) {}
19  float lifespan;
20  float damage;
21  float length;
22  float width;
23  float speed;
25  bool mining;
26  bool beam;
27 };
28 
29 class Frame;
30 
31 namespace Graphics {
32  class Material;
33  class Renderer;
34  class RenderState;
35  class VertexArray;
36 } // namespace Graphics
37 
38 class Projectile : public Body {
39 public:
41 
42  static void Add(Body *parent, float lifespan, float dam, float length, float width, bool mining, const Color &color, const vector3d &pos, const vector3d &baseVel, const vector3d &dirVel);
43  static void Add(Body *parent, const ProjectileData &prData, const vector3d &pos, const vector3d &baseVel, const vector3d &dirVel);
44 
45  Projectile() = delete;
46  Projectile(Body *parent, const ProjectileData &prData, const vector3d &pos, const vector3d &baseVel, const vector3d &dirVel);
47  Projectile(const Json &jsonObj, Space *space);
48  virtual ~Projectile();
49  virtual void Render(Graphics::Renderer *r, const Camera *camera, const vector3d &viewCoords, const matrix4x4d &viewTransform) override final;
50  void TimeStepUpdate(const float timeStep) override final;
51  void StaticUpdate(const float timeStep) override final;
52  virtual void NotifyRemoved(const Body *const removedBody) override final;
53  virtual void UpdateInterpTransform(double alpha) override final;
54  virtual void PostLoadFixup(Space *space) override final;
55 
56  static void FreeModel();
57 
58 protected:
59  virtual void SaveToJson(Json &jsonObj, Space *space) override final;
60 
61 private:
62  float GetDamage() const;
63  double GetRadius() const;
64  Body *m_parent;
65  vector3d m_baseVel;
66  vector3d m_dirVel;
67  float m_age;
68  float m_lifespan;
69  float m_baseDam;
70  float m_length;
71  float m_width;
72  bool m_mining;
73  Color m_color;
74 
75  int m_parentIndex; // deserialisation
76 
77  static void BuildModel();
78 
79  static std::unique_ptr<Graphics::VertexArray> s_sideVerts;
80  static std::unique_ptr<Graphics::VertexArray> s_glowVerts;
81  static std::unique_ptr<Graphics::Material> s_sideMat;
82  static std::unique_ptr<Graphics::Material> s_glowMat;
83  static Graphics::RenderState *s_renderState;
84 };
85 
86 #endif /* _PROJECTILE_H */
nlohmann::json Json
Definition: Json.h:8
Definition: Body.h:54
Definition: Camera.h:76
Definition: Frame.h:28
Definition: RenderState.h:25
Definition: Renderer.h:39
Definition: Projectile.h:38
virtual void NotifyRemoved(const Body *const removedBody) override final
Definition: Projectile.cpp:198
virtual void PostLoadFixup(Space *space) override final
Definition: Projectile.cpp:185
Projectile()=delete
static void Add(Body *parent, float lifespan, float dam, float length, float width, bool mining, const Color &color, const vector3d &pos, const vector3d &baseVel, const vector3d &dirVel)
Definition: Projectile.cpp:357
static void FreeModel()
Definition: Projectile.cpp:105
void StaticUpdate(const float timeStep) override final
Definition: Projectile.cpp:256
virtual void SaveToJson(Json &jsonObj, Space *space) override final
Definition: Projectile.cpp:165
virtual ~Projectile()
Definition: Projectile.cpp:161
virtual void UpdateInterpTransform(double alpha) override final
Definition: Projectile.cpp:191
void TimeStepUpdate(const float timeStep) override final
Definition: Projectile.cpp:203
OBJDEF(Projectile, Body, PROJECTILE)
virtual void Render(Graphics::Renderer *r, const Camera *camera, const vector3d &viewCoords, const matrix4x4d &viewTransform) override final
Definition: Projectile.cpp:295
Definition: Space.h:19
Definition: Background.h:13
Definition: Color.h:66
Definition: Projectile.h:9
float width
Definition: Projectile.h:22
bool beam
Definition: Projectile.h:26
Color color
Definition: Projectile.h:24
float length
Definition: Projectile.h:21
float damage
Definition: Projectile.h:20
ProjectileData()
Definition: Projectile.h:10
bool mining
Definition: Projectile.h:25
float speed
Definition: Projectile.h:23
float lifespan
Definition: Projectile.h:19