BsPhysXMeshRTTI.h 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. //********************************** Banshee Engine (www.banshee3d.com) **************************************************//
  2. //**************** Copyright (c) 2016 Marko Pintera ([email protected]). All rights reserved. **********************//
  3. #pragma once
  4. #include "BsPhysXPrerequisites.h"
  5. #include "BsRTTIType.h"
  6. #include "BsPhysXMesh.h"
  7. #include "BsDataStream.h"
  8. namespace BansheeEngine
  9. {
  10. /** @cond RTTI */
  11. /** @addtogroup RTTI-Impl-PhysX
  12. * @{
  13. */
  14. class BS_PHYSX_EXPORT FPhysXMeshRTTI : public RTTIType<FPhysXMesh, FPhysicsMesh, FPhysXMeshRTTI>
  15. {
  16. private:
  17. SPtr<DataStream> getCookedData(FPhysXMesh* obj, UINT32& size)
  18. {
  19. size = obj->mCookedDataSize;
  20. return bs_shared_ptr_new<MemoryDataStream>(obj->mCookedData, obj->mCookedDataSize, false);
  21. }
  22. void setCookedData(FPhysXMesh* obj, const SPtr<DataStream>& value, UINT32 size)
  23. {
  24. obj->mCookedData = (UINT8*)bs_alloc(size);
  25. obj->mCookedDataSize = size;
  26. value->read(obj->mCookedData, size);
  27. }
  28. public:
  29. FPhysXMeshRTTI()
  30. {
  31. addDataBlockField("mCookedData", 0, &FPhysXMeshRTTI::getCookedData, &FPhysXMeshRTTI::setCookedData, 0);
  32. }
  33. /** @copydoc IReflectable::onDeserializationEnded */
  34. void onDeserializationEnded(IReflectable* obj, const UnorderedMap<String, UINT64>& params) override
  35. {
  36. FPhysXMesh* mesh = static_cast<FPhysXMesh*>(obj);
  37. mesh->initialize();
  38. }
  39. const String& getRTTIName() override
  40. {
  41. static String name = "FPhysXMesh";
  42. return name;
  43. }
  44. UINT32 getRTTIId() override
  45. {
  46. return TID_FPhysXMesh;
  47. }
  48. SPtr<IReflectable> newRTTIObject() override
  49. {
  50. return bs_shared_ptr_new<FPhysXMesh>();
  51. }
  52. };
  53. /** @} */
  54. /** @endcond */
  55. }