From 8a05984afae653dc81236f0ec245683ffb2e286a Mon Sep 17 00:00:00 2001 From: Sara Date: Sun, 14 Jan 2024 21:00:02 +0100 Subject: [PATCH] fix: physics_world_query_all no longer returns corrupted pointers --- core/src/collision.c | 2 +- core/src/physics_world.c | 10 ++++------ 2 files changed, 5 insertions(+), 7 deletions(-) diff --git a/core/src/collision.c b/core/src/collision.c index 84fdd3b..9dd49fa 100644 --- a/core/src/collision.c +++ b/core/src/collision.c @@ -183,5 +183,5 @@ int _internal_overlap_check(PhysicsQuery a, PhysicsQuery b) { int overlap_check(PhysicsQuery query, Collider* 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)); } diff --git a/core/src/physics_world.c b/core/src/physics_world.c index 39cd79e..96c49fc 100644 --- a/core/src/physics_world.c +++ b/core/src/physics_world.c @@ -114,15 +114,14 @@ void physics_world_tick() { } 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) { RigidBody* body = entity->tc->get_rigidbody(entity->data); 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)) - list_add(&result, *collider); - } + list_add(&result, collider); } return result; } @@ -152,10 +151,9 @@ Collider* physics_world_query(PhysicsQuery query, RigidBody* ignore) { RigidBody* body = entity->tc->get_rigidbody(entity->data); 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)) return *collider; - } } return NULL; }