BsManagedComponentRTTI.h 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101
  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. class BS_SCR_BE_EXPORT ManagedComponentRTTI : public RTTIType<ManagedComponent, Component, ManagedComponentRTTI>
  15. {
  16. private:
  17. String& getNamespace(ManagedComponent* obj)
  18. {
  19. return obj->mNamespace;
  20. }
  21. void setNamespace(ManagedComponent* obj, String& val)
  22. {
  23. obj->mNamespace = val;
  24. }
  25. String& getTypename(ManagedComponent* obj)
  26. {
  27. return obj->mTypeName;
  28. }
  29. void setTypename(ManagedComponent* obj, String& val)
  30. {
  31. obj->mTypeName = val;
  32. }
  33. ManagedSerializableObjectPtr getObjectData(ManagedComponent* obj)
  34. {
  35. return any_cast<ManagedSerializableObjectPtr>(obj->mRTTIData);
  36. }
  37. void setObjectData(ManagedComponent* obj, ManagedSerializableObjectPtr val)
  38. {
  39. obj->mSerializedObjectData = val;
  40. }
  41. bool& getMissingType(ManagedComponent* obj)
  42. {
  43. return obj->mMissingType;
  44. }
  45. void setMissingType(ManagedComponent* obj, bool& val)
  46. {
  47. obj->mMissingType = val;
  48. }
  49. public:
  50. ManagedComponentRTTI()
  51. {
  52. addPlainField("mNamespace", 0, &ManagedComponentRTTI::getNamespace, &ManagedComponentRTTI::setNamespace);
  53. addPlainField("mTypename", 1, &ManagedComponentRTTI::getTypename, &ManagedComponentRTTI::setTypename);
  54. addReflectablePtrField("mObjectData", 2, &ManagedComponentRTTI::getObjectData, &ManagedComponentRTTI::setObjectData);
  55. addPlainField("mMissingType", 3, &ManagedComponentRTTI::getMissingType, &ManagedComponentRTTI::setMissingType);
  56. }
  57. void onSerializationStarted(IReflectable* obj) override
  58. {
  59. ManagedComponent* mc = static_cast<ManagedComponent*>(obj);
  60. MonoObject* managedInstance = mc->getManagedInstance();
  61. if (managedInstance != nullptr)
  62. mc->mRTTIData = ManagedSerializableObject::createFromExisting(managedInstance);
  63. else
  64. mc->mRTTIData = mc->mSerializedObjectData;
  65. }
  66. void onSerializationEnded(IReflectable* obj) override
  67. {
  68. ManagedComponent* mc = static_cast<ManagedComponent*>(obj);
  69. mc->mRTTIData = nullptr;
  70. }
  71. virtual const String& getRTTIName() override
  72. {
  73. static String name = "ManagedComponent";
  74. return name;
  75. }
  76. virtual UINT32 getRTTIId() override
  77. {
  78. return TID_ManagedComponent;
  79. }
  80. virtual std::shared_ptr<IReflectable> newRTTIObject() override
  81. {
  82. return GameObjectRTTI::createGameObject<ManagedComponent>();
  83. }
  84. };
  85. }