BsMeshBaseRTTI.h 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  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 "BsCoreApplication.h"
  7. #include "BsMeshBase.h"
  8. #include "BsException.h"
  9. namespace BansheeEngine
  10. {
  11. /** @cond RTTI */
  12. /** @addtogroup RTTI-Impl-Core
  13. * @{
  14. */
  15. BS_ALLOW_MEMCPY_SERIALIZATION(SubMesh);
  16. class MeshBaseRTTI : public RTTIType<MeshBase, Resource, MeshBaseRTTI>
  17. {
  18. SubMesh& getSubMesh(MeshBase* obj, UINT32 arrayIdx) { return obj->mProperties.mSubMeshes[arrayIdx]; }
  19. void setSubMesh(MeshBase* obj, UINT32 arrayIdx, SubMesh& value) { obj->mProperties.mSubMeshes[arrayIdx] = value; }
  20. UINT32 getNumSubmeshes(MeshBase* obj) { return (UINT32)obj->mProperties.mSubMeshes.size(); }
  21. void setNumSubmeshes(MeshBase* obj, UINT32 numElements) { obj->mProperties.mSubMeshes.resize(numElements); }
  22. UINT32& getNumVertices(MeshBase* obj) { return obj->mProperties.mNumVertices; }
  23. void setNumVertices(MeshBase* obj, UINT32& value) { obj->mProperties.mNumVertices = value; }
  24. UINT32& getNumIndices(MeshBase* obj) { return obj->mProperties.mNumIndices; }
  25. void setNumIndices(MeshBase* obj, UINT32& value) { obj->mProperties.mNumIndices = value; }
  26. public:
  27. MeshBaseRTTI()
  28. {
  29. addPlainField("mNumVertices", 0, &MeshBaseRTTI::getNumVertices, &MeshBaseRTTI::setNumVertices);
  30. addPlainField("mNumIndices", 1, &MeshBaseRTTI::getNumIndices, &MeshBaseRTTI::setNumIndices);
  31. addPlainArrayField("mSubMeshes", 2, &MeshBaseRTTI::getSubMesh,
  32. &MeshBaseRTTI::getNumSubmeshes, &MeshBaseRTTI::setSubMesh, &MeshBaseRTTI::setNumSubmeshes);
  33. }
  34. SPtr<IReflectable> newRTTIObject() override
  35. {
  36. BS_EXCEPT(InternalErrorException, "Cannot instantiate an abstract class.");
  37. return nullptr;
  38. }
  39. const String& getRTTIName() override
  40. {
  41. static String name = "MeshBase";
  42. return name;
  43. }
  44. UINT32 getRTTIId() override
  45. {
  46. return TID_MeshBase;
  47. }
  48. };
  49. /** @} */
  50. /** @endcond */
  51. }