Compare commits
2
Commits
2866a38169
...
41001daa4f
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
41001daa4f
|
||
|
|
8eeb27ce4c
|
No files matched your search
@@ -0,0 +1,7 @@
|
||||
|
||||
CompileFlags:
|
||||
Add: [-xc, -std=c11]
|
||||
If:
|
||||
PathMatch: [".*\\.h$"]
|
||||
CompileFlags:
|
||||
Add: [-x, c-header]
|
||||
@@ -1,5 +1,7 @@
|
||||
cmake_minimum_required(VERSION 3.20)
|
||||
|
||||
set(CMAKE_C_COMPILER gcc)
|
||||
|
||||
project(fuckedphysics
|
||||
VERSION 0.1.0
|
||||
LANGUAGES C
|
||||
@@ -19,6 +21,9 @@ find_package(raylib REQUIRED)
|
||||
|
||||
add_executable(${PROJECT_NAME}
|
||||
main.c
|
||||
cphysics.c
|
||||
mechanics.c
|
||||
vec_util.c
|
||||
)
|
||||
|
||||
target_link_libraries(${PROJECT_NAME}
|
||||
|
||||
@@ -1,5 +1,7 @@
|
||||
#define _POSIX_C_SOURCE 200809L
|
||||
|
||||
#include "consts.h"
|
||||
#include "mechanics.h"
|
||||
#include <bits/time.h>
|
||||
#include <math.h>
|
||||
#include <pthread.h>
|
||||
@@ -9,8 +11,6 @@
|
||||
#include <threads.h>
|
||||
#include <time.h>
|
||||
#include <unistd.h>
|
||||
#include "consts.h"
|
||||
#include "mechanics.h"
|
||||
|
||||
int center_x_text(const char *text, int width, int size) {
|
||||
return (width - MeasureText(text, size)) / 2;
|
||||
@@ -20,8 +20,6 @@ static inline int center_y_text(int height, int size) {
|
||||
return (height - size) / 2;
|
||||
}
|
||||
|
||||
|
||||
|
||||
long long timespec_diff_ns(struct timespec end, struct timespec start) {
|
||||
return (end.tv_sec - start.tv_sec) * 1000000000LL +
|
||||
(end.tv_nsec - start.tv_nsec);
|
||||
@@ -51,6 +49,8 @@ void *physics(void *args) {
|
||||
}
|
||||
|
||||
int main(void) {
|
||||
float v_scale = 1;
|
||||
Vector2 canvas_offset = {0, 0};
|
||||
pthread_t physics_thread;
|
||||
const char *welcome_text = "Welcome to Fucked Physics!";
|
||||
universe_t universe = {0, NULL};
|
||||
@@ -95,11 +95,60 @@ int main(void) {
|
||||
|
||||
while (!WindowShouldClose()) {
|
||||
|
||||
int key_pressed = 0;
|
||||
do {
|
||||
key_pressed = GetKeyPressed();
|
||||
switch (key_pressed) {
|
||||
case KEY_I:
|
||||
v_scale += 0.1;
|
||||
break;
|
||||
case KEY_O:
|
||||
if (v_scale > 0.1) {
|
||||
v_scale -= 0.1;
|
||||
}
|
||||
break;
|
||||
case KEY_LEFT:
|
||||
canvas_offset.x += 100;
|
||||
break;
|
||||
case KEY_RIGHT:
|
||||
canvas_offset.x -= 100;
|
||||
break;
|
||||
case KEY_UP:
|
||||
canvas_offset.y += 100;
|
||||
break;
|
||||
case KEY_DOWN:
|
||||
canvas_offset.y -= 100;
|
||||
break;
|
||||
}
|
||||
} while (key_pressed != 0);
|
||||
|
||||
if (canvas_offset.x + GetRenderWidth() * 0.5 / v_scale >
|
||||
GetRenderWidth() * 5) {
|
||||
canvas_offset.x =
|
||||
-GetRenderWidth() * 0.5 / v_scale + GetRenderWidth() * 5;
|
||||
} else if (canvas_offset.x - GetRenderWidth() * 0.5 / v_scale <
|
||||
-GetRenderWidth() * 5) {
|
||||
canvas_offset.x = GetRenderWidth() * 0.5 / v_scale - GetRenderWidth() * 5;
|
||||
}
|
||||
|
||||
if (canvas_offset.y + GetRenderHeight() * 0.5 / v_scale >
|
||||
GetRenderHeight() * 5) {
|
||||
canvas_offset.y =
|
||||
-GetRenderHeight() * 0.5 / v_scale + GetRenderHeight() * 5;
|
||||
} else if (canvas_offset.y - GetRenderHeight() * 0.5 / v_scale <
|
||||
-GetRenderHeight() * 5) {
|
||||
canvas_offset.y =
|
||||
GetRenderHeight() * 0.5 / v_scale - GetRenderHeight() * 5;
|
||||
}
|
||||
|
||||
BeginDrawing();
|
||||
ClearBackground(RAYWHITE);
|
||||
for (unsigned int i = 0; i < universe.num_bodies; i++) {
|
||||
DrawCircleV(transform_to_center(universe.bodies[i].position),
|
||||
universe.bodies[i].radius,
|
||||
Vector2 scaled_offset = vec2_scale(&canvas_offset, v_scale);
|
||||
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});
|
||||
}
|
||||
|
||||
Reference in new issue
Block a user