CmGameObject.h 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  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. private:
  21. friend class GameObjectHandleBase;
  22. friend class GameObjectManager;
  23. std::shared_ptr<GameObjectInstanceData> mInstanceData;
  24. protected:
  25. void initialize(const std::shared_ptr<GameObject>& object, UINT64 instanceId);
  26. /************************************************************************/
  27. /* RTTI */
  28. /************************************************************************/
  29. public:
  30. friend class GameObjectRTTI;
  31. static RTTITypeBase* getRTTIStatic();
  32. virtual RTTITypeBase* getRTTI() const;
  33. };
  34. }
  35. #include "CmGameObjectHandle.h"
  36. namespace CamelotFramework
  37. {
  38. // Game object handles
  39. typedef GameObjectHandle<GameObject> HGameObject;
  40. typedef GameObjectHandle<SceneObject> HSceneObject;
  41. typedef GameObjectHandle<Component> HComponent;
  42. }