diff options
author | nathansmithsmith <nathansmith7@mailfence.com> | 2023-09-18 19:03:52 -0600 |
---|---|---|
committer | nathansmithsmith <nathansmith7@mailfence.com> | 2023-09-18 19:03:52 -0600 |
commit | 9d42d9dcc3b492951785b35e08f0851842d7d148 (patch) | |
tree | 3d8bd6002ca34941bcac6235f60d90e35974ac22 /src | |
parent | 2c3290f9edebbde37737cc446a0e9f93e9430c06 (diff) |
Started working on some gui stuff
Diffstat (limited to 'src')
-rw-r--r-- | src/game.c | 4 | ||||
-rw-r--r-- | src/gameScreen.c | 100 | ||||
-rw-r--r-- | src/gameScreen.h | 12 |
3 files changed, 115 insertions, 1 deletions
@@ -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 <raylib.h> +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); |