BsManagedResourceRTTI.h 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  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. ResourcePtr mrPtr = std::static_pointer_cast<Resource>(mr->getThisPtr());
  37. HManagedResource handle = static_resource_cast<ManagedResource>(gResources()._createResourceHandle(mrPtr));
  38. mr->construct(serializableObject->getManagedInstance(), handle);
  39. mr->mRTTIData = nullptr;
  40. }
  41. virtual const String& getRTTIName()
  42. {
  43. static String name = "ManagedResource";
  44. return name;
  45. }
  46. virtual UINT32 getRTTIId()
  47. {
  48. return TID_ManagedResource;
  49. }
  50. virtual std::shared_ptr<IReflectable> newRTTIObject()
  51. {
  52. return ManagedResource::createEmpty();
  53. }
  54. };
  55. }