From 63bb2eac8c7a83af956d9947829de39f834e4b7a Mon Sep 17 00:00:00 2001 From: uan Date: Tue, 23 Dec 2025 13:29:26 +0100 Subject: [PATCH] first commit --- main | Bin 0 -> 17864 bytes main.c | 104 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ objects.h | 22 ++++++++++++ 3 files changed, 126 insertions(+) create mode 100755 main create mode 100644 main.c create mode 100644 objects.h diff --git a/main b/main new file mode 100755 index 0000000000000000000000000000000000000000..2a53b05c934b6899db3120a1c747e81ec6db5e1c GIT binary patch literal 17864 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 +#include +#include +#include "objects.h" + +struct global { + const int scwidth, scheight; + int fps; + object *objs[128]; + size_t obj_count; + double terminal_yv; +}; + +struct global gl = {1600, 900, 60, {}, 0, -20}; + +void addobj(object *obj) +{ + gl.objs[gl.obj_count++] = obj; +} + +void drawobjs() +{ + for (int i = 0; i < gl.obj_count; i++) + { + object *obj = gl.objs[i]; + DrawSphere(obj->pos, obj->r, obj->color); + } +} + +void updateobjs() +{ + for (int i = 0; i < gl.obj_count; i++) + { + object *obj = gl.objs[i]; + obj->vel.y -= 9.81 * GetFrameTime(); + if (obj->vel.y < gl.terminal_yv) + { + obj->vel.y = gl.terminal_yv; + } + if (obj->pos.y < obj->r) { + obj->pos.y = obj->r; + obj->vel.y *= -obj->restitution; + } + obj->pos.x += obj->vel.x * GetFrameTime(); + obj->pos.y += obj->vel.y * GetFrameTime(); + obj->pos.z += obj->vel.z * GetFrameTime(); + } +} + +void freeobjs() +{ + for (int i = 0; i < gl.obj_count; i++) + { + object *obj = gl.objs[i]; + free(obj); + } +} + +void applyforce() +{ + for (int i = 0; i < gl.obj_count; i++) + { + object *obj = gl.objs[i]; + obj->vel.x += 1; + } +} + +int main(void) { + + InitWindow(gl.scwidth, gl.scheight, "raylib engine"); + + SetTargetFPS(gl.fps); + addobj(newobj((Vector3){0, 30, 0}, 2, RED, 0.5)); + addobj(newobj((Vector3){5, 2, 0}, 1, BLUE, 1)); + Camera3D camera = {{0, 20, -30}, {0, 0, 0}, {0, 1, 0}, 45, CAMERA_PERSPECTIVE}; + + while(!WindowShouldClose()) + { + + UpdateCamera(&camera, CAMERA_FREE); + BeginDrawing(); + { + ClearBackground(BLACK); + BeginMode3D(camera); + DrawPlane((Vector3){0, 0, 0}, (Vector2){100, 100}, GRAY); + updateobjs(); + drawobjs(); + + if (IsKeyPressed(KEY_L)) { + applyforce(); + } + + EndMode3D(); + } + EndDrawing(); + } + + freeobjs(); + + CloseWindow(); + + return 0; + +} diff --git a/objects.h b/objects.h new file mode 100644 index 0000000..cc714f2 --- /dev/null +++ b/objects.h @@ -0,0 +1,22 @@ +#pragma once +#include +#include + +typedef struct { + Vector3 pos; + Vector3 vel; + float r; + Color color; + float restitution; +} object; + +object *newobj(Vector3 pos, float r, Color c, float rest) +{ + object *obj = (object*)malloc(sizeof(object)); + obj->r = r; + obj->pos = pos; + obj->color = c; + obj->vel = (Vector3){0, 0, 0}; + obj->restitution = rest; + return obj; +}