| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768 |
- //********************************** Banshee Engine (www.banshee3d.com) **************************************************//
- //**************** Copyright (c) 2016 Marko Pintera ([email protected]). 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<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, const UnorderedMap<String, UINT64>& params) 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;
- }
- SPtr<IReflectable> newRTTIObject() override
- {
- SPtr<GameObjectHandleBase> obj = bs_shared_ptr<GameObjectHandleBase>(new (bs_alloc<GameObjectHandleBase>()) GameObjectHandleBase());
- return obj;
- }
- };
- /** @} */
- /** @endcond */
- }
|