BsManagedComponentRTTI.h 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109
  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 "BsGameObjectRTTI.h"
  7. #include "BsManagedComponent.h"
  8. #include "BsMonoManager.h"
  9. #include "BsManagedSerializableObject.h"
  10. #include "BsGameObjectManager.h"
  11. #include "BsScriptComponent.h"
  12. namespace BansheeEngine
  13. {
  14. /** @cond RTTI */
  15. /** @addtogroup RTTI-Impl-SEngine
  16. * @{
  17. */
  18. class BS_SCR_BE_EXPORT ManagedComponentRTTI : public RTTIType<ManagedComponent, Component, ManagedComponentRTTI>
  19. {
  20. private:
  21. String& getNamespace(ManagedComponent* obj)
  22. {
  23. return obj->mNamespace;
  24. }
  25. void setNamespace(ManagedComponent* obj, String& val)
  26. {
  27. obj->mNamespace = val;
  28. }
  29. String& getTypename(ManagedComponent* obj)
  30. {
  31. return obj->mTypeName;
  32. }
  33. void setTypename(ManagedComponent* obj, String& val)
  34. {
  35. obj->mTypeName = val;
  36. }
  37. SPtr<ManagedSerializableObject> getObjectData(ManagedComponent* obj)
  38. {
  39. return any_cast<SPtr<ManagedSerializableObject>>(obj->mRTTIData);
  40. }
  41. void setObjectData(ManagedComponent* obj, SPtr<ManagedSerializableObject> val)
  42. {
  43. obj->mSerializedObjectData = val;
  44. }
  45. bool& getMissingType(ManagedComponent* obj)
  46. {
  47. return obj->mMissingType;
  48. }
  49. void setMissingType(ManagedComponent* obj, bool& val)
  50. {
  51. obj->mMissingType = val;
  52. }
  53. public:
  54. ManagedComponentRTTI()
  55. {
  56. addPlainField("mNamespace", 0, &ManagedComponentRTTI::getNamespace, &ManagedComponentRTTI::setNamespace);
  57. addPlainField("mTypename", 1, &ManagedComponentRTTI::getTypename, &ManagedComponentRTTI::setTypename);
  58. addReflectablePtrField("mObjectData", 2, &ManagedComponentRTTI::getObjectData, &ManagedComponentRTTI::setObjectData);
  59. addPlainField("mMissingType", 3, &ManagedComponentRTTI::getMissingType, &ManagedComponentRTTI::setMissingType);
  60. }
  61. void onSerializationStarted(IReflectable* obj, const UnorderedMap<String, UINT64>& params) override
  62. {
  63. ManagedComponent* mc = static_cast<ManagedComponent*>(obj);
  64. MonoObject* managedInstance = mc->getManagedInstance();
  65. if (managedInstance != nullptr)
  66. mc->mRTTIData = ManagedSerializableObject::createFromExisting(managedInstance);
  67. else
  68. mc->mRTTIData = mc->mSerializedObjectData;
  69. }
  70. void onSerializationEnded(IReflectable* obj, const UnorderedMap<String, UINT64>& params) override
  71. {
  72. ManagedComponent* mc = static_cast<ManagedComponent*>(obj);
  73. mc->mRTTIData = nullptr;
  74. }
  75. virtual const String& getRTTIName() override
  76. {
  77. static String name = "ManagedComponent";
  78. return name;
  79. }
  80. virtual UINT32 getRTTIId() override
  81. {
  82. return TID_ManagedComponent;
  83. }
  84. virtual SPtr<IReflectable> newRTTIObject() override
  85. {
  86. return GameObjectRTTI::createGameObject<ManagedComponent>();
  87. }
  88. };
  89. /** @} */
  90. /** @endcond */
  91. }