26 lines
914 B
C
26 lines
914 B
C
#include "gravity.h"
|
|
#include "consts.h"
|
|
#include "vec_utils.h"
|
|
#include <raylib.h>
|
|
|
|
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));
|
|
}
|
|
}
|
|
}
|