Panda3D
|
A body on which physics will be applied. More...
#include "physicsObject.h"
Public Types | |
typedef pvector< PT(PhysicsObject)> | Vector |
Public Member Functions | |
PhysicsObject () | |
Default Constructor. More... | |
PhysicsObject (const PhysicsObject ©) | |
copy constructor More... | |
virtual | ~PhysicsObject () |
Destructor. More... | |
virtual void | add_impact (const LPoint3 &offset_from_center_of_mass, const LVector3 &impulse) |
Adds an impulse and/or torque (i.e. More... | |
void | add_impulse (const LVector3 &impulse) |
Adds an impulse force (i.e. More... | |
virtual void | add_local_impact (const LPoint3 &offset_from_center_of_mass, const LVector3 &impulse) |
Adds an impulse and/or torque (i.e. More... | |
void | add_local_impulse (const LVector3 &impulse) |
Adds an impulse force (i.e. More... | |
void | add_local_torque (const LRotation &torque) |
Adds an torque force (i.e. More... | |
void | add_torque (const LRotation &torque) |
Adds an torque force (i.e. More... | |
virtual TypeHandle | force_init_type () |
bool | get_active () const |
Process Flag Query. More... | |
LVector3 | get_implicit_velocity () const |
Velocity Query over the last dt. More... | |
virtual LMatrix4 | get_inertial_tensor () const |
returns a transform matrix that represents the object's willingness to be forced. More... | |
LPoint3 | get_last_position () const |
Get the position of the physics object at the start of the most recent do_physics. More... | |
virtual LMatrix4 | get_lcs () const |
returns a transform matrix to this object's local coordinate system. More... | |
PN_stdfloat | get_mass () const |
Get the mass in slugs (or kilograms). More... | |
const string & | get_name () |
LOrientation | get_orientation () const |
get current orientation. More... | |
bool | get_oriented () const |
See set_oriented(). More... | |
LPoint3 | get_position () const |
Position Query. More... | |
LRotation | get_rotation () const |
get rotation per second. More... | |
PN_stdfloat | get_terminal_velocity () const |
tv query More... | |
virtual TypeHandle | get_type () const |
LVector3 | get_velocity () const |
Velocity Query per second. More... | |
virtual PhysicsObject * | make_copy () const |
dynamic copy. More... | |
const PhysicsObject & | operator= (const PhysicsObject &other) |
virtual void | output (ostream &out) const |
Write a string representation of this instance to <out>. More... | |
void | reset_orientation (const LOrientation &orientation) |
set the orientation while clearing the rotation velocity. More... | |
void | reset_position (const LPoint3 &pos) |
use this to place an object in a completely new position, that has nothing to do with its last position. More... | |
void | set_active (bool flag) |
Process Flag assignment. More... | |
void | set_last_position (const LPoint3 &pos) |
Last position assignment. More... | |
void | set_mass (PN_stdfloat) |
Set the mass in slugs (or kilograms). More... | |
void | set_name (const string &name) |
void | set_orientation (const LOrientation &orientation) |
void | set_oriented (bool flag) |
Set flag to determine whether this object should do any rotation or orientation calculations. More... | |
void | set_position (const LPoint3 &pos) |
Vector position assignment. More... | |
void | set_position (PN_stdfloat x, PN_stdfloat y, PN_stdfloat z) |
Piecewise position assignment. More... | |
void | set_rotation (const LRotation &rotation) |
set rotation as a quaternion delta per second. More... | |
void | set_terminal_velocity (PN_stdfloat tv) |
tv assignment More... | |
void | set_velocity (const LVector3 &vel) |
Vector velocity assignment. More... | |
void | set_velocity (PN_stdfloat x, PN_stdfloat y, PN_stdfloat z) |
Piecewise velocity assignment. More... | |
virtual void | write (ostream &out, unsigned int indent=0) const |
Write a string representation of this instance to <out>. More... | |
![]() | |
TypedReferenceCount (const TypedReferenceCount ©) | |
void | operator= (const TypedReferenceCount ©) |
![]() | |
TypedObject (const TypedObject ©) | |
TypedObject * | as_typed_object () |
Returns the object, upcast (if necessary) to a TypedObject pointer. More... | |
const TypedObject * | as_typed_object () const |
Returns the object, upcast (if necessary) to a TypedObject pointer. More... | |
int | get_best_parent_from_Set (const std::set< int > &) const |
int | get_type_index () const |
Returns the internal index number associated with this object's TypeHandle, a unique number for each different type. More... | |
bool | is_exact_type (TypeHandle handle) const |
Returns true if the current object is the indicated type exactly. More... | |
bool | is_of_type (TypeHandle handle) const |
Returns true if the current object is or derives from the indicated type. More... | |
void | operator= (const TypedObject ©) |
![]() | |
int | get_ref_count () const |
Returns the current reference count. More... | |
WeakReferenceList * | get_weak_list () const |
Returns the WeakReferenceList associated with this ReferenceCount object. More... | |
bool | has_weak_list () const |
Returns true if this particular ReferenceCount object has a WeakReferenceList created, false otherwise. More... | |
void | local_object () |
This function should be called, once, immediately after creating a new instance of some ReferenceCount-derived object on the stack. More... | |
void | ref () const |
Explicitly increments the reference count. More... | |
bool | test_ref_count_integrity () const |
Does some easy checks to make sure that the reference count isn't completely bogus. More... | |
bool | test_ref_count_nonzero () const |
Does some easy checks to make sure that the reference count isn't zero, or completely bogus. More... | |
virtual bool | unref () const |
Explicitly decrements the reference count. More... | |
void | weak_ref (WeakPointerToVoid *ptv) |
Adds the indicated PointerToVoid as a weak reference to this object. More... | |
void | weak_unref (WeakPointerToVoid *ptv) |
Removes the indicated PointerToVoid as a weak reference to this object. More... | |
Static Public Member Functions | |
static TypeHandle | get_class_type () |
static void | init_type () |
![]() | |
static TypeHandle | get_class_type () |
static void | init_type () |
![]() | |
static TypeHandle | get_class_type () |
static void | init_type () |
This function is declared non-inline to work around a compiler bug in g++ 2.96. More... | |
![]() | |
static TypeHandle | get_class_type () |
static void | init_type () |
Static Public Attributes | |
static ConfigVariableDouble | _default_terminal_velocity |
A body on which physics will be applied.
If you're looking to add physical motion to your class, do NOT derive from this. Derive from Physical instead.
Definition at line 29 of file physicsObject.h.
PhysicsObject::PhysicsObject | ( | ) |
Default Constructor.
Definition at line 28 of file physicsObject.cxx.
References LQuaternionf::ident_quat().
Referenced by make_copy().
PhysicsObject::PhysicsObject | ( | const PhysicsObject & | copy | ) |
|
virtual |
Destructor.
Definition at line 57 of file physicsObject.cxx.
References make_copy().
Referenced by PhysicsObject().
Adds an impulse and/or torque (i.e.
an instantanious change in velocity) based on how well the offset and impulse align with the center of mass (aka position). If you wanted to immitate this function you could work out the impulse and torque and call add_impulse and add_torque respectively. offset and force are in global (or parent) coordinates.
Definition at line 123 of file physicsObject.cxx.
References add_impulse(), add_torque(), get_lcs(), LVecBase3f::is_nan(), LVecBase3f::length(), LVecBase3f::normalize(), and LQuaternionf::set_from_axis_angle().
Referenced by add_local_impact().
|
inline |
Adds an impulse force (i.e.
an instantanious change in velocity). This is a quicker way to get the velocity, add a vector to it and set that value to be the new velocity.
Definition at line 160 of file physicsObject.I.
References LVecBase3f::is_nan(), and set_active().
Referenced by add_impact(), and add_torque().
|
virtual |
Adds an impulse and/or torque (i.e.
an instantanious change in velocity) based on how well the offset and impulse align with the center of mass (aka position). If you wanted to immitate this function you could work out the impulse and torque and call add_impulse and add_torque respectively. offset and force are in local coordinates.
Definition at line 102 of file physicsObject.cxx.
References add_impact(), LVecBase3f::is_nan(), and LQuaternionf::xform().
Referenced by make_copy().
|
inline |
Adds an impulse force (i.e.
an instantanious change in velocity). This is a quicker way to get the velocity, add a vector to it and set that value to be the new velocity.
Definition at line 132 of file physicsObject.I.
References add_torque(), LVecBase3f::is_nan(), and LQuaternionf::xform().
Referenced by add_local_torque().
|
inline |
Adds an torque force (i.e.
an instantanious change in velocity). This is a quicker way to get the angular velocity, add a vector to it and set that value to be the new angular velocity.
Definition at line 118 of file physicsObject.I.
References add_local_impulse(), LVecBase4f::is_nan(), and LQuaternionf::xform().
Referenced by set_velocity().
|
inline |
Adds an torque force (i.e.
an instantanious change in velocity). This is a quicker way to get the angular velocity, add a vector to it and set that value to be the new angular velocity.
Definition at line 146 of file physicsObject.I.
References add_impulse(), and LVecBase4f::is_nan().
Referenced by add_impact(), and add_local_impulse().
|
inline |
Process Flag Query.
Definition at line 242 of file physicsObject.I.
References get_terminal_velocity().
Referenced by get_implicit_velocity(), AngularEulerIntegrator::~AngularEulerIntegrator(), and LinearEulerIntegrator::~LinearEulerIntegrator().
|
inline |
Velocity Query over the last dt.
Definition at line 232 of file physicsObject.I.
References get_active().
Referenced by get_velocity(), and write().
|
virtual |
returns a transform matrix that represents the object's willingness to be forced.
Definition at line 169 of file physicsObject.cxx.
References LMatrix4f::ident_mat(), and output().
Referenced by get_lcs(), and AngularEulerIntegrator::~AngularEulerIntegrator().
|
inline |
Get the position of the physics object at the start of the most recent do_physics.
Definition at line 212 of file physicsObject.I.
References get_velocity().
Referenced by get_position(), LineParticleRenderer::make_copy(), and LinearEulerIntegrator::~LinearEulerIntegrator().
|
virtual |
returns a transform matrix to this object's local coordinate system.
Definition at line 153 of file physicsObject.cxx.
References get_inertial_tensor(), LMatrix4f::is_nan(), and LMatrix4f::translate_mat().
Referenced by add_impact(), ActorNode::update_transform(), and ParticleSystem::~ParticleSystem().
|
inline |
Get the mass in slugs (or kilograms).
Definition at line 191 of file physicsObject.I.
References get_position().
Referenced by set_terminal_velocity(), and LinearEulerIntegrator::~LinearEulerIntegrator().
|
inline |
get current orientation.
Definition at line 284 of file physicsObject.I.
References get_rotation().
Referenced by GeomParticleRenderer::make_copy(), set_rotation(), and AngularEulerIntegrator::~AngularEulerIntegrator().
|
inline |
See set_oriented().
Definition at line 315 of file physicsObject.I.
Referenced by set_oriented(), and ActorNode::update_transform().
|
inline |
Position Query.
Definition at line 201 of file physicsObject.I.
References get_last_position().
Referenced by SpriteParticleRenderer::add_from_node(), get_mass(), LinearIntegrator::integrate(), LineParticleRenderer::make_copy(), PointParticleRenderer::make_copy(), SparkleParticleRenderer::make_copy(), GeomParticleRenderer::make_copy(), ParticleSystem::update(), LinearCylinderVortexForce::~LinearCylinderVortexForce(), LinearEulerIntegrator::~LinearEulerIntegrator(), LinearNoiseForce::~LinearNoiseForce(), LinearSinkForce::~LinearSinkForce(), and LinearSourceForce::~LinearSourceForce().
|
inline |
get rotation per second.
Definition at line 294 of file physicsObject.I.
References set_oriented().
Referenced by get_orientation(), and AngularEulerIntegrator::~AngularEulerIntegrator().
|
inline |
tv query
Definition at line 252 of file physicsObject.I.
References LVecBase4f::is_nan(), and set_rotation().
Referenced by get_active(), and LinearEulerIntegrator::~LinearEulerIntegrator().
|
inline |
Velocity Query per second.
Definition at line 222 of file physicsObject.I.
References get_implicit_velocity().
Referenced by get_last_position(), LinearCylinderVortexForce::~LinearCylinderVortexForce(), LinearEulerIntegrator::~LinearEulerIntegrator(), and LinearFrictionForce::~LinearFrictionForce().
|
virtual |
dynamic copy.
Reimplemented in BaseParticle, PointParticle, ZSpinParticle, and OrientedParticle.
Definition at line 86 of file physicsObject.cxx.
References add_local_impact(), and PhysicsObject().
Referenced by ~PhysicsObject().
|
virtual |
Write a string representation of this instance to <out>.
Reimplemented in ZSpinParticle, BaseParticle, OrientedParticle, and PointParticle.
Definition at line 180 of file physicsObject.cxx.
References write().
Referenced by get_inertial_tensor().
|
inline |
set the orientation while clearing the rotation velocity.
Definition at line 71 of file physicsObject.I.
References LQuaternionf::ident_quat(), LVecBase4f::is_nan(), and set_last_position().
Referenced by reset_position().
|
inline |
use this to place an object in a completely new position, that has nothing to do with its last position.
Definition at line 57 of file physicsObject.I.
References LVecBase3f::is_nan(), and reset_orientation().
Referenced by set_position(), and ParticleSystem::~ParticleSystem().
|
inline |
Process Flag assignment.
Definition at line 171 of file physicsObject.I.
References set_terminal_velocity().
Referenced by ActorNode::ActorNode(), add_impulse(), BaseParticleFactory::populate_particle(), and ParticleSystem::~ParticleSystem().
|
inline |
Last position assignment.
Definition at line 83 of file physicsObject.I.
References set_velocity().
Referenced by LinearIntegrator::integrate(), and reset_orientation().
|
inline |
Set the mass in slugs (or kilograms).
Definition at line 21 of file physicsObject.I.
References set_position().
Referenced by BaseParticleFactory::populate_particle().
|
inline |
Set flag to determine whether this object should do any rotation or orientation calculations.
Optimization.
Definition at line 305 of file physicsObject.I.
References get_oriented().
Referenced by get_rotation(), OrientedParticle::OrientedParticle(), PointParticle::PointParticle(), and PointParticleFactory::~PointParticleFactory().
|
inline |
Vector position assignment.
This is also used as the center of mass.
Definition at line 33 of file physicsObject.I.
References LVecBase3f::is_nan().
Referenced by set_mass(), ActorNode::update_transform(), and LinearEulerIntegrator::~LinearEulerIntegrator().
|
inline |
Piecewise position assignment.
Definition at line 44 of file physicsObject.I.
References reset_position().
|
inline |
set rotation as a quaternion delta per second.
Definition at line 273 of file physicsObject.I.
References get_orientation(), and LVecBase4f::is_nan().
Referenced by get_terminal_velocity(), and AngularEulerIntegrator::~AngularEulerIntegrator().
|
inline |
tv assignment
Definition at line 181 of file physicsObject.I.
References get_mass().
Referenced by BaseParticleFactory::populate_particle(), and set_active().
|
inline |
Vector velocity assignment.
Definition at line 93 of file physicsObject.I.
References LVecBase3f::is_nan().
Referenced by set_last_position(), LinearEulerIntegrator::~LinearEulerIntegrator(), and ParticleSystem::~ParticleSystem().
|
inline |
Piecewise velocity assignment.
Definition at line 104 of file physicsObject.I.
References add_local_torque().
|
virtual |
Write a string representation of this instance to <out>.
Definition at line 193 of file physicsObject.cxx.
References LQuaternionf::get_hpr(), and get_implicit_velocity().
Referenced by output(), ActorNode::write(), BaseParticle::write(), and Physical::write().