From 9d42d9dcc3b492951785b35e08f0851842d7d148 Mon Sep 17 00:00:00 2001 From: nathansmithsmith Date: Mon, 18 Sep 2023 19:03:52 -0600 Subject: Started working on some gui stuff --- src/game.c | 4 +++ src/gameScreen.c | 100 ++++++++++++++++++++++++++++++++++++++++++++++++++++++- src/gameScreen.h | 12 +++++++ 3 files changed, 115 insertions(+), 1 deletion(-) (limited to 'src') diff --git a/src/game.c b/src/game.c index 372199e..d4deff4 100644 --- a/src/game.c +++ b/src/game.c @@ -19,6 +19,9 @@ void initGame(Game * game) { // Camera. initPlayerCamera(&game->playerCamera); + + // Game screen. + initGameScreen(&game->gameScreen); // World. initWorld(&game->world); @@ -49,6 +52,7 @@ void initGame(Game * game) { void closeGame(Game * game) { unloadAssets(&game->assets); freeWorld(&game->world); + freeGameScreen(&game->gameScreen); // Close window last. CloseWindow(); diff --git a/src/gameScreen.c b/src/gameScreen.c index c38b06d..a446f69 100644 --- a/src/gameScreen.c +++ b/src/gameScreen.c @@ -4,6 +4,46 @@ #include "bullets.h" #include +void initGameScreenGui(GameScreen * gameScreen) { + float width = GetScreenWidth(); + float height = GetScreenHeight(); + + // It is kind of terrible but works. + gameScreen->infoText = (Vector2){0.0, height / 1.5}; + gameScreen->gyroscopePosition = (Vector2){ + (width / 2.0) - (GYROSCOPE_TEXTURE_SIZE / 2.0), + height / 1.8 + + }; +} + +void initGameScreen(GameScreen * gameScreen) { + initGameScreenGui(gameScreen); + + // The gyroscope is rendered is 3d but not in the main scene. + gameScreen->gyroscopeCamaera = (Camera3D){ + .fovy = 45, + .projection = CAMERA_PERSPECTIVE, + .position = (Vector3){0.0, 0.0, -5.0}, + .target = Vector3Zero(), + .up = (Vector3){0.0, 1.0, 0.0} + }; + + gameScreen->gyroscopeTexture = LoadRenderTexture( + GYROSCOPE_TEXTURE_SIZE, + GYROSCOPE_TEXTURE_SIZE + ); + + // Load model. + Mesh mesh = GenMeshSphere(1.0, 4, 4); + gameScreen->gyroscopeModel = LoadModelFromMesh(mesh); +} + +void freeGameScreen(GameScreen * gameScreen) { + UnloadRenderTexture(gameScreen->gyroscopeTexture); + UnloadModel(gameScreen->gyroscopeModel); +} + void drawCrossHair(float size, float thick, Color color) { Vector3 center = (Vector3){GetScreenWidth() / 2.0, GetScreenHeight() / 2.0}; @@ -24,12 +64,70 @@ void drawCrossHair(float size, float thick, Color color) { ); } -void updateGameScreen(Game * game) { +void drawGyroscope(Game * game) { + GameScreen * gameScreen = &game->gameScreen; + Entity * player = getEntityFromWorld(game->world, 0); + + // Draw this mother fucker. + BeginTextureMode(gameScreen->gyroscopeTexture); ClearBackground(BLACK); + BeginMode3D(gameScreen->gyroscopeCamaera); + + DrawSphereWires(Vector3Zero(), 1.0, 8, 8, GREEN); + + EndMode3D(); + EndTextureMode(); + + DrawTexture( + gameScreen->gyroscopeTexture.texture, + gameScreen->gyroscopePosition.x, + gameScreen->gyroscopePosition.y, + WHITE + ); +} + +void drawGameScreenGui(Game * game) { + GameScreen * gameScreen = &game->gameScreen; + Entity * player = getEntityFromWorld(game->world, 0); + + // Hello reader. I fucking hate you! + size_t bufSize = 255; + char buf[bufSize]; // Draw cross hair. drawCrossHair(10.0, 2.0, BLUE); + Vector3 position = player->position; + Vector3 velocity = player->velocity.velocity; + + // Format text. + snprintf( + buf, + bufSize, + "X %.2f\nY %.2f\nZ %.2f\n\nSpeed %.2f", + position.x, + position.y, + position.z, + Vector3Length(velocity) + ); + + // Draw info text. + DrawText( + buf, + gameScreen->infoText.x, + gameScreen->infoText.y, + GAME_SCREEN_TEXT_SIZE, + GREEN + ); + + drawGyroscope(game); +} + +void updateGameScreen(Game * game) { + ClearBackground(BLACK); + + drawGameScreenGui(game); + // Update world. updateWorld(&game->world, game); diff --git a/src/gameScreen.h b/src/gameScreen.h index 5876e91..84d589b 100644 --- a/src/gameScreen.h +++ b/src/gameScreen.h @@ -3,10 +3,22 @@ #ifndef GAME_SCREEN_H #define GAME_SCREEN_H +#define GAME_SCREEN_TEXT_SIZE 20.0 +#define GYROSCOPE_TEXTURE_SIZE 100 + // Gui stuff and shit. typedef struct GameScreen { + Vector2 infoText; + + Vector2 gyroscopePosition; + Camera3D gyroscopeCamaera; + RenderTexture gyroscopeTexture; + Model gyroscopeModel; } GameScreen; +void initGameScreen(GameScreen * gameScreen); +void freeGameScreen(GameScreen * gameScreen); + void updateGameScreen(Game * game); void openGameScreen(Game * game); -- cgit v1.2.3