BsManagedResourceRTTI.h 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  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 "Reflection/BsRTTIType.h"
  6. #include "Private/RTTI/BsResourceRTTI.h"
  7. #include "BsManagedResource.h"
  8. #include "BsMonoManager.h"
  9. #include "Serialization/BsManagedSerializableObject.h"
  10. #include "Resources/BsResources.h"
  11. namespace bs
  12. {
  13. /** @cond RTTI */
  14. /** @addtogroup RTTI-Impl-SEngine
  15. * @{
  16. */
  17. class BS_SCR_BE_EXPORT ManagedResourceRTTI : public RTTIType<ManagedResource, Resource, ManagedResourceRTTI>
  18. {
  19. private:
  20. SPtr<ManagedSerializableObject> getObjectData(ManagedResource* obj)
  21. {
  22. return any_cast<SPtr<ManagedSerializableObject>>(mSerializableObject);
  23. }
  24. void setObjectData(ManagedResource* obj, SPtr<ManagedSerializableObject> val)
  25. {
  26. mSerializableObject = val;
  27. }
  28. public:
  29. ManagedResourceRTTI()
  30. {
  31. addReflectablePtrField("mObjectData", 0, &ManagedResourceRTTI::getObjectData, &ManagedResourceRTTI::setObjectData);
  32. }
  33. void onSerializationStarted(IReflectable* obj, SerializationContext* context) override
  34. {
  35. ManagedResource* mr = static_cast<ManagedResource*>(obj);
  36. mSerializableObject = ManagedSerializableObject::createFromExisting(mr->getManagedInstance());
  37. }
  38. void onDeserializationEnded(IReflectable* obj, SerializationContext* context) override
  39. {
  40. ManagedResource* mr = static_cast<ManagedResource*>(obj);
  41. SPtr<Resource> mrPtr = std::static_pointer_cast<Resource>(mr->getThisPtr());
  42. HManagedResource handle = static_resource_cast<ManagedResource>(gResources()._createResourceHandle(mrPtr));
  43. mr->setHandle(mSerializableObject->deserialize(), handle);
  44. }
  45. const String& getRTTIName() override
  46. {
  47. static String name = "ManagedResource";
  48. return name;
  49. }
  50. UINT32 getRTTIId() override
  51. {
  52. return TID_ManagedResource;
  53. }
  54. SPtr<IReflectable> newRTTIObject() override
  55. {
  56. return ManagedResource::createEmpty();
  57. }
  58. private:
  59. SPtr<ManagedSerializableObject> mSerializableObject;
  60. };
  61. /** @} */
  62. /** @endcond */
  63. }