CmSceneObjectRTTI.h 2.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. #pragma once
  2. #include "CmPrerequisites.h"
  3. #include "CmRTTIType.h"
  4. #include "CmSceneObject.h"
  5. #include "CmGameObjectHandle.h"
  6. #include "CmGameObjectManager.h"
  7. namespace CamelotFramework
  8. {
  9. class CM_EXPORT SceneObjectRTTI : public RTTIType<SceneObject, GameObject, SceneObjectRTTI>
  10. {
  11. private:
  12. String& getName(SceneObject* obj) { return obj->mName; }
  13. void setName(SceneObject* obj, String& name) { obj->mName = name; }
  14. // NOTE - These can only be set sequentially, specific array index is ignored
  15. std::shared_ptr<SceneObject> getChild(SceneObject* obj, UINT32 idx) { return obj->mChildren[idx].getInternalPtr(); }
  16. void setChild(SceneObject* obj, UINT32 idx, std::shared_ptr<SceneObject> param) { param->setParent(obj->mThisHandle); } // NOTE: Can only be used for sequentially adding elements
  17. UINT32 getNumChildren(SceneObject* obj) { return (UINT32)obj->mChildren.size(); }
  18. void setNumChildren(SceneObject* obj, UINT32 size) { /* DO NOTHING */ }
  19. // NOTE - These can only be set sequentially, specific array index is ignored
  20. std::shared_ptr<Component> getComponent(SceneObject* obj, UINT32 idx) { return obj->mComponents[idx].getInternalPtr(); }
  21. void setComponent(SceneObject* obj, UINT32 idx, std::shared_ptr<Component> param) { obj->addComponentInternal(param); }
  22. UINT32 getNumComponents(SceneObject* obj) { return (UINT32)obj->mComponents.size(); }
  23. void setNumComponents(SceneObject* obj, UINT32 size) { /* DO NOTHING */ }
  24. public:
  25. SceneObjectRTTI()
  26. {
  27. addPlainField("mName", 0, &SceneObjectRTTI::getName, &SceneObjectRTTI::setName);
  28. addReflectablePtrArrayField("mChildren", 1, &SceneObjectRTTI::getChild,
  29. &SceneObjectRTTI::getNumChildren, &SceneObjectRTTI::setChild, &SceneObjectRTTI::setNumChildren);
  30. addReflectablePtrArrayField("mComponents", 2, &SceneObjectRTTI::getComponent,
  31. &SceneObjectRTTI::getNumComponents, &SceneObjectRTTI::setComponent, &SceneObjectRTTI::setNumComponents);
  32. }
  33. virtual const String& getRTTIName()
  34. {
  35. static String name = "SceneObject";
  36. return name;
  37. }
  38. virtual UINT32 getRTTIId()
  39. {
  40. return TID_SceneObject;
  41. }
  42. virtual std::shared_ptr<IReflectable> newRTTIObject()
  43. {
  44. HSceneObject newObject = SceneObject::create("");
  45. return newObject.getInternalPtr();
  46. }
  47. protected:
  48. virtual void onDeserializationStarted(IReflectable* obj)
  49. {
  50. SceneObject* sceneObj = static_cast<SceneObject*>(obj);
  51. GameObjectManager::instance().notifyDeserializationStarted(sceneObj);
  52. }
  53. virtual void onDeserializationEnded(IReflectable* obj)
  54. {
  55. SceneObject* sceneObj = static_cast<SceneObject*>(obj);
  56. GameObjectManager::instance().notifyDeserializationEnded(sceneObj);
  57. }
  58. };
  59. }