| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566 |
- #pragma once
- #include "BsCorePrerequisites.h"
- #include "BsRTTIType.h"
- #include "BsGameObjectHandle.h"
- #include "BsGameObjectManager.h"
- namespace BansheeEngine
- {
- /** @cond RTTI */
- /** @addtogroup RTTI-Impl-Core
- * @{
- */
- class BS_CORE_EXPORT GameObjectHandleRTTI : public RTTIType<GameObjectHandleBase, IReflectable, GameObjectHandleRTTI>
- {
- private:
- UINT64& getInstanceId(GameObjectHandleBase* obj)
- {
- static UINT64 invalidId = 0;
- if (obj->mData->mPtr != nullptr)
- return obj->mData->mPtr->mInstanceId;
- return invalidId;
- }
- void setInstanceId(GameObjectHandleBase* obj, UINT64& value) { obj->mRTTIData = value; }
- public:
- GameObjectHandleRTTI()
- {
- addPlainField("mInstanceID", 0, &GameObjectHandleRTTI::getInstanceId, &GameObjectHandleRTTI::setInstanceId);
- }
- void onDeserializationEnded(IReflectable* obj) override
- {
- GameObjectHandleBase* gameObjectHandle = static_cast<GameObjectHandleBase*>(obj);
- UINT64 originalInstanceId = any_cast<UINT64>(gameObjectHandle->mRTTIData);
- GameObjectManager::instance().registerUnresolvedHandle(originalInstanceId, *gameObjectHandle);
- gameObjectHandle->mRTTIData = nullptr;
- }
- const String& getRTTIName() override
- {
- static String name = "GameObjectHandleBase";
- return name;
- }
- UINT32 getRTTIId() override
- {
- return TID_GameObjectHandleBase;
- }
- std::shared_ptr<IReflectable> newRTTIObject() override
- {
- std::shared_ptr<GameObjectHandleBase> obj = bs_shared_ptr<GameObjectHandleBase>(new (bs_alloc<GameObjectHandleBase>()) GameObjectHandleBase());
- return obj;
- }
- };
- /** @} */
- /** @endcond */
- }
|