From 532366091b36c442019174b863f01b6200c88e98 Mon Sep 17 00:00:00 2001 From: "Zed A. Shaw" Date: Thu, 2 Apr 2026 12:15:51 -0400 Subject: [PATCH] Improved start screen and made the animation optional in scenes since they aren't needed always. --- assets/animation.json | 33 ++++++++++++++++++++++++++ assets/config.json | 10 ++++++++ assets/scenes.json | 26 +++++++++++++++++++- assets/scenes/starting_scene.png | Bin 26080 -> 623 bytes assets/sprites/ag_bot.png | Bin 0 -> 16522 bytes assets/sprites/ag_bot_speech.png | Bin 0 -> 18637 bytes assets/sprites/rat_with_sword.png | Bin 2240 -> 0 bytes src/game/worldbuilder.cpp | 7 ++---- src/graphics/animation.cpp | 22 +++++++++++++---- src/graphics/animation.hpp | 1 + src/graphics/scene.cpp | 38 ++++++++++++++++++++---------- src/graphics/scene.hpp | 2 +- tests/pathing.cpp | 2 -- 13 files changed, 114 insertions(+), 27 deletions(-) create mode 100644 assets/sprites/ag_bot.png create mode 100644 assets/sprites/ag_bot_speech.png delete mode 100644 assets/sprites/rat_with_sword.png diff --git a/assets/animation.json b/assets/animation.json index 3ce25a6..6af1f22 100644 --- a/assets/animation.json +++ b/assets/animation.json @@ -97,6 +97,39 @@ "open": [], "close": [] } + }, + "ag_bot": { + "sheet": { + "frames": 1, + "frame_width": 846, + "frame_height": 1022 + }, + "sequences": { + "idle": {"frames": [0], "durations": [50] } + }, + "transforms": { + "basic": { + "min_x": 1.0, + "min_y": 1.0, + "max_x": 1.0, + "max_y": 1.0, + "flipped": false, + "scaled": true, + "toggled": false, + "looped": false, + "relative": false, + "easing": "none", + "motion": "move_none" + } + }, + "forms": { + "idle": ["idle", "basic"] + }, + "sounds": { + "idle": [], + "open": [], + "close": [] + } }, "hands_sword_attack": { "sheet": { diff --git a/assets/config.json b/assets/config.json index 4fff41e..c8c51a5 100644 --- a/assets/config.json +++ b/assets/config.json @@ -12,6 +12,16 @@ "frame_width": 256, "frame_height": 256 }, + "ag_bot": + {"path": "assets/sprites/ag_bot.png", + "frame_width": 846, + "frame_height": 1022 + }, + "ag_bot_speech": + {"path": "assets/sprites/ag_bot_speech.png", + "frame_width": 424, + "frame_height": 358 + }, "repair_kit": {"path": "assets/items/repair_kit.png", "frame_width": 256, diff --git a/assets/scenes.json b/assets/scenes.json index 3d7d4c4..2f052c8 100644 --- a/assets/scenes.json +++ b/assets/scenes.json @@ -21,12 +21,36 @@ }, "STARTING": { "layout": [ - "[=text]" + "[_|*%(200, 200)ag_bot|_|*%(200,100)speech|_|_]", + "[_|_|_ |*%(200,100)buttons|_|_]" ], "background": "starting_scene", "actors": [ + { + "name": "ag_bot", + "sprite": "ag_bot", + "cell": "ag_bot", + "scale_x": 0.65, + "scale_y": 0.65, + "x": -40, + "y": 70, + "at_mid": false, + "flipped": false + } ], "fixtures": [ + { + "name": "ag_bot_speech", + "sprite": "ag_bot_speech", + "scale_x": 1.0, + "scale_y": 1.0, + "flipped": false, + "cell": "speech", + "x": 0, + "y": 0, + "at_mid": false, + "flipped": false + } ] }, "WIN": { diff --git a/assets/scenes/starting_scene.png b/assets/scenes/starting_scene.png index 661a94578cf12ff5c68c33376e63328b3e855c23..028dda4932f34c9804c862b8541eca8f92d7cbf2 100644 GIT binary patch delta 90 zcmaEGn(;l$1PM+?W(Ed^OR~WX6BXro8JGinLR_P@{%MCEJgu4267(8A5T-G@yGywq6MI4*} literal 26080 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 diff --git a/assets/sprites/ag_bot.png b/assets/sprites/ag_bot.png new file mode 100644 index 0000000000000000000000000000000000000000..14e84ab612b86a63f88d8a3e9f9b30efa9a68e47 GIT binary patch literal 16522 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 Yo=P)-F3J9L0mwd=gL}$%1^@Ja0N45uWdHyG literal 0 HcmV?d00001 diff --git a/assets/sprites/ag_bot_speech.png b/assets/sprites/ag_bot_speech.png new file mode 100644 index 0000000000000000000000000000000000000000..1fe75f4f138350bc55784fa30c1c2c662550c49c GIT binary patch literal 18637 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

