From 4bda2ee01c4ac67eb5656cb914b6932733cf2d43 Mon Sep 17 00:00:00 2001 From: "Zed A. Shaw" Date: Tue, 4 Nov 2025 00:20:49 -0500 Subject: [PATCH] Now have a simple storyboard system that can display an image and move with the camera to different cells. --- Makefile | 3 ++ assets/animations.json | 18 -------- assets/config.json | 5 +++ assets/story/test_storyboard.png | Bin 0 -> 29351 bytes boss/fight.cpp | 3 -- boss/ui.cpp | 20 +++------ meson.build | 2 +- storyboard/ui.cpp | 69 +++++++++++++++++++++++++++++++ storyboard/ui.hpp | 25 +++++++++++ tools/storyboard.cpp | 13 ++++-- 10 files changed, 118 insertions(+), 40 deletions(-) create mode 100644 assets/story/test_storyboard.png create mode 100644 storyboard/ui.cpp create mode 100644 storyboard/ui.hpp diff --git a/Makefile b/Makefile index 495f32b..c8197e1 100644 --- a/Makefile +++ b/Makefile @@ -73,3 +73,6 @@ money: arena: gdb --nx -x .gdbinit --batch --ex run --ex bt --ex q --args ./builddir/arena + +story: + gdb --nx -x .gdbinit --batch --ex run --ex bt --ex q --args ./builddir/storyboard diff --git a/assets/animations.json b/assets/animations.json index dbdca98..7b02df7 100644 --- a/assets/animations.json +++ b/assets/animations.json @@ -288,23 +288,5 @@ "toggled": false, "flipped": false, "looped": false - }, - "test_zoom": { - "_type": "Animation", - "easing": 2, - "motion": 7, - "ease_rate": 0.05, - "min_x": 0, - "min_y": 0, - "max_x": 150.0, - "max_y": 0.0, - "simple": true, - "frames": 1, - "speed": 0.01, - "scaled": false, - "stationary": true, - "toggled": false, - "flipped": false, - "looped": false } } diff --git a/assets/config.json b/assets/config.json index 195ec1f..4d0d149 100644 --- a/assets/config.json +++ b/assets/config.json @@ -274,6 +274,11 @@ {"path": "assets/bossfights/test_thirds.png", "frame_width": 1656, "frame_height": 1080 + }, + "test_story": + {"path": "assets/story/test_storyboard.png", + "frame_width": 1280, + "frame_height": 720 } }, "worldgen": { diff --git a/assets/story/test_storyboard.png b/assets/story/test_storyboard.png new file mode 100644 index 0000000000000000000000000000000000000000..2c049adbb4a63382494243c8eae5085010acf27d GIT binary patch literal 29351 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 literal 0 HcmV?d00001 diff --git a/boss/fight.cpp b/boss/fight.cpp index c287a79..d564f3a 100644 --- a/boss/fight.cpp +++ b/boss/fight.cpp @@ -86,8 +86,6 @@ namespace boss { $ui.status(L"PLAYER TURN"); const std::string& player_pos = run % 10 < 5 ? "player1" : "player2"; $ui.move_actor("player", player_pos); - $ui.zoom(player_pos); - $ui.$camera.play(); int attack_id = std::any_cast(data); boss::System::combat(attack_id); state(State::PLAYER_TURN); @@ -110,7 +108,6 @@ namespace boss { $ui.status(L"BOSS TURN"); const std::string &boss_at = run % 10 < 5 ? "boss5" : "boss6"; $ui.move_actor("boss", boss_at); - $ui.zoom(""); $ui.animate_actor("boss"); int attack_id = std::any_cast(data); boss::System::combat(attack_id); diff --git a/boss/ui.cpp b/boss/ui.cpp index afe82e4..07873de 100644 --- a/boss/ui.cpp +++ b/boss/ui.cpp @@ -45,10 +45,6 @@ namespace boss { $actions.render(window); $combat_ui.render(window); - if($camera.playing()) { - zoom("player2"); - } - $arena.render($view_texture); $view_texture.display(); window.draw($view_sprite); @@ -77,17 +73,13 @@ namespace boss { } void UI::zoom(const std::string &cell_name) { - if(cell_name == "") { - sf::View zoom{{BOSS_VIEW_WIDTH/2,BOSS_VIEW_HEIGHT/2}, {BOSS_VIEW_WIDTH, BOSS_VIEW_HEIGHT}}; - $view_texture.setView(zoom); - } else if($camera.playing()) { - auto& cell = $arena.$ui.cell_for(cell_name); + auto& cell = $arena.$ui.cell_for(cell_name); - $camera.resize({BOSS_VIEW_WIDTH/2, BOSS_VIEW_HEIGHT/2}); - $camera.move($view_texture, - {float(cell.x/2), float(cell.y/2)}); - } + $camera.resize({BOSS_VIEW_WIDTH/2, BOSS_VIEW_HEIGHT/2}); + $camera.move($view_texture, + {float(cell.x/2), float(cell.y/2)}); - $view_sprite.setPosition({BOSS_VIEW_X, BOSS_VIEW_Y}); + // BUG: do I need this? + // $view_sprite.setPosition({BOSS_VIEW_X, BOSS_VIEW_Y}); } } diff --git a/meson.build b/meson.build index 6e1f026..a978f59 100644 --- a/meson.build +++ b/meson.build @@ -121,10 +121,10 @@ sources = [ 'rituals.cpp', 'scene.cpp', 'shaders.cpp', - 'shiterator.hpp', 'sound.cpp', 'spatialmap.cpp', 'stats.cpp', + 'storyboard/ui.cpp', 'systems.cpp', 'textures.cpp', 'worldbuilder.cpp', diff --git a/storyboard/ui.cpp b/storyboard/ui.cpp new file mode 100644 index 0000000..9c38da2 --- /dev/null +++ b/storyboard/ui.cpp @@ -0,0 +1,69 @@ +#include "storyboard/ui.hpp" +#include "components.hpp" +#include "animation.hpp" + +namespace storyboard { + + UI::UI() : + $view_texture({SCREEN_WIDTH, SCREEN_HEIGHT}), + $view_sprite($view_texture.getTexture()) + { + $view_sprite.setPosition({0, 0}); + $camera.style("bounce"); + } + + void UI::init() { + $ui.position(0,0, SCREEN_WIDTH, SCREEN_HEIGHT); + + $ui.set($ui.MAIN, {$ui.$parser, guecs::THEME.TRANSPARENT}); + + auto& background = $ui.get($ui.MAIN); + background.set_sprite("test_story", true); + + $ui.layout( + "[a|b|c]" + "[*%(200,100)d|_|f]" + "[g|h|i]"); + } + + void UI::render(sf::RenderWindow &window) { + if($camera.playing()) { + zoom($zoom_target); + } + + $ui.render($view_texture); + $ui.debug_layout($view_texture); + $view_texture.display(); + window.draw($view_sprite); + } + + bool UI::mouse(float x, float y, guecs::Modifiers mods) { + + if(zoomed) { + zoomed = false; + reset(); + } else { + zoomed = true; + auto target = $ui.$parser.hit(x, y); + $zoom_target = *target; + zoom($zoom_target); + $camera.play(); + } + + return $ui.mouse(x, y, mods); + } + + void UI::zoom(const std::string &cell_name) { + auto& cell = $ui.cell_for(cell_name); + + $camera.resize({float(cell.w), float(cell.h)}); + $camera.move($view_texture, + {float(cell.mid_x), float(cell.mid_y)}); + } + + void UI::reset() { + sf::FloatRect where{{0,0},{SCREEN_WIDTH, SCREEN_HEIGHT}}; + sf::View view{where}; + $view_texture.setView(view); + } +} diff --git a/storyboard/ui.hpp b/storyboard/ui.hpp new file mode 100644 index 0000000..17f17ab --- /dev/null +++ b/storyboard/ui.hpp @@ -0,0 +1,25 @@ +#pragma once +#include "constants.hpp" +#include +#include "camera.hpp" + +namespace storyboard { + + struct UI { + guecs::UI $ui; + sf::RenderTexture $view_texture; + sf::Sprite $view_sprite; + cinematic::Camera $camera; + std::string $zoom_target; + bool zoomed = false; + + UI(); + + void init(); + void render(sf::RenderWindow &window); + bool mouse(float x, float y, guecs::Modifiers mods); + void zoom(const std::string &cell_name); + void reset(); + }; + +} diff --git a/tools/storyboard.cpp b/tools/storyboard.cpp index aea00dd..3379042 100644 --- a/tools/storyboard.cpp +++ b/tools/storyboard.cpp @@ -1,18 +1,15 @@ #include "gui/fsm.hpp" #include "textures.hpp" #include "sound.hpp" -#include "autowalker.hpp" #include "ai.hpp" #include "animation.hpp" #include #include "shaders.hpp" #include "backend.hpp" -#include "game_level.hpp" -#include "gui/fsm_events.hpp" -#include "events.hpp" #include "constants.hpp" #include "gui/event_router.hpp" #include "camera.hpp" +#include "storyboard/ui.hpp" int main(int, char*[]) { components::init(); @@ -28,14 +25,22 @@ int main(int, char*[]) { gui::routing::Router router; + storyboard::UI main; + main.init(); + while(true) { + while(const auto ev = window.pollEvent()) { auto gui_ev = router.process_event(ev); + auto mouse_pos = window.mapPixelToCoords(router.position); if(gui_ev == gui::Event::QUIT) { return 0; + } else if(gui_ev == gui::Event::MOUSE_CLICK) { + main.mouse(mouse_pos.x, mouse_pos.y, guecs::NO_MODS); } } + main.render(window); window.display(); }