mirror of
https://github.com/godotengine/godot.git
synced 2024-11-23 12:43:43 +00:00
Fiex bullet crash
This commit is contained in:
parent
af290f7b7d
commit
b252e66414
@ -30,6 +30,7 @@
|
|||||||
|
|
||||||
#include "area_bullet.h"
|
#include "area_bullet.h"
|
||||||
|
|
||||||
|
#include "bullet_physics_server.h"
|
||||||
#include "bullet_types_converter.h"
|
#include "bullet_types_converter.h"
|
||||||
#include "bullet_utilities.h"
|
#include "bullet_utilities.h"
|
||||||
#include "collision_object_bullet.h"
|
#include "collision_object_bullet.h"
|
||||||
@ -57,6 +58,7 @@ AreaBullet::AreaBullet() :
|
|||||||
spOv_priority(0) {
|
spOv_priority(0) {
|
||||||
|
|
||||||
btGhost = bulletnew(btGhostObject);
|
btGhost = bulletnew(btGhostObject);
|
||||||
|
btGhost->setCollisionShape(BulletPhysicsServer::get_empty_shape());
|
||||||
setupBulletCollisionObject(btGhost);
|
setupBulletCollisionObject(btGhost);
|
||||||
/// Collision objects with a callback still have collision response with dynamic rigid bodies.
|
/// Collision objects with a callback still have collision response with dynamic rigid bodies.
|
||||||
/// In order to use collision objects as trigger, you have to disable the collision response.
|
/// In order to use collision objects as trigger, you have to disable the collision response.
|
||||||
@ -162,7 +164,10 @@ bool AreaBullet::is_monitoring() const {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void AreaBullet::main_shape_resetted() {
|
void AreaBullet::main_shape_resetted() {
|
||||||
btGhost->setCollisionShape(get_main_shape());
|
if (get_main_shape())
|
||||||
|
btGhost->setCollisionShape(get_main_shape());
|
||||||
|
else
|
||||||
|
btGhost->setCollisionShape(BulletPhysicsServer::get_empty_shape());
|
||||||
}
|
}
|
||||||
|
|
||||||
void AreaBullet::reload_body() {
|
void AreaBullet::reload_body() {
|
||||||
|
@ -61,7 +61,7 @@ class BulletPhysicsServer : public PhysicsServer {
|
|||||||
mutable RID_Owner<JointBullet> joint_owner;
|
mutable RID_Owner<JointBullet> joint_owner;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
/// This is used when a collision shape is not active, so the bullet compound shapes index are always sync with godot index
|
/// This is used as replacement of collision shape inside a compound or main shape
|
||||||
static btEmptyShape *emptyShape;
|
static btEmptyShape *emptyShape;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
@ -279,7 +279,7 @@ RigidBodyBullet::RigidBodyBullet() :
|
|||||||
|
|
||||||
// Initial properties
|
// Initial properties
|
||||||
const btVector3 localInertia(0, 0, 0);
|
const btVector3 localInertia(0, 0, 0);
|
||||||
btRigidBody::btRigidBodyConstructionInfo cInfo(mass, godotMotionState, NULL, localInertia);
|
btRigidBody::btRigidBodyConstructionInfo cInfo(mass, godotMotionState, BulletPhysicsServer::get_empty_shape(), localInertia);
|
||||||
|
|
||||||
btBody = bulletnew(btRigidBody(cInfo));
|
btBody = bulletnew(btRigidBody(cInfo));
|
||||||
setupBulletCollisionObject(btBody);
|
setupBulletCollisionObject(btBody);
|
||||||
@ -315,7 +315,10 @@ void RigidBodyBullet::destroy_kinematic_utilities() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void RigidBodyBullet::main_shape_resetted() {
|
void RigidBodyBullet::main_shape_resetted() {
|
||||||
btBody->setCollisionShape(get_main_shape());
|
if (get_main_shape())
|
||||||
|
btBody->setCollisionShape(get_main_shape());
|
||||||
|
else
|
||||||
|
btBody->setCollisionShape(BulletPhysicsServer::get_empty_shape());
|
||||||
set_continuous_collision_detection(is_continuous_collision_detection_enabled()); // Reset
|
set_continuous_collision_detection(is_continuous_collision_detection_enabled()); // Reset
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user