CmGameObject.h 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. #pragma once
  2. #include "CmPrerequisites.h"
  3. #include "CmIReflectable.h"
  4. namespace CamelotFramework
  5. {
  6. struct GameObjectInstanceData
  7. {
  8. GameObjectInstanceData()
  9. :mInstanceId(0), object(nullptr)
  10. { }
  11. std::shared_ptr<GameObject> object;
  12. UINT64 mInstanceId;
  13. };
  14. class CM_EXPORT GameObject : public IReflectable
  15. {
  16. public:
  17. GameObject();
  18. virtual ~GameObject();
  19. UINT64 getInstanceId() const { return mInstanceData->mInstanceId; }
  20. const String& getName() const { return mName; }
  21. void setName(const String& name) { mName = name; }
  22. private:
  23. friend class GameObjectHandleBase;
  24. friend class GameObjectManager;
  25. std::shared_ptr<GameObjectInstanceData> mInstanceData;
  26. protected:
  27. String mName;
  28. void initialize(const std::shared_ptr<GameObject>& object, UINT64 instanceId);
  29. /************************************************************************/
  30. /* RTTI */
  31. /************************************************************************/
  32. public:
  33. friend class GameObjectRTTI;
  34. static RTTITypeBase* getRTTIStatic();
  35. virtual RTTITypeBase* getRTTI() const;
  36. };
  37. }
  38. #include "CmGameObjectHandle.h"
  39. namespace CamelotFramework
  40. {
  41. // Game object handles
  42. typedef GameObjectHandle<GameObject> HGameObject;
  43. typedef GameObjectHandle<SceneObject> HSceneObject;
  44. typedef GameObjectHandle<Component> HComponent;
  45. }