Gravity something works idk

This commit is contained in:
h3cx committed 2026-09-30 23:46:14 +02:00
1 parent aa4f0dfe52
commit d4987568d7
4 files changed
+59 -36

No files matched your search

+40 -17
View File
@@ -4,6 +4,7 @@
#include "gravity.h"
#include "mechanics.h"
#include "objects.h"
#include "vec_utils.h"
#include <bits/time.h>
#include <math.h>
#include <pthread.h>
@@ -31,9 +32,8 @@ void *physics(void *args) {
universe_t *uni = (universe_t *)args;
struct timespec ot, ct;
while (true) {
printf("a");
clock_gettime(CLOCK_MONOTONIC, &ct);
// gravity(uni);
gravity(uni);
mechanics(uni);
ot = ct;
long long elapsed = timespec_diff_ns(ct, ot);
@@ -59,10 +59,15 @@ int main(void) {
const char *welcome_text = "Welcome to Fucked Physics!";
universe_t universe = {0, NULL};
universe.bodies = malloc(1024 * sizeof(mass_body_t));
universe.num_bodies = 2;
universe.num_bodies = 3;
universe.bodies[0] =
(mass_body_t){10000000000000.0f, 1000, {-0, 0}, {0, 0}, 200};
universe.bodies[1] =
(mass_body_t){100000000.0f, 0.1, {-10000.1, 0}, {0, -0.2}, 50};
universe.bodies[2] =
(mass_body_t){100000000.0f, 0.1, {10000, 0}, {0, -0.2}, 50};
universe.bodies[0] = (mass_body_t){100000000000.0f, 200, {0, 0}, {0, 0}};
universe.bodies[1] = (mass_body_t){100, 50, {500, 0}, {0, 2}};
SetConfigFlags(FLAG_WINDOW_RESIZABLE);
InitWindow(800, 450, "Fucked Physics");
SetTargetFPS(120);
@@ -75,11 +80,17 @@ int main(void) {
key_pressed = GetKeyPressed();
switch (key_pressed) {
case KEY_I:
v_scale += 0.1;
if (v_scale >= 0.1) {
v_scale += 0.1;
} else {
v_scale += 0.01;
}
break;
case KEY_O:
if (v_scale > 0.1) {
v_scale -= 0.1;
} else if (v_scale > 0.01) {
v_scale -= 0.01;
}
break;
case KEY_LEFT:
@@ -97,23 +108,35 @@ int main(void) {
}
} while (key_pressed != 0);
if (IsMouseButtonPressed(MOUSE_LEFT_BUTTON) ||
IsMouseButtonDown(MOUSE_RIGHT_BUTTON)) {
Vector2 mouse_pos = vec2_scale(
transform_to_center(vec2_scale(GetMousePosition(), -1)), -1);
mouse_pos = vec2_scale(mouse_pos, 1 / v_scale);
universe.bodies[universe.num_bodies] =
(mass_body_t){100000.0f, 0.1, mouse_pos, {0, 0}, 10};
universe.num_bodies++;
}
if (canvas_offset.x + GetRenderWidth() * 0.5 / v_scale >
GetRenderWidth() * 5) {
GetRenderWidth() * 50) {
canvas_offset.x =
-GetRenderWidth() * 0.5 / v_scale + GetRenderWidth() * 5;
-GetRenderWidth() * 0.5 / v_scale + GetRenderWidth() * 50;
} else if (canvas_offset.x - GetRenderWidth() * 0.5 / v_scale <
-GetRenderWidth() * 5) {
canvas_offset.x = GetRenderWidth() * 0.5 / v_scale - GetRenderWidth() * 5;
-GetRenderWidth() * 50) {
canvas_offset.x =
GetRenderWidth() * 0.5 / v_scale - GetRenderWidth() * 50;
}
if (canvas_offset.y + GetRenderHeight() * 0.5 / v_scale >
GetRenderHeight() * 5) {
GetRenderHeight() * 50) {
canvas_offset.y =
-GetRenderHeight() * 0.5 / v_scale + GetRenderHeight() * 5;
-GetRenderHeight() * 0.5 / v_scale + GetRenderHeight() * 50;
} else if (canvas_offset.y - GetRenderHeight() * 0.5 / v_scale <
-GetRenderHeight() * 5) {
-GetRenderHeight() * 50) {
canvas_offset.y =
GetRenderHeight() * 0.5 / v_scale - GetRenderHeight() * 5;
GetRenderHeight() * 0.5 / v_scale - GetRenderHeight() * 50;
}
BeginDrawing();
@@ -123,9 +146,9 @@ int main(void) {
Vector2 body_position = vec2_scale(universe.bodies[i].position, v_scale);
body_position = vec2_sum(body_position, scaled_offset);
DrawCircleV(transform_to_center(body_position),
universe.bodies[i].radius * v_scale,
(Color){((256 / universe.num_bodies) * i) % 256,
255 * (i % 2), 255 * (i % 2) * (i % 3), 255});
universe.bodies[i].draw_radius * v_scale,
(Color){((256 / universe.num_bodies) * i) % 256 / 2,
255 * (i % 2) / 2, 255 * (i % 2) * (i % 3) / 2, 255});
}
DrawText(welcome_text, center_x_text(welcome_text, GetRenderWidth(), 20),