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); |     List* contacts = rigidbody_get_contacts(body); | ||||||
|     if(contacts->len > 0) { |     if(contacts->len > 0) { | ||||||
|         if(rigidbody_get_overlap(body)) { |         if(rigidbody_get_overlap(body) == 1) { | ||||||
|             list_foreach(Contact*, contact, contacts) |             list_foreach(Contact*, contact, contacts) | ||||||
|                 self.tc->on_overlap(self.data, contact->hit.other); |                 self.tc->on_overlap(self.data, contact->hit.other); | ||||||
|         } else { |         } else { | ||||||
|             if(!rigidbody_is_static(body)) { |             if(rigidbody_is_static(body) == 0) { | ||||||
|                 physics_entity_solve_contacts(self, contacts); |                 physics_entity_solve_contacts(self, contacts); | ||||||
|             } |             } | ||||||
|             list_foreach(Contact*, contact, contacts) { |             list_foreach(Contact*, contact, contacts) { | ||||||
|  |  | ||||||
|  | @ -43,6 +43,8 @@ void _internal_physics_narrow_collision() { | ||||||
|             if(collision_check(*left, *right, &collision_left, &collision_right)) { |             if(collision_check(*left, *right, &collision_left, &collision_right)) { | ||||||
|                 left->tc->on_collision(left->data, collision_left); |                 left->tc->on_collision(left->data, collision_left); | ||||||
|                 right->tc->on_collision(right->data, collision_right); |                 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, |         .overlap = 0, | ||||||
|          |          | ||||||
|  |         .is_static = 0, | ||||||
|  |          | ||||||
|         .contacts = list_from_type(Contact), |         .contacts = list_from_type(Contact), | ||||||
|     }; |     }; | ||||||
|  |     self->internal_transform.scale = OneVector; | ||||||
|     return self; |     return self; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | @ -89,6 +92,9 @@ void _internal_debug_draw_collision_edge(RigidBody* self, Contact* contact) { | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| void rigidbody_integrate_forces(RigidBody* self) { | void rigidbody_integrate_forces(RigidBody* self) { | ||||||
|  |     if(self->is_static) | ||||||
|  |         return; | ||||||
|  |      | ||||||
|     const float dt = delta_time(); |     const float dt = delta_time(); | ||||||
| 
 | 
 | ||||||
|     Vector position = self->internal_transform.position; |     Vector position = self->internal_transform.position; | ||||||
|  |  | ||||||
		Loading…
	
		Reference in a new issue
	
	 Sara
						Sara