BsManagedComponentRTTI.h 2.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  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/BsGameObjectRTTI.h"
  7. #include "BsManagedComponent.h"
  8. #include "BsMonoManager.h"
  9. #include "Serialization/BsManagedSerializableObject.h"
  10. #include "Scene/BsGameObjectManager.h"
  11. #include "Wrappers/BsScriptComponent.h"
  12. namespace bs
  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. BS_BEGIN_RTTI_MEMBERS
  22. BS_RTTI_MEMBER_PLAIN(mNamespace, 0)
  23. BS_RTTI_MEMBER_PLAIN(mTypeName, 1)
  24. BS_RTTI_MEMBER_PLAIN(mMissingType, 3)
  25. BS_END_RTTI_MEMBERS
  26. SPtr<ManagedSerializableObject> getObjectData(ManagedComponent* obj)
  27. {
  28. return mSerializedObjectData;
  29. }
  30. void setObjectData(ManagedComponent* obj, SPtr<ManagedSerializableObject> val)
  31. {
  32. obj->mSerializedObjectData = val;
  33. }
  34. public:
  35. ManagedComponentRTTI()
  36. {
  37. addReflectablePtrField("mObjectData", 2, &ManagedComponentRTTI::getObjectData, &ManagedComponentRTTI::setObjectData);
  38. }
  39. void onSerializationStarted(IReflectable* obj, SerializationContext* context) override
  40. {
  41. ManagedComponent* mc = static_cast<ManagedComponent*>(obj);
  42. MonoObject* managedInstance = mc->getManagedInstance();
  43. if (managedInstance != nullptr)
  44. mSerializedObjectData = ManagedSerializableObject::createFromExisting(managedInstance);
  45. else
  46. mSerializedObjectData = mc->mSerializedObjectData;
  47. }
  48. const String& getRTTIName() override
  49. {
  50. static String name = "ManagedComponent";
  51. return name;
  52. }
  53. UINT32 getRTTIId() override
  54. {
  55. return TID_ManagedComponent;
  56. }
  57. SPtr<IReflectable> newRTTIObject() override
  58. {
  59. return GameObjectRTTI::createGameObject<ManagedComponent>();
  60. }
  61. private:
  62. SPtr<ManagedSerializableObject> mSerializedObjectData;
  63. };
  64. /** @} */
  65. /** @endcond */
  66. }