Pioneer
Loading...
Searching...
No Matches
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
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
29class Frame;
30
31namespace Graphics {
32 class Material;
33 class Renderer;
34 class MeshObject;
35} // namespace Graphics
36
37class Projectile : public Body {
38public:
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
57protected:
58 virtual void SaveToJson(Json &jsonObj, Space *space) override final;
59
60private:
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