diff --git a/core/src/physics_entity.c b/core/src/physics_entity.c index 982f252..57b91bd 100644 --- a/core/src/physics_entity.c +++ b/core/src/physics_entity.c @@ -85,9 +85,12 @@ void physics_entity_update(PhysicsEntity self) { list_foreach(Contact*, contact, contacts) self.tc->on_overlap(self.data, contact->hit.other); } else { - self.tc->collision_solver(self.data, contacts); - list_foreach(Contact*, contact, contacts) + if(!rigidbody_is_static(body)) { + physics_entity_solve_contacts(self, contacts); + } + list_foreach(Contact*, contact, contacts) { self.tc->on_collision(self.data, contact->hit); + } } } rigidbody_collect_contacts(body); diff --git a/core/src/physics_entity.h b/core/src/physics_entity.h index d1c05d7..d33128a 100644 --- a/core/src/physics_entity.h +++ b/core/src/physics_entity.h @@ -15,7 +15,6 @@ typedef struct IPhysicsEntity { Shape* (*const get_shape)(void* self); void(*const on_collision)(void* self, Collision collision); void(*const on_overlap)(void* self, PhysicsEntity other); - void(*const collision_solver)(void* self, List* collisions); } IPhysicsEntity; typedef struct PhysicsEntity { @@ -29,20 +28,18 @@ extern void physics_entity_solve_contacts(PhysicsEntity self, List* contacts); extern void physics_entity_update(PhysicsEntity self); -#define impl_PhysicsEntity_for(T, get_rigidbody_f, get_shape_f, on_collision_f, on_overlap_f, collision_solver_f)\ +#define impl_PhysicsEntity_for(T, get_rigidbody_f, get_shape_f, on_collision_f, on_overlap_f)\ static inline PhysicsEntity T##_as_PhysicsEntity(T* x) {\ TC_FN_TYPECHECK(Transformable, T##_as_Transformable, T*);\ TC_FN_TYPECHECK(RigidBody*, get_rigidbody_f, T*);\ TC_FN_TYPECHECK(Shape*, get_shape_f, T*);\ TC_FN_TYPECHECK(void, on_collision_f, T*, Collision);\ TC_FN_TYPECHECK(void, on_overlap_f, T*, PhysicsEntity);\ - TC_FN_TYPECHECK(void, collision_solver_f, T*, List*);\ static IPhysicsEntity const tc = {\ .get_rigidbody = (RigidBody*(*const)(void*)) get_rigidbody_f,\ .get_shape = (Shape*(*const)(void*)) get_shape_f,\ .on_collision = (void(*const)(void*,Collision)) on_collision_f,\ - .on_overlap = (void(*const)(void*,PhysicsEntity)) on_overlap_f\ - .collision_solver = (void(*const)(void*,List*)) collision_solver_f,\ + .on_overlap = (void(*const)(void*,PhysicsEntity)) on_overlap_f,\ };\ Transformable transformable = T##_as_Transformable(x);\ return (PhysicsEntity){.data = x, .tc = &tc, .transformable = transformable.tc};\