2
0

BsManagedResourceRTTI.h 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  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. namespace BansheeEngine
  9. {
  10. class BS_SCR_BE_EXPORT ManagedResourceRTTI : public RTTIType<ManagedResource, Resource, ManagedResourceRTTI>
  11. {
  12. private:
  13. ManagedSerializableObjectPtr getObjectData(ManagedResource* obj)
  14. {
  15. return any_cast<ManagedSerializableObjectPtr>(obj->mRTTIData);
  16. }
  17. void setObjectData(ManagedResource* obj, ManagedSerializableObjectPtr val)
  18. {
  19. obj->mRTTIData = val;
  20. }
  21. public:
  22. ManagedResourceRTTI()
  23. {
  24. addReflectablePtrField("mObjectData", 0, &ManagedResourceRTTI::getObjectData, &ManagedResourceRTTI::setObjectData);
  25. }
  26. void onSerializationStarted(IReflectable* obj)
  27. {
  28. ManagedResource* mc = static_cast<ManagedResource*>(obj);
  29. mc->mRTTIData = ManagedSerializableObject::createFromExisting(mc->getManagedInstance());
  30. }
  31. virtual void onDeserializationEnded(IReflectable* obj)
  32. {
  33. ManagedResource* mc = static_cast<ManagedResource*>(obj);
  34. ManagedSerializableObjectPtr serializableObject = any_cast<ManagedSerializableObjectPtr>(mc->mRTTIData);
  35. mc->construct(serializableObject->getManagedInstance());
  36. }
  37. virtual const String& getRTTIName()
  38. {
  39. static String name = "ManagedResource";
  40. return name;
  41. }
  42. virtual UINT32 getRTTIId()
  43. {
  44. return TID_ManagedResource;
  45. }
  46. virtual std::shared_ptr<IReflectable> newRTTIObject()
  47. {
  48. return ManagedResource::createEmpty();
  49. }
  50. };
  51. }