BsGameObjectHandleRTTI.h 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  1. #pragma once
  2. #include "BsCorePrerequisites.h"
  3. #include "BsRTTIType.h"
  4. #include "BsGameObjectHandle.h"
  5. #include "BsGameObjectManager.h"
  6. namespace BansheeEngine
  7. {
  8. class BS_CORE_EXPORT GameObjectHandleRTTI : public RTTIType<GameObjectHandleBase, IReflectable, GameObjectHandleRTTI>
  9. {
  10. private:
  11. UINT64& getInstanceId(GameObjectHandleBase* obj) { return obj->mData->mInstanceId; }
  12. void setInstanceId(GameObjectHandleBase* obj, UINT64& value) { obj->mData->mInstanceId = value; }
  13. public:
  14. GameObjectHandleRTTI()
  15. {
  16. addPlainField("mInstanceID", 0, &GameObjectHandleRTTI::getInstanceId, &GameObjectHandleRTTI::setInstanceId);
  17. }
  18. void onDeserializationEnded(IReflectable* obj)
  19. {
  20. GameObjectHandleBase* gameObjectHandle = static_cast<GameObjectHandleBase*>(obj);
  21. GameObjectManager::instance().registerUnresolvedHandle(*gameObjectHandle);
  22. }
  23. virtual const String& getRTTIName()
  24. {
  25. static String name = "GameObjectHandleBase";
  26. return name;
  27. }
  28. virtual UINT32 getRTTIId()
  29. {
  30. return TID_GameObjectHandleBase;
  31. }
  32. virtual std::shared_ptr<IReflectable> newRTTIObject()
  33. {
  34. std::shared_ptr<GameObjectHandleBase> obj = bs_shared_ptr<GameObjectHandleBase, PoolAlloc>(new (bs_alloc<GameObjectHandleBase, PoolAlloc>()) GameObjectHandleBase());
  35. return obj;
  36. }
  37. };
  38. }