Pioneer
Projectile.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 _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 MeshObject;
35 } // namespace Graphics
36 
37 class Projectile : public Body {
38 public:
40 
41  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);
42  static void Add(Body *parent, const ProjectileData &prData, const vector3d &pos, const vector3d &baseVel, const vector3d &dirVel);
43 
44  Projectile() = delete;
45  Projectile(Body *parent, const ProjectileData &prData, const vector3d &pos, const vector3d &baseVel, const vector3d &dirVel);
46  Projectile(const Json &jsonObj, Space *space);
47  virtual ~Projectile();
48  virtual void Render(Graphics::Renderer *r, const Camera *camera, const vector3d &viewCoords, const matrix4x4d &viewTransform) override final;
49  void TimeStepUpdate(const float timeStep) override final;
50  void StaticUpdate(const float timeStep) override final;
51  virtual void NotifyRemoved(const Body *const removedBody) override final;
52  virtual void UpdateInterpTransform(double alpha) override final;
53  virtual void PostLoadFixup(Space *space) override final;
54 
55  static void FreeModel();
56 
57 protected:
58  virtual void SaveToJson(Json &jsonObj, Space *space) override final;
59 
60 private:
61  float GetDamage() const;
62  double GetRadius() const;
63  Body *m_parent;
64  vector3d m_baseVel;
65  vector3d m_dirVel;
66  float m_age;
67  float m_lifespan;
68  float m_baseDam;
69  float m_length;
70  float m_width;
71  bool m_mining;
72  Color m_color;
73 
74  int m_parentIndex; // deserialisation
75 
76  static void BuildModel();
77 
78  static std::unique_ptr<Graphics::MeshObject> s_sideMesh;
79  static std::unique_ptr<Graphics::MeshObject> s_glowMesh;
80  static std::unique_ptr<Graphics::Material> s_sideMat;
81  static std::unique_ptr<Graphics::Material> s_glowMat;
82 };
83 
84 #endif /* _PROJECTILE_H */
nlohmann::json Json
Definition: Json.h:8
Definition: Body.h:57
Definition: Camera.h:80
Definition: Frame.h:28
Definition: Renderer.h:44
Definition: Projectile.h:37
virtual void NotifyRemoved(const Body *const removedBody) override final
Definition: Projectile.cpp:202
virtual void PostLoadFixup(Space *space) override final
Definition: Projectile.cpp:189
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:361
static void FreeModel()
Definition: Projectile.cpp:109
void StaticUpdate(const float timeStep) override final
Definition: Projectile.cpp:260
virtual void SaveToJson(Json &jsonObj, Space *space) override final
Definition: Projectile.cpp:169
virtual ~Projectile()
Definition: Projectile.cpp:165
virtual void UpdateInterpTransform(double alpha) override final
Definition: Projectile.cpp:195
void TimeStepUpdate(const float timeStep) override final
Definition: Projectile.cpp:207
OBJDEF(Projectile, Body, PROJECTILE)
virtual void Render(Graphics::Renderer *r, const Camera *camera, const vector3d &viewCoords, const matrix4x4d &viewTransform) override final
Definition: Projectile.cpp:299
Definition: Space.h:19
Definition: Background.h:14
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