Deki 1.3.0
Modular C++ 2D engine for embedded displays and desktop
Loading...
Searching...
No Matches

#include <DekiObject.h>

Public Member Functions

 DekiObject ()
 DekiObject (const std::string &objectName)
 DekiObject (const DekiObject &)=delete
 Non-copyable: a DekiObject owns its children and components by raw pointer, so a copy would double-free them.
DekiObjectoperator= (const DekiObject &)=delete
 ~DekiObject ()
 Out of line ON PURPOSE.
uint32_t GetId () const
void SetId (uint32_t newId)
const std::string & GetName () const
void SetName (const std::string &newName)
bool IsActive () const
void SetActive (bool value)
bool IsEditorOnly () const
void SetEditorOnly (bool value)
bool IsPersistent () const
void SetPersistent (bool value)
void SetOwnerScene (Scene *scene)
SceneGetOwnerScene () const
bool IsSceneInstance () const
bool IsPartOfInstance () const
void SetPartOfInstance (bool value)
const std::string & GetSourceSceneGuid () const
 Empty when this object is not a scene instance.
void SetSourceSceneGuid (const std::string &guid)
const std::string & GetInstanceOverridesJson () const
void SetInstanceOverridesJson (const std::string &json)
void AddChild (DekiObject *child)
void RemoveChild (DekiObject *child)
void SetParent (DekiObject *newParent)
DekiObjectGetParent () const
const std::vector< DekiObject * > & GetChildren () const
DekiObjectFindChild (uint32_t childId)
DekiObjectFindChildByName (const std::string &name)
void RemoveFromParent ()
bool IsDescendantOf (DekiObject *ancestor) const
void InsertChildAt (DekiObject *child, size_t index)
int GetChildIndex (DekiObject *child) const
bool IsActiveInHierarchy () const
void SetLocalPosition (float newX, float newY)
void SetWorldPosition (float worldX, float worldY)
void SetWorldPositionPx (float pxX, float pxY)
void SetScale (float scaleX, float scaleY)
void SetRotation (float radians)
 Rotation setter.
DekiWorldTransform GetWorldTransform () const
 All five world-transform values with one dirty check.
float GetWorldX () const
float GetWorldY () const
float GetWorldRotation () const
float GetWorldScaleX () const
float GetWorldScaleY () const
void MarkWorldTransformDirty ()
 Mark this object's world transform (and all descendants) as needing recalculation.
float GetX () const
float GetY () const
float GetLocalRotation () const
float GetScaleX () const
float GetScaleY () const
void SetX (float newX)
void SetY (float newY)
void SetScaleX (float newScaleX)
void SetScaleY (float newScaleY)
template<typename T, typename... Args>
T * AddComponent (Args &&... args)
void AddComponent (DekiComponent *component)
 Add a pre-created component (runtime scene loading).
DekiComponentAddComponent (const std::string &typeName)
 Add a component by type name (editor only).
DekiComponentAddComponent (const std::string &typeName, const std::string &classHint)
template<typename T>
T * GetComponent ()
 Get component by type, including derived types Matches both exact type and components that inherit from T.
template<typename T>
const T * GetComponent () const
DekiComponentGetComponentByTypeId (uint32_t typeId)
 Get component by runtime type ID (exact match only).
const DekiComponentGetComponentByTypeId (uint32_t typeId) const
template<typename T>
std::vector< T * > GetComponents ()
 Get all components of a specific type, including derived types Matches both exact type and components that inherit from T.
template<typename T>
bool HasComponent () const
 Check if object has component of type T, including derived types.
template<typename T>
void RemoveComponent ()
void RemoveComponent (DekiComponent *comp)
 Remove a specific component by pointer.
const std::vector< DekiComponent * > & GetComponents () const
 Get all components on this object.
template<typename T>
T * FindInterface ()
 Find a component implementing a given interface No RTTI needed — uses ComponentInterfaceAdapters registry.

Static Public Member Functions

static uint32_t GenerateId ()
static uint32_t GenerateDeterministicId (uint32_t seed1, uint32_t seed2)

Constructor & Destructor Documentation

◆ DekiObject() [1/3]

DekiObject::DekiObject ( )

◆ DekiObject() [2/3]

DekiObject::DekiObject ( const std::string & objectName)

