From 0c99e625ba87434070b02206a2eec115cc1f5013 Mon Sep 17 00:00:00 2001 From: Derek Christ Date: Sat, 31 May 2025 17:17:00 +0200 Subject: [PATCH] Add score text --- assets/fonts/OpenTTD-Sans.ttf | Bin 0 -> 76932 bytes src/assets.cpp | 19 +++++++++++++++ src/assets.hpp | 11 +++++++++ src/definitions.hpp | 3 +++ src/level.hpp | 13 ++++++---- src/main.cpp | 44 ++++++++++++++++++++++++++++++---- src/physics.cpp | 4 ++++ vcpkg.json | 8 ------- 8 files changed, 86 insertions(+), 16 deletions(-) create mode 100644 assets/fonts/OpenTTD-Sans.ttf delete mode 100644 vcpkg.json diff --git a/assets/fonts/OpenTTD-Sans.ttf b/assets/fonts/OpenTTD-Sans.ttf new file mode 100644 index 0000000000000000000000000000000000000000..7c3dbdab66b7e5a1bb2e59d27414a7500a4d5ee7 GIT binary patch literal 76932 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 @@ -73,4 +89,7 @@ AssetModule::AssetModule(flecs::world& world) auto background_music = load_audio(BACKGROUND_MUSIC_DATA, sizeof(BACKGROUND_MUSIC_DATA)); world.set(AudioAssets{.background_music = background_music}); + + auto font = load_font(DEFAULT_FONT_DATA, sizeof(DEFAULT_FONT_DATA)); + world.set(FontAssets{.default_font = font}); } diff --git a/src/assets.hpp b/src/assets.hpp index d7766d1..9ba327e 100644 --- a/src/assets.hpp +++ b/src/assets.hpp @@ -3,6 +3,7 @@ #include "audio.hpp" #include +#include #include struct TextureAtlasLayout @@ -31,6 +32,16 @@ struct AudioAssets AudioAsset background_music; }; +struct FontAsset +{ + TTF_Font* font; +}; + +struct FontAssets +{ + FontAsset default_font; +}; + struct AssetModule { AssetModule(flecs::world& world); diff --git a/src/definitions.hpp b/src/definitions.hpp index f505a89..939df87 100644 --- a/src/definitions.hpp +++ b/src/definitions.hpp @@ -1,6 +1,7 @@ #pragma once #include +#include static constexpr int WINDOW_WIDTH = 400; static constexpr int WINDOW_HEIGHT = 240; @@ -9,10 +10,12 @@ struct SdlHandles { SDL_Window* window; SDL_Renderer* renderer; + TTF_TextEngine* text_engine; }; struct Game { uint32_t ticks; + uint32_t time; uint32_t score; }; diff --git a/src/level.hpp b/src/level.hpp index b4ad5fe..2e71aaf 100644 --- a/src/level.hpp +++ b/src/level.hpp @@ -38,8 +38,8 @@ struct LevelModule world.entity() .child_of(basket) .add() - .set(Position{.x = 0, .y = 0}) - .set(Size{.w = 64, .h = 32}) + .set(Position{.x = 0, .y = 16}) + .set(Size{.w = 64, .h = 16}) .add(); world.system("SpawnFruits") @@ -87,10 +87,15 @@ struct LevelModule // e.destruct(); // }); - world.system("CollectItem") + world.system("CollectItem") .term_at(0) .singleton() - .each([](flecs::entity e, Game& game, Fruit, Collided) { game.score += 10; }); + .each( + [](flecs::entity e, Game& game, Position& pos, Fruit, Collided) + { + game.score += 10; + pos.x = 1000; + }); world.system("MoveBasket") .term_at(0) diff --git a/src/main.cpp b/src/main.cpp index 4e2a9ab..e8689ce 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -11,6 +11,7 @@ #include #include #include +#include #include #include @@ -26,6 +27,8 @@ int main() std::terminate(); } + TTF_Init(); + auto* window = SDL_CreateWindow("HansTheGatherer", WINDOW_WIDTH, WINDOW_HEIGHT, 0); if (window == nullptr) { @@ -38,11 +41,14 @@ int main() spdlog::critical("Failed to create SDL renderer!\nCause: {}", SDL_GetError()); } + auto* text_engine = TTF_CreateRendererTextEngine(renderer); + flecs::world world; - world.set(Game{.ticks = 0}); + world.set(Game{.ticks = 0, .time = 60, .score = 0}); world.set(ButtonInput{}); - world.set(SdlHandles{.window = window, .renderer = renderer}); + world.set( + SdlHandles{.window = window, .renderer = renderer, .text_engine = text_engine}); world.import (); world.import (); @@ -51,10 +57,19 @@ int main() world.system("IncrementTicks") .term_at(0) .singleton() - .each([](Game& game_ticks) { game_ticks.ticks += 1; }); + .each( + [](Game& game) + { + game.ticks += 1; + + if (game.ticks % 60 == 0) + { + game.time--; + } + }); world.system("RenderSprites") - .kind(flecs::PreUpdate) + .kind(flecs::OnStore) .term_at(0) .singleton() .each( @@ -80,6 +95,27 @@ int main() sdl_handles.renderer, sprite.texture->sdl_texture, &srcrect, &dstrect); }); + world.system("RenderScore") + .kind(flecs::OnStore) + .term_at(0) + .singleton() + .term_at(1) + .singleton() + .term_at(2) + .singleton() + .each( + [](SdlHandles const& sdl_handles, Game const& game, FontAssets const& font_assets) + { + auto score_string = std::format("Score: {}\nTime: {}", game.score, game.time); + auto text = TTF_CreateText(sdl_handles.text_engine, + font_assets.default_font.font, + score_string.c_str(), + score_string.length()); + TTF_DrawRendererText(text, 0.0, 0.0); + + TTF_DestroyText(text); + }); + auto* audio_assets = world.get(); auto* stream = SDL_OpenAudioDeviceStream( SDL_AUDIO_DEVICE_DEFAULT_PLAYBACK, &audio_assets->background_music.spec, NULL, NULL); diff --git a/src/physics.cpp b/src/physics.cpp index c8df384..4e002d2 100644 --- a/src/physics.cpp +++ b/src/physics.cpp @@ -48,6 +48,10 @@ PhysicsModule::PhysicsModule(flecs::world& world) auto basket_query = world.query(); + world.system("RemoveCollisionMarker") + .kind(flecs::PreUpdate) + .each([](flecs::entity e, Collided) { e.remove(); }); + world.system("CollisionCheck") .kind(flecs::OnValidate) .each( diff --git a/vcpkg.json b/vcpkg.json deleted file mode 100644 index 2bfa665..0000000 --- a/vcpkg.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "dependencies": [ - "spdlog", - "sdl3", - "spdlog", - "flecs" - ] -}