BsManagedResourceRTTI.h 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  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. }
  40. virtual const String& getRTTIName()
  41. {
  42. static String name = "ManagedResource";
  43. return name;
  44. }
  45. virtual UINT32 getRTTIId()
  46. {
  47. return TID_ManagedResource;
  48. }
  49. virtual std::shared_ptr<IReflectable> newRTTIObject()
  50. {
  51. return ManagedResource::createEmpty();
  52. }
  53. };
  54. }