◆ DekiObject() [3/3]

DekiObject::DekiObject ( const DekiObject & )
delete

Non-copyable: a DekiObject owns its children and components by raw pointer, so a copy would double-free them.

Made explicit here because the editor-only instance payload lives in a side table keyed by this, which a copy would silently share.

◆ ~DekiObject()

DekiObject::~DekiObject ( )

Out of line ON PURPOSE.

It erases this object's row from the editor-only side table in DekiObject.cpp, which the runtime build must not need to see. Defining it = default in this header would reintroduce exactly the layout dependency this design removes.

Member Function Documentation

◆ operator=()

DekiObject & DekiObject::operator= ( const DekiObject & )
delete

◆ GetId()

uint32_t DekiObject::GetId ( ) const
inline

◆ SetId()

void DekiObject::SetId ( uint32_t newId)

◆ GenerateId()

uint32_t DekiObject::GenerateId ( )
inlinestatic

◆ GenerateDeterministicId()

uint32_t DekiObject::GenerateDeterministicId ( uint32_t seed1,
uint32_t seed2 )
inlinestatic

◆ GetName()

const std::string & DekiObject::GetName ( ) const
inline

◆ SetName()

void DekiObject::SetName ( const std::string & newName)
inline

◆ IsActive()

bool DekiObject::IsActive ( ) const
inline

◆ SetActive()

void DekiObject::SetActive ( bool value)
inline

◆ IsEditorOnly()

bool DekiObject::IsEditorOnly ( ) const
inline

◆ SetEditorOnly()

void DekiObject::SetEditorOnly ( bool value)
inline

◆ IsPersistent()

bool DekiObject::IsPersistent ( ) const
inline

◆ SetPersistent()

void DekiObject::SetPersistent ( bool value)
inline

◆ SetOwnerScene()

void DekiObject::SetOwnerScene ( Scene * scene)
inline

◆ GetOwnerScene()

Scene * DekiObject::GetOwnerScene ( ) const
inline

◆ IsSceneInstance()

bool DekiObject::IsSceneInstance ( ) const
inline

◆ IsPartOfInstance()

bool DekiObject::IsPartOfInstance ( ) const
inline

◆ SetPartOfInstance()

void DekiObject::SetPartOfInstance ( bool value)
inline

◆ GetSourceSceneGuid()

const std::string & DekiObject::GetSourceSceneGuid ( ) const

Empty when this object is not a scene instance.

The reference is valid until the next SetSourceSceneGuid on this object, or its destruction.

◆ SetSourceSceneGuid()

void DekiObject::SetSourceSceneGuid ( const std::string & guid)

◆ GetInstanceOverridesJson()

const std::string & DekiObject::GetInstanceOverridesJson ( ) const

◆ SetInstanceOverridesJson()

void DekiObject::SetInstanceOverridesJson ( const std::string & json)

◆ AddChild()

void DekiObject::AddChild ( DekiObject * child)

◆ RemoveChild()

void DekiObject::RemoveChild ( DekiObject * child)

◆ SetParent()

void DekiObject::SetParent ( DekiObject * newParent)

◆ GetParent()

DekiObject * DekiObject::GetParent ( ) const
inline

◆ GetChildren()

const std::vector< DekiObject * > & DekiObject::GetChildren ( ) const
inline

◆ FindChild()

DekiObject * DekiObject::FindChild ( uint32_t childId)

◆ FindChildByName()

DekiObject * DekiObject::FindChildByName ( const std::string & name)

◆ RemoveFromParent()

void DekiObject::RemoveFromParent ( )

◆ IsDescendantOf()

bool DekiObject::IsDescendantOf ( DekiObject * ancestor) const

◆ InsertChildAt()

void DekiObject::InsertChildAt ( DekiObject * child,
size_t index )

◆ GetChildIndex()

int DekiObject::GetChildIndex ( DekiObject * child) const

◆ IsActiveInHierarchy()

bool DekiObject::IsActiveInHierarchy ( ) const

◆ SetLocalPosition()

void DekiObject::SetLocalPosition ( float newX,
float newY )

◆ SetWorldPosition()

void DekiObject::SetWorldPosition ( float worldX,
float worldY )

◆ SetWorldPositionPx()

void DekiObject::SetWorldPositionPx ( float pxX,
float pxY )

