Pioneer
Loading...
Searching...
No Matches
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
11class Shields;
12class Geom;
13class Camera;
14
15namespace Graphics {
16 class Renderer;
17 class Light;
18} // namespace Graphics
19
20namespace SceneGraph {
21 class Model;
22 class Animation;
23} // namespace SceneGraph
24
25class ModelBody : public Body {
26public:
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
51protected:
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
59private:
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
const Aabb & GetAabb() const
Definition ModelBody.h:40
OBJDEF(ModelBody, Body, MODELBODY)
bool IsColliding() const
Definition ModelBody.h:36
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:43
virtual void SaveToJson(Json &jsonObj, Space *space) override
Definition ModelBody.cpp:102
SceneGraph::Model * GetModel() const
Definition ModelBody.h:41
void SetOrient(const matrix3x3d &r) override
Definition ModelBody.cpp:204
Shields * GetShields() const
Definition ModelBody.h:57
void SetPosition(const vector3d &p) override
Definition ModelBody.cpp:198
void ResetLighting(Graphics::Renderer *r, const std::vector< float > &oldIntensity, const Color &oldAmbient)
Definition ModelBody.cpp:412
CollMesh * GetCollMesh()
Definition ModelBody.h:42
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
Definition RefCounted.h:36
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