BsManagedResourceRTTI.h 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. //********************************** Banshee Engine (www.banshee3d.com) **************************************************//
  2. //**************** Copyright (c) 2016 Marko Pintera ([email protected]). All rights reserved. **********************//
  3. #pragma once
  4. #include "BsScriptEnginePrerequisites.h"
  5. #include "BsRTTIType.h"
  6. #include "BsResourceRTTI.h"
  7. #include "BsManagedResource.h"
  8. #include "BsMonoManager.h"
  9. #include "BsManagedSerializableObject.h"
  10. #include "BsResources.h"
  11. namespace BansheeEngine
  12. {
  13. /** @cond RTTI */
  14. /** @addtogroup RTTI-Impl-SEngine
  15. * @{
  16. */
  17. class BS_SCR_BE_EXPORT ManagedResourceRTTI : public RTTIType<ManagedResource, Resource, ManagedResourceRTTI>
  18. {
  19. private:
  20. SPtr<ManagedSerializableObject> getObjectData(ManagedResource* obj)
  21. {
  22. return any_cast<SPtr<ManagedSerializableObject>>(obj->mRTTIData);
  23. }
  24. void setObjectData(ManagedResource* obj, SPtr<ManagedSerializableObject> val)
  25. {
  26. obj->mRTTIData = val;
  27. }
  28. public:
  29. ManagedResourceRTTI()
  30. {
  31. addReflectablePtrField("mObjectData", 0, &ManagedResourceRTTI::getObjectData, &ManagedResourceRTTI::setObjectData);
  32. }
  33. void onSerializationStarted(IReflectable* obj, const UnorderedMap<String, UINT64>& params) override
  34. {
  35. ManagedResource* mc = static_cast<ManagedResource*>(obj);
  36. mc->mRTTIData = ManagedSerializableObject::createFromExisting(mc->getManagedInstance());
  37. }
  38. void onDeserializationEnded(IReflectable* obj, const UnorderedMap<String, UINT64>& params) override
  39. {
  40. ManagedResource* mr = static_cast<ManagedResource*>(obj);
  41. SPtr<ManagedSerializableObject> serializableObject = any_cast<SPtr<ManagedSerializableObject>>(mr->mRTTIData);
  42. serializableObject->deserialize();
  43. SPtr<Resource> mrPtr = std::static_pointer_cast<Resource>(mr->getThisPtr());
  44. HManagedResource handle = static_resource_cast<ManagedResource>(gResources()._createResourceHandle(mrPtr));
  45. mr->setHandle(serializableObject->getManagedInstance(), handle);
  46. mr->mRTTIData = nullptr;
  47. }
  48. const String& getRTTIName() override
  49. {
  50. static String name = "ManagedResource";
  51. return name;
  52. }
  53. UINT32 getRTTIId() override
  54. {
  55. return TID_ManagedResource;
  56. }
  57. SPtr<IReflectable> newRTTIObject() override
  58. {
  59. return ManagedResource::createEmpty();
  60. }
  61. };
  62. /** @} */
  63. /** @endcond */
  64. }