mirror of
https://github.com/panda3d/panda3d.git
synced 2025-10-02 09:52:27 -04:00
Merge branch 'release/1.9.x'
This commit is contained in:
commit
62c008602e
@ -32,6 +32,7 @@ This issue fixes several bugs that were still found in 1.9.2.
|
|||||||
* Fix RAM caching of 2D texture arrays
|
* Fix RAM caching of 2D texture arrays
|
||||||
* Fix Ctrl+C interrupt propagation to runtime applications
|
* Fix Ctrl+C interrupt propagation to runtime applications
|
||||||
* Support for InvSphere, Box and Tube solids in bam2egg
|
* Support for InvSphere, Box and Tube solids in bam2egg
|
||||||
|
* Preserve "intangible" and "level" collide flags in bam2egg
|
||||||
* Add normalized() method to vectors
|
* Add normalized() method to vectors
|
||||||
* asyncFlattenStrong with inPlace=True caused node to disappear
|
* asyncFlattenStrong with inPlace=True caused node to disappear
|
||||||
* Fix asyncFlattenStrong called on nodes without parent
|
* Fix asyncFlattenStrong called on nodes without parent
|
||||||
@ -43,6 +44,7 @@ This issue fixes several bugs that were still found in 1.9.2.
|
|||||||
* Fix exception when creating intervals before ShowBase is started
|
* Fix exception when creating intervals before ShowBase is started
|
||||||
* Fix rare X11 .ico cursor bug; also now supports PNG-compressed icons
|
* Fix rare X11 .ico cursor bug; also now supports PNG-compressed icons
|
||||||
* Add keyword argument support to make() methods such as Shader.make()
|
* Add keyword argument support to make() methods such as Shader.make()
|
||||||
|
* Fix compilation errors with Bullet 2.84
|
||||||
|
|
||||||
------------------------ RELEASE 1.9.2 ------------------------
|
------------------------ RELEASE 1.9.2 ------------------------
|
||||||
|
|
||||||
|
@ -13,6 +13,10 @@
|
|||||||
|
|
||||||
#include "bulletCharacterControllerNode.h"
|
#include "bulletCharacterControllerNode.h"
|
||||||
|
|
||||||
|
#if BT_BULLET_VERSION >= 285
|
||||||
|
static const btVector3 up_vectors[3] = {btVector3(1.0f, 0.0f, 0.0f), btVector3(0.0f, 1.0f, 0.0f), btVector3(0.0f, 0.0f, 1.0f)};
|
||||||
|
#endif
|
||||||
|
|
||||||
TypeHandle BulletCharacterControllerNode::_type_handle;
|
TypeHandle BulletCharacterControllerNode::_type_handle;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -54,8 +58,13 @@ BulletCharacterControllerNode(BulletShape *shape, PN_stdfloat step_height, const
|
|||||||
_angular_movement = 0.0f;
|
_angular_movement = 0.0f;
|
||||||
|
|
||||||
// Character controller
|
// Character controller
|
||||||
|
#if BT_BULLET_VERSION >= 285
|
||||||
|
_character = new btKinematicCharacterController(_ghost, convex, step_height, up_vectors[_up]);
|
||||||
|
_character->setGravity(up_vectors[_up] * -(btScalar)9.81f);
|
||||||
|
#else
|
||||||
_character = new btKinematicCharacterController(_ghost, convex, step_height, _up);
|
_character = new btKinematicCharacterController(_ghost, convex, step_height, _up);
|
||||||
_character->setGravity((btScalar)9.81f);
|
_character->setGravity((btScalar)9.81f);
|
||||||
|
#endif
|
||||||
|
|
||||||
// Retain a pointer to the shape
|
// Retain a pointer to the shape
|
||||||
_shape = shape;
|
_shape = shape;
|
||||||
@ -268,8 +277,11 @@ get_max_slope() const {
|
|||||||
*/
|
*/
|
||||||
PN_stdfloat BulletCharacterControllerNode::
|
PN_stdfloat BulletCharacterControllerNode::
|
||||||
get_gravity() const {
|
get_gravity() const {
|
||||||
|
#if BT_BULLET_VERSION >= 285
|
||||||
|
return -(PN_stdfloat)_character->getGravity()[_up];
|
||||||
|
#else
|
||||||
return (PN_stdfloat)_character->getGravity();
|
return (PN_stdfloat)_character->getGravity();
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -277,8 +289,11 @@ get_gravity() const {
|
|||||||
*/
|
*/
|
||||||
void BulletCharacterControllerNode::
|
void BulletCharacterControllerNode::
|
||||||
set_gravity(PN_stdfloat gravity) {
|
set_gravity(PN_stdfloat gravity) {
|
||||||
|
#if BT_BULLET_VERSION >= 285
|
||||||
|
_character->setGravity(up_vectors[_up] * -(btScalar)gravity);
|
||||||
|
#else
|
||||||
_character->setGravity((btScalar)gravity);
|
_character->setGravity((btScalar)gravity);
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -24,8 +24,15 @@ INLINE BulletManifoldPoint::
|
|||||||
*/
|
*/
|
||||||
INLINE void BulletManifoldPoint::
|
INLINE void BulletManifoldPoint::
|
||||||
set_lateral_friction_initialized(bool value) {
|
set_lateral_friction_initialized(bool value) {
|
||||||
|
#if BT_BULLET_VERSION >= 285
|
||||||
|
if (value) {
|
||||||
|
_pt.m_contactPointFlags |= BT_CONTACT_FLAG_LATERAL_FRICTION_INITIALIZED;
|
||||||
|
} else {
|
||||||
|
_pt.m_contactPointFlags &= ~BT_CONTACT_FLAG_LATERAL_FRICTION_INITIALIZED;
|
||||||
|
}
|
||||||
|
#else
|
||||||
_pt.m_lateralFrictionInitialized = value;
|
_pt.m_lateralFrictionInitialized = value;
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -33,8 +40,11 @@ set_lateral_friction_initialized(bool value) {
|
|||||||
*/
|
*/
|
||||||
INLINE bool BulletManifoldPoint::
|
INLINE bool BulletManifoldPoint::
|
||||||
get_lateral_friction_initialized() const {
|
get_lateral_friction_initialized() const {
|
||||||
|
#if BT_BULLET_VERSION >= 285
|
||||||
|
return (_pt.m_contactPointFlags & BT_CONTACT_FLAG_LATERAL_FRICTION_INITIALIZED) != 0;
|
||||||
|
#else
|
||||||
return _pt.m_lateralFrictionInitialized;
|
return _pt.m_lateralFrictionInitialized;
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -195,8 +205,9 @@ get_applied_impulse_lateral2() const {
|
|||||||
*/
|
*/
|
||||||
INLINE void BulletManifoldPoint::
|
INLINE void BulletManifoldPoint::
|
||||||
set_contact_cfm1(PN_stdfloat value) {
|
set_contact_cfm1(PN_stdfloat value) {
|
||||||
|
#if BT_BULLET_VERSION < 285
|
||||||
_pt.m_contactCFM1 = (btScalar)value;
|
_pt.m_contactCFM1 = (btScalar)value;
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -204,8 +215,11 @@ set_contact_cfm1(PN_stdfloat value) {
|
|||||||
*/
|
*/
|
||||||
INLINE PN_stdfloat BulletManifoldPoint::
|
INLINE PN_stdfloat BulletManifoldPoint::
|
||||||
get_contact_cfm1() const {
|
get_contact_cfm1() const {
|
||||||
|
#if BT_BULLET_VERSION < 285
|
||||||
return (PN_stdfloat)_pt.m_contactCFM1;
|
return (PN_stdfloat)_pt.m_contactCFM1;
|
||||||
|
#else
|
||||||
|
return 0;
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -213,8 +227,9 @@ get_contact_cfm1() const {
|
|||||||
*/
|
*/
|
||||||
INLINE void BulletManifoldPoint::
|
INLINE void BulletManifoldPoint::
|
||||||
set_contact_cfm2(PN_stdfloat value) {
|
set_contact_cfm2(PN_stdfloat value) {
|
||||||
|
#if BT_BULLET_VERSION < 285
|
||||||
_pt.m_contactCFM2 = (btScalar)value;
|
_pt.m_contactCFM2 = (btScalar)value;
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -222,6 +237,9 @@ set_contact_cfm2(PN_stdfloat value) {
|
|||||||
*/
|
*/
|
||||||
INLINE PN_stdfloat BulletManifoldPoint::
|
INLINE PN_stdfloat BulletManifoldPoint::
|
||||||
get_contact_cfm2() const {
|
get_contact_cfm2() const {
|
||||||
|
#if BT_BULLET_VERSION < 285
|
||||||
return (PN_stdfloat)_pt.m_contactCFM2;
|
return (PN_stdfloat)_pt.m_contactCFM2;
|
||||||
|
#else
|
||||||
|
return 0;
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
@ -436,8 +436,20 @@ convert_collision_node(CollisionNode *node, const WorkingNodePath &node_path,
|
|||||||
// traverse solids
|
// traverse solids
|
||||||
for (int i = 0; i < num_solids; i++) {
|
for (int i = 0; i < num_solids; i++) {
|
||||||
CPT(CollisionSolid) child = node->get_solid(i);
|
CPT(CollisionSolid) child = node->get_solid(i);
|
||||||
|
int flags = EggGroup::CF_descend;
|
||||||
|
|
||||||
|
if (!child->is_tangible()) {
|
||||||
|
flags |= EggGroup::CF_intangible;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (child->has_effective_normal() &&
|
||||||
|
child->get_effective_normal() == LVector3::up()) {
|
||||||
|
flags |= EggGroup::CF_level;
|
||||||
|
}
|
||||||
|
|
||||||
if (child->is_of_type(CollisionPolygon::get_class_type())) {
|
if (child->is_of_type(CollisionPolygon::get_class_type())) {
|
||||||
egg_group->set_cs_type(EggGroup::CST_polyset);
|
egg_group->set_cs_type(EggGroup::CST_polyset);
|
||||||
|
egg_group->set_collide_flags(flags);
|
||||||
|
|
||||||
EggPolygon *egg_poly = new EggPolygon;
|
EggPolygon *egg_poly = new EggPolygon;
|
||||||
egg_group->add_child(egg_poly);
|
egg_group->add_child(egg_poly);
|
||||||
@ -463,7 +475,6 @@ convert_collision_node(CollisionNode *node, const WorkingNodePath &node_path,
|
|||||||
egg_sphere = egg_group;
|
egg_sphere = egg_group;
|
||||||
} else {
|
} else {
|
||||||
egg_sphere = new EggGroup;
|
egg_sphere = new EggGroup;
|
||||||
egg_sphere->set_collide_flags(EggGroup::CF_descend);
|
|
||||||
egg_group->add_child(egg_sphere);
|
egg_group->add_child(egg_sphere);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -472,6 +483,7 @@ convert_collision_node(CollisionNode *node, const WorkingNodePath &node_path,
|
|||||||
} else {
|
} else {
|
||||||
egg_sphere->set_cs_type(EggGroup::CST_sphere);
|
egg_sphere->set_cs_type(EggGroup::CST_sphere);
|
||||||
}
|
}
|
||||||
|
egg_sphere->set_collide_flags(flags);
|
||||||
|
|
||||||
EggVertex ev1, ev2;
|
EggVertex ev1, ev2;
|
||||||
ev1.set_pos(LCAST(double, (center + offset) * net_mat));
|
ev1.set_pos(LCAST(double, (center + offset) * net_mat));
|
||||||
@ -505,10 +517,10 @@ convert_collision_node(CollisionNode *node, const WorkingNodePath &node_path,
|
|||||||
egg_plane = egg_group;
|
egg_plane = egg_group;
|
||||||
} else {
|
} else {
|
||||||
egg_plane = new EggGroup;
|
egg_plane = new EggGroup;
|
||||||
egg_plane->set_collide_flags(EggGroup::CF_descend);
|
|
||||||
egg_group->add_child(egg_plane);
|
egg_group->add_child(egg_plane);
|
||||||
}
|
}
|
||||||
egg_plane->set_cs_type(EggGroup::CST_plane);
|
egg_plane->set_cs_type(EggGroup::CST_plane);
|
||||||
|
egg_plane->set_collide_flags(flags);
|
||||||
|
|
||||||
EggVertex ev0, ev1, ev2;
|
EggVertex ev0, ev1, ev2;
|
||||||
ev0.set_pos(LCAST(double, origin * net_mat));
|
ev0.set_pos(LCAST(double, origin * net_mat));
|
||||||
@ -532,10 +544,10 @@ convert_collision_node(CollisionNode *node, const WorkingNodePath &node_path,
|
|||||||
egg_box = egg_group;
|
egg_box = egg_group;
|
||||||
} else {
|
} else {
|
||||||
egg_box = new EggGroup;
|
egg_box = new EggGroup;
|
||||||
egg_box->set_collide_flags(EggGroup::CF_descend);
|
|
||||||
egg_group->add_child(egg_box);
|
egg_group->add_child(egg_box);
|
||||||
}
|
}
|
||||||
egg_box->set_cs_type(EggGroup::CST_box);
|
egg_box->set_cs_type(EggGroup::CST_box);
|
||||||
|
egg_box->set_collide_flags(flags);
|
||||||
|
|
||||||
// Just add the min and max points.
|
// Just add the min and max points.
|
||||||
EggVertex ev0, ev1;
|
EggVertex ev0, ev1;
|
||||||
@ -571,10 +583,10 @@ convert_collision_node(CollisionNode *node, const WorkingNodePath &node_path,
|
|||||||
egg_tube = egg_group;
|
egg_tube = egg_group;
|
||||||
} else {
|
} else {
|
||||||
egg_tube = new EggGroup;
|
egg_tube = new EggGroup;
|
||||||
egg_tube->set_collide_flags(EggGroup::CF_descend);
|
|
||||||
egg_group->add_child(egg_tube);
|
egg_group->add_child(egg_tube);
|
||||||
}
|
}
|
||||||
egg_tube->set_cs_type(EggGroup::CST_tube);
|
egg_tube->set_cs_type(EggGroup::CST_tube);
|
||||||
|
egg_tube->set_collide_flags(flags);
|
||||||
|
|
||||||
// Add two points for the endcaps, and then two points around the
|
// Add two points for the endcaps, and then two points around the
|
||||||
// centroid to indicate the radius.
|
// centroid to indicate the radius.
|
||||||
|
@ -279,7 +279,7 @@ void MaxEggJoint::CreateMaxBone(void)
|
|||||||
_node->SetRenderable(FALSE);
|
_node->SetRenderable(FALSE);
|
||||||
|
|
||||||
#ifdef _UNICODE
|
#ifdef _UNICODE
|
||||||
TCHAR *wname [1024];
|
TCHAR wname[1024];
|
||||||
wname[1023] = 0;
|
wname[1023] = 0;
|
||||||
mbstowcs(wname, _egg_joint->get_name().c_str(), 1023);
|
mbstowcs(wname, _egg_joint->get_name().c_str(), 1023);
|
||||||
_node->SetName(wname);
|
_node->SetName(wname);
|
||||||
@ -452,7 +452,14 @@ MaxEggMesh *MaxEggLoader::GetMesh(EggVertexPool *pool)
|
|||||||
result->_tvert_count = 0;
|
result->_tvert_count = 0;
|
||||||
result->_cvert_count = 0;
|
result->_cvert_count = 0;
|
||||||
result->_face_count = 0;
|
result->_face_count = 0;
|
||||||
result->_node->SetName(TSTR(name.c_str()));
|
#ifdef _UNICODE
|
||||||
|
TCHAR wname[1024];
|
||||||
|
wname[1023] = 0;
|
||||||
|
mbstowcs(wname, name.c_str(), 1023);
|
||||||
|
result->_node->SetName(wname);
|
||||||
|
#else
|
||||||
|
result->_node->SetName((char*) name.c_str());
|
||||||
|
#endif
|
||||||
_mesh_tab[pool] = result;
|
_mesh_tab[pool] = result;
|
||||||
}
|
}
|
||||||
return result;
|
return result;
|
||||||
|
@ -565,7 +565,14 @@ make_nurbs_curve(INode *max_node, NURBSCVCurve *curve,
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef _UNICODE
|
||||||
|
char mbname[1024];
|
||||||
|
mbname[1023] = 0;
|
||||||
|
wcstombs(mbname, max_node->GetName(), 1023);
|
||||||
|
string name(mbname);
|
||||||
|
#else
|
||||||
string name = max_node->GetName();
|
string name = max_node->GetName();
|
||||||
|
#endif
|
||||||
|
|
||||||
string vpool_name = name + ".cvs";
|
string vpool_name = name + ".cvs";
|
||||||
EggVertexPool *vpool = new EggVertexPool(vpool_name);
|
EggVertexPool *vpool = new EggVertexPool(vpool_name);
|
||||||
@ -624,7 +631,15 @@ make_polyset(INode *max_node, Mesh *mesh,
|
|||||||
// separate vertices. So instead of adding all the vertices up front,
|
// separate vertices. So instead of adding all the vertices up front,
|
||||||
// we'll start with an empty vpool, and add vertices to it on the fly.
|
// we'll start with an empty vpool, and add vertices to it on the fly.
|
||||||
|
|
||||||
|
#ifdef _UNICODE
|
||||||
|
char mbname[1024];
|
||||||
|
mbname[1023] = 0;
|
||||||
|
wcstombs(mbname, max_node->GetName(), 1023);
|
||||||
|
string node_name(mbname);
|
||||||
|
#else
|
||||||
string node_name = max_node->GetName();
|
string node_name = max_node->GetName();
|
||||||
|
#endif
|
||||||
|
|
||||||
string vpool_name = node_name + ".verts";
|
string vpool_name = node_name + ".verts";
|
||||||
EggVertexPool *vpool = new EggVertexPool(vpool_name);
|
EggVertexPool *vpool = new EggVertexPool(vpool_name);
|
||||||
egg_group->add_child(vpool);
|
egg_group->add_child(vpool);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user