117 lines
3.5 KiB
C++
117 lines
3.5 KiB
C++
/**
|
|
* PANDA 3D SOFTWARE
|
|
* Copyright (c) Carnegie Mellon University. All rights reserved.
|
|
*
|
|
* All use of this software is subject to the terms of the revised BSD
|
|
* license. You should have received a copy of this license along
|
|
* with this source code in a file named "LICENSE."
|
|
*
|
|
* @file physxWheelShape.h
|
|
* @author enn0x
|
|
* @date 2009-11-09
|
|
*/
|
|
|
|
#ifndef PHYSXWHEELSHAPE_H
|
|
#define PHYSXWHEELSHAPE_H
|
|
|
|
#include "pandabase.h"
|
|
|
|
#include "physxShape.h"
|
|
#include "physx_includes.h"
|
|
|
|
class PhysxWheelShapeDesc;
|
|
class PhysxSpringDesc;
|
|
|
|
/**
|
|
* A special shape used for simulating a car wheel. The -Y axis should be
|
|
* directed toward the ground.
|
|
*
|
|
* A ray is cast from the shape's origin along the -Y axis. When the ray
|
|
* strikes something, and the distance is:
|
|
*
|
|
* - less than wheelRadius from the shape origin: a hard contact is created -
|
|
* between wheelRadius and (suspensionTravel + wheelRadius): a soft suspension
|
|
* contact is created - greater than (suspensionTravel + wheelRadius): no
|
|
* contact is created.
|
|
*
|
|
* Thus at the point of greatest possible suspension compression the wheel
|
|
* axle will pass through at the shape's origin. At the point greatest
|
|
* suspension extension the wheel axle will be a distance of suspensionTravel
|
|
* from the shape's origin.
|
|
*
|
|
* The suspension's targetValue is 0 for real cars, which means that the
|
|
* suspension tries to extend all the way. Otherwise one can specify values
|
|
* [0,1] for suspensions which have a spring to pull the wheel up when it is
|
|
* extended too far. 0.5 will then fall halfway along suspensionTravel.
|
|
*
|
|
* The +Z axis is the 'forward' direction of travel for the wheel. -Z is
|
|
* backwards. The wheel rolls forward when rotating around the positive
|
|
* direction around the X axis.
|
|
*
|
|
* A positive wheel steering angle corresponds to a positive rotation around
|
|
* the shape's Y axis. (Castor angles are not modeled.)
|
|
*
|
|
* The coordinate frame of the shape is rigidly fixed on the car.
|
|
*/
|
|
class EXPCL_PANDAPHYSX PhysxWheelShape : public PhysxShape {
|
|
PUBLISHED:
|
|
INLINE PhysxWheelShape();
|
|
INLINE ~PhysxWheelShape();
|
|
|
|
void save_to_desc(PhysxWheelShapeDesc &shapeDesc) const;
|
|
|
|
void set_radius(float radius);
|
|
void set_suspension_travel(float travel);
|
|
void set_inverse_wheel_mass(float invMass);
|
|
void set_motor_torque(float torque);
|
|
void set_brake_torque(float torque);
|
|
void set_steer_angle(float angle);
|
|
void set_steer_angle_rad(float angle);
|
|
void set_axle_speed(float speed);
|
|
void set_wheel_flag(PhysxWheelShapeFlag flag, bool value);
|
|
void set_suspension(const PhysxSpringDesc &spring);
|
|
|
|
float get_radius() const;
|
|
float get_suspension_travel() const;
|
|
float get_inverse_wheel_mass() const;
|
|
float get_motor_torque() const;
|
|
float get_brake_torque() const;
|
|
float get_steer_angle() const;
|
|
float get_steer_angle_rad() const;
|
|
float get_axle_speed() const;
|
|
bool get_wheel_flag(PhysxWheelShapeFlag flag) const;
|
|
|
|
public:
|
|
INLINE NxShape *ptr() const { return (NxShape *)_ptr; };
|
|
|
|
void link(NxShape *shapePtr);
|
|
void unlink();
|
|
|
|
private:
|
|
NxWheelShape *_ptr;
|
|
|
|
public:
|
|
static TypeHandle get_class_type() {
|
|
return _type_handle;
|
|
}
|
|
static void init_type() {
|
|
PhysxShape::init_type();
|
|
register_type(_type_handle, "PhysxWheelShape",
|
|
PhysxShape::get_class_type());
|
|
}
|
|
virtual TypeHandle get_type() const {
|
|
return get_class_type();
|
|
}
|
|
virtual TypeHandle force_init_type() {
|
|
init_type();
|
|
return get_class_type();
|
|
}
|
|
|
|
private:
|
|
static TypeHandle _type_handle;
|
|
};
|
|
|
|
#include "physxWheelShape.I"
|
|
|
|
#endif // PHYSXWHEELSHAPE_H
|