//********************************** Banshee Engine (www.banshee3d.com) **************************************************// //**************** Copyright (c) 2016 Marko Pintera (marko.pintera@gmail.com). All rights reserved. **********************// #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 { 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, const UnorderedMap& params) override { GameObjectHandleBase* gameObjectHandle = static_cast(obj); UINT64 originalInstanceId = any_cast(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; } SPtr newRTTIObject() override { SPtr obj = bs_shared_ptr(new (bs_alloc()) GameObjectHandleBase()); return obj; } }; /** @} */ /** @endcond */ }