$AEw9i>1wInz_A4@|jT>G>OgHlCwH;k9UQuOdVJ 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 maybe_load(const std::string &file, const std::string &anim_name) { using nlohmann::json; std::ifstream infile(file); auto data = json::parse(infile); - dbc::check(data.contains(anim_name), - $F("{} animation config does not have animation {}", file, anim_name)); + if(!data.contains(anim_name)) return std::nullopt; Animation anim; animation::from_json(data[anim_name], anim); @@ -269,6 +268,15 @@ namespace animation { return anim; } + Animation load(const std::string &file, const std::string &anim_name) { + auto anim = maybe_load(file, anim_name); + + dbc::check(anim != std::nullopt, + $F("FAILED to load animation {} from file {}", anim_name, file)); + + return *anim; + } + void Sequence::INVARIANT(const std::source_location location) { dbc::check(frames.size() == durations.size(), $F("frames.size={} doesn't match durations.size={}", @@ -297,8 +305,12 @@ namespace animation { void configure(DinkyECS::World& world, DinkyECS::Entity entity) { auto sprite = world.get_if(entity); - if(sprite != nullptr && has(sprite->name)) { - world.set(entity, animation::load("assets/animation.json", sprite->name)); + // sprite doesn't exist, abort + if(sprite == nullptr) return; + + // lazy load any animations + if(auto anim = animation::maybe_load("assets/animation.json", sprite->name)) { + world.set(entity, *anim); } } diff --git a/src/graphics/animation.hpp b/src/graphics/animation.hpp index d188eb0..faf8170 100644 --- a/src/graphics/animation.hpp +++ b/src/graphics/animation.hpp @@ -134,6 +134,7 @@ namespace animation { }; Animation load(const std::string &file, const std::string &anim_name); + std::optional maybe_load(const std::string &file, const std::string &anim_name); // BUG: brought over from animation to finish the refactor, but these may not be needed or maybe they go in system.cpp? bool has(const std::string& name); diff --git a/src/graphics/scene.cpp b/src/graphics/scene.cpp index 5c7ba6a..c237d27 100644 --- a/src/graphics/scene.cpp +++ b/src/graphics/scene.cpp @@ -18,10 +18,13 @@ namespace scene { bool flipped = config["flipped"]; // BUG: put the .json file to load as a default/optional arg - auto anim = animation::load("./assets/animation.json", sprite_name); - anim.play(); + auto anim = animation::maybe_load("./assets/animation.json", sprite_name); - anim.transform.flipped = flipped; + if(anim) { + // only start it if there's an animation set + anim->play(); + anim->transform.flipped = flipped; + } std::string cell = config["cell"]; std::string name = config["name"]; @@ -103,7 +106,7 @@ namespace scene { for(auto& actor : $actors) { view.draw(*actor.st.sprite, actor.effect.get()); - if(actor.anim.playing) view.draw(actor.text); + if(actor.anim && actor.anim->playing) view.draw(actor.text); } $camera.render(view); @@ -126,20 +129,25 @@ namespace scene { void Engine::animate_actor(const std::string& actor, const std::string& form) { auto& config = actor_config(actor); - config.anim.set_form(form); - if(!config.anim.playing) { - config.anim.play(); + // no animation set, abort + if(!config.anim) return; + + config.anim->set_form(form); + + if(!config.anim->playing) { + config.anim->play(); } } inline void this_is_stupid_refactor(std::vector& elements) { for(auto& element : elements) { - if(element.anim.playing) { - element.anim.update(); - element.anim.motion(*element.st.sprite, element.pos, element.scale); - element.anim.apply(*element.st.sprite); - if(element.effect != nullptr) element.anim.apply_effect(element.effect); + // skip any without animation + if(element.anim && element.anim->playing) { + element.anim->update(); + element.anim->motion(*element.st.sprite, element.pos, element.scale); + element.anim->apply(*element.st.sprite); + if(element.effect != nullptr) element.anim->apply_effect(element.effect); } } } @@ -178,8 +186,12 @@ namespace scene { } void Engine::set_end_cb(std::function cb) { + for(auto& actor : $actors) { - actor.anim.onLoop = [&,cb](auto& seq, auto& tr) -> bool { + // no animation set so no point doing a end cb + if(!actor.anim) continue; + + actor.anim->onLoop = [&,cb](auto& seq, auto& tr) -> bool { seq.current = tr.toggled ? seq.frame_count - 1 : 0; cb(); actor.effect = nullptr; diff --git a/src/graphics/scene.hpp b/src/graphics/scene.hpp index 1f9449f..e0b0b9c 100644 --- a/src/graphics/scene.hpp +++ b/src/graphics/scene.hpp @@ -17,7 +17,7 @@ namespace scene { struct Element { std::string name; textures::SpriteTexture st; - animation::Animation anim; + std::optional anim; std::string cell; sf::Vector2f scale{1.0f, 1.0f}; sf::Vector2f pos{0.0f, 0.0f}; diff --git a/tests/pathing.cpp b/tests/pathing.cpp index 1265dc1..53e574b 100644 --- a/tests/pathing.cpp +++ b/tests/pathing.cpp @@ -47,7 +47,5 @@ TEST_CASE("multiple targets can path", "[pathing]") { if(found == PathingResult::FOUND) { fmt::println("FOUND!"); - } else if(found == PathingResult::FAIL && !diag) { - REQUIRE(found != PathingResult::FAIL); } }