45#define OBJDEF(__thisClass, __parentClass, __TYPE) \
46 static constexpr ObjectType StaticType() { return ObjectType::__TYPE; } \
47 static constexpr ObjectType SuperType() { return __parentClass::StaticType(); } \
48 virtual ObjectType GetType() const override { return ObjectType::__TYPE; } \
49 virtual bool IsType(ObjectType c) const override \
51 if (__thisClass::GetType() == (c)) \
54 return __parentClass::IsType(c); \
117 void OrientOnSurface(
double radius,
double latitude,
double longitude);
119 virtual void SetLabel(
const std::string &label);
120 const std::string &
GetLabel()
const {
return m_label; }
134 template <
typename T>
137 return m_components & (uint64_t(1) << uint8_t(BodyComponentDB::GetComponentType<T>()->componentIndex));
143 template <
typename T>
146 auto *type = BodyComponentDB::GetComponentType<T>();
147 return m_components & (uint64_t(1) << uint8_t(type->componentIndex)) ? type->get(
this) :
nullptr;
150 template <
typename T>
153 auto *type = BodyComponentDB::GetComponentType<T>();
154 if (m_components & (uint64_t(1) << uint8_t(type->componentIndex)))
155 return type->get(
this);
157 m_components |= (uint64_t(1) << uint8_t(type->componentIndex));
158 return type->newComponent(
this);
199 uint64_t m_components = 0;
ObjectType
Definition Body.h:28
nlohmann::json Json
Definition Json.h:8
void OrientOnSurface(double radius, double latitude, double longitude)
Definition Body.cpp:260
T * AddComponent()
Definition Body.h:151
virtual vector3d GetTargetIndicatorPosition() const
Definition Body.cpp:313
vector3d GetPositionRelTo(FrameId) const
Definition Body.cpp:201
const matrix3x3d & GetOrient() const
Definition Body.h:73
virtual void PostLoadFixup(Space *space)
Definition Body.h:68
virtual void TimeStepUpdate(const float timeStep)
Definition Body.h:100
void SetPhysRadius(double r)
Definition Body.h:79
virtual void SetOrient(const matrix3x3d &r)
Definition Body.h:72
vector3d GetInterpPositionRelTo(FrameId relToId) const
Definition Body.cpp:210
double GetPhysRadius() const
Definition Body.h:80
virtual vector3d GetVelocity() const
Definition Body.h:75
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:94
static constexpr ObjectType StaticType()
Definition Body.h:59
virtual void SetVelocity(const vector3d &v)
Definition Body.h:74
virtual void SetPosition(const vector3d &p)
Definition Body.h:70
vector3d GetPosition() const
Definition Body.h:71
vector3d GetVelocityRelTo(const Body *) const
Definition Body.cpp:255
virtual void SaveToJson(Json &jsonObj, Space *space)
Definition Body.cpp:74
void SwitchToFrame(FrameId newFrame)
Definition Body.cpp:269
virtual bool OnDamage(Body *attacker, float kgDamage, const CollisionContact &contactData)
Definition Body.h:92
virtual double GetMass() const
Definition Body.h:83
vector3d m_interpPos
Definition Body.h:206
virtual bool IsInSpace() const
Definition Body.h:169
T * GetComponent() const
Definition Body.h:144
virtual bool OnCollision(Body *o, Uint32 flags, double relVel)
Definition Body.h:90
matrix3x3d GetInterpOrientRelTo(FrameId relToId) const
Definition Body.cpp:237
Body()
Definition Body.cpp:21
vector3d GetInterpPosition() const
Definition Body.h:173
void ToJson(Json &jsonObj, Space *space)
Definition Body.cpp:113
const matrix3x3d & GetInterpOrient() const
Definition Body.h:172
void UpdateFrame()
Definition Body.cpp:285
uint64_t GetComponentList() const
Definition Body.h:162
virtual void StaticUpdate(const float timeStep)
Definition Body.h:99
virtual void UpdateInterpTransform(double alpha)
Definition Body.h:180
void SetFlag(unsigned int flag, bool enable)
Definition Body.h:124
static Body * FromJson(const Json &jsonObj, Space *space)
Definition Body.cpp:134
void MarkDead()
Definition Body.h:165
virtual void SetAngVelocity(const vector3d &v)
Definition Body.h:76
bool HasComponent() const
Definition Body.h:135
virtual ~Body()
Definition Body.cpp:59
virtual void SetLabel(const std::string &label)
Definition Body.cpp:318
unsigned int m_flags
Definition Body.h:203
matrix3x3d GetOrientRelTo(FrameId) const
Definition Body.cpp:229
virtual vector3d GetAngVelocity() const
Definition Body.h:77
virtual const SystemBody * GetSystemBody() const
Definition Body.h:115
@ FLAG_CAN_MOVE_FRAME
Definition Body.h:192
@ FLAG_LABEL_HIDDEN
Definition Body.h:193
@ FLAG_DRAW_EXCLUDE
Definition Body.h:195
@ FLAG_DRAW_LAST
Definition Body.h:194
void SetClipRadius(double r)
Definition Body.h:81
double GetClipRadius() const
Definition Body.h:82
bool IsDead() const
Definition Body.h:166
unsigned int GetFlags() const
Definition Body.h:122
matrix3x3d m_interpOrient
Definition Body.h:207
virtual ObjectType GetType() const
Definition Body.h:60
const std::string & GetLabel() const
Definition Body.h:120
virtual void SetFrame(FrameId f)
Definition Body.h:103
FrameId GetFrame() const
Definition Body.h:104
virtual bool IsType(ObjectType c) const
Definition Body.h:61
Definition DeleteEmitter.h:16
Definition PropertiedObject.h:11
Definition SystemBody.h:19
Definition Background.h:14
vector3< double > vector3d
Definition vector3.h:290