BsGameObjectHandleRTTI.h 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. //__________________________ Banshee Project - A modern game development toolkit _________________________________//
  2. //_____________________________________ www.banshee-project.com __________________________________________________//
  3. //________________________ Copyright (c) 2014 Marko Pintera. All rights reserved. ________________________________//
  4. #pragma once
  5. #include "BsCorePrerequisites.h"
  6. #include "BsRTTIType.h"
  7. #include "BsGameObjectHandle.h"
  8. #include "BsGameObjectManager.h"
  9. namespace BansheeEngine
  10. {
  11. class BS_CORE_EXPORT GameObjectHandleRTTI : public RTTIType<GameObjectHandleBase, IReflectable, GameObjectHandleRTTI>
  12. {
  13. private:
  14. UINT64& getInstanceId(GameObjectHandleBase* obj) { return obj->mData->mInstanceId; }
  15. void setInstanceId(GameObjectHandleBase* obj, UINT64& value) { obj->mData->mInstanceId = value; }
  16. public:
  17. GameObjectHandleRTTI()
  18. {
  19. addPlainField("mInstanceID", 0, &GameObjectHandleRTTI::getInstanceId, &GameObjectHandleRTTI::setInstanceId);
  20. }
  21. void onDeserializationEnded(IReflectable* obj)
  22. {
  23. GameObjectHandleBase* gameObjectHandle = static_cast<GameObjectHandleBase*>(obj);
  24. GameObjectManager::instance().registerUnresolvedHandle(*gameObjectHandle);
  25. }
  26. virtual const String& getRTTIName()
  27. {
  28. static String name = "GameObjectHandleBase";
  29. return name;
  30. }
  31. virtual UINT32 getRTTIId()
  32. {
  33. return TID_GameObjectHandleBase;
  34. }
  35. virtual std::shared_ptr<IReflectable> newRTTIObject()
  36. {
  37. std::shared_ptr<GameObjectHandleBase> obj = bs_shared_ptr<GameObjectHandleBase, PoolAlloc>(new (bs_alloc<GameObjectHandleBase, PoolAlloc>()) GameObjectHandleBase());
  38. return obj;
  39. }
  40. };
  41. }