31 #include "Core/Resources/Mesh.h" 32 #include "Core/Components/Transform.h" 33 #include "Core/Components/InstanceFactory.h" 34 #include "Core/Components/Rendering/MeshRenderer.h" 36 GENERATE_METHOD_CHECK(Init, Init())
42 mutable AABB boundingBox;
44 using EngineHandle = size_t;
45 constexpr
static EngineHandle InvalidHandle = std::numeric_limits<EngineHandle>::max();
46 EngineHandle handle = InvalidHandle;
49 MxString Name = UUIDGenerator::Get();
50 float TranslateSpeed = 1.0f;
51 float RotateSpeed = 1.0f;
52 float ScaleSpeed = 1.0f;
61 static void Destroy(
Handle&
object);
62 static void Destroy(
MxObject&
object);
65 static Handle GetByName(
const MxString& name);
68 static MxObject& GetByComponent(T& component)
70 auto handle =
reinterpret_cast<EngineHandle
>(component.UserData);
71 MX_ASSERT(handle != InvalidHandle);
72 auto& managedObject = Factory::Get<MxObject>()[handle];
73 return managedObject.value;
77 static Handle GetHandleByComponent(T& component)
79 auto handle =
reinterpret_cast<EngineHandle
>(component.UserData);
80 MX_ASSERT(handle != InvalidHandle);
81 auto& managedObject = Factory::Get<MxObject>()[handle];
82 MX_ASSERT(managedObject.refCount > 0 && managedObject.uuid != UUIDGenerator::GetNull());
83 return MxObjectHandle(managedObject.uuid, handle);
93 template<
typename T,
typename... Args>
94 auto AddComponent(Args&&... args)
96 auto component = this->components.AddComponent<T>(std::forward<Args>(args)...);
97 component->UserData =
reinterpret_cast<void*
>(this->handle);
98 if constexpr (has_method_Init<T>::value) component->Init();
103 auto GetComponent()
const 105 return this->components.GetComponent<T>();
109 auto GetOrAddComponent()
111 if (!this->HasComponent<T>())
112 return this->AddComponent<T>();
114 return this->GetComponent<T>();
118 void RemoveComponent()
120 static_assert(!std::is_same_v<T, MxEngine::Transform>,
"Transform component cannot be deleted");
121 this->components.RemoveComponent<T>();
125 bool HasComponent()
const 127 return this->components.HasComponent<T>();
131 static typename T::Handle GetComponentHandle(
const T& component)
133 return MxObject::GetByComponent(component).GetComponent<T>();
137 static UUID GetComponentUUID(
const T& component)
139 return MxObject::GetComponentHandle(component).GetUUID();
Definition: AbstractFactory.h:61
Definition: MxObject.h:40
Definition: Component.h:57
Definition: ComponentView.h:42
Definition: AbstractFactory.h:443
Definition: Application.cpp:49