BsGameObjectHandleRTTI.h 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. //********************************** Banshee Engine (www.banshee3d.com) **************************************************//
  2. //**************** Copyright (c) 2016 Marko Pintera ([email protected]). All rights reserved. **********************//
  3. #pragma once
  4. #include "BsCorePrerequisites.h"
  5. #include "BsRTTIType.h"
  6. #include "BsGameObjectHandle.h"
  7. #include "BsGameObjectManager.h"
  8. namespace BansheeEngine
  9. {
  10. /** @cond RTTI */
  11. /** @addtogroup RTTI-Impl-Core
  12. * @{
  13. */
  14. class BS_CORE_EXPORT GameObjectHandleRTTI : public RTTIType<GameObjectHandleBase, IReflectable, GameObjectHandleRTTI>
  15. {
  16. private:
  17. UINT64& getInstanceId(GameObjectHandleBase* obj)
  18. {
  19. static UINT64 invalidId = 0;
  20. if (obj->mData->mPtr != nullptr)
  21. return obj->mData->mPtr->mInstanceId;
  22. return invalidId;
  23. }
  24. void setInstanceId(GameObjectHandleBase* obj, UINT64& value) { obj->mRTTIData = value; }
  25. public:
  26. GameObjectHandleRTTI()
  27. {
  28. addPlainField("mInstanceID", 0, &GameObjectHandleRTTI::getInstanceId, &GameObjectHandleRTTI::setInstanceId);
  29. }
  30. void onDeserializationEnded(IReflectable* obj) override
  31. {
  32. GameObjectHandleBase* gameObjectHandle = static_cast<GameObjectHandleBase*>(obj);
  33. UINT64 originalInstanceId = any_cast<UINT64>(gameObjectHandle->mRTTIData);
  34. GameObjectManager::instance().registerUnresolvedHandle(originalInstanceId, *gameObjectHandle);
  35. gameObjectHandle->mRTTIData = nullptr;
  36. }
  37. const String& getRTTIName() override
  38. {
  39. static String name = "GameObjectHandleBase";
  40. return name;
  41. }
  42. UINT32 getRTTIId() override
  43. {
  44. return TID_GameObjectHandleBase;
  45. }
  46. std::shared_ptr<IReflectable> newRTTIObject() override
  47. {
  48. std::shared_ptr<GameObjectHandleBase> obj = bs_shared_ptr<GameObjectHandleBase>(new (bs_alloc<GameObjectHandleBase>()) GameObjectHandleBase());
  49. return obj;
  50. }
  51. };
  52. /** @} */
  53. /** @endcond */
  54. }