feat(physics): static colliders and physics response
This commit is contained in:
parent
9adfac023f
commit
e2c4f5d4c9
|
@ -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) {
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
|
|
Loading…
Reference in a new issue