mirror of
https://github.com/panda3d/panda3d.git
synced 2025-10-02 01:44:06 -04:00
Bullet: added tick callback, and filter callback now uses CallbackObject.
This commit is contained in:
parent
8d66921d79
commit
70cea909c5
@ -28,6 +28,7 @@
|
|||||||
bulletConvexPointCloudShape.h bulletConvexPointCloudShape.I \
|
bulletConvexPointCloudShape.h bulletConvexPointCloudShape.I \
|
||||||
bulletCylinderShape.h bulletCylinderShape.I \
|
bulletCylinderShape.h bulletCylinderShape.I \
|
||||||
bulletDebugNode.h bulletDebugNode.I \
|
bulletDebugNode.h bulletDebugNode.I \
|
||||||
|
bulletFilterCallbackData.h bulletFilterCallbackData.I \
|
||||||
bulletGenericConstraint.h bulletGenericConstraint.I \
|
bulletGenericConstraint.h bulletGenericConstraint.I \
|
||||||
bulletGhostNode.h bulletGhostNode.I \
|
bulletGhostNode.h bulletGhostNode.I \
|
||||||
bulletHeightfieldShape.h bulletHeightfieldShape.I \
|
bulletHeightfieldShape.h bulletHeightfieldShape.I \
|
||||||
@ -47,6 +48,7 @@
|
|||||||
bulletSoftBodyWorldInfo.h bulletSoftBodyWorldInfo.I \
|
bulletSoftBodyWorldInfo.h bulletSoftBodyWorldInfo.I \
|
||||||
bulletSphereShape.h bulletSphereShape.I \
|
bulletSphereShape.h bulletSphereShape.I \
|
||||||
bulletSphericalConstraint.h bulletSphericalConstraint.I \
|
bulletSphericalConstraint.h bulletSphericalConstraint.I \
|
||||||
|
bulletTickCallbackData.h bulletTickCallbackData.I \
|
||||||
bulletTriangleMesh.h bulletTriangleMesh.I \
|
bulletTriangleMesh.h bulletTriangleMesh.I \
|
||||||
bulletTriangleMeshShape.h bulletTriangleMeshShape.I \
|
bulletTriangleMeshShape.h bulletTriangleMeshShape.I \
|
||||||
bulletVehicle.h bulletVehicle.I \
|
bulletVehicle.h bulletVehicle.I \
|
||||||
@ -74,6 +76,7 @@
|
|||||||
bulletConvexPointCloudShape.cxx \
|
bulletConvexPointCloudShape.cxx \
|
||||||
bulletCylinderShape.cxx \
|
bulletCylinderShape.cxx \
|
||||||
bulletDebugNode.cxx \
|
bulletDebugNode.cxx \
|
||||||
|
bulletFilterCallbackData.cxx \
|
||||||
bulletGenericConstraint.cxx \
|
bulletGenericConstraint.cxx \
|
||||||
bulletGhostNode.cxx \
|
bulletGhostNode.cxx \
|
||||||
bulletHeightfieldShape.cxx \
|
bulletHeightfieldShape.cxx \
|
||||||
@ -93,6 +96,7 @@
|
|||||||
bulletSoftBodyWorldInfo.cxx \
|
bulletSoftBodyWorldInfo.cxx \
|
||||||
bulletSphereShape.cxx \
|
bulletSphereShape.cxx \
|
||||||
bulletSphericalConstraint.cxx \
|
bulletSphericalConstraint.cxx \
|
||||||
|
bulletTickCallbackData.cxx \
|
||||||
bulletTriangleMesh.cxx \
|
bulletTriangleMesh.cxx \
|
||||||
bulletTriangleMeshShape.cxx \
|
bulletTriangleMeshShape.cxx \
|
||||||
bulletVehicle.cxx \
|
bulletVehicle.cxx \
|
||||||
@ -120,6 +124,7 @@
|
|||||||
bulletConvexPointCloudShape.h bulletConvexPointCloudShape.I \
|
bulletConvexPointCloudShape.h bulletConvexPointCloudShape.I \
|
||||||
bulletCylinderShape.h bulletCylinderShape.I \
|
bulletCylinderShape.h bulletCylinderShape.I \
|
||||||
bulletDebugNode.h bulletDebugNode.I \
|
bulletDebugNode.h bulletDebugNode.I \
|
||||||
|
bulletFilterCallbackData.h bulletFilterCallbackData.I \
|
||||||
bulletGenericConstraint.h bulletGenericConstraint.I \
|
bulletGenericConstraint.h bulletGenericConstraint.I \
|
||||||
bulletGhostNode.h bulletGhostNode.I \
|
bulletGhostNode.h bulletGhostNode.I \
|
||||||
bulletHeightfieldShape.h bulletHeightfieldShape.I \
|
bulletHeightfieldShape.h bulletHeightfieldShape.I \
|
||||||
@ -139,6 +144,7 @@
|
|||||||
bulletSoftBodyWorldInfo.h bulletSoftBodyWorldInfo.I \
|
bulletSoftBodyWorldInfo.h bulletSoftBodyWorldInfo.I \
|
||||||
bulletSphereShape.h bulletSphereShape.I \
|
bulletSphereShape.h bulletSphereShape.I \
|
||||||
bulletSphericalConstraint.h bulletSphericalConstraint.I \
|
bulletSphericalConstraint.h bulletSphericalConstraint.I \
|
||||||
|
bulletTickCallbackData.h bulletTickCallbackData.I \
|
||||||
bulletTriangleMesh.h bulletTriangleMesh.I \
|
bulletTriangleMesh.h bulletTriangleMesh.I \
|
||||||
bulletTriangleMeshShape.h bulletTriangleMeshShape.I \
|
bulletTriangleMeshShape.h bulletTriangleMeshShape.I \
|
||||||
bulletVehicle.h bulletVehicle.I \
|
bulletVehicle.h bulletVehicle.I \
|
||||||
|
@ -18,35 +18,17 @@
|
|||||||
// Description:
|
// Description:
|
||||||
////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////
|
||||||
INLINE BulletContactCallbackData::
|
INLINE BulletContactCallbackData::
|
||||||
BulletContactCallbackData(BulletManifoldPoint &mp, PandaNode *node0, PandaNode *node1) :
|
BulletContactCallbackData(BulletManifoldPoint &mp, PandaNode *node0, PandaNode *node1, int id0, int id1, int index0, int index1) :
|
||||||
|
_mp(mp),
|
||||||
_node0(node0),
|
_node0(node0),
|
||||||
_node1(node1),
|
_node1(node1),
|
||||||
_mp(mp) {
|
_id0(id0),
|
||||||
|
_id1(id1),
|
||||||
|
_index0(index0),
|
||||||
|
_index1(index1) {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////
|
|
||||||
// Function: BulletContactCallbackData::get_node_0
|
|
||||||
// Access: Published
|
|
||||||
// Description:
|
|
||||||
////////////////////////////////////////////////////////////////////
|
|
||||||
INLINE PandaNode *BulletContactCallbackData::
|
|
||||||
get_node_0() const {
|
|
||||||
|
|
||||||
return _node0;
|
|
||||||
}
|
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////
|
|
||||||
// Function: BulletContactCallbackData::get_node_1
|
|
||||||
// Access: Published
|
|
||||||
// Description:
|
|
||||||
////////////////////////////////////////////////////////////////////
|
|
||||||
INLINE PandaNode *BulletContactCallbackData::
|
|
||||||
get_node_1() const {
|
|
||||||
|
|
||||||
return _node1;
|
|
||||||
}
|
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////
|
||||||
// Function: BulletContactCallbackData::get_manifold
|
// Function: BulletContactCallbackData::get_manifold
|
||||||
// Access: Published
|
// Access: Published
|
||||||
@ -58,3 +40,69 @@ get_manifold() const {
|
|||||||
return _mp;
|
return _mp;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////
|
||||||
|
// Function: BulletContactCallbackData::get_node0
|
||||||
|
// Access: Published
|
||||||
|
// Description:
|
||||||
|
////////////////////////////////////////////////////////////////////
|
||||||
|
INLINE PandaNode *BulletContactCallbackData::
|
||||||
|
get_node0() const {
|
||||||
|
|
||||||
|
return _node0;
|
||||||
|
}
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////
|
||||||
|
// Function: BulletContactCallbackData::get_node1
|
||||||
|
// Access: Published
|
||||||
|
// Description:
|
||||||
|
////////////////////////////////////////////////////////////////////
|
||||||
|
INLINE PandaNode *BulletContactCallbackData::
|
||||||
|
get_node1() const {
|
||||||
|
|
||||||
|
return _node1;
|
||||||
|
}
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////
|
||||||
|
// Function: BulletContactCallbackData::get_part_id0
|
||||||
|
// Access: Published
|
||||||
|
// Description:
|
||||||
|
////////////////////////////////////////////////////////////////////
|
||||||
|
INLINE int BulletContactCallbackData::
|
||||||
|
get_part_id0() const {
|
||||||
|
|
||||||
|
return _id0;
|
||||||
|
}
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////
|
||||||
|
// Function: BulletContactCallbackData::get_part_id1
|
||||||
|
// Access: Published
|
||||||
|
// Description:
|
||||||
|
////////////////////////////////////////////////////////////////////
|
||||||
|
INLINE int BulletContactCallbackData::
|
||||||
|
get_part_id1() const {
|
||||||
|
|
||||||
|
return _id1;
|
||||||
|
}
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////
|
||||||
|
// Function: BulletContactCallbackData::get_index0
|
||||||
|
// Access: Published
|
||||||
|
// Description:
|
||||||
|
////////////////////////////////////////////////////////////////////
|
||||||
|
INLINE int BulletContactCallbackData::
|
||||||
|
get_index0() const {
|
||||||
|
|
||||||
|
return _index0;
|
||||||
|
}
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////
|
||||||
|
// Function: BulletContactCallbackData::get_index1
|
||||||
|
// Access: Published
|
||||||
|
// Description:
|
||||||
|
////////////////////////////////////////////////////////////////////
|
||||||
|
INLINE int BulletContactCallbackData::
|
||||||
|
get_index1() const {
|
||||||
|
|
||||||
|
return _index1;
|
||||||
|
}
|
||||||
|
|
||||||
|
@ -31,17 +31,26 @@ class EXPCL_PANDABULLET BulletContactCallbackData : public CallbackData {
|
|||||||
|
|
||||||
PUBLISHED:
|
PUBLISHED:
|
||||||
INLINE BulletContactCallbackData(BulletManifoldPoint &mp,
|
INLINE BulletContactCallbackData(BulletManifoldPoint &mp,
|
||||||
PandaNode *node0,
|
PandaNode *node0, PandaNode *node1,
|
||||||
PandaNode *node1);
|
int id0, int id1,
|
||||||
|
int index0, int index1);
|
||||||
|
|
||||||
PandaNode *get_node_0() const;
|
INLINE BulletManifoldPoint &get_manifold() const;
|
||||||
PandaNode *get_node_1() const;
|
INLINE PandaNode *get_node0() const;
|
||||||
BulletManifoldPoint &get_manifold() const;
|
INLINE PandaNode *get_node1() const;
|
||||||
|
INLINE int get_part_id0() const;
|
||||||
|
INLINE int get_part_id1() const;
|
||||||
|
INLINE int get_index0() const;
|
||||||
|
INLINE int get_index1() const;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
BulletManifoldPoint &_mp;
|
||||||
PandaNode *_node0;
|
PandaNode *_node0;
|
||||||
PandaNode *_node1;
|
PandaNode *_node1;
|
||||||
BulletManifoldPoint &_mp;
|
int _id0;
|
||||||
|
int _id1;
|
||||||
|
int _index0;
|
||||||
|
int _index1;
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////
|
||||||
public:
|
public:
|
||||||
|
@ -73,7 +73,7 @@ contact_added_callback(btManifoldPoint &cp,
|
|||||||
if (bullet_contact_added_callback) {
|
if (bullet_contact_added_callback) {
|
||||||
|
|
||||||
BulletManifoldPoint mp(cp);
|
BulletManifoldPoint mp(cp);
|
||||||
BulletContactCallbackData cbdata(mp, node0, node1);
|
BulletContactCallbackData cbdata(mp, node0, node1, id0, id1, index0, index1);
|
||||||
|
|
||||||
bullet_contact_added_callback->do_callback(&cbdata);
|
bullet_contact_added_callback->do_callback(&cbdata);
|
||||||
}
|
}
|
||||||
|
71
panda/src/bullet/bulletFilterCallbackData.I
Normal file
71
panda/src/bullet/bulletFilterCallbackData.I
Normal file
@ -0,0 +1,71 @@
|
|||||||
|
// Filename: bulletFilterCallbackData.I
|
||||||
|
// Created by: enn0x (26Nov12)
|
||||||
|
//
|
||||||
|
////////////////////////////////////////////////////////////////////
|
||||||
|
//
|
||||||
|
// 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."
|
||||||
|
//
|
||||||
|
////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////
|
||||||
|
// Function: BulletFilterCallbackData::Constructor
|
||||||
|
// Access: Published
|
||||||
|
// Description:
|
||||||
|
////////////////////////////////////////////////////////////////////
|
||||||
|
INLINE BulletFilterCallbackData::
|
||||||
|
BulletFilterCallbackData(PandaNode *node0, PandaNode *node1) :
|
||||||
|
_node0(node0),
|
||||||
|
_node1(node1),
|
||||||
|
_collide(false) {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////
|
||||||
|
// Function: BulletFilterCallbackData::get_node_0
|
||||||
|
// Access: Published
|
||||||
|
// Description:
|
||||||
|
////////////////////////////////////////////////////////////////////
|
||||||
|
INLINE PandaNode *BulletFilterCallbackData::
|
||||||
|
get_node_0() const {
|
||||||
|
|
||||||
|
return _node0;
|
||||||
|
}
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////
|
||||||
|
// Function: BulletFilterCallbackData::get_node_1
|
||||||
|
// Access: Published
|
||||||
|
// Description:
|
||||||
|
////////////////////////////////////////////////////////////////////
|
||||||
|
INLINE PandaNode *BulletFilterCallbackData::
|
||||||
|
get_node_1() const {
|
||||||
|
|
||||||
|
return _node1;
|
||||||
|
}
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////
|
||||||
|
// Function: BulletFilterCallbackData::get_collide
|
||||||
|
// Access: Published
|
||||||
|
// Description:
|
||||||
|
////////////////////////////////////////////////////////////////////
|
||||||
|
INLINE bool BulletFilterCallbackData::
|
||||||
|
get_collide() const {
|
||||||
|
|
||||||
|
return _collide;
|
||||||
|
}
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////
|
||||||
|
// Function: BulletFilterCallbackData::set_collide
|
||||||
|
// Access: Published
|
||||||
|
// Description:
|
||||||
|
////////////////////////////////////////////////////////////////////
|
||||||
|
INLINE void BulletFilterCallbackData::
|
||||||
|
set_collide(bool collide) {
|
||||||
|
|
||||||
|
_collide = collide;
|
||||||
|
}
|
||||||
|
|
18
panda/src/bullet/bulletFilterCallbackData.cxx
Normal file
18
panda/src/bullet/bulletFilterCallbackData.cxx
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
// Filename: bulletFilterCallbackData.cxx
|
||||||
|
// Created by: enn0x (26Nov12)
|
||||||
|
//
|
||||||
|
////////////////////////////////////////////////////////////////////
|
||||||
|
//
|
||||||
|
// 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."
|
||||||
|
//
|
||||||
|
////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
#include "bulletFilterCallbackData.h"
|
||||||
|
|
||||||
|
TypeHandle BulletFilterCallbackData::_type_handle;
|
||||||
|
|
70
panda/src/bullet/bulletFilterCallbackData.h
Normal file
70
panda/src/bullet/bulletFilterCallbackData.h
Normal file
@ -0,0 +1,70 @@
|
|||||||
|
// Filename: bulletFilterCallbackData.h
|
||||||
|
// Created by: enn0x (26Nov12)
|
||||||
|
//
|
||||||
|
////////////////////////////////////////////////////////////////////
|
||||||
|
//
|
||||||
|
// 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."
|
||||||
|
//
|
||||||
|
////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
#ifndef __BULLET_FILTER_CALLBACK_DATA_H__
|
||||||
|
#define __BULLET_FILTER_CALLBACK_DATA_H__
|
||||||
|
|
||||||
|
#include "pandabase.h"
|
||||||
|
#include "callbackData.h"
|
||||||
|
#include "callbackObject.h"
|
||||||
|
|
||||||
|
#include "bullet_includes.h"
|
||||||
|
#include "bullet_utils.h"
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////
|
||||||
|
// Class : BulletFilterCallbackData
|
||||||
|
// Description :
|
||||||
|
////////////////////////////////////////////////////////////////////
|
||||||
|
class EXPCL_PANDABULLET BulletFilterCallbackData : public CallbackData {
|
||||||
|
|
||||||
|
PUBLISHED:
|
||||||
|
INLINE BulletFilterCallbackData(PandaNode *node0,
|
||||||
|
PandaNode *node1);
|
||||||
|
|
||||||
|
INLINE PandaNode *get_node_0() const;
|
||||||
|
INLINE PandaNode *get_node_1() const;
|
||||||
|
|
||||||
|
INLINE void set_collide(bool collide);
|
||||||
|
INLINE bool get_collide() const;
|
||||||
|
|
||||||
|
private:
|
||||||
|
PandaNode *_node0;
|
||||||
|
PandaNode *_node1;
|
||||||
|
bool _collide;
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////
|
||||||
|
public:
|
||||||
|
static TypeHandle get_class_type() {
|
||||||
|
return _type_handle;
|
||||||
|
}
|
||||||
|
static void init_type() {
|
||||||
|
CallbackData::init_type();
|
||||||
|
register_type(_type_handle, "BulletFilterCallbackData",
|
||||||
|
CallbackData::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 "bulletFilterCallbackData.I"
|
||||||
|
|
||||||
|
#endif // __BULLET_FILTER_CALLBACK_DATA_H__
|
36
panda/src/bullet/bulletTickCallbackData.I
Normal file
36
panda/src/bullet/bulletTickCallbackData.I
Normal file
@ -0,0 +1,36 @@
|
|||||||
|
// Filename: bulletTickCallbackData.I
|
||||||
|
// Created by: enn0x (26Nov12)
|
||||||
|
//
|
||||||
|
////////////////////////////////////////////////////////////////////
|
||||||
|
//
|
||||||
|
// 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."
|
||||||
|
//
|
||||||
|
////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////
|
||||||
|
// Function: BulletTickCallbackData::Constructor
|
||||||
|
// Access: Published
|
||||||
|
// Description:
|
||||||
|
////////////////////////////////////////////////////////////////////
|
||||||
|
INLINE BulletTickCallbackData::
|
||||||
|
BulletTickCallbackData(btScalar timestep) :
|
||||||
|
_timestep(timestep) {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////
|
||||||
|
// Function: BulletTickCallbackData::get_timestep
|
||||||
|
// Access: Published
|
||||||
|
// Description:
|
||||||
|
////////////////////////////////////////////////////////////////////
|
||||||
|
INLINE PN_stdfloat BulletTickCallbackData::
|
||||||
|
get_timestep() const {
|
||||||
|
|
||||||
|
return (PN_stdfloat)_timestep;
|
||||||
|
}
|
||||||
|
|
18
panda/src/bullet/bulletTickCallbackData.cxx
Normal file
18
panda/src/bullet/bulletTickCallbackData.cxx
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
// Filename: bulletTickCallbackData.cxx
|
||||||
|
// Created by: enn0x (26Nov12)
|
||||||
|
//
|
||||||
|
////////////////////////////////////////////////////////////////////
|
||||||
|
//
|
||||||
|
// 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."
|
||||||
|
//
|
||||||
|
////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
#include "bulletTickCallbackData.h"
|
||||||
|
|
||||||
|
TypeHandle BulletTickCallbackData::_type_handle;
|
||||||
|
|
62
panda/src/bullet/bulletTickCallbackData.h
Normal file
62
panda/src/bullet/bulletTickCallbackData.h
Normal file
@ -0,0 +1,62 @@
|
|||||||
|
// Filename: bulletTickCallbackData.h
|
||||||
|
// Created by: enn0x (26Nov12)
|
||||||
|
//
|
||||||
|
////////////////////////////////////////////////////////////////////
|
||||||
|
//
|
||||||
|
// 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."
|
||||||
|
//
|
||||||
|
////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
#ifndef __BULLET_TICK_CALLBACK_DATA_H__
|
||||||
|
#define __BULLET_TICK_CALLBACK_DATA_H__
|
||||||
|
|
||||||
|
#include "pandabase.h"
|
||||||
|
#include "callbackData.h"
|
||||||
|
#include "callbackObject.h"
|
||||||
|
|
||||||
|
#include "bullet_includes.h"
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////
|
||||||
|
// Class : BulletTickCallbackData
|
||||||
|
// Description :
|
||||||
|
////////////////////////////////////////////////////////////////////
|
||||||
|
class EXPCL_PANDABULLET BulletTickCallbackData : public CallbackData {
|
||||||
|
|
||||||
|
PUBLISHED:
|
||||||
|
INLINE BulletTickCallbackData(btScalar timestep);
|
||||||
|
|
||||||
|
INLINE PN_stdfloat get_timestep() const;
|
||||||
|
|
||||||
|
private:
|
||||||
|
btScalar _timestep;
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////
|
||||||
|
public:
|
||||||
|
static TypeHandle get_class_type() {
|
||||||
|
return _type_handle;
|
||||||
|
}
|
||||||
|
static void init_type() {
|
||||||
|
CallbackData::init_type();
|
||||||
|
register_type(_type_handle, "BulletTickCallbackData",
|
||||||
|
CallbackData::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 "bulletTickCallbackData.I"
|
||||||
|
|
||||||
|
#endif // __BULLET_TICK_CALLBACK_DATA_H__
|
@ -52,10 +52,6 @@ INLINE BulletWorld::
|
|||||||
delete _configuration;
|
delete _configuration;
|
||||||
delete _dispatcher;
|
delete _dispatcher;
|
||||||
delete _broadphase;
|
delete _broadphase;
|
||||||
|
|
||||||
#ifdef HAVE_PYTHON
|
|
||||||
Py_XDECREF(_filter_cb3._python_callback);
|
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////
|
||||||
|
@ -19,14 +19,6 @@
|
|||||||
|
|
||||||
#include "collideMask.h"
|
#include "collideMask.h"
|
||||||
|
|
||||||
#ifdef HAVE_PYTHON
|
|
||||||
#include "py_panda.h"
|
|
||||||
#include "typedReferenceCount.h"
|
|
||||||
#ifndef CPPPARSER
|
|
||||||
extern EXPCL_PANDAODE Dtool_PyTypedObject Dtool_PandaNode;
|
|
||||||
#endif
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#define clamp(x, x_min, x_max) max(min(x, x_max), x_min)
|
#define clamp(x, x_min, x_max) max(min(x, x_max), x_min)
|
||||||
|
|
||||||
TypeHandle BulletWorld::_type_handle;
|
TypeHandle BulletWorld::_type_handle;
|
||||||
@ -77,29 +69,6 @@ BulletWorld() {
|
|||||||
_dispatcher = new btCollisionDispatcher(_configuration);
|
_dispatcher = new btCollisionDispatcher(_configuration);
|
||||||
nassertv(_dispatcher);
|
nassertv(_dispatcher);
|
||||||
|
|
||||||
/*
|
|
||||||
_dispatcher.registerCollisionCreateFunc(
|
|
||||||
BroadphaseNativeType.ConvexTriangleMeshShape,
|
|
||||||
BroadphaseNativeType.ConvexTriangleMeshShape,
|
|
||||||
dcc.GetCollisionAlgorithmCreateFunc(
|
|
||||||
BroadphaseNativeType.TriangleMeshShape,
|
|
||||||
BroadphaseNativeType.TriangleMeshShape));
|
|
||||||
|
|
||||||
_dispatcher.registerCollisionCreateFunc(
|
|
||||||
BroadphaseNativeType.TriangleMeshShape,
|
|
||||||
BroadphaseNativeType.TriangleMeshShape,
|
|
||||||
dcc.GetCollisionAlgorithmCreateFunc(
|
|
||||||
BroadphaseNativeType.ConvexTriangleMeshShape,
|
|
||||||
BroadphaseNativeType.ConvexTriangleMeshShape));
|
|
||||||
|
|
||||||
_dispatcher.registerCollisionCreateFunc(
|
|
||||||
BroadphaseNativeType.ConvexTriangleMeshShape,
|
|
||||||
BroadphaseNativeType.ConvexTriangleMeshShape,
|
|
||||||
dcc.GetCollisionAlgorithmCreateFunc(
|
|
||||||
BroadphaseNativeType.ConvexTriangleMeshShape,
|
|
||||||
BroadphaseNativeType.ConvexTriangleMeshShape));
|
|
||||||
*/
|
|
||||||
|
|
||||||
// Solver
|
// Solver
|
||||||
_solver = new btSequentialImpulseConstraintSolver;
|
_solver = new btSequentialImpulseConstraintSolver;
|
||||||
nassertv(_solver);
|
nassertv(_solver);
|
||||||
@ -109,6 +78,7 @@ BulletWorld() {
|
|||||||
nassertv(_world);
|
nassertv(_world);
|
||||||
nassertv(_world->getPairCache());
|
nassertv(_world->getPairCache());
|
||||||
|
|
||||||
|
_world->setWorldUserInfo(this);
|
||||||
_world->setGravity(btVector3(0.0f, 0.0f, 0.0f));
|
_world->setGravity(btVector3(0.0f, 0.0f, 0.0f));
|
||||||
|
|
||||||
// Ghost-pair callback
|
// Ghost-pair callback
|
||||||
@ -122,13 +92,16 @@ BulletWorld() {
|
|||||||
case FA_groups_mask:
|
case FA_groups_mask:
|
||||||
_world->getPairCache()->setOverlapFilterCallback(&_filter_cb2);
|
_world->getPairCache()->setOverlapFilterCallback(&_filter_cb2);
|
||||||
break;
|
break;
|
||||||
case FA_python_callback:
|
case FA_callback:
|
||||||
_world->getPairCache()->setOverlapFilterCallback(&_filter_cb3);
|
_world->getPairCache()->setOverlapFilterCallback(&_filter_cb3);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
bullet_cat.error() << "no proper filter algorithm!" << endl;
|
bullet_cat.error() << "no proper filter algorithm!" << endl;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Tick callback
|
||||||
|
_tick_callback_obj = NULL;
|
||||||
|
|
||||||
// SoftBodyWorldInfo
|
// SoftBodyWorldInfo
|
||||||
_info.m_dispatcher = _dispatcher;
|
_info.m_dispatcher = _dispatcher;
|
||||||
_info.m_broadphase = _broadphase;
|
_info.m_broadphase = _broadphase;
|
||||||
@ -899,30 +872,71 @@ clear_contact_added_callback() {
|
|||||||
bullet_contact_added_callback = NULL;
|
bullet_contact_added_callback = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef HAVE_PYTHON
|
|
||||||
////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////
|
||||||
// Function: BulletWorld::set_python_filter_callback
|
// Function: BulletWorld::set_tick_callback
|
||||||
// Access: Published
|
// Access: Published
|
||||||
// Description:
|
// Description:
|
||||||
////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////
|
||||||
void BulletWorld::
|
void BulletWorld::
|
||||||
set_python_filter_callback(PyObject *callback) {
|
set_tick_callback(CallbackObject *obj) {
|
||||||
|
|
||||||
nassertv(callback != NULL);
|
nassertv(obj != NULL);
|
||||||
|
_tick_callback_obj = obj;
|
||||||
|
}
|
||||||
|
|
||||||
if (!PyCallable_Check(callback)) {
|
////////////////////////////////////////////////////////////////////
|
||||||
PyErr_Format(PyExc_TypeError, "'%s' object is not callable", callback->ob_type->tp_name);
|
// Function: BulletWorld::clear_tick_callback
|
||||||
return;
|
// Access: Published
|
||||||
}
|
// Description:
|
||||||
|
////////////////////////////////////////////////////////////////////
|
||||||
|
void BulletWorld::
|
||||||
|
clear_tick_callback() {
|
||||||
|
|
||||||
if (bullet_filter_algorithm != FA_python_callback) {
|
_tick_callback_obj = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
///////////////////////////////////////////////////////////////////
|
||||||
|
// Function: BulletWorld::tick_callback
|
||||||
|
// Access: Private
|
||||||
|
// Description:
|
||||||
|
////////////////////////////////////////////////////////////////////
|
||||||
|
void BulletWorld::
|
||||||
|
tick_callback(btDynamicsWorld *world, btScalar timestep) {
|
||||||
|
|
||||||
|
nassertv(world->getWorldUserInfo());
|
||||||
|
|
||||||
|
BulletWorld *w = static_cast<BulletWorld *>(world->getWorldUserInfo());
|
||||||
|
BulletTickCallbackData cbdata(timestep);
|
||||||
|
w->_tick_callback_obj->do_callback(&cbdata);
|
||||||
|
}
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////
|
||||||
|
// Function: BulletWorld::set_filter_callback
|
||||||
|
// Access: Published
|
||||||
|
// Description:
|
||||||
|
////////////////////////////////////////////////////////////////////
|
||||||
|
void BulletWorld::
|
||||||
|
set_filter_callback(CallbackObject *obj) {
|
||||||
|
|
||||||
|
nassertv(obj != NULL);
|
||||||
|
|
||||||
|
if (bullet_filter_algorithm != FA_callback) {
|
||||||
bullet_cat.warning() << "filter algorithm is not 'python-callback'" << endl;
|
bullet_cat.warning() << "filter algorithm is not 'python-callback'" << endl;
|
||||||
}
|
}
|
||||||
|
|
||||||
_filter_cb3._python_callback = callback;
|
_filter_cb3._filter_callback_obj = obj;
|
||||||
Py_XINCREF(_filter_cb3._python_callback);
|
}
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////
|
||||||
|
// Function: BulletWorld::clear_filter_callback
|
||||||
|
// Access: Published
|
||||||
|
// Description:
|
||||||
|
////////////////////////////////////////////////////////////////////
|
||||||
|
void BulletWorld::
|
||||||
|
clear_filter_callback() {
|
||||||
|
|
||||||
|
_filter_cb3._filter_callback_obj = NULL;
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////
|
||||||
// Function: BulletWorld::FilterCallback1::needBroadphaseCollision
|
// Function: BulletWorld::FilterCallback1::needBroadphaseCollision
|
||||||
@ -983,7 +997,6 @@ needBroadphaseCollision(btBroadphaseProxy* proxy0, btBroadphaseProxy* proxy1) co
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef HAVE_PYTHON
|
|
||||||
////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////
|
||||||
// Function: BulletWorld::FilterCallback3::needBroadphaseCollision
|
// Function: BulletWorld::FilterCallback3::needBroadphaseCollision
|
||||||
// Access: Published
|
// Access: Published
|
||||||
@ -992,7 +1005,7 @@ needBroadphaseCollision(btBroadphaseProxy* proxy0, btBroadphaseProxy* proxy1) co
|
|||||||
bool BulletWorld::btFilterCallback3::
|
bool BulletWorld::btFilterCallback3::
|
||||||
needBroadphaseCollision(btBroadphaseProxy* proxy0, btBroadphaseProxy* proxy1) const {
|
needBroadphaseCollision(btBroadphaseProxy* proxy0, btBroadphaseProxy* proxy1) const {
|
||||||
|
|
||||||
nassertr(_python_callback, false);
|
nassertr(_filter_callback_obj, false);
|
||||||
|
|
||||||
btCollisionObject *obj0 = (btCollisionObject *) proxy0->m_clientObject;
|
btCollisionObject *obj0 = (btCollisionObject *) proxy0->m_clientObject;
|
||||||
btCollisionObject *obj1 = (btCollisionObject *) proxy1->m_clientObject;
|
btCollisionObject *obj1 = (btCollisionObject *) proxy1->m_clientObject;
|
||||||
@ -1006,37 +1019,10 @@ needBroadphaseCollision(btBroadphaseProxy* proxy0, btBroadphaseProxy* proxy1) co
|
|||||||
nassertr(node0, false);
|
nassertr(node0, false);
|
||||||
nassertr(node1, false);
|
nassertr(node1, false);
|
||||||
|
|
||||||
PyObject *p0 = DTool_CreatePyInstanceTyped(node0, Dtool_PandaNode, true, false, node0->get_type_index());
|
BulletFilterCallbackData cbdata(node0, node1);
|
||||||
PyObject *p1 = DTool_CreatePyInstanceTyped(node1, Dtool_PandaNode, true, false, node1->get_type_index());
|
_filter_callback_obj->do_callback(&cbdata);
|
||||||
|
return cbdata.get_collide();
|
||||||
PyObject *result = PyEval_CallFunction(_python_callback, "OO", p0, p1);
|
|
||||||
|
|
||||||
bool collide = false;
|
|
||||||
|
|
||||||
if (!result) {
|
|
||||||
bullet_cat.error() << "An error occurred while calling python function!" << endl;
|
|
||||||
PyErr_Print();
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
int v = PyObject_IsTrue(result);
|
|
||||||
if (v == 1) {
|
|
||||||
collide = true;
|
|
||||||
}
|
|
||||||
else if (v == 0) {
|
|
||||||
collide = false;
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
bullet_cat.error() << "Python callback function must return a bool object" << endl;
|
|
||||||
}
|
|
||||||
Py_DECREF(result);
|
|
||||||
}
|
|
||||||
|
|
||||||
//Py_XDECREF(p0);
|
|
||||||
//Py_XDECREF(p1);
|
|
||||||
|
|
||||||
return collide;
|
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////
|
||||||
// Function: BulletWorld::BroadphaseAlgorithm ostream operator
|
// Function: BulletWorld::BroadphaseAlgorithm ostream operator
|
||||||
@ -1090,14 +1076,10 @@ operator << (ostream &out, BulletWorld::FilterAlgorithm algorithm) {
|
|||||||
switch (algorithm) {
|
switch (algorithm) {
|
||||||
case BulletWorld::FA_mask:
|
case BulletWorld::FA_mask:
|
||||||
return out << "mask";
|
return out << "mask";
|
||||||
|
|
||||||
case BulletWorld::FA_groups_mask:
|
case BulletWorld::FA_groups_mask:
|
||||||
return out << "groups-mask";
|
return out << "groups-mask";
|
||||||
|
case BulletWorld::FA_callback:
|
||||||
#ifdef HAVE_PYTHON
|
return out << "callback";
|
||||||
case BulletWorld::FA_python_callback:
|
|
||||||
return out << "python-callback";
|
|
||||||
#endif
|
|
||||||
};
|
};
|
||||||
return out << "**invalid BulletWorld::FilterAlgorithm(" << (int)algorithm << ")**";
|
return out << "**invalid BulletWorld::FilterAlgorithm(" << (int)algorithm << ")**";
|
||||||
}
|
}
|
||||||
@ -1117,17 +1099,14 @@ operator >> (istream &in, BulletWorld::FilterAlgorithm &algorithm) {
|
|||||||
else if (word == "groups-mask") {
|
else if (word == "groups-mask") {
|
||||||
algorithm = BulletWorld::FA_groups_mask;
|
algorithm = BulletWorld::FA_groups_mask;
|
||||||
}
|
}
|
||||||
#ifdef HAVE_PYTHON
|
else if (word == "callback") {
|
||||||
else if (word == "python-callback") {
|
algorithm = BulletWorld::FA_callback;
|
||||||
algorithm = BulletWorld::FA_python_callback;
|
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
else {
|
else {
|
||||||
bullet_cat.error()
|
bullet_cat.error()
|
||||||
<< "Invalid BulletWorld::FilterAlgorithm: " << word << "\n";
|
<< "Invalid BulletWorld::FilterAlgorithm: " << word << "\n";
|
||||||
algorithm = BulletWorld::FA_mask;
|
algorithm = BulletWorld::FA_mask;
|
||||||
}
|
}
|
||||||
|
|
||||||
return in;
|
return in;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -39,11 +39,6 @@
|
|||||||
#include "collideMask.h"
|
#include "collideMask.h"
|
||||||
#include "luse.h"
|
#include "luse.h"
|
||||||
|
|
||||||
#ifdef HAVE_PYTHON
|
|
||||||
#include "py_panda.h"
|
|
||||||
#include "Python.h"
|
|
||||||
#endif
|
|
||||||
|
|
||||||
class BulletPersistentManifold;
|
class BulletPersistentManifold;
|
||||||
class BulletShape;
|
class BulletShape;
|
||||||
class BulletSoftBodyWorldInfo;
|
class BulletSoftBodyWorldInfo;
|
||||||
@ -142,6 +137,12 @@ PUBLISHED:
|
|||||||
void set_contact_added_callback(CallbackObject *obj);
|
void set_contact_added_callback(CallbackObject *obj);
|
||||||
void clear_contact_added_callback();
|
void clear_contact_added_callback();
|
||||||
|
|
||||||
|
void set_tick_callback(CallbackObject *obj);
|
||||||
|
void clear_tick_callback();
|
||||||
|
|
||||||
|
void set_filter_callback(CallbackObject *obj);
|
||||||
|
void clear_filter_callback();
|
||||||
|
|
||||||
// Configuration
|
// Configuration
|
||||||
enum BroadphaseAlgorithm {
|
enum BroadphaseAlgorithm {
|
||||||
BA_sweep_and_prune,
|
BA_sweep_and_prune,
|
||||||
@ -151,15 +152,9 @@ PUBLISHED:
|
|||||||
enum FilterAlgorithm {
|
enum FilterAlgorithm {
|
||||||
FA_mask,
|
FA_mask,
|
||||||
FA_groups_mask,
|
FA_groups_mask,
|
||||||
#ifdef HAVE_PYTHON
|
FA_callback,
|
||||||
FA_python_callback,
|
|
||||||
#endif
|
|
||||||
};
|
};
|
||||||
|
|
||||||
#ifdef HAVE_PYTHON
|
|
||||||
void set_python_filter_callback(PyObject *callback);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
PUBLISHED: // Deprecated methods, will become private soon
|
PUBLISHED: // Deprecated methods, will become private soon
|
||||||
void attach_ghost(BulletGhostNode *node);
|
void attach_ghost(BulletGhostNode *node);
|
||||||
void remove_ghost(BulletGhostNode *node);
|
void remove_ghost(BulletGhostNode *node);
|
||||||
@ -187,6 +182,8 @@ private:
|
|||||||
void sync_p2b(PN_stdfloat dt, int num_substeps);
|
void sync_p2b(PN_stdfloat dt, int num_substeps);
|
||||||
void sync_b2p();
|
void sync_b2p();
|
||||||
|
|
||||||
|
void tick_callback(btDynamicsWorld *world, btScalar timestep);
|
||||||
|
|
||||||
typedef PTA(PT(BulletRigidBodyNode)) BulletRigidBodies;
|
typedef PTA(PT(BulletRigidBodyNode)) BulletRigidBodies;
|
||||||
typedef PTA(PT(BulletSoftBodyNode)) BulletSoftBodies;
|
typedef PTA(PT(BulletSoftBodyNode)) BulletSoftBodies;
|
||||||
typedef PTA(PT(BulletGhostNode)) BulletGhosts;
|
typedef PTA(PT(BulletGhostNode)) BulletGhosts;
|
||||||
@ -214,15 +211,13 @@ private:
|
|||||||
CollideMask _collide[32];
|
CollideMask _collide[32];
|
||||||
};
|
};
|
||||||
|
|
||||||
#ifdef HAVE_PYTHON
|
|
||||||
struct btFilterCallback3 : public btOverlapFilterCallback {
|
struct btFilterCallback3 : public btOverlapFilterCallback {
|
||||||
virtual bool needBroadphaseCollision(
|
virtual bool needBroadphaseCollision(
|
||||||
btBroadphaseProxy* proxy0,
|
btBroadphaseProxy* proxy0,
|
||||||
btBroadphaseProxy* proxy1) const;
|
btBroadphaseProxy* proxy1) const;
|
||||||
|
|
||||||
PyObject *_python_callback;
|
PT(CallbackObject) _filter_callback_obj;
|
||||||
};
|
};
|
||||||
#endif
|
|
||||||
|
|
||||||
btBroadphaseInterface *_broadphase;
|
btBroadphaseInterface *_broadphase;
|
||||||
btCollisionConfiguration *_configuration;
|
btCollisionConfiguration *_configuration;
|
||||||
@ -234,15 +229,14 @@ private:
|
|||||||
|
|
||||||
btFilterCallback1 _filter_cb1;
|
btFilterCallback1 _filter_cb1;
|
||||||
btFilterCallback2 _filter_cb2;
|
btFilterCallback2 _filter_cb2;
|
||||||
|
|
||||||
#ifdef HAVE_PYTHON
|
|
||||||
btFilterCallback3 _filter_cb3;
|
btFilterCallback3 _filter_cb3;
|
||||||
#endif
|
|
||||||
|
|
||||||
btSoftBodyWorldInfo _info;
|
PT(CallbackObject) _tick_callback_obj;
|
||||||
|
|
||||||
PT(BulletDebugNode) _debug;
|
PT(BulletDebugNode) _debug;
|
||||||
|
|
||||||
|
btSoftBodyWorldInfo _info;
|
||||||
|
|
||||||
BulletRigidBodies _bodies;
|
BulletRigidBodies _bodies;
|
||||||
BulletSoftBodies _softbodies;
|
BulletSoftBodies _softbodies;
|
||||||
BulletGhosts _ghosts;
|
BulletGhosts _ghosts;
|
||||||
|
@ -27,6 +27,7 @@
|
|||||||
#include "bulletConvexPointCloudShape.h"
|
#include "bulletConvexPointCloudShape.h"
|
||||||
#include "bulletCylinderShape.h"
|
#include "bulletCylinderShape.h"
|
||||||
#include "bulletDebugNode.h"
|
#include "bulletDebugNode.h"
|
||||||
|
#include "bulletFilterCallbackData.h"
|
||||||
#include "bulletGenericConstraint.h"
|
#include "bulletGenericConstraint.h"
|
||||||
#include "bulletGhostNode.h"
|
#include "bulletGhostNode.h"
|
||||||
#include "bulletHeightfieldShape.h"
|
#include "bulletHeightfieldShape.h"
|
||||||
@ -40,6 +41,7 @@
|
|||||||
#include "bulletSphericalConstraint.h"
|
#include "bulletSphericalConstraint.h"
|
||||||
#include "bulletSoftBodyNode.h"
|
#include "bulletSoftBodyNode.h"
|
||||||
#include "bulletSoftBodyShape.h"
|
#include "bulletSoftBodyShape.h"
|
||||||
|
#include "bulletTickCallbackData.h"
|
||||||
#include "bulletTriangleMesh.h"
|
#include "bulletTriangleMesh.h"
|
||||||
#include "bulletTriangleMeshShape.h"
|
#include "bulletTriangleMeshShape.h"
|
||||||
#include "bulletVehicle.h"
|
#include "bulletVehicle.h"
|
||||||
@ -158,7 +160,7 @@ init_libbullet() {
|
|||||||
BulletConvexPointCloudShape::init_type();
|
BulletConvexPointCloudShape::init_type();
|
||||||
BulletCylinderShape::init_type();
|
BulletCylinderShape::init_type();
|
||||||
BulletDebugNode::init_type();
|
BulletDebugNode::init_type();
|
||||||
BulletSphericalConstraint::init_type();
|
BulletFilterCallbackData::init_type();
|
||||||
BulletGenericConstraint::init_type();
|
BulletGenericConstraint::init_type();
|
||||||
BulletGhostNode::init_type();
|
BulletGhostNode::init_type();
|
||||||
BulletHeightfieldShape::init_type();
|
BulletHeightfieldShape::init_type();
|
||||||
@ -169,8 +171,10 @@ init_libbullet() {
|
|||||||
BulletShape::init_type();
|
BulletShape::init_type();
|
||||||
BulletSliderConstraint::init_type();
|
BulletSliderConstraint::init_type();
|
||||||
BulletSphereShape::init_type();
|
BulletSphereShape::init_type();
|
||||||
|
BulletSphericalConstraint::init_type();
|
||||||
BulletSoftBodyNode::init_type();
|
BulletSoftBodyNode::init_type();
|
||||||
BulletSoftBodyShape::init_type();
|
BulletSoftBodyShape::init_type();
|
||||||
|
BulletTickCallbackData::init_type();
|
||||||
BulletTriangleMesh::init_type();
|
BulletTriangleMesh::init_type();
|
||||||
BulletTriangleMeshShape::init_type();
|
BulletTriangleMeshShape::init_type();
|
||||||
BulletVehicle::init_type();
|
BulletVehicle::init_type();
|
||||||
|
@ -17,6 +17,7 @@
|
|||||||
#include "bulletCharacterControllerNode.cxx"
|
#include "bulletCharacterControllerNode.cxx"
|
||||||
#include "bulletCylinderShape.cxx"
|
#include "bulletCylinderShape.cxx"
|
||||||
#include "bulletDebugNode.cxx"
|
#include "bulletDebugNode.cxx"
|
||||||
|
#include "bulletFilterCallbackData.cxx"
|
||||||
#include "bulletGenericConstraint.cxx"
|
#include "bulletGenericConstraint.cxx"
|
||||||
#include "bulletGhostNode.cxx"
|
#include "bulletGhostNode.cxx"
|
||||||
#include "bulletHelper.cxx"
|
#include "bulletHelper.cxx"
|
||||||
@ -36,6 +37,7 @@
|
|||||||
#include "bulletSoftBodyMaterial.cxx"
|
#include "bulletSoftBodyMaterial.cxx"
|
||||||
#include "bulletSoftBodyShape.cxx"
|
#include "bulletSoftBodyShape.cxx"
|
||||||
#include "bulletSoftBodyWorldInfo.cxx"
|
#include "bulletSoftBodyWorldInfo.cxx"
|
||||||
|
#include "bulletTickCallbackData.cxx"
|
||||||
#include "bulletTriangleMesh.cxx"
|
#include "bulletTriangleMesh.cxx"
|
||||||
#include "bulletTriangleMeshShape.cxx"
|
#include "bulletTriangleMeshShape.cxx"
|
||||||
#include "bulletVehicle.cxx"
|
#include "bulletVehicle.cxx"
|
||||||
|
Loading…
x
Reference in New Issue
Block a user