Pioneer
TerrainBody.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 _TERRAINBODY_H
5 #define _TERRAINBODY_H
6 
7 #include "Body.h"
8 #include "JsonFwd.h"
9 #include "matrix4x4.h"
10 
11 class BaseSphere;
12 class Camera;
13 class Frame;
14 class Space;
15 class SystemBody;
16 
17 namespace Graphics {
18  class Renderer;
19 }
20 
21 class TerrainBody : public Body {
22 public:
24 
25  virtual void Render(Graphics::Renderer *r, const Camera *camera, const vector3d &viewCoords, const matrix4x4d &viewTransform) override;
26  virtual void SubRender(Graphics::Renderer *r, const matrix4x4d &modelView, const vector3d &camPos) {}
27  virtual void SetFrame(FrameId fId) override;
28  virtual bool OnCollision(Body *b, Uint32 flags, double relVel) override { return true; }
29  virtual double GetMass() const override { return m_mass; }
30  double GetTerrainHeight(const vector3d &pos) const;
31  virtual const SystemBody *GetSystemBody() const override { return m_sbody; }
32 
33  // returns value in metres
34  double GetMaxFeatureRadius() const { return m_maxFeatureHeight; }
35 
36  // implements calls to all relevant terrain management sub-systems
37  static void OnChangeDetailLevel();
38 
39 protected:
40  TerrainBody() = delete;
42  TerrainBody(const Json &jsonObj, Space *space);
43  virtual ~TerrainBody();
44 
45  void InitTerrainBody();
46 
47  virtual void SaveToJson(Json &jsonObj, Space *space) override;
48 
49 private:
50  const SystemBody *m_sbody;
51  double m_mass;
52  std::unique_ptr<BaseSphere> m_baseSphere;
53  double m_maxFeatureHeight;
54 };
55 
56 #endif
nlohmann::json Json
Definition: Json.h:8
Definition: BaseSphere.h:21
Definition: Body.h:57
Definition: Camera.h:80
Definition: Frame.h:28
Definition: Renderer.h:44
Definition: Space.h:19
Definition: SystemBody.h:19
Definition: TerrainBody.h:21
TerrainBody()=delete
virtual bool OnCollision(Body *b, Uint32 flags, double relVel) override
Definition: TerrainBody.h:28
double GetMaxFeatureRadius() const
Definition: TerrainBody.h:34
virtual double GetMass() const override
Definition: TerrainBody.h:29
virtual void SubRender(Graphics::Renderer *r, const matrix4x4d &modelView, const vector3d &camPos)
Definition: TerrainBody.h:26
double GetTerrainHeight(const vector3d &pos) const
Definition: TerrainBody.cpp:142
virtual void SaveToJson(Json &jsonObj, Space *space) override
Definition: TerrainBody.cpp:43
static void OnChangeDetailLevel()
Definition: TerrainBody.cpp:154
void InitTerrainBody()
Definition: TerrainBody.cpp:28
virtual void Render(Graphics::Renderer *r, const Camera *camera, const vector3d &viewCoords, const matrix4x4d &viewTransform) override
Definition: TerrainBody.cpp:69
virtual const SystemBody * GetSystemBody() const override
Definition: TerrainBody.h:31
virtual ~TerrainBody()
Definition: TerrainBody.cpp:23
virtual void SetFrame(FrameId fId) override
Definition: TerrainBody.cpp:127
OBJDEF(TerrainBody, Body, TERRAINBODY)
Definition: Background.h:14
Definition: FrameId.h:9