Fix and clean disabled shapes handling in godot physics servers
In 3D, disabled shapes are now not added to the broadphase anymore. Since they are removed right away when disabled, no need to check for disabled shapes for any query that comes from the broadphase. Also Fixes raycast queries returning disabled shapes. In 2D, disabled shapes where already not added to the broadphase. Remove the same unnecessary checks as in 3D. Overall harmonized API for disabled shapes in the physics servers and removed duplicate method.
This commit is contained in:
@ -47,8 +47,6 @@ void CollisionObject2DSW::add_shape(Shape2DSW *p_shape, const Transform2D &p_tra
|
||||
if (!pending_shape_update_list.in_list()) {
|
||||
Physics2DServerSW::singletonsw->pending_shape_update_list.add(&pending_shape_update_list);
|
||||
}
|
||||
// _update_shapes();
|
||||
// _shapes_changed();
|
||||
}
|
||||
|
||||
void CollisionObject2DSW::set_shape(int p_index, Shape2DSW *p_shape) {
|
||||
@ -61,8 +59,6 @@ void CollisionObject2DSW::set_shape(int p_index, Shape2DSW *p_shape) {
|
||||
if (!pending_shape_update_list.in_list()) {
|
||||
Physics2DServerSW::singletonsw->pending_shape_update_list.add(&pending_shape_update_list);
|
||||
}
|
||||
// _update_shapes();
|
||||
// _shapes_changed();
|
||||
}
|
||||
|
||||
void CollisionObject2DSW::set_shape_metadata(int p_index, const Variant &p_metadata) {
|
||||
@ -79,11 +75,9 @@ void CollisionObject2DSW::set_shape_transform(int p_index, const Transform2D &p_
|
||||
if (!pending_shape_update_list.in_list()) {
|
||||
Physics2DServerSW::singletonsw->pending_shape_update_list.add(&pending_shape_update_list);
|
||||
}
|
||||
// _update_shapes();
|
||||
// _shapes_changed();
|
||||
}
|
||||
|
||||
void CollisionObject2DSW::set_shape_as_disabled(int p_idx, bool p_disabled) {
|
||||
void CollisionObject2DSW::set_shape_disabled(int p_idx, bool p_disabled) {
|
||||
ERR_FAIL_INDEX(p_idx, shapes.size());
|
||||
|
||||
CollisionObject2DSW::Shape &shape = shapes.write[p_idx];
|
||||
@ -103,12 +97,10 @@ void CollisionObject2DSW::set_shape_as_disabled(int p_idx, bool p_disabled) {
|
||||
if (!pending_shape_update_list.in_list()) {
|
||||
Physics2DServerSW::singletonsw->pending_shape_update_list.add(&pending_shape_update_list);
|
||||
}
|
||||
//_update_shapes();
|
||||
} else if (!p_disabled && shape.bpid == 0) {
|
||||
if (!pending_shape_update_list.in_list()) {
|
||||
Physics2DServerSW::singletonsw->pending_shape_update_list.add(&pending_shape_update_list);
|
||||
}
|
||||
//_update_shapes(); // automatically adds shape with bpid == 0
|
||||
}
|
||||
}
|
||||
|
||||
@ -139,8 +131,6 @@ void CollisionObject2DSW::remove_shape(int p_index) {
|
||||
if (!pending_shape_update_list.in_list()) {
|
||||
Physics2DServerSW::singletonsw->pending_shape_update_list.add(&pending_shape_update_list);
|
||||
}
|
||||
// _update_shapes();
|
||||
// _shapes_changed();
|
||||
}
|
||||
|
||||
void CollisionObject2DSW::_set_static(bool p_static) {
|
||||
@ -177,7 +167,6 @@ void CollisionObject2DSW::_update_shapes() {
|
||||
|
||||
for (int i = 0; i < shapes.size(); i++) {
|
||||
Shape &s = shapes.write[i];
|
||||
|
||||
if (s.disabled) {
|
||||
continue;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user