Browse Source

feat: initial commit

Douglas Andreani 1 year ago
commit
42071da02d
5 changed files with 147 additions and 0 deletions
  1. 2 0
      .gitignore
  2. 3 0
      .gitmodules
  3. 10 0
      CMakeLists.txt
  4. 131 0
      main.c
  5. 1 0
      vendored/raylib

+ 2 - 0
.gitignore

@@ -0,0 +1,2 @@
+.vscode/
+build/

+ 3 - 0
.gitmodules

@@ -0,0 +1,3 @@
+[submodule "vendored/raylib"]
+	path = vendored/raylib
+	url = https://github.com/raysan5/raylib

+ 10 - 0
CMakeLists.txt

@@ -0,0 +1,10 @@
+cmake_minimum_required(VERSION 3.0)
+project(test-raylib C)
+set(CMAKE_C_STANDARD 99)
+
+
+add_executable(test-raylib main.c)
+
+target_include_directories(test-raylib PUBLIC C:\\Users\\cmted\\r\\raylib\\build\\raylib\\include)
+target_link_libraries(test-raylib PUBLIC C:\\Users\\cmted\\r\\raylib\\build\\raylib\\raylib.lib WinMM)
+

+ 131 - 0
main.c

@@ -0,0 +1,131 @@
+#include <stdio.h>
+#include <math.h>
+#include "raylib.h"
+#include "raymath.h"
+
+#define DRAG -0.001f
+
+typedef struct ship_t
+{
+    Vector2 position;
+    Vector2 velocity;
+    Vector2 accel;
+    Vector2 size;
+    float angle;
+} ship;
+
+typedef struct game_g
+{
+    ship s;
+    float dt;
+} game;
+
+game g;
+
+void ship_draw(const ship *s)
+{
+    DrawRectangleV(s->position, s->size, BLACK);
+}
+
+void ship_up(ship *s)
+{
+
+    Vector2 min = {.x = 0.0f, .y = 1.0f};
+    Vector2 max = {.x = 0.0f, .y = -1.0f};
+
+    float x = cosf(s->angle);
+    float y = sinf(s->angle);
+    Vector2 polar = CLITERAL(Vector2){.x = x, .y = y};
+
+    s->accel.y -= 0.3f; // * pos.y;
+    s->accel = Vector2Clamp(s->accel, min, max);
+    
+}
+
+void ship_stop(ship *s)
+{
+
+    Vector2 min = {.x = 1.0, .y = 1.0};
+    Vector2 max = {.x = 0.0, .y = 0.0};
+    s->accel.y -= 0.0001f;
+    s->accel = Vector2Clamp(s->accel, min, max);
+
+}
+
+void ship_update(ship *s)
+{
+    Vector2 drag = {.x = DRAG * s->velocity.x, .y = DRAG * s->velocity.y};
+
+    s->velocity = Vector2Add(s->velocity, s->accel);
+    s->velocity = Vector2Add(s->velocity, drag);
+
+    s->position.x += s->velocity.x * g.dt;
+    s->position.y += s->velocity.y * g.dt;
+
+    float x = 100 * cosf(s->angle);
+    float y = 100 * sinf(s->angle);
+    Vector2 polar = CLITERAL(Vector2){.x = x, .y = y};
+    // polar = Vector2Normalize(polar);
+    Vector2 pos = Vector2Add(s->position, polar);
+    // pos = Vector2Normalize(pos);
+    // printf("polar (%f,%f)\n", pos.x, pos.y);
+    DrawLine(s->position.x, s->position.y, pos.x, pos.y, RED);
+}
+
+void process_inputs(game *g)
+{
+    if (IsKeyDown(KEY_W))
+    {
+        ship_up(&g->s);
+    }
+    else
+    {
+        ship_stop(&g->s);
+    }
+    if (IsKeyDown(KEY_D))
+    {
+        g->s.angle += 1.0f * g->dt;
+    }
+    if (IsKeyDown(KEY_A))
+    {
+        g->s.angle -= 1.0f * g->dt;
+    }
+}
+
+void text(const game *g)
+{
+    char ind[256] = {0};
+    sprintf(ind, "ship position %f\nship speed %f\nship accel %f\nangle: %f\n", g->s.position.y, g->s.velocity.y, g->s.accel.y, g->s.angle);
+    DrawText(ind, 10, 10, 20, BLACK);
+}
+
+int main(void)
+{
+
+    InitWindow(1820, 900, "Hello World");
+
+    ship s1 = {0};
+    s1.position.x = 910.0f;
+    s1.position.y = 450.0f;
+
+    s1.size.x = 10.0f;
+    s1.size.y = 10.0f;
+    s1.angle = 3 * PI / 2;
+
+    g.s = s1;
+
+    while (!WindowShouldClose())
+    {
+        BeginDrawing();
+        ClearBackground(WHITE);
+        process_inputs(&g);
+        ship_draw(&g.s);
+        ship_update(&g.s);
+        text(&g);
+        EndDrawing();
+
+        g.dt = GetFrameTime();
+    }
+
+    return (0);
+}

+ 1 - 0
vendored/raylib

@@ -0,0 +1 @@
+Subproject commit fec96137e8d10ee6c88914fbe5e5429c13ee1dac