//********************************** Banshee Engine (www.banshee3d.com) **************************************************// //**************** Copyright (c) 2016 Marko Pintera (marko.pintera@gmail.com). All rights reserved. **********************// #pragma once #include "BsScriptEnginePrerequisites.h" #include "Reflection/BsRTTIType.h" #include "Private/RTTI/BsResourceRTTI.h" #include "BsManagedResource.h" #include "BsMonoManager.h" #include "Serialization/BsManagedSerializableObject.h" #include "Resources/BsResources.h" namespace bs { /** @cond RTTI */ /** @addtogroup RTTI-Impl-SEngine * @{ */ class BS_SCR_BE_EXPORT ManagedResourceRTTI : public RTTIType { private: SPtr getObjectData(ManagedResource* obj) { return any_cast>(mSerializableObject); } void setObjectData(ManagedResource* obj, SPtr val) { mSerializableObject = val; } public: ManagedResourceRTTI() { addReflectablePtrField("mObjectData", 0, &ManagedResourceRTTI::getObjectData, &ManagedResourceRTTI::setObjectData); } void onSerializationStarted(IReflectable* obj, SerializationContext* context) override { ManagedResource* mr = static_cast(obj); mSerializableObject = ManagedSerializableObject::createFromExisting(mr->getManagedInstance()); } void onDeserializationEnded(IReflectable* obj, SerializationContext* context) override { ManagedResource* mr = static_cast(obj); SPtr mrPtr = std::static_pointer_cast(mr->getThisPtr()); HManagedResource handle = static_resource_cast(gResources()._createResourceHandle(mrPtr)); mr->setHandle(mSerializableObject->deserialize(), handle); } const String& getRTTIName() override { static String name = "ManagedResource"; return name; } UINT32 getRTTIId() override { return TID_ManagedResource; } SPtr newRTTIObject() override { return ManagedResource::createEmpty(); } private: SPtr mSerializableObject; }; /** @} */ /** @endcond */ }