diff --git a/core/src/physics_entity.c b/core/src/physics_entity.c index 57b91bd..2436dbe 100644 --- a/core/src/physics_entity.c +++ b/core/src/physics_entity.c @@ -81,11 +81,11 @@ void physics_entity_update(PhysicsEntity self) { List* contacts = rigidbody_get_contacts(body); if(contacts->len > 0) { - if(rigidbody_get_overlap(body)) { + if(rigidbody_get_overlap(body) == 1) { list_foreach(Contact*, contact, contacts) self.tc->on_overlap(self.data, contact->hit.other); } else { - if(!rigidbody_is_static(body)) { + if(rigidbody_is_static(body) == 0) { physics_entity_solve_contacts(self, contacts); } list_foreach(Contact*, contact, contacts) { diff --git a/core/src/physics_world.c b/core/src/physics_world.c index 2b95ef4..925e894 100644 --- a/core/src/physics_world.c +++ b/core/src/physics_world.c @@ -43,6 +43,8 @@ void _internal_physics_narrow_collision() { if(collision_check(*left, *right, &collision_left, &collision_right)) { left->tc->on_collision(left->data, collision_left); right->tc->on_collision(right->data, collision_right); + rigidbody_add_contact(left->tc->get_rigidbody(left->data), collision_left); + rigidbody_add_contact(right->tc->get_rigidbody(right->data), collision_right); } } } diff --git a/core/src/rigidbody.c b/core/src/rigidbody.c index 06d2383..fed0d8b 100644 --- a/core/src/rigidbody.c +++ b/core/src/rigidbody.c @@ -44,8 +44,11 @@ RigidBody* rigidbody_make(Transformable transform) { .overlap = 0, + .is_static = 0, + .contacts = list_from_type(Contact), }; + self->internal_transform.scale = OneVector; return self; } @@ -89,6 +92,9 @@ void _internal_debug_draw_collision_edge(RigidBody* self, Contact* contact) { } void rigidbody_integrate_forces(RigidBody* self) { + if(self->is_static) + return; + const float dt = delta_time(); Vector position = self->internal_transform.position;