Pioneer
Loading...
Searching...
No Matches
Projectile.h
Go to the documentation of this file.
1// Copyright © 2008-2024 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#include "Color.h"
9
12 lifespan(0.0f),
13 damage(0.0f),
14 length(0.0f),
15 width(0.0f),
16 speed(0.0f),
17 color(Color::WHITE),
18 mining(false),
19 beam(false) {}
20 float lifespan;
21 float damage;
22 float length;
23 float width;
24 float speed;
26 bool mining;
27 bool beam;
28};
29
30class Frame;
31
32namespace Graphics {
33 class Material;
34 class Renderer;
35 class MeshObject;
36} // namespace Graphics
37
38class Projectile : public Body {
39public:
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
58protected:
59 virtual void SaveToJson(Json &jsonObj, Space *space) override final;
60
61private:
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::MeshObject> s_sideMesh;
80 static std::unique_ptr<Graphics::MeshObject> s_glowMesh;
81 static std::unique_ptr<Graphics::Material> s_sideMat;
82 static std::unique_ptr<Graphics::Material> s_glowMat;
83};
84
85#endif /* _PROJECTILE_H */
nlohmann::json Json
Definition: Json.h:8
Definition: Body.h:65
Definition: Camera.h:85
Definition: Frame.h:28
Definition: Renderer.h:45
Definition: Projectile.h:38
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:10
float width
Definition: Projectile.h:23
bool beam
Definition: Projectile.h:27
Color color
Definition: Projectile.h:25
float length
Definition: Projectile.h:22
float damage
Definition: Projectile.h:21
ProjectileData()
Definition: Projectile.h:11
bool mining
Definition: Projectile.h:26
float speed
Definition: Projectile.h:24
float lifespan
Definition: Projectile.h:20