hkContactPointMaterial.h
上传用户:yisoukefu
上传日期:2020-08-09
资源大小:39506k
文件大小:5k
源码类别:

其他游戏

开发平台:

Visual C++

  1. /* 
  2.  * 
  3.  * Confidential Information of Telekinesys Research Limited (t/a Havok). Not for disclosure or distribution without Havok's
  4.  * prior written consent. This software contains code, techniques and know-how which is confidential and proprietary to Havok.
  5.  * Level 2 and Level 3 source code contains trade secrets of Havok. Havok Software (C) Copyright 1999-2009 Telekinesys Research Limited t/a Havok. All Rights Reserved. Use of this software is subject to the terms of an end user license agreement.
  6.  * 
  7.  */
  8. #ifndef HK_MATH_CONTACT_POINT_MATERIAL_H
  9. #define HK_MATH_CONTACT_POINT_MATERIAL_H
  10. #include <Common/Base/hkBase.h>
  11. /// This class is used to get and set the friction for a contact point. You can also use it to attach your own user data
  12. /// to a contact point.  This can be used for example to set a friction map value in when a contact point is added
  13. /// so that the same data can be used when the contact point is being updated (from a processContactCallback() for example)
  14. class hkContactPointMaterial
  15. {
  16. public:
  17. HK_DECLARE_REFLECTION();
  18. /// Get the friction for the contact point, see setFriction().
  19. inline hkReal getFriction( ) const;
  20. /// Set the friction for the contact point.
  21. /// Usually the value will be between 0 and 1, but may be set be greater than 1.
  22. /// Internally this is stored as an 8.8 fixed point value, so
  23. /// values must lie in the range 0 (no friction) to 255 (max friction).
  24. inline void setFriction( hkReal r );
  25. /// Set the restitution for the contact point, see setRestitution().
  26. inline hkReal getRestitution( ) const;
  27. /// Set the restitution for the contact point.
  28. /// Usually the value will be between 0 (all energy lost in collision) and 1 (max restitution), but may be set greater than 1.
  29. /// Internally this is stored as an 1.7 fixed point value, so values must lie in the range 0 to 1.98.
  30. /// Note: for a contact point that has been around for several frames this has virtually no effect. You need to set the
  31. /// restitution for a contact point on creation of the contact point (when the approaching velocities are non-zero).
  32. inline void setRestitution( hkReal r );
  33. /// Get the user data
  34. inline hkUlong getUserData() const;
  35. /// Set the user data. This allows you to store any info, or a pointer with a contact point.
  36. inline void setUserData( hkUlong data );
  37. /// returns !=0 if the contact point might still be a potential contact point
  38. inline hkBool32 isPotential();
  39. /// Sets the maximum impulse applied per solver substep. This only works well if you set the restitution between the bodies to <0.3f otherwise the system might apply a up to twice the impulse
  40. /// If set to zero, an unlimited force is allowed (default)
  41. inline void setMaxImpulsePerStep( hkUFloat8 impulse );
  42. /// Gets the maximum impulse per solver step. 
  43. inline hkReal getMaxImpulsePerStep();
  44. // 
  45. // Internal section
  46. //
  47. protected:
  48. HK_DECLARE_NONVIRTUAL_CLASS_ALLOCATOR( HK_MEMORY_CLASS_COLLIDE, hkContactPointMaterial );
  49. /// Not used by Havok, feel free to use it
  50. hkUlong m_userData; // +default(0)
  51. /// The friction stored as 8 unsigned floating point 
  52. hkUFloat8 m_friction;
  53. /// the restitution stored as 1.7 fixed point -> range [0...1.98]
  54. hkUint8 m_restitution;
  55. public:
  56. /// The maximum impulse. Note: if you set this data to !=0, you have to clear CONTACT_USES_SOLVER_PATH2 in the flags field
  57. hkUFloat8 m_maxImpulse;
  58. public:
  59. void reset()
  60. {
  61. m_friction.m_value = 0;
  62. m_maxImpulse.m_value = 0;
  63. m_restitution = 0;
  64. m_flags = CONTACT_IS_NEW_AND_POTENTIAL;
  65. }
  66. enum  FlagEnum
  67. {
  68. // set for a contact point which is not verified
  69. CONTACT_IS_NEW_AND_POTENTIAL  = 1,
  70. // internal solver optimization, do not change (engine can crash if you do)
  71. CONTACT_USES_SOLVER_PATH2 = 2,
  72. // user data used by the breakoffpartutil
  73. CONTACT_BREAKOFF_OBJECT_ID = 4,
  74. };
  75. /// see FlagEnum for how it is used.
  76. /// Warning: do not modify yourself
  77. hkUint8 m_flags;
  78. friend class hkpSaveContactPointsEndianUtil;
  79. };
  80. #include <Common/Base/Types/Physics/ContactPoint/hkContactPointMaterial.inl>
  81. #endif // HK_MATH_CONTACT_POINT_MATERIAL_H
  82. /*
  83. * Havok SDK - NO SOURCE PC DOWNLOAD, BUILD(#20090216)
  84. * Confidential Information of Havok.  (C) Copyright 1999-2009
  85. * Telekinesys Research Limited t/a Havok. All Rights Reserved. The Havok
  86. * Logo, and the Havok buzzsaw logo are trademarks of Havok.  Title, ownership
  87. * rights, and intellectual property rights in the Havok software remain in
  88. * Havok and/or its suppliers.
  89. * Use of this software for evaluation purposes is subject to and indicates
  90. * acceptance of the End User licence Agreement for this product. A copy of
  91. * the license is included with this software and is also available at www.havok.com/tryhavok.
  92. */