◆ SetScale()

void DekiObject::SetScale ( float scaleX,
float scaleY )

◆ SetRotation()

void DekiObject::SetRotation ( float radians)

Rotation setter.

Angle is in radians (the inspector displays degrees via DEKI_UNIT(Angle)).

◆ GetWorldTransform()

DekiWorldTransform DekiObject::GetWorldTransform ( ) const
inline

All five world-transform values with one dirty check.

◆ GetWorldX()

float DekiObject::GetWorldX ( ) const
inline

◆ GetWorldY()

float DekiObject::GetWorldY ( ) const
inline

◆ GetWorldRotation()

float DekiObject::GetWorldRotation ( ) const
inline

◆ GetWorldScaleX()

float DekiObject::GetWorldScaleX ( ) const
inline

◆ GetWorldScaleY()

float DekiObject::GetWorldScaleY ( ) const
inline

◆ MarkWorldTransformDirty()

void DekiObject::MarkWorldTransformDirty ( )

Mark this object's world transform (and all descendants) as needing recalculation.

◆ GetX()

float DekiObject::GetX ( ) const
inline

◆ GetY()

float DekiObject::GetY ( ) const
inline

◆ GetLocalRotation()

float DekiObject::GetLocalRotation ( ) const
inline

◆ GetScaleX()

float DekiObject::GetScaleX ( ) const
inline

◆ GetScaleY()

float DekiObject::GetScaleY ( ) const
inline

◆ SetX()

void DekiObject::SetX ( float newX)

◆ SetY()

void DekiObject::SetY ( float newY)

◆ SetScaleX()

void DekiObject::SetScaleX ( float newScaleX)

◆ SetScaleY()

void DekiObject::SetScaleY ( float newScaleY)

◆ AddComponent() [1/4]

template<typename T, typename... Args>
T * DekiObject::AddComponent ( Args &&... args)
inline

◆ AddComponent() [2/4]

void DekiObject::AddComponent ( DekiComponent * component)
inline

Add a pre-created component (runtime scene loading).

Parameters
componentThe component to add (takes ownership)

◆ AddComponent() [3/4]

DekiComponent * DekiObject::AddComponent ( const std::string & typeName)

Add a component by type name (editor only).

Parameters
typeNameThe registered component type name
Returns
The created component, or nullptr if type not found

◆ AddComponent() [4/4]

DekiComponent * DekiObject::AddComponent ( const std::string & typeName,
const std::string & classHint )

◆ GetComponent() [1/2]

template<typename T>
T * DekiObject::GetComponent ( )
inline

Get component by type, including derived types Matches both exact type and components that inherit from T.

E.g., GetComponent<SetupComponent>() returns SDCardComponent if it inherits from SetupComponent.

◆ GetComponent() [2/2]

template<typename T>
const T * DekiObject::GetComponent ( ) const
inline

◆ GetComponentByTypeId() [1/2]

DekiComponent * DekiObject::GetComponentByTypeId ( uint32_t typeId)
inline

Get component by runtime type ID (exact match only).

◆ GetComponentByTypeId() [2/2]

const DekiComponent * DekiObject::GetComponentByTypeId ( uint32_t typeId) const
inline

◆ GetComponents() [1/2]

template<typename T>
std::vector< T * > DekiObject::GetComponents ( )
inline

Get all components of a specific type, including derived types Matches both exact type and components that inherit from T.

◆ HasComponent()

template<typename T>
bool DekiObject::HasComponent ( ) const
inline

Check if object has component of type T, including derived types.

◆ RemoveComponent() [1/2]

template<typename T>
void DekiObject::RemoveComponent ( )
inline

◆ RemoveComponent() [2/2]

void DekiObject::RemoveComponent ( DekiComponent * comp)
inline

Remove a specific component by pointer.

Parameters
compThe component to remove

◆ GetComponents() [2/2]

const std::vector< DekiComponent * > & DekiObject::GetComponents ( ) const
inline

Get all components on this object.

Returns
Reference to the vector of components

◆ FindInterface()

template<typename T>
T * DekiObject::FindInterface ( )
inline

Find a component implementing a given interface No RTTI needed — uses ComponentInterfaceAdapters registry.

T must have a static constexpr uint32_t InterfaceID member.


The documentation for this class was generated from the following file: