53#define OBJDEF(__thisClass, __parentClass, __TYPE) \
54 static constexpr ObjectType StaticType() { return ObjectType::__TYPE; } \
55 static constexpr ObjectType SuperType() { return __parentClass::StaticType(); } \
56 virtual ObjectType GetType() const override { return ObjectType::__TYPE; } \
57 virtual bool IsType(ObjectType c) const override \
59 if (__thisClass::GetType() == (c)) \
62 return __parentClass::IsType(c); \
125 void OrientOnSurface(
double radius,
double latitude,
double longitude);
127 virtual void SetLabel(
const std::string &label);
128 const std::string &
GetLabel()
const {
return m_label; }
142 template <
typename T>
145 return m_components & (uint64_t(1) << uint8_t(BodyComponentDB::GetComponentType<T>()->componentIndex));
151 template <
typename T>
154 auto *type = BodyComponentDB::GetComponentType<T>();
155 return m_components & (uint64_t(1) << uint8_t(type->componentIndex)) ? type->get(
this) :
nullptr;
158 template <
typename T>
161 auto *type = BodyComponentDB::GetComponentType<T>();
162 if (m_components & (uint64_t(1) << uint8_t(type->componentIndex)))
163 return type->get(
this);
165 m_components |= (uint64_t(1) << uint8_t(type->componentIndex));
166 return type->newComponent(
this);
208 uint64_t m_components = 0;
ObjectType
Definition: Body.h:29
AltitudeType
Definition: Body.h:46
nlohmann::json Json
Definition: Json.h:8
void OrientOnSurface(double radius, double latitude, double longitude)
Definition: Body.cpp:291
T * AddComponent()
Definition: Body.h:159
virtual vector3d GetTargetIndicatorPosition() const
Definition: Body.cpp:344
vector3d GetPositionRelTo(FrameId) const
Definition: Body.cpp:203
const matrix3x3d & GetOrient() const
Definition: Body.h:81
virtual void PostLoadFixup(Space *space)
Definition: Body.h:76
virtual void TimeStepUpdate(const float timeStep)
Definition: Body.h:108
void SetPhysRadius(double r)
Definition: Body.h:87
virtual void SetOrient(const matrix3x3d &r)
Definition: Body.h:80
vector3d GetInterpPositionRelTo(FrameId relToId) const
Definition: Body.cpp:212
double GetPhysRadius() const
Definition: Body.h:88
virtual vector3d GetVelocity() const
Definition: Body.h:83
virtual void Render(Graphics::Renderer *r, const Camera *camera, const vector3d &viewCoords, const matrix4x4d &viewTransform)=0
virtual void NotifyRemoved(const Body *const removedBody)
Definition: Body.h:102
static constexpr ObjectType StaticType()
Definition: Body.h:67
virtual void SetVelocity(const vector3d &v)
Definition: Body.h:82
virtual void SetPosition(const vector3d &p)
Definition: Body.h:78
vector3d GetPosition() const
Definition: Body.h:79
vector3d GetVelocityRelTo(const Body *) const
Definition: Body.cpp:257
virtual void SaveToJson(Json &jsonObj, Space *space)
Definition: Body.cpp:76
void SwitchToFrame(FrameId newFrame)
Definition: Body.cpp:300
virtual bool OnDamage(Body *attacker, float kgDamage, const CollisionContact &contactData)
Definition: Body.h:100
virtual double GetMass() const
Definition: Body.h:91
vector3d m_interpPos
Definition: Body.h:215
virtual bool IsInSpace() const
Definition: Body.h:177
T * GetComponent() const
Definition: Body.h:152
virtual bool OnCollision(Body *o, Uint32 flags, double relVel)
Definition: Body.h:98
matrix3x3d GetInterpOrientRelTo(FrameId relToId) const
Definition: Body.cpp:239
Body()
Definition: Body.cpp:23
vector3d GetInterpPosition() const
Definition: Body.h:181
void ToJson(Json &jsonObj, Space *space)
Definition: Body.cpp:115
const matrix3x3d & GetInterpOrient() const
Definition: Body.h:180
void UpdateFrame()
Definition: Body.cpp:316
uint64_t GetComponentList() const
Definition: Body.h:170
virtual void StaticUpdate(const float timeStep)
Definition: Body.h:107
double GetAltitudeRelTo(const Body *relTo, AltitudeType altType=AltitudeType::DEFAULT)
Definition: Body.cpp:262
virtual void UpdateInterpTransform(double alpha)
Definition: Body.h:189
void SetFlag(unsigned int flag, bool enable)
Definition: Body.h:132
static Body * FromJson(const Json &jsonObj, Space *space)
Definition: Body.cpp:136
void MarkDead()
Definition: Body.h:173
virtual void SetAngVelocity(const vector3d &v)
Definition: Body.h:84
bool HasComponent() const
Definition: Body.h:143
virtual ~Body()
Definition: Body.cpp:61
virtual void SetLabel(const std::string &label)
Definition: Body.cpp:349
unsigned int m_flags
Definition: Body.h:212
matrix3x3d GetOrientRelTo(FrameId) const
Definition: Body.cpp:231
virtual vector3d GetAngVelocity() const
Definition: Body.h:85
virtual const SystemBody * GetSystemBody() const
Definition: Body.h:123
@ FLAG_CAN_MOVE_FRAME
Definition: Body.h:201
@ FLAG_LABEL_HIDDEN
Definition: Body.h:202
@ FLAG_DRAW_EXCLUDE
Definition: Body.h:204
@ FLAG_DRAW_LAST
Definition: Body.h:203
void SetClipRadius(double r)
Definition: Body.h:89
double GetClipRadius() const
Definition: Body.h:90
bool IsDead() const
Definition: Body.h:174
unsigned int GetFlags() const
Definition: Body.h:130
matrix3x3d m_interpOrient
Definition: Body.h:216
virtual ObjectType GetType() const
Definition: Body.h:68
const std::string & GetLabel() const
Definition: Body.h:128
virtual void SetFrame(FrameId f)
Definition: Body.h:111
FrameId GetFrame() const
Definition: Body.h:112
virtual bool IsType(ObjectType c) const
Definition: Body.h:69
Definition: DeleteEmitter.h:16
Definition: Renderer.h:45
Definition: PropertiedObject.h:11
Definition: SystemBody.h:137
Definition: Background.h:14
vector3< double > vector3d
Definition: vector3.h:329