BsMeshBaseRTTI.h 1.9 KB

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