Pioneer
ModelBody.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 _MODELBODY_H
5 #define _MODELBODY_H
6 
7 #include "Body.h"
8 #include "CollMesh.h"
9 #include "FrameId.h"
10 
11 class Shields;
12 class Geom;
13 class Camera;
14 
15 namespace Graphics {
16  class Renderer;
17  class Light;
18 } // namespace Graphics
19 
20 namespace SceneGraph {
21  class Model;
22  class Animation;
23 } // namespace SceneGraph
24 
25 class ModelBody : public Body {
26 public:
28  ModelBody();
29  ModelBody(const Json &jsonObj, Space *space);
30  virtual ~ModelBody();
31  void SetPosition(const vector3d &p) override;
32  void SetOrient(const matrix3x3d &r) override;
33  virtual void SetFrame(FrameId fId) override;
34  // Colliding: geoms are checked against collision space
35  void SetColliding(bool colliding);
36  bool IsColliding() const { return m_colliding; }
37  // Static: geoms are static relative to frame
38  void SetStatic(bool isStatic);
39  bool IsStatic() const { return m_isStatic; }
40  const Aabb &GetAabb() const { return m_collMesh->GetAabb(); }
41  SceneGraph::Model *GetModel() const { return m_model; }
42  CollMesh *GetCollMesh() { return m_collMesh.Get(); }
43  Geom *GetGeom() const { return m_geom; }
44 
45  void SetModel(const char *modelName);
46 
47  void RenderModel(Graphics::Renderer *r, const Camera *camera, const vector3d &viewCoords, const matrix4x4d &viewTransform, const bool setLighting = true);
48 
49  virtual void TimeStepUpdate(const float timeStep) override;
50 
51 protected:
52  virtual void SaveToJson(Json &jsonObj, Space *space) override;
53 
54  void SetLighting(Graphics::Renderer *r, const Camera *camera, std::vector<float> &oldIntensity, Color &oldAmbient);
55  void ResetLighting(Graphics::Renderer *r, const std::vector<float> &oldIntensity, const Color &oldAmbient);
56 
57  Shields *GetShields() const { return m_shields.get(); }
58 
59 private:
60  void RebuildCollisionMesh();
61  void DeleteGeoms();
62  void AddGeomsToFrame(Frame *);
63  void RemoveGeomsFromFrame(Frame *);
64  void MoveGeoms(const matrix4x4d &, const vector3d &);
65 
66  void CalcLighting(double &ambient, double &direct, const Camera *camera);
67 
68  bool m_isStatic;
69  bool m_colliding;
70  RefCountedPtr<CollMesh> m_collMesh;
71  Geom *m_geom; //static geom
72  std::string m_modelName;
73  SceneGraph::Model *m_model;
74  std::vector<Geom *> m_dynGeoms;
75  SceneGraph::Animation *m_idleAnimation;
76  std::unique_ptr<Shields> m_shields;
77 };
78 
79 #endif /* _MODELBODY_H */
nlohmann::json Json
Definition: Json.h:8
Definition: Body.h:57
Definition: Camera.h:80
Definition: CollMesh.h:19
Definition: Frame.h:28
Definition: Geom.h:16
Definition: Renderer.h:44
Definition: ModelBody.h:25
void SetModel(const char *modelName)
Definition: ModelBody.cpp:175
bool IsStatic() const
Definition: ModelBody.h:39
OBJDEF(ModelBody, Body, MODELBODY)
bool IsColliding() const
Definition: ModelBody.h:36
Geom * GetGeom() const
Definition: ModelBody.h:43
ModelBody()
Definition: ModelBody.cpp:66
void SetColliding(bool colliding)
Definition: ModelBody.cpp:133
virtual ~ModelBody()
Definition: ModelBody.cpp:93
Shields * GetShields() const
Definition: ModelBody.h:57
SceneGraph::Model * GetModel() const
Definition: ModelBody.h:41
virtual void SaveToJson(Json &jsonObj, Space *space) override
Definition: ModelBody.cpp:102
void SetOrient(const matrix3x3d &r) override
Definition: ModelBody.cpp:204
void SetPosition(const vector3d &p) override
Definition: ModelBody.cpp:198
CollMesh * GetCollMesh()
Definition: ModelBody.h:42
void ResetLighting(Graphics::Renderer *r, const std::vector< float > &oldIntensity, const Color &oldAmbient)
Definition: ModelBody.cpp:412
virtual void SetFrame(FrameId fId) override
Definition: ModelBody.cpp:211
virtual void TimeStepUpdate(const float timeStep) override
Definition: ModelBody.cpp:446
void SetLighting(Graphics::Renderer *r, const Camera *camera, std::vector< float > &oldIntensity, Color &oldAmbient)
Definition: ModelBody.cpp:394
void SetStatic(bool isStatic)
Definition: ModelBody.cpp:117
void RenderModel(Graphics::Renderer *r, const Camera *camera, const vector3d &viewCoords, const matrix4x4d &viewTransform, const bool setLighting=true)
Definition: ModelBody.cpp:420
const Aabb & GetAabb() const
Definition: ModelBody.h:40
Definition: Animation.h:19
Definition: Model.h:88
Definition: Shields.h:23
T * Get() const
Definition: SmartPtr.h:37
Definition: Space.h:19
Definition: Background.h:14
Definition: CityOnPlanet.h:31
Definition: Aabb.h:9
Definition: Color.h:66
Definition: FrameId.h:9