BsManagedResourceRTTI.h 2.2 KB

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