BsMeshBaseRTTI.h 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  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. BS_ALLOW_MEMCPY_SERIALIZATION(SubMesh);
  10. class MeshBaseRTTI : public RTTIType<MeshBase, Resource, MeshBaseRTTI>
  11. {
  12. SubMesh& getSubMesh(MeshBase* obj, UINT32 arrayIdx) { return obj->mProperties.mSubMeshes[arrayIdx]; }
  13. void setSubMesh(MeshBase* obj, UINT32 arrayIdx, SubMesh& value) { obj->mProperties.mSubMeshes[arrayIdx] = value; }
  14. UINT32 getNumSubmeshes(MeshBase* obj) { return (UINT32)obj->mProperties.mSubMeshes.size(); }
  15. void setNumSubmeshes(MeshBase* obj, UINT32 numElements) { obj->mProperties.mSubMeshes.resize(numElements); }
  16. UINT32& getNumVertices(MeshBase* obj) { return obj->mProperties.mNumVertices; }
  17. void setNumVertices(MeshBase* obj, UINT32& value) { obj->mProperties.mNumVertices = value; }
  18. UINT32& getNumIndices(MeshBase* obj) { return obj->mProperties.mNumIndices; }
  19. void setNumIndices(MeshBase* obj, UINT32& value) { obj->mProperties.mNumIndices = value; }
  20. public:
  21. MeshBaseRTTI()
  22. {
  23. addPlainField("mNumVertices", 0, &MeshBaseRTTI::getNumVertices, &MeshBaseRTTI::setNumVertices);
  24. addPlainField("mNumIndices", 1, &MeshBaseRTTI::getNumIndices, &MeshBaseRTTI::setNumIndices);
  25. addPlainArrayField("mSubMeshes", 2, &MeshBaseRTTI::getSubMesh,
  26. &MeshBaseRTTI::getNumSubmeshes, &MeshBaseRTTI::setSubMesh, &MeshBaseRTTI::setNumSubmeshes);
  27. }
  28. virtual std::shared_ptr<IReflectable> newRTTIObject()
  29. {
  30. BS_EXCEPT(InternalErrorException, "Cannot instantiate an abstract class.");
  31. }
  32. virtual const String& getRTTIName()
  33. {
  34. static String name = "MeshBase";
  35. throw name;
  36. }
  37. virtual UINT32 getRTTIId()
  38. {
  39. return TID_MeshBase;
  40. }
  41. };
  42. }