BsManagedResourceRTTI.h 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. #pragma once
  2. #include "BsScriptEnginePrerequisites.h"
  3. #include "BsRTTIType.h"
  4. #include "BsResourceRTTI.h"
  5. #include "BsManagedResource.h"
  6. #include "BsMonoManager.h"
  7. #include "BsManagedSerializableObject.h"
  8. #include "BsResources.h"
  9. namespace BansheeEngine
  10. {
  11. class BS_SCR_BE_EXPORT ManagedResourceRTTI : public RTTIType<ManagedResource, Resource, ManagedResourceRTTI>
  12. {
  13. private:
  14. ManagedSerializableObjectPtr getObjectData(ManagedResource* obj)
  15. {
  16. return any_cast<ManagedSerializableObjectPtr>(obj->mRTTIData);
  17. }
  18. void setObjectData(ManagedResource* obj, ManagedSerializableObjectPtr val)
  19. {
  20. obj->mRTTIData = val;
  21. }
  22. public:
  23. ManagedResourceRTTI()
  24. {
  25. addReflectablePtrField("mObjectData", 0, &ManagedResourceRTTI::getObjectData, &ManagedResourceRTTI::setObjectData);
  26. }
  27. void onSerializationStarted(IReflectable* obj)
  28. {
  29. ManagedResource* mc = static_cast<ManagedResource*>(obj);
  30. mc->mRTTIData = ManagedSerializableObject::createFromExisting(mc->getManagedInstance());
  31. }
  32. virtual void onDeserializationEnded(IReflectable* obj)
  33. {
  34. ManagedResource* mr = static_cast<ManagedResource*>(obj);
  35. ManagedSerializableObjectPtr serializableObject = any_cast<ManagedSerializableObjectPtr>(mr->mRTTIData);
  36. serializableObject->deserialize();
  37. ResourcePtr mrPtr = std::static_pointer_cast<Resource>(mr->getThisPtr());
  38. HManagedResource handle = static_resource_cast<ManagedResource>(gResources()._createResourceHandle(mrPtr));
  39. mr->setHandle(serializableObject->getManagedInstance(), handle);
  40. mr->mRTTIData = nullptr;
  41. }
  42. virtual const String& getRTTIName()
  43. {
  44. static String name = "ManagedResource";
  45. return name;
  46. }
  47. virtual UINT32 getRTTIId()
  48. {
  49. return TID_ManagedResource;
  50. }
  51. virtual std::shared_ptr<IReflectable> newRTTIObject()
  52. {
  53. return ManagedResource::createEmpty();
  54. }
  55. };
  56. }