BsSceneObjectRTTI.h 2.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. //__________________________ Banshee Project - A modern game development toolkit _________________________________//
  2. //_____________________________________ www.banshee-project.com __________________________________________________//
  3. //________________________ Copyright (c) 2014 Marko Pintera. All rights reserved. ________________________________//
  4. #pragma once
  5. #include "BsCorePrerequisites.h"
  6. #include "BsRTTIType.h"
  7. #include "BsSceneObject.h"
  8. #include "BsGameObjectHandle.h"
  9. #include "BsGameObjectManager.h"
  10. namespace BansheeEngine
  11. {
  12. class BS_CORE_EXPORT SceneObjectRTTI : public RTTIType<SceneObject, GameObject, SceneObjectRTTI>
  13. {
  14. private:
  15. // NOTE - These can only be set sequentially, specific array index is ignored
  16. std::shared_ptr<SceneObject> getChild(SceneObject* obj, UINT32 idx) { return obj->mChildren[idx].getInternalPtr(); }
  17. void setChild(SceneObject* obj, UINT32 idx, std::shared_ptr<SceneObject> param) { param->setParent(obj->mThisHandle); } // NOTE: Can only be used for sequentially adding elements
  18. UINT32 getNumChildren(SceneObject* obj) { return (UINT32)obj->mChildren.size(); }
  19. void setNumChildren(SceneObject* obj, UINT32 size) { /* DO NOTHING */ }
  20. // NOTE - These can only be set sequentially, specific array index is ignored
  21. std::shared_ptr<Component> getComponent(SceneObject* obj, UINT32 idx) { return obj->mComponents[idx].getInternalPtr(); }
  22. void setComponent(SceneObject* obj, UINT32 idx, std::shared_ptr<Component> param) { obj->addComponentInternal(param); }
  23. UINT32 getNumComponents(SceneObject* obj) { return (UINT32)obj->mComponents.size(); }
  24. void setNumComponents(SceneObject* obj, UINT32 size) { /* DO NOTHING */ }
  25. public:
  26. SceneObjectRTTI()
  27. {
  28. addReflectablePtrArrayField("mChildren", 0, &SceneObjectRTTI::getChild,
  29. &SceneObjectRTTI::getNumChildren, &SceneObjectRTTI::setChild, &SceneObjectRTTI::setNumChildren);
  30. addReflectablePtrArrayField("mComponents", 1, &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. };
  48. }