Providing a single method for attaching/removing objects from a world.

This commit is contained in:
enn0x 2012-09-28 20:47:15 +00:00
parent a737ebcc90
commit 62ffe69dbc
3 changed files with 112 additions and 33 deletions

View File

@ -29,11 +29,7 @@ class BulletWheel;
////////////////////////////////////////////////////////////////////
// Class : BulletVehicleTuning
// Description : Simulates a raycast vehicle which casts a ray per
// wheel at the ground as a cheap replacement for
// complex suspension simulation. The suspension can
// be tuned in various ways. It is possible to add a
// (probably) arbitrary number of wheels.
// Description :
////////////////////////////////////////////////////////////////////
class BulletVehicleTuning {
@ -60,7 +56,11 @@ private:
////////////////////////////////////////////////////////////////////
// Class : BulletVehicle
// Description :
// Description : Simulates a raycast vehicle which casts a ray per
// wheel at the ground as a cheap replacement for
// complex suspension simulation. The suspension can
// be tuned in various ways. It is possible to add a
// (probably) arbitrary number of wheels.
////////////////////////////////////////////////////////////////////
class EXPCL_PANDABULLET BulletVehicle : public TypedReferenceCount {

View File

@ -310,11 +310,74 @@ clear_debug_node() {
}
////////////////////////////////////////////////////////////////////
// Function: BulletWorld::attach_rigid_body
// Function: BulletWorld::attach
// Access: Published
// Description:
////////////////////////////////////////////////////////////////////
void BulletWorld::
attach(TypedObject *object) {
if (object->is_of_type(BulletGhostNode::get_class_type())) {
attach_ghost(DCAST(BulletGhostNode, object));
}
else if (object->is_of_type(BulletRigidBodyNode::get_class_type())) {
attach_rigid_body(DCAST(BulletRigidBodyNode, object));
}
else if (object->is_of_type(BulletSoftBodyNode::get_class_type())) {
attach_soft_body(DCAST(BulletSoftBodyNode, object));
}
else if (object->is_of_type(BulletBaseCharacterControllerNode::get_class_type())) {
attach_character(DCAST(BulletBaseCharacterControllerNode, object));
}
else if (object->is_of_type(BulletVehicle::get_class_type())) {
attach_vehicle(DCAST(BulletVehicle, object));
}
else if (object->is_of_type(BulletConstraint::get_class_type())) {
attach_constraint(DCAST(BulletConstraint, object));
}
else {
bullet_cat->error() << "not a bullet world object!" << endl;
}
}
////////////////////////////////////////////////////////////////////
// Function: BulletWorld::remove
// Access: Published
// Description:
////////////////////////////////////////////////////////////////////
void BulletWorld::
remove(TypedObject *object) {
if (object->is_of_type(BulletGhostNode::get_class_type())) {
remove_ghost(DCAST(BulletGhostNode, object));
}
else if (object->is_of_type(BulletRigidBodyNode::get_class_type())) {
remove_rigid_body(DCAST(BulletRigidBodyNode, object));
}
else if (object->is_of_type(BulletSoftBodyNode::get_class_type())) {
remove_soft_body(DCAST(BulletSoftBodyNode, object));
}
else if (object->is_of_type(BulletBaseCharacterControllerNode::get_class_type())) {
remove_character(DCAST(BulletBaseCharacterControllerNode, object));
}
else if (object->is_of_type(BulletVehicle::get_class_type())) {
remove_vehicle(DCAST(BulletVehicle, object));
}
else if (object->is_of_type(BulletConstraint::get_class_type())) {
remove_constraint(DCAST(BulletConstraint, object));
}
else {
bullet_cat->error() << "not a bullet world object!" << endl;
}
}
////////////////////////////////////////////////////////////////////
// Function: BulletWorld::attach_rigid_body
// Access: Published
// Description: Deprecated!
// Please use BulletWorld::attach
////////////////////////////////////////////////////////////////////
void BulletWorld::
attach_rigid_body(BulletRigidBodyNode *node) {
nassertv(node);
@ -337,7 +400,8 @@ attach_rigid_body(BulletRigidBodyNode *node) {
////////////////////////////////////////////////////////////////////
// Function: BulletWorld::remove_rigid_body
// Access: Published
// Description:
// Description: Deprecated.!
// Please use BulletWorld::remove
////////////////////////////////////////////////////////////////////
void BulletWorld::
remove_rigid_body(BulletRigidBodyNode *node) {
@ -362,7 +426,8 @@ remove_rigid_body(BulletRigidBodyNode *node) {
////////////////////////////////////////////////////////////////////
// Function: BulletWorld::attach_soft_body
// Access: Published
// Description:
// Description: Deprecated!
// Please use BulletWorld::attach
////////////////////////////////////////////////////////////////////
void BulletWorld::
attach_soft_body(BulletSoftBodyNode *node) {
@ -391,7 +456,8 @@ attach_soft_body(BulletSoftBodyNode *node) {
////////////////////////////////////////////////////////////////////
// Function: BulletWorld::remove_soft_body
// Access: Published
// Description:
// Description: Deprecated.!
// Please use BulletWorld::remove
////////////////////////////////////////////////////////////////////
void BulletWorld::
remove_soft_body(BulletSoftBodyNode *node) {
@ -416,7 +482,8 @@ remove_soft_body(BulletSoftBodyNode *node) {
////////////////////////////////////////////////////////////////////
// Function: BulletWorld::attach_ghost
// Access: Published
// Description:
// Description: Deprecated!
// Please use BulletWorld::attach
////////////////////////////////////////////////////////////////////
void BulletWorld::
attach_ghost(BulletGhostNode *node) {
@ -459,7 +526,8 @@ enum CollisionFilterGroups {
////////////////////////////////////////////////////////////////////
// Function: BulletWorld::remove_ghost
// Access: Published
// Description:
// Description: Deprecated.!
// Please use BulletWorld::remove
////////////////////////////////////////////////////////////////////
void BulletWorld::
remove_ghost(BulletGhostNode *node) {
@ -484,7 +552,8 @@ remove_ghost(BulletGhostNode *node) {
////////////////////////////////////////////////////////////////////
// Function: BulletWorld::attach_character
// Access: Published
// Description:
// Description: Deprecated!
// Please use BulletWorld::attach
////////////////////////////////////////////////////////////////////
void BulletWorld::
attach_character(BulletBaseCharacterControllerNode *node) {
@ -512,7 +581,8 @@ attach_character(BulletBaseCharacterControllerNode *node) {
////////////////////////////////////////////////////////////////////
// Function: BulletWorld::remove_character
// Access: Published
// Description:
// Description: Deprecated.!
// Please use BulletWorld::remove
////////////////////////////////////////////////////////////////////
void BulletWorld::
remove_character(BulletBaseCharacterControllerNode *node) {
@ -536,7 +606,8 @@ remove_character(BulletBaseCharacterControllerNode *node) {
////////////////////////////////////////////////////////////////////
// Function: BulletWorld::attach_vehicle
// Access: Published
// Description:
// Description: Deprecated!
// Please use BulletWorld::attach
////////////////////////////////////////////////////////////////////
void BulletWorld::
attach_vehicle(BulletVehicle *vehicle) {
@ -559,7 +630,8 @@ attach_vehicle(BulletVehicle *vehicle) {
////////////////////////////////////////////////////////////////////
// Function: BulletWorld::remove_vehicle
// Access: Published
// Description:
// Description: Deprecated.!
// Please use BulletWorld::remove
////////////////////////////////////////////////////////////////////
void BulletWorld::
remove_vehicle(BulletVehicle *vehicle) {
@ -584,7 +656,8 @@ remove_vehicle(BulletVehicle *vehicle) {
////////////////////////////////////////////////////////////////////
// Function: BulletWorld::attach_constraint
// Access: Published
// Description:
// Description: Deprecated!
// Please use BulletWorld::attach
////////////////////////////////////////////////////////////////////
void BulletWorld::
attach_constraint(BulletConstraint *constraint) {
@ -607,7 +680,8 @@ attach_constraint(BulletConstraint *constraint) {
////////////////////////////////////////////////////////////////////
// Function: BulletWorld::remove_constraint
// Access: Published
// Description:
// Description: Deprecated.!
// Please use BulletWorld::remove
////////////////////////////////////////////////////////////////////
void BulletWorld::
remove_constraint(BulletConstraint *constraint) {

View File

@ -68,34 +68,26 @@ PUBLISHED:
BulletSoftBodyWorldInfo get_world_info();
// Ghost object
void attach_ghost(BulletGhostNode *node);
void remove_ghost(BulletGhostNode *node);
// Attach/Remove
void attach(TypedObject *object);
void remove(TypedObject *object);
// Ghost object
INLINE int get_num_ghosts() const;
INLINE BulletGhostNode *get_ghost(int idx) const;
MAKE_SEQ(get_ghosts, get_num_ghosts, get_ghost);
// Rigid body
void attach_rigid_body(BulletRigidBodyNode *node);
void remove_rigid_body(BulletRigidBodyNode *node);
INLINE int get_num_rigid_bodies() const;
INLINE BulletRigidBodyNode *get_rigid_body(int idx) const;
MAKE_SEQ(get_rigid_bodies, get_num_rigid_bodies, get_rigid_body);
// Soft body
void attach_soft_body(BulletSoftBodyNode *node);
void remove_soft_body(BulletSoftBodyNode *node);
INLINE int get_num_soft_bodies() const;
INLINE BulletSoftBodyNode *get_soft_body(int idx) const;
MAKE_SEQ(get_soft_bodies, get_num_soft_bodies, get_soft_body);
// Character controller
void attach_character(BulletBaseCharacterControllerNode *node);
void remove_character(BulletBaseCharacterControllerNode *node);
INLINE int get_num_characters() const;
INLINE BulletBaseCharacterControllerNode *get_character(int idx) const;
MAKE_SEQ(get_characters, get_num_characters, get_character);
@ -109,9 +101,6 @@ PUBLISHED:
MAKE_SEQ(get_vehicles, get_num_vehicles, get_vehicle);
// Constraint
void attach_constraint(BulletConstraint *constraint);
void remove_constraint(BulletConstraint *constraint);
INLINE int get_num_constraints() const;
INLINE BulletConstraint *get_constraint(int idx) const;
MAKE_SEQ(get_constraints, get_num_constraints, get_constraint);
@ -164,6 +153,22 @@ PUBLISHED:
void set_python_filter_callback(PyObject *callback);
#endif
PUBLISHED: // Deprecated methods, will become private soon
void attach_ghost(BulletGhostNode *node);
void remove_ghost(BulletGhostNode *node);
void attach_rigid_body(BulletRigidBodyNode *node);
void remove_rigid_body(BulletRigidBodyNode *node);
void attach_soft_body(BulletSoftBodyNode *node);
void remove_soft_body(BulletSoftBodyNode *node);
void attach_character(BulletBaseCharacterControllerNode *node);
void remove_character(BulletBaseCharacterControllerNode *node);
void attach_constraint(BulletConstraint *constraint);
void remove_constraint(BulletConstraint *constraint);
public:
static btCollisionObject *get_collision_object(PandaNode *node);