hkpHingeConstraintData.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_DYNAMICS2_HINGE_CONSTRAINT_H
  9. #define HK_DYNAMICS2_HINGE_CONSTRAINT_H
  10. #include <Physics/Dynamics/Constraint/hkpConstraintData.h>
  11. #include <Physics/ConstraintSolver/Constraint/Atom/hkpConstraintAtom.h>
  12. extern const hkClass hkpHingeConstraintDataClass;
  13. /// Basic hinge constraint
  14. class hkpHingeConstraintData : public hkpConstraintData
  15. {
  16. public:
  17. HK_DECLARE_REFLECTION();
  18. hkpHingeConstraintData();
  19. /// Set the data for a Hinge constraint with information given in body space.
  20. /// param pivotA The constraint pivot point, specified in bodyA space.
  21. /// param pivotB The constraint pivot point, specified in bodyB space.
  22. /// param axisA The hinge axis, specified in bodyA space.
  23. /// param axisB The hinge axis, specified in bodyB space.
  24. void setInBodySpace(const hkVector4& pivotA, const hkVector4& pivotB, const hkVector4& axisA, const hkVector4& axisB);
  25. /// Set the data for a Hinge constraint with information given in world space.
  26. /// param bodyA The first rigid body transform 
  27. /// param bodyB The second rigid body transform 
  28. /// param pivot The pivot point, specified in world space.
  29. /// param axis The hinge axis, specified in world space.
  30. void setInWorldSpace(const hkTransform& bodyATransform, const hkTransform& bodyBTransform, const hkVector4& pivot, const hkVector4& axis);
  31. /// Sets the maximum impulse that can be applied for this atom.
  32. /// Set it to HK_REAL_MAX to effectively disable the limit.
  33. virtual void setMaxLinearImpulse(hkReal maxImpulse);
  34. /// Gets the maximUm impulse that can be applied by this constraint.
  35. virtual hkReal getMaxLinearImpulse() const;
  36. /// Choose the body to be notified when the constraint's impulse is breached.
  37. virtual void setBodyToNotify(int bodyIdx);
  38. /// Returns the index of the body that is notified when the constraint's impulse limit is breached.
  39. virtual hkUint8 getNotifiedBodyIndex() const;
  40. /// Check consistency of constraint members
  41. virtual hkBool isValid() const;
  42. /// Get type from this constraint
  43. virtual int getType() const;
  44. public:
  45. //
  46. // Solver interface
  47. //
  48. enum 
  49. {
  50. SOLVER_RESULT_ANG_0 = 0, // angular constraint 0
  51. SOLVER_RESULT_ANG_1 = 1, // angular constraint 1
  52. SOLVER_RESULT_LIN_0 = 2, // linear constraint defined by m_constrainedAxis1B
  53. SOLVER_RESULT_LIN_1 = 3, // linear constraint defined by m_constrainedAxis2B
  54. SOLVER_RESULT_LIN_2 = 4, // linear constraint defined by m_constrainedAxis2B
  55. SOLVER_RESULT_MAX = 5 // keep this in sync with the hkSolverResult array below
  56. };
  57. struct Runtime
  58. {
  59. HK_DECLARE_NONVIRTUAL_CLASS_ALLOCATOR( HK_MEMORY_CLASS_DYNAMICS, hkpHingeConstraintData::Runtime );
  60. class hkpSolverResults m_solverResults[5/*VC6 doesn't like the scoping for SOLVER_RESULT_MAX*/];
  61. };
  62. static inline Runtime* HK_CALL getRuntime( hkpConstraintRuntime* runtime ) { return reinterpret_cast<Runtime*>(runtime); }
  63. public:
  64. struct Atoms
  65. {
  66. HK_DECLARE_NONVIRTUAL_CLASS_ALLOCATOR( HK_MEMORY_CLASS_DYNAMICS, hkpHingeConstraintData::Atoms );
  67. HK_DECLARE_REFLECTION();
  68. struct hkpSetLocalTransformsConstraintAtom m_transforms;
  69. struct hkp2dAngConstraintAtom m_2dAng;
  70. struct hkpBallSocketConstraintAtom m_ballSocket;
  71. enum Axis
  72. {
  73. AXIS_AXLE = 0
  74. };
  75. inline Atoms(){}
  76. // get a pointer to the first atom
  77. const hkpConstraintAtom* getAtoms() const { return &m_transforms; }
  78. // get the size of all atoms (we can't use sizeof(*this) because of align16 padding)
  79. int getSizeOfAllAtoms() const               { return hkGetByteOffsetInt(this, &m_ballSocket+1); }
  80. Atoms(hkFinishLoadedObjectFlag f) : m_transforms(f), m_2dAng(f), m_ballSocket(f) {}
  81. };
  82. HK_ALIGN16( struct Atoms m_atoms );
  83. public:
  84. // hkpConstraintData interface implementations
  85. virtual void getConstraintInfo( hkpConstraintData::ConstraintInfo& infoOut ) const ;
  86. // hkpConstraintData interface implementations
  87. virtual void getRuntimeInfo( hkBool wantRuntime, hkpConstraintData::RuntimeInfo& infoOut ) const;
  88. public:
  89. hkpHingeConstraintData(hkFinishLoadedObjectFlag f) : hkpConstraintData(f), m_atoms(f) {}
  90. };
  91. #endif //HK_DYNAMICS2_HINGE_CONSTRAINT_H
  92. /*
  93. * Havok SDK - NO SOURCE PC DOWNLOAD, BUILD(#20090216)
  94. * Confidential Information of Havok.  (C) Copyright 1999-2009
  95. * Telekinesys Research Limited t/a Havok. All Rights Reserved. The Havok
  96. * Logo, and the Havok buzzsaw logo are trademarks of Havok.  Title, ownership
  97. * rights, and intellectual property rights in the Havok software remain in
  98. * Havok and/or its suppliers.
  99. * Use of this software for evaluation purposes is subject to and indicates
  100. * acceptance of the End User licence Agreement for this product. A copy of
  101. * the license is included with this software and is also available at www.havok.com/tryhavok.
  102. */