117 lines
3.4 KiB
C++
117 lines
3.4 KiB
C++
/*
|
|
* Copyright (c) 2005 Erwin Coumans https://bulletphysics.org
|
|
*
|
|
* Permission to use, copy, modify, distribute and sell this software
|
|
* and its documentation for any purpose is hereby granted without fee,
|
|
* provided that the above copyright notice appear in all copies.
|
|
* Erwin Coumans makes no representations about the suitability
|
|
* of this software for any purpose.
|
|
* It is provided "as is" without express or implied warranty.
|
|
*/
|
|
#ifndef BT_WHEEL_INFO_H
|
|
#define BT_WHEEL_INFO_H
|
|
|
|
#include "LinearMath/btVector3.h"
|
|
#include "LinearMath/btTransform.h"
|
|
|
|
class btRigidBody;
|
|
|
|
struct btWheelInfoConstructionInfo
|
|
{
|
|
btVector3 m_chassisConnectionCS;
|
|
btVector3 m_wheelDirectionCS;
|
|
btVector3 m_wheelAxleCS;
|
|
btScalar m_suspensionRestLength;
|
|
btScalar m_maxSuspensionTravelCm;
|
|
btScalar m_wheelRadius;
|
|
|
|
btScalar m_suspensionStiffness;
|
|
btScalar m_wheelsDampingCompression;
|
|
btScalar m_wheelsDampingRelaxation;
|
|
btScalar m_frictionSlip;
|
|
btScalar m_maxSuspensionForce;
|
|
bool m_bIsFrontWheel;
|
|
};
|
|
|
|
/// btWheelInfo contains information per wheel about friction and suspension.
|
|
struct btWheelInfo
|
|
{
|
|
struct RaycastInfo
|
|
{
|
|
//set by raycaster
|
|
btVector3 m_contactNormalWS; //contactnormal
|
|
btVector3 m_contactPointWS; //raycast hitpoint
|
|
btScalar m_suspensionLength;
|
|
btVector3 m_hardPointWS; //raycast starting point
|
|
btVector3 m_wheelDirectionWS; //direction in worldspace
|
|
btVector3 m_wheelAxleWS; // axle in worldspace
|
|
bool m_isInContact;
|
|
void* m_groundObject; //could be general void* ptr
|
|
};
|
|
|
|
RaycastInfo m_raycastInfo;
|
|
|
|
btTransform m_worldTransform;
|
|
|
|
btVector3 m_chassisConnectionPointCS; //const
|
|
btVector3 m_wheelDirectionCS; //const
|
|
btVector3 m_wheelAxleCS; // const or modified by steering
|
|
btScalar m_suspensionRestLength1; //const
|
|
btScalar m_maxSuspensionTravelCm;
|
|
btScalar getSuspensionRestLength() const;
|
|
btScalar m_wheelsRadius; //const
|
|
btScalar m_suspensionStiffness; //const
|
|
btScalar m_wheelsDampingCompression; //const
|
|
btScalar m_wheelsDampingRelaxation; //const
|
|
btScalar m_frictionSlip;
|
|
btScalar m_steering;
|
|
btScalar m_rotation;
|
|
btScalar m_deltaRotation;
|
|
btScalar m_rollInfluence;
|
|
btScalar m_maxSuspensionForce;
|
|
|
|
btScalar m_engineForce;
|
|
|
|
btScalar m_brake;
|
|
|
|
bool m_bIsFrontWheel;
|
|
|
|
void* m_clientInfo; //can be used to store pointer to sync transforms...
|
|
|
|
btWheelInfo() {}
|
|
|
|
btWheelInfo(btWheelInfoConstructionInfo& ci)
|
|
|
|
{
|
|
m_suspensionRestLength1 = ci.m_suspensionRestLength;
|
|
m_maxSuspensionTravelCm = ci.m_maxSuspensionTravelCm;
|
|
|
|
m_wheelsRadius = ci.m_wheelRadius;
|
|
m_suspensionStiffness = ci.m_suspensionStiffness;
|
|
m_wheelsDampingCompression = ci.m_wheelsDampingCompression;
|
|
m_wheelsDampingRelaxation = ci.m_wheelsDampingRelaxation;
|
|
m_chassisConnectionPointCS = ci.m_chassisConnectionCS;
|
|
m_wheelDirectionCS = ci.m_wheelDirectionCS;
|
|
m_wheelAxleCS = ci.m_wheelAxleCS;
|
|
m_frictionSlip = ci.m_frictionSlip;
|
|
m_steering = btScalar(0.);
|
|
m_engineForce = btScalar(0.);
|
|
m_rotation = btScalar(0.);
|
|
m_deltaRotation = btScalar(0.);
|
|
m_brake = btScalar(0.);
|
|
m_rollInfluence = btScalar(0.1);
|
|
m_bIsFrontWheel = ci.m_bIsFrontWheel;
|
|
m_maxSuspensionForce = ci.m_maxSuspensionForce;
|
|
}
|
|
|
|
void updateWheel(const btRigidBody& chassis, RaycastInfo& raycastInfo);
|
|
|
|
btScalar m_clippedInvContactDotSuspension;
|
|
btScalar m_suspensionRelativeVelocity;
|
|
//calculated by suspension
|
|
btScalar m_wheelsSuspensionForce;
|
|
btScalar m_skidInfo;
|
|
};
|
|
|
|
#endif //BT_WHEEL_INFO_H
|