Sirikata
|
Base class for simulated objects in bullet. More...
#include <BulletObject.hpp>
Public Member Functions | |
BulletObject (BulletPhysicsService *parent) | |
virtual | ~BulletObject () |
virtual bool | fixed ()=0 |
virtual bulletObjTreatment | treatment ()=0 |
virtual bulletObjBBox | bbox ()=0 |
virtual float32 | mass ()=0 |
virtual void | load (Mesh::MeshdataPtr mesh)=0 |
After the mesh has been downloaded and parsed (or immediately if no mesh is required), this loads the object into the simulation. | |
virtual void | unload ()=0 |
Unload the object from the simulation. | |
virtual void | preTick (const Time &t) |
Make modifications before a full tick. | |
virtual void | postTick (const Time &t) |
Make modifications before a full tick. | |
virtual void | internalTick (const Time &t) |
Make modifications during an internal tick. | |
virtual void | deactivationTick (const Time &t) |
Check this object for deactivation. | |
virtual bool | applyRequestedLocation (const TimedMotionVector3f &loc, uint64 epoch)=0 |
Try to apply the requested position to this object, updating the physics simulation if necessary. | |
virtual bool | applyRequestedOrientation (const TimedMotionQuaternion &orient, uint64 epoch)=0 |
Try to apply the requested orientation to this object, updating the physics simulation if necessary. | |
virtual void | applyForcedLocation (const TimedMotionVector3f &loc, uint64 epoch)=0 |
Apply the given position to this object. | |
virtual void | applyForcedOrientation (const TimedMotionQuaternion &orient, uint64 epoch)=0 |
Apply the given orientation to this object. | |
Static Public Member Functions | |
static void | getCollisionMask (bulletObjTreatment treatment, bulletObjCollisionMaskGroup *mygroup, bulletObjCollisionMaskGroup *collide_with) |
Protected Member Functions | |
btCollisionShape * | computeCollisionShape (const UUID &id, bulletObjBBox shape_type, bulletObjTreatment treatment, Mesh::MeshdataPtr retrievedMesh) |
Protected Attributes | |
BulletPhysicsService * | mParent |
Base class for simulated objects in bullet.
This provides a pretty generic interface since different types of objects are handled very differently, e.g. regular rigid bodies vs. characters.
Sirikata::BulletObject::BulletObject | ( | BulletPhysicsService * | parent | ) | [inline] |
virtual Sirikata::BulletObject::~BulletObject | ( | ) | [inline, virtual] |
virtual void Sirikata::BulletObject::applyForcedLocation | ( | const TimedMotionVector3f & | loc, |
uint64 | epoch | ||
) | [pure virtual] |
Apply the given position to this object.
This takes whatever steps are necessary to apply the change, even completely reloading the object in Bullet. This should only be used when absolutely necessary, e.g. for updates about remote, physically simulated objects.
Implemented in Sirikata::BulletCharacterObject, and Sirikata::BulletRigidBodyObject.
virtual void Sirikata::BulletObject::applyForcedOrientation | ( | const TimedMotionQuaternion & | orient, |
uint64 | epoch | ||
) | [pure virtual] |
Apply the given orientation to this object.
This takes whatever steps are necessary to apply the change, even completely reloading the object in Bullet. This should only be used when absolutely necessary, e.g. for updates about remote, physically simulated objects.
Implemented in Sirikata::BulletCharacterObject, and Sirikata::BulletRigidBodyObject.
virtual bool Sirikata::BulletObject::applyRequestedLocation | ( | const TimedMotionVector3f & | loc, |
uint64 | epoch | ||
) | [pure virtual] |
Try to apply the requested position to this object, updating the physics simulation if necessary.
Some types of objects may always fail to apply updates. Returns true if the update was applied and an update will need to be sent.
Implemented in Sirikata::BulletCharacterObject, and Sirikata::BulletRigidBodyObject.
virtual bool Sirikata::BulletObject::applyRequestedOrientation | ( | const TimedMotionQuaternion & | orient, |
uint64 | epoch | ||
) | [pure virtual] |
Try to apply the requested orientation to this object, updating the physics simulation if necessary.
Some types of objects may always fail to apply updates. Returns true if the update was applied and an update will need to be sent.
Implemented in Sirikata::BulletCharacterObject, and Sirikata::BulletRigidBodyObject.
virtual bulletObjBBox Sirikata::BulletObject::bbox | ( | ) | [pure virtual] |
Implemented in Sirikata::BulletCharacterObject, and Sirikata::BulletRigidBodyObject.
Referenced by computeCollisionShape(), and Sirikata::BulletPhysicsService::updatePhysicsWorld().
btCollisionShape * Sirikata::BulletObject::computeCollisionShape | ( | const UUID & | id, |
bulletObjBBox | shape_type, | ||
bulletObjTreatment | treatment, | ||
Mesh::MeshdataPtr | retrievedMesh | ||
) | [protected] |
References bbox(), Sirikata::PresenceProperties::bounds(), Sirikata::BULLET_OBJECT_BOUNDS_ENTIRE_OBJECT, Sirikata::BULLET_OBJECT_BOUNDS_PER_TRIANGLE, Sirikata::BULLET_OBJECT_BOUNDS_SPHERE, Sirikata::BULLET_OBJECT_TREATMENT_CHARACTER, Sirikata::BULLET_OBJECT_TREATMENT_DYNAMIC, Sirikata::BULLET_OBJECT_TREATMENT_IGNORE, Sirikata::BULLET_OBJECT_TREATMENT_LINEAR_DYNAMIC, Sirikata::BULLET_OBJECT_TREATMENT_STATIC, Sirikata::BULLET_OBJECT_TREATMENT_VERTICAL_DYNAMIC, BULLETLOG, Sirikata::Mesh::ComputeBounds(), Sirikata::Logging::detailed, Sirikata::AggregateBoundingInfo::fullRadius(), Sirikata::Mesh::GeometryInstance::geometryIndex, Sirikata::BulletPhysicsService::info(), Sirikata::Logging::insane, mParent, Sirikata::Mesh::Meshdata::GeometryInstanceIterator::next(), Sirikata::Mesh::SubMeshGeometry::positions, Sirikata::Mesh::SubMeshGeometry::primitives, Sirikata::LocationInfo::props, and Sirikata::Matrix4x4< float32 >::scale().
Referenced by Sirikata::BulletRigidBodyObject::load(), and Sirikata::BulletCharacterObject::load().
virtual void Sirikata::BulletObject::deactivationTick | ( | const Time & | t | ) | [inline, virtual] |
Check this object for deactivation.
Implementations should call BulletPhysicsService::updateObjectFromDeactivation if the object has been deactivated.
Reimplemented in Sirikata::BulletCharacterObject, and Sirikata::BulletRigidBodyObject.
Referenced by Sirikata::BulletPhysicsService::service().
virtual bool Sirikata::BulletObject::fixed | ( | ) | [pure virtual] |
Implemented in Sirikata::BulletCharacterObject, and Sirikata::BulletRigidBodyObject.
void Sirikata::BulletObject::getCollisionMask | ( | bulletObjTreatment | treatment, |
bulletObjCollisionMaskGroup * | mygroup, | ||
bulletObjCollisionMaskGroup * | collide_with | ||
) | [static] |
References Sirikata::BULLET_OBJECT_COLLISION_GROUP_CONSTRAINED, Sirikata::BULLET_OBJECT_COLLISION_GROUP_DYNAMIC, Sirikata::BULLET_OBJECT_COLLISION_GROUP_STATIC, Sirikata::BULLET_OBJECT_TREATMENT_CHARACTER, Sirikata::BULLET_OBJECT_TREATMENT_DYNAMIC, Sirikata::BULLET_OBJECT_TREATMENT_IGNORE, Sirikata::BULLET_OBJECT_TREATMENT_LINEAR_DYNAMIC, Sirikata::BULLET_OBJECT_TREATMENT_STATIC, and Sirikata::BULLET_OBJECT_TREATMENT_VERTICAL_DYNAMIC.
Referenced by Sirikata::BulletRigidBodyObject::addRigidBody(), and Sirikata::BulletCharacterObject::load().
virtual void Sirikata::BulletObject::internalTick | ( | const Time & | t | ) | [inline, virtual] |
Make modifications during an internal tick.
Useful for capping speed and rotational speed.
Reimplemented in Sirikata::BulletRigidBodyObject.
Referenced by Sirikata::BulletPhysicsService::internalTickCallback().
virtual void Sirikata::BulletObject::load | ( | Mesh::MeshdataPtr | mesh | ) | [pure virtual] |
After the mesh has been downloaded and parsed (or immediately if no mesh is required), this loads the object into the simulation.
This should setup any Bullet state and start the physical simulation on the object.
Implemented in Sirikata::BulletCharacterObject, and Sirikata::BulletRigidBodyObject.
Referenced by Sirikata::BulletPhysicsService::updatePhysicsWorldWithMesh().
virtual float32 Sirikata::BulletObject::mass | ( | ) | [pure virtual] |
Implemented in Sirikata::BulletCharacterObject, and Sirikata::BulletRigidBodyObject.
virtual void Sirikata::BulletObject::postTick | ( | const Time & | t | ) | [inline, virtual] |
Make modifications before a full tick.
Reimplemented in Sirikata::BulletCharacterObject.
Referenced by Sirikata::BulletPhysicsService::service().
virtual void Sirikata::BulletObject::preTick | ( | const Time & | t | ) | [inline, virtual] |
Make modifications before a full tick.
Reimplemented in Sirikata::BulletCharacterObject.
Referenced by Sirikata::BulletPhysicsService::service().
virtual bulletObjTreatment Sirikata::BulletObject::treatment | ( | ) | [pure virtual] |
Implemented in Sirikata::BulletCharacterObject, and Sirikata::BulletRigidBodyObject.
virtual void Sirikata::BulletObject::unload | ( | ) | [pure virtual] |
Unload the object from the simulation.
Implemented in Sirikata::BulletCharacterObject, and Sirikata::BulletRigidBodyObject.
Referenced by Sirikata::BulletPhysicsService::cleanupLocationInfo(), and Sirikata::BulletPhysicsService::updatePhysicsWorld().
BulletPhysicsService* Sirikata::BulletObject::mParent [protected] |
Referenced by Sirikata::BulletRigidBodyObject::addRigidBody(), Sirikata::BulletRigidBodyObject::applyForcedLocation(), Sirikata::BulletCharacterObject::applyForcedLocation(), Sirikata::BulletRigidBodyObject::applyForcedOrientation(), Sirikata::BulletCharacterObject::applyForcedOrientation(), computeCollisionShape(), Sirikata::BulletRigidBodyObject::deactivationTick(), Sirikata::BulletCharacterObject::deactivationTick(), Sirikata::BulletCharacterObject::load(), Sirikata::BulletCharacterObject::postTick(), Sirikata::BulletCharacterObject::preTick(), Sirikata::BulletRigidBodyObject::removeRigidBody(), Sirikata::BulletCharacterObject::unload(), Sirikata::BulletRigidBodyObject::updateBulletFromObject(), and Sirikata::BulletRigidBodyObject::updateObjectFromBullet().