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