summaryrefslogtreecommitdiff
path: root/modules
diff options
context:
space:
mode:
Diffstat (limited to 'modules')
-rw-r--r--modules/bullet/bullet_physics_server.cpp39
-rw-r--r--modules/bullet/bullet_physics_server.h3
2 files changed, 23 insertions, 19 deletions
diff --git a/modules/bullet/bullet_physics_server.cpp b/modules/bullet/bullet_physics_server.cpp
index 2656074296..96875924a5 100644
--- a/modules/bullet/bullet_physics_server.cpp
+++ b/modules/bullet/bullet_physics_server.cpp
@@ -81,7 +81,7 @@ void BulletPhysicsServer::_bind_methods() {
BulletPhysicsServer::BulletPhysicsServer()
: PhysicsServer(),
active(true),
- activeSpace(NULL) {}
+ active_spaces_count(0) {}
BulletPhysicsServer::~BulletPhysicsServer() {}
@@ -162,27 +162,28 @@ RID BulletPhysicsServer::space_create() {
}
void BulletPhysicsServer::space_set_active(RID p_space, bool p_active) {
+
+ SpaceBullet *space = space_owner.get(p_space);
+ ERR_FAIL_COND(!space);
+
+ if (space_is_active(p_space) == p_active) {
+ return;
+ }
+
if (p_active) {
- if (activeSpace) {
- // There is another space and this cannot be activated
- ERR_PRINT("There is another space, before activate new one deactivate the current space.");
- } else {
- SpaceBullet *space = space_owner.get(p_space);
- if (space) {
- activeSpace = space;
- } else {
- ERR_PRINT("The passed RID is not a valid space. Please provide a RID with SpaceBullet type.");
- }
- }
+ ++active_spaces_count;
+ active_spaces.push_back(space);
} else {
- if (!space_is_active(p_space)) {
- activeSpace = NULL;
- }
+ --active_spaces_count;
+ active_spaces.erase(space);
}
}
bool BulletPhysicsServer::space_is_active(RID p_space) const {
- return NULL != activeSpace && activeSpace == p_space.get_data();
+ SpaceBullet *space = space_owner.get(p_space);
+ ERR_FAIL_COND_V(!space, false);
+
+ return -1 != active_spaces.find(space);
}
void BulletPhysicsServer::space_set_param(RID p_space, SpaceParameter p_param, real_t p_value) {
@@ -1296,8 +1297,10 @@ void BulletPhysicsServer::step(float p_deltaTime) {
return;
BulletPhysicsDirectBodyState::singleton_setDeltaTime(p_deltaTime);
- if (activeSpace) {
- activeSpace->step(p_deltaTime);
+
+ for (int i = 0; i < active_spaces_count; ++i) {
+
+ active_spaces[i]->step(p_deltaTime);
}
}
diff --git a/modules/bullet/bullet_physics_server.h b/modules/bullet/bullet_physics_server.h
index e66e8a5ac1..04d9d89594 100644
--- a/modules/bullet/bullet_physics_server.h
+++ b/modules/bullet/bullet_physics_server.h
@@ -47,7 +47,8 @@ class BulletPhysicsServer : public PhysicsServer {
friend class BulletPhysicsDirectSpaceState;
bool active;
- SpaceBullet *activeSpace;
+ char active_spaces_count;
+ Vector<SpaceBullet *> active_spaces;
mutable RID_Owner<SpaceBullet> space_owner;
mutable RID_Owner<ShapeBullet> shape_owner;