fix: physics_world_query_all no longer returns corrupted pointers
This commit is contained in:
parent
f50d6a0b93
commit
8a05984afa
|
@ -183,5 +183,5 @@ int _internal_overlap_check(PhysicsQuery a, PhysicsQuery b) {
|
||||||
|
|
||||||
int overlap_check(PhysicsQuery query, Collider* collider) {
|
int overlap_check(PhysicsQuery query, Collider* collider) {
|
||||||
PhysicsQuery collider_query = collider_to_query(collider);
|
PhysicsQuery collider_query = collider_to_query(collider);
|
||||||
return (query.mask & collider_query.mask) != 0 && _internal_overlap_check(query, collider_query) || _internal_overlap_check(collider_query, query);
|
return (query.mask & collider_query.mask) != 0 && (_internal_overlap_check(query, collider_query) || _internal_overlap_check(collider_query, query));
|
||||||
}
|
}
|
||||||
|
|
|
@ -114,15 +114,14 @@ void physics_world_tick() {
|
||||||
}
|
}
|
||||||
|
|
||||||
List physics_world_query_all(PhysicsQuery query, RigidBody* ignore) {
|
List physics_world_query_all(PhysicsQuery query, RigidBody* ignore) {
|
||||||
List result = list_init(sizeof(Collider*));
|
List result = list_from_type(Collider*);
|
||||||
list_foreach(PhysicsEntity*, entity, &_world_bodies) {
|
list_foreach(PhysicsEntity*, entity, &_world_bodies) {
|
||||||
RigidBody* body = entity->tc->get_rigidbody(entity->data);
|
RigidBody* body = entity->tc->get_rigidbody(entity->data);
|
||||||
if(body == ignore) continue;
|
if(body == ignore) continue;
|
||||||
|
|
||||||
list_foreach(Collider**, collider, rigidbody_get_colliders(body)) {
|
list_foreach(Collider**, collider, rigidbody_get_colliders(body))
|
||||||
if(overlap_check(query, *collider))
|
if(overlap_check(query, *collider))
|
||||||
list_add(&result, *collider);
|
list_add(&result, collider);
|
||||||
}
|
|
||||||
}
|
}
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
@ -152,11 +151,10 @@ Collider* physics_world_query(PhysicsQuery query, RigidBody* ignore) {
|
||||||
RigidBody* body = entity->tc->get_rigidbody(entity->data);
|
RigidBody* body = entity->tc->get_rigidbody(entity->data);
|
||||||
if(body == ignore) continue;
|
if(body == ignore) continue;
|
||||||
|
|
||||||
list_foreach(Collider**, collider, rigidbody_get_colliders(body)) {
|
list_foreach(Collider**, collider, rigidbody_get_colliders(body))
|
||||||
if(overlap_check(query, *collider))
|
if(overlap_check(query, *collider))
|
||||||
return *collider;
|
return *collider;
|
||||||
}
|
}
|
||||||
}
|
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue