BsRenderableRTTI.h 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. //********************************** Banshee Engine (www.banshee3d.com) **************************************************//
  2. //**************** Copyright (c) 2016 Marko Pintera ([email protected]). All rights reserved. **********************//
  3. #pragma once
  4. #include "BsCorePrerequisites.h"
  5. #include "BsRTTIType.h"
  6. #include "BsRenderable.h"
  7. namespace bs
  8. {
  9. /** @cond RTTI */
  10. /** @addtogroup RTTI-Impl-Engine
  11. * @{
  12. */
  13. class BS_CORE_EXPORT RenderableRTTI : public RTTIType<Renderable, IReflectable, RenderableRTTI>
  14. {
  15. private:
  16. HMesh& getMesh(Renderable* obj) { return obj->mMesh; }
  17. void setMesh(Renderable* obj, HMesh& val) { obj->mMesh = val; }
  18. UINT64& getLayer(Renderable* obj) { return obj->mLayer; }
  19. void setLayer(Renderable* obj, UINT64& val) { obj->mLayer = val; }
  20. HMaterial& getMaterial(Renderable* obj, UINT32 idx) { return obj->mMaterials[idx]; }
  21. void setMaterial(Renderable* obj, UINT32 idx, HMaterial& val) { obj->setMaterial(idx, val); }
  22. UINT32 getNumMaterials(Renderable* obj) { return (UINT32)obj->mMaterials.size(); }
  23. void setNumMaterials(Renderable* obj, UINT32 num) { obj->mMaterials.resize(num); }
  24. public:
  25. RenderableRTTI()
  26. {
  27. addReflectableField("mMesh", 0, &RenderableRTTI::getMesh, &RenderableRTTI::setMesh);
  28. addPlainField("mLayer", 1, &RenderableRTTI::getLayer, &RenderableRTTI::setLayer);
  29. addReflectableArrayField("mMaterials", 2, &RenderableRTTI::getMaterial,
  30. &RenderableRTTI::getNumMaterials, &RenderableRTTI::setMaterial, &RenderableRTTI::setNumMaterials);
  31. }
  32. void onDeserializationEnded(IReflectable* obj, const UnorderedMap<String, UINT64>& params) override
  33. {
  34. // Note: Since this is a CoreObject I should call initialize() right after deserialization,
  35. // but since this specific type is used in Components we delay initialization until Component
  36. // itself does it. Keep this is mind in case this ever needs to be deserialized for non-Component
  37. // purposes (you'll need to call initialize manually).
  38. }
  39. const String& getRTTIName() override
  40. {
  41. static String name = "Renderable";
  42. return name;
  43. }
  44. UINT32 getRTTIId() override
  45. {
  46. return TID_Renderable;
  47. }
  48. SPtr<IReflectable> newRTTIObject() override
  49. {
  50. return Renderable::createEmpty();
  51. }
  52. };
  53. /** @} */
  54. /** @endcond */
  55. }