#include "gravity.h" #include "consts.h" #include "vec_utils.h" #include void gravity(universe_t *uni) { const float dt = PHYSICS_TIMESTEP; for (unsigned int i = 0; i < uni->num_bodies; i++) { mass_body_t *body_1 = &uni->bodies[i]; for (unsigned int y = i + 1; y < uni->num_bodies; y++) { mass_body_t *body_2 = &uni->bodies[y]; Vector2 separation = vec2_diff(body_2->position, body_1->position); float distance_squared = vec2_dot(separation, separation); if (distance_squared == 0.0f) { continue; } Vector2 direction = vec2_normalize(separation); float factor = SIMULATION_G * dt / distance_squared; body_1->speed = vec2_sum(body_1->speed, vec2_scale(direction, factor * body_2->mass)); body_2->speed = vec2_sum(body_2->speed, vec2_scale(direction, -factor * body_1->mass)); } } }