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

其他游戏

开发平台:

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_PRISMATIC_CONSTRAINT_H
  9. #define HK_DYNAMICS2_PRISMATIC_CONSTRAINT_H
  10. #include <Physics/Dynamics/Constraint/hkpConstraintData.h>
  11. #include <Physics/ConstraintSolver/Constraint/Atom/hkpConstraintAtom.h>
  12. class hkpRigidBody;
  13. class hkpConstraintMotor;
  14. extern const hkClass hkpPrismaticConstraintDataClass;
  15. /// prismatic constraint.  free to move along an axis.
  16. class hkpPrismaticConstraintData : public hkpConstraintData
  17. {
  18. public:
  19. HK_DECLARE_REFLECTION();
  20. hkpPrismaticConstraintData();
  21. ~hkpPrismaticConstraintData();
  22. /// Construct a prismatic constraint with a pivot and axis in world space.
  23. /// param bodyATransform The attached body transform.
  24. /// param bodyBTransform The reference body transform.
  25. /// param pivot The pivot point, specified in world space.
  26. /// param axis The axis, specified in world space.
  27. void setInWorldSpace(const hkTransform& bodyATransform, const hkTransform& bodyBTransform,
  28. const hkVector4& pivot,const hkVector4& axis);
  29. /// Construct a prismatic constraint with a pivot and axis in the two body spaces.
  30. /// param pivotA The pivot point, specified in bodyA space.
  31. /// param pivotB The pivot point, specified in bodyB space.
  32. /// param axisA The axis, specified in bodyA space.
  33. /// param axisB The axis, specified in bodyB space.
  34. void setInBodySpace( const hkVector4& pivotA, const hkVector4& pivotB,
  35. const hkVector4& axisA, const hkVector4& axisB,
  36. const hkVector4& axisAPerp, const hkVector4& axisBPerp);
  37. // Methods to set and get limits and friction
  38. ///Sets the maximum limit for the attached body's movement along the axis.
  39. inline void setMaxLinearLimit(hkReal mmax);
  40. ///Sets the minimum limit for the attached body's movement along the axis.
  41. inline void setMinLinearLimit(hkReal mmin);
  42. ///Sets the friction value.
  43. inline void setMaxFrictionForce(hkReal mag);
  44. ///Gets the maximum limit for the attached body's movement along the axis.
  45. inline hkReal getMaxLinearLimit() const;
  46. ///Gets the minimum limit for the attached body's movement along the axis.
  47. inline hkReal getMinLinearLimit() const;
  48. ///Gets the friction value.
  49. inline hkReal getMaxFrictionForce() const;
  50. /// Set the motor.  Setting this to null will disable any motor computations.
  51. /// increments reference of new motor, decrements counter of replaced motor ( if any )
  52. void setMotor( hkpConstraintMotor* motor );
  53. /// get the motor. 
  54. inline hkpConstraintMotor* getMotor() const;
  55. /// Sets the target position for the motor. Only used by motors which use positions
  56. inline void setMotorTargetPosition( hkReal position );
  57. /// Gets the target angle for the motor
  58. inline hkReal getMotorTargetPosition();
  59. /// turn the motor on or off
  60. void setMotorActive( hkpConstraintInstance* instance, hkBool toBeEnabled );
  61. /// Check consistency of constraint members
  62. hkBool isValid() const;
  63. /// Get type from this constraint
  64. virtual int getType() const;
  65. enum 
  66. {
  67. SOLVER_RESULT_MOTOR = 0, // the motor
  68. SOLVER_RESULT_FRICTION = 1, // the friction
  69. SOLVER_RESULT_ANG_0 = 2, // angular constraint 0
  70. SOLVER_RESULT_ANG_1 = 3, // angular constraint 1
  71. SOLVER_RESULT_ANG_2 = 4, // angular constraint 2
  72. SOLVER_RESULT_LIN_0 = 5, // linear constraint defined by m_constrainedAxis1B
  73. SOLVER_RESULT_LIN_1 = 6, // linear constraint defined by m_constrainedAxis2B
  74. SOLVER_RESULT_LIMIT  = 7, // for limits 
  75. SOLVER_RESULT_MAX = 8 // keep in sync with solver res array below
  76. };
  77. struct Runtime
  78. {
  79. HK_DECLARE_NONVIRTUAL_CLASS_ALLOCATOR( HK_MEMORY_CLASS_DYNAMICS, hkpPrismaticConstraintData::Runtime );
  80. class hkpSolverResults m_solverResults[8/*VC6 doesn't like the scoping for SOLVER_RESULT_MAX*/];
  81. // To tell whether the previous position has been initialized.
  82. hkUint8 m_initialized;
  83. // The previous target position
  84. hkReal m_previousTargetPosition;
  85. };
  86. static inline Runtime* HK_CALL getRuntime( hkpConstraintRuntime* runtime ) { return reinterpret_cast<Runtime*>(runtime); }
  87. struct Atoms
  88. {
  89. HK_DECLARE_NONVIRTUAL_CLASS_ALLOCATOR( HK_MEMORY_CLASS_DYNAMICS, hkpPrismaticConstraintData::Atoms );
  90. HK_DECLARE_REFLECTION();
  91. enum Axis
  92. {
  93. AXIS_SHAFT = 0,
  94. AXIS_PERP_TO_SHAFT = 1
  95. };
  96. struct hkpSetLocalTransformsConstraintAtom m_transforms;
  97. struct hkpLinMotorConstraintAtom m_motor;
  98. struct hkpLinFrictionConstraintAtom m_friction;
  99. struct hkpAngConstraintAtom m_ang;
  100. struct hkpLinConstraintAtom m_lin0;
  101. struct hkpLinConstraintAtom m_lin1;
  102. struct hkpLinLimitConstraintAtom m_linLimit;
  103. Atoms(){}
  104. // get a pointer to the first atom
  105. const hkpConstraintAtom* getAtoms() const { return &m_transforms; }
  106. // get the size of all atoms (we can't use sizeof(*this) because of align16 padding)
  107. int getSizeOfAllAtoms() const               { return hkGetByteOffsetInt(this, &m_linLimit+1); }
  108. Atoms(hkFinishLoadedObjectFlag f) : m_transforms(f), m_motor(f), m_friction(f), m_ang(f), m_lin0(f), m_lin1(f), m_linLimit(f) {}
  109. };
  110. HK_ALIGN16( struct Atoms m_atoms );
  111. public:
  112. // Internal functions
  113. // hkpConstraintData interface implementations
  114. virtual void getConstraintInfo( ConstraintInfo& infoOut ) const ;
  115. // hkpConstraintData interface implementations
  116. virtual void getRuntimeInfo( hkBool wantRuntime, hkpConstraintData::RuntimeInfo& infoOut ) const;
  117. public:
  118. hkpPrismaticConstraintData(hkFinishLoadedObjectFlag f) : hkpConstraintData(f), m_atoms(f) {}
  119. };
  120. #include <Physics/Dynamics/Constraint/Bilateral/Prismatic/hkpPrismaticConstraintData.inl>
  121. #endif // HK_DYNAMICS2_PRISMATIC_CONSTRAINT_H
  122. /*
  123. * Havok SDK - NO SOURCE PC DOWNLOAD, BUILD(#20090216)
  124. * Confidential Information of Havok.  (C) Copyright 1999-2009
  125. * Telekinesys Research Limited t/a Havok. All Rights Reserved. The Havok
  126. * Logo, and the Havok buzzsaw logo are trademarks of Havok.  Title, ownership
  127. * rights, and intellectual property rights in the Havok software remain in
  128. * Havok and/or its suppliers.
  129. * Use of this software for evaluation purposes is subject to and indicates
  130. * acceptance of the End User licence Agreement for this product. A copy of
  131. * the license is included with this software and is also available at www.havok.com/tryhavok.
  132. */