BsManagedResourceRTTI.h 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  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. class BS_SCR_BE_EXPORT ManagedResourceRTTI : public RTTIType<ManagedResource, Resource, ManagedResourceRTTI>
  14. {
  15. private:
  16. ManagedSerializableObjectPtr getObjectData(ManagedResource* obj)
  17. {
  18. return any_cast<ManagedSerializableObjectPtr>(obj->mRTTIData);
  19. }
  20. void setObjectData(ManagedResource* obj, ManagedSerializableObjectPtr val)
  21. {
  22. obj->mRTTIData = val;
  23. }
  24. public:
  25. ManagedResourceRTTI()
  26. {
  27. addReflectablePtrField("mObjectData", 0, &ManagedResourceRTTI::getObjectData, &ManagedResourceRTTI::setObjectData);
  28. }
  29. void onSerializationStarted(IReflectable* obj)
  30. {
  31. ManagedResource* mc = static_cast<ManagedResource*>(obj);
  32. mc->mRTTIData = ManagedSerializableObject::createFromExisting(mc->getManagedInstance());
  33. }
  34. virtual void onDeserializationEnded(IReflectable* obj)
  35. {
  36. ManagedResource* mr = static_cast<ManagedResource*>(obj);
  37. ManagedSerializableObjectPtr serializableObject = any_cast<ManagedSerializableObjectPtr>(mr->mRTTIData);
  38. serializableObject->deserialize();
  39. ResourcePtr mrPtr = std::static_pointer_cast<Resource>(mr->getThisPtr());
  40. HManagedResource handle = static_resource_cast<ManagedResource>(gResources()._createResourceHandle(mrPtr));
  41. mr->setHandle(serializableObject->getManagedInstance(), handle);
  42. mr->mRTTIData = nullptr;
  43. }
  44. virtual const String& getRTTIName()
  45. {
  46. static String name = "ManagedResource";
  47. return name;
  48. }
  49. virtual UINT32 getRTTIId()
  50. {
  51. return TID_ManagedResource;
  52. }
  53. virtual std::shared_ptr<IReflectable> newRTTIObject()
  54. {
  55. return ManagedResource::createEmpty();
  56. }
  57. };
  58. }