From cc53a19fd59f82b27b1a97313f529a9c40ecc989 Mon Sep 17 00:00:00 2001 From: huaqo-games Date: Thu, 6 Nov 2025 11:50:20 +0100 Subject: [PATCH] refactor: player as singleton --- include/appTypes.h | 8 ++++---- src/appGame.c | 12 +++++++----- src/appGamePlayer.c | 22 ++++++++++++++-------- 3 files changed, 25 insertions(+), 17 deletions(-) diff --git a/include/appTypes.h b/include/appTypes.h index 4140dcf..b32f577 100644 --- a/include/appTypes.h +++ b/include/appTypes.h @@ -171,7 +171,6 @@ typedef struct Soundtrack soundtracks[SOUNDTRACK_COUNT]; RenderTexture2D target; Floor floor; - Player player; Birds birds; Islands islands; Mouse mouse; @@ -230,9 +229,10 @@ void RenderFloor(Floor *floor); void UnloadFloor(Floor *floor); playerSpeedID GetPlayerSpeedID(float speed); -Player CreatePlayer(void); -void UpdatePlayer(Player *player); -void RenderPlayer(Player *player); +Player* GetPlayer(void); +void CreatePlayer(void); +void UpdatePlayer(void); +void RenderPlayer(void); Birds CreateBirds(void); void UpdateBirds(Birds *birds); diff --git a/src/appGame.c b/src/appGame.c index 5c380ca..b9aa093 100644 --- a/src/appGame.c +++ b/src/appGame.c @@ -33,8 +33,9 @@ void InitGame(App *app) g->target = LoadRenderTexture(app->window.width, app->window.height); - g->player = CreatePlayer(); - CreateCamera(g->player.physics.position, 10.0f); + CreatePlayer(); + Player* player = GetPlayer(); + CreateCamera(player->physics.position, 10.0f); g->birds = CreateBirds(); g->islands = CreateIslands(); g->floor = CreateFloor(); @@ -72,9 +73,10 @@ void UpdateGame(App *app) } UpdateMouse(&g->mouse); - UpdateCamera2D(&g->player.physics.position, &g->mouse); + Player* player = GetPlayer(); + UpdateCamera2D(&player->physics.position, &g->mouse); UpdateFloor(&g->floor); - UpdatePlayer(&g->player); + UpdatePlayer(); UpdateBirds(&g->birds); UpdateIslands(&g->islands); } @@ -83,7 +85,7 @@ void RenderComponents(App *app) { GameState *g = &app->game; RenderFloor(&g->floor); - RenderPlayer(&g->player); + RenderPlayer(); RenderBirds(&g->birds); RenderIslands(&g->islands); } diff --git a/src/appGamePlayer.c b/src/appGamePlayer.c index 812726d..0b094a7 100644 --- a/src/appGamePlayer.c +++ b/src/appGamePlayer.c @@ -4,8 +4,6 @@ const TextureAsset playerTextureAssets[PLAYER_TEX_COUNT] = { {"assets/ship_start.png", 16.0f, 16.0f, 0.0f} }; - - float playerSpeeds[SPEED_COUNT] = { 0.0f, 5.0f, @@ -21,9 +19,14 @@ playerSpeedID GetPlayerSpeedID(float speed) { return ANCHOR; } -Player CreatePlayer(void) +Player* GetPlayer(void) { + static Player player; + return &player; +} +void CreatePlayer(void) +{ TextureAsset startShipAsset = playerTextureAssets[START_SHIP]; Texture2D texture = LoadTexture(startShipAsset.path); @@ -50,24 +53,26 @@ Player CreatePlayer(void) .animTimer = 0.0f }; + Physics playerPhysics = { .position = (Vector2){0.0f,0.0f}, .direction = (Vector2){0.0f, 0.0f}, .speed = playerSpeeds[ANCHOR] }; - - return (Player){ + Player* player = GetPlayer(); + *player = (Player){ .sprite = playerSprite, .animation = playerAnimation, .physics = playerPhysics, .rotation = rotation }; + } -void UpdatePlayer(Player *player) +void UpdatePlayer(void) { - + Player* player = GetPlayer(); if(IsKeyPressed(KEY_W) || IsKeyPressed(KEY_UP)){ if(player->physics.speed < playerSpeeds[FAST_AHEAD]){ if(player->physics.speed < playerSpeeds[SLOW_AHEAD]){ @@ -116,7 +121,8 @@ void UpdatePlayer(Player *player) UpdateSpriteDestRec(&player->sprite, &player->physics.position); } -void RenderPlayer(Player *player){ +void RenderPlayer(void){ + Player* player = GetPlayer(); RenderSprite(&player->sprite); }