Pioneer
HyperspaceCloud.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 _HYPERSPACECLOUD_H
5 #define _HYPERSPACECLOUD_H
6 
7 #include "Body.h"
8 
9 class Frame;
10 class Ship;
11 
12 namespace Graphics {
13  class Material;
14  class MeshObject;
15  class Renderer;
16 } // namespace Graphics
17 
18 class HyperspaceCloud : public Body {
19 public:
21  HyperspaceCloud() = delete;
22  HyperspaceCloud(Ship *, double dateDue, bool isArrival);
23  HyperspaceCloud(const Json &jsonObj, Space *space);
24  virtual ~HyperspaceCloud();
25  virtual void SetVelocity(const vector3d &v) override { m_vel = v; }
26  virtual vector3d GetVelocity() const override { return m_vel; }
27  virtual void Render(Graphics::Renderer *r, const Camera *camera, const vector3d &viewCoords, const matrix4x4d &viewTransform) override;
28  virtual void PostLoadFixup(Space *space) override;
29  virtual void TimeStepUpdate(const float timeStep) override;
30  Ship *GetShip() { return m_ship; }
31  Ship *EvictShip();
32  double GetDueDate() const { return m_due; }
33  void SetIsArrival(bool isArrival);
34  bool IsArrival() const { return m_isArrival; }
35  virtual void UpdateInterpTransform(double alpha) override;
36 
37 protected:
38  virtual void SaveToJson(Json &jsonObj, Space *space) override;
39 
40 private:
41  static void InitGraphics(Graphics::Renderer *renderer);
42 
43  Ship *m_ship;
44  vector3d m_vel;
45  double m_birthdate;
46  double m_due;
47  bool m_isArrival;
48  bool m_isBeingKilled;
49 
50  static std::unique_ptr<Graphics::Material> s_cloudMat;
51  static std::unique_ptr<Graphics::MeshObject> s_cloudMeshArriving;
52  static std::unique_ptr<Graphics::MeshObject> s_cloudMeshLeaving;
53 };
54 
55 #endif /* _HYPERSPACECLOUD_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: HyperspaceCloud.h:18
OBJDEF(HyperspaceCloud, Body, HYPERSPACECLOUD)
virtual vector3d GetVelocity() const override
Definition: HyperspaceCloud.h:26
double GetDueDate() const
Definition: HyperspaceCloud.h:32
HyperspaceCloud()=delete
virtual void UpdateInterpTransform(double alpha) override
Definition: HyperspaceCloud.cpp:150
virtual void TimeStepUpdate(const float timeStep) override
Definition: HyperspaceCloud.cpp:101
virtual void SaveToJson(Json &jsonObj, Space *space) override
Definition: HyperspaceCloud.cpp:76
virtual ~HyperspaceCloud()
Definition: HyperspaceCloud.cpp:65
Ship * GetShip()
Definition: HyperspaceCloud.h:30
virtual void SetVelocity(const vector3d &v) override
Definition: HyperspaceCloud.h:25
void SetIsArrival(bool isArrival)
Definition: HyperspaceCloud.cpp:70
virtual void PostLoadFixup(Space *space) override
Definition: HyperspaceCloud.cpp:95
virtual void Render(Graphics::Renderer *r, const Camera *camera, const vector3d &viewCoords, const matrix4x4d &viewTransform) override
Definition: HyperspaceCloud.cpp:157
bool IsArrival() const
Definition: HyperspaceCloud.h:34
Ship * EvictShip()
Definition: HyperspaceCloud.cpp:134
Definition: Ship.h:64
Definition: Space.h:19
Definition: Background.h:14