BsPhysicsMaterialRTTI.h 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100
  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 "BsPhysicsMaterial.h"
  7. namespace BansheeEngine
  8. {
  9. /** @cond RTTI */
  10. /** @addtogroup RTTI-Impl-Core
  11. * @{
  12. */
  13. class BS_CORE_EXPORT PhysicsMaterialRTTI : public RTTIType<PhysicsMaterial, Resource, PhysicsMaterialRTTI>
  14. {
  15. struct PhysicsMaterialData
  16. {
  17. float staticFriction;
  18. float dynamicFriction;
  19. float restitutionCoefficient;
  20. };
  21. private:
  22. float& getStaticFriction(PhysicsMaterial* obj)
  23. {
  24. PhysicsMaterialData& materialData = any_cast_ref<PhysicsMaterialData>(obj->mRTTIData);
  25. return materialData.staticFriction;
  26. }
  27. void setStaticFriction(PhysicsMaterial* obj, float& size) { obj->setStaticFriction(size); }
  28. float& getDynamicFriction(PhysicsMaterial* obj)
  29. {
  30. PhysicsMaterialData& materialData = any_cast_ref<PhysicsMaterialData>(obj->mRTTIData);
  31. return materialData.dynamicFriction;
  32. }
  33. void setDynamicFriction(PhysicsMaterial* obj, float& size) { obj->setDynamicFriction(size); }
  34. float& getRestitutionCoefficient(PhysicsMaterial* obj)
  35. {
  36. PhysicsMaterialData& materialData = any_cast_ref<PhysicsMaterialData>(obj->mRTTIData);
  37. return materialData.restitutionCoefficient;
  38. }
  39. void setRestitutionCoefficient(PhysicsMaterial* obj, float& size) { obj->setRestitutionCoefficient(size); }
  40. public:
  41. PhysicsMaterialRTTI()
  42. {
  43. addPlainField("staticFriction", 0, &PhysicsMaterialRTTI::getStaticFriction, &PhysicsMaterialRTTI::setStaticFriction);
  44. addPlainField("dynamicFriction", 1, &PhysicsMaterialRTTI::getDynamicFriction, &PhysicsMaterialRTTI::setDynamicFriction);
  45. addPlainField("restitutionCoefficient", 2, &PhysicsMaterialRTTI::getRestitutionCoefficient, &PhysicsMaterialRTTI::setRestitutionCoefficient);
  46. }
  47. void onSerializationStarted(IReflectable* obj, const UnorderedMap<String, UINT64>& params) override
  48. {
  49. PhysicsMaterial* material = static_cast<PhysicsMaterial*>(obj);
  50. PhysicsMaterialData materialData =
  51. {
  52. material->getStaticFriction(),
  53. material->getDynamicFriction(),
  54. material->getRestitutionCoefficient()
  55. };
  56. material->mRTTIData = materialData;
  57. }
  58. void onSerializationEnded(IReflectable* obj, const UnorderedMap<String, UINT64>& params) override
  59. {
  60. PhysicsMaterial* material = static_cast<PhysicsMaterial*>(obj);
  61. material->mRTTIData = nullptr;
  62. }
  63. const String& getRTTIName() override
  64. {
  65. static String name = "PhysicsMaterial";
  66. return name;
  67. }
  68. UINT32 getRTTIId() override
  69. {
  70. return TID_PhysicsMaterial;
  71. }
  72. SPtr<IReflectable> newRTTIObject() override
  73. {
  74. return PhysicsMaterial::_createPtr();
  75. }
  76. };
  77. /** @} */
  78. /** @endcond */
  79. }