The ritual blanket now has the new animation and gained the ability to play the animation reversed for the closing animation.

This commit is contained in:
Zed A. Shaw 2026-02-23 12:05:56 -05:00
parent 1a9c395ae6
commit b504afef2a
3 changed files with 60 additions and 11 deletions

View file

@ -160,5 +160,43 @@
"sounds": { "sounds": {
"idle": [] "idle": []
} }
},
"ritual_crafting_area": {
"sheet": {
"frames": 3,
"frame_width": 380,
"frame_height": 720
},
"sequences": {
"idle": {"frames": [0], "durations": [5] },
"open": {"frames": [0, 1, 2], "durations": [5, 5, 5] },
"close": {"frames": [2, 1, 0], "durations": [5, 5, 5] }
},
"transforms": {
"basic": {
"min_x": 1.0,
"min_y": 1.0,
"max_x": 1.0,
"max_y": 1.0,
"flipped": false,
"scaled": false,
"toggled": true,
"looped": false,
"relative": false,
"easing": "none",
"motion": "move_none"
}
},
"forms": {
"idle": ["idle", "basic"],
"open": ["open", "basic"],
"close": ["close", "basic"]
},
"sounds": {
"idle": [],
"open": [],
"close": []
}
} }
} }

View file

@ -1,9 +1,6 @@
#include "gui/ritual_ui.hpp" #include "gui/ritual_ui.hpp"
#include "components.hpp"
#include <guecs/ui.hpp> #include <guecs/ui.hpp>
#include "rand.hpp" #include "rand.hpp"
#include "animation.hpp"
#include "rand.hpp"
#include "sound.hpp" #include "sound.hpp"
#include "events.hpp" #include "events.hpp"
#include "game_level.hpp" #include "game_level.hpp"
@ -45,23 +42,24 @@ namespace gui {
$ritual_ui = textures::get_sprite("ritual_crafting_area"); $ritual_ui = textures::get_sprite("ritual_crafting_area");
$ritual_ui.sprite->setPosition($gui.get_position()); $ritual_ui.sprite->setPosition($gui.get_position());
$ritual_ui.sprite->setTextureRect($ritual_closed_rect); $ritual_ui.sprite->setTextureRect($ritual_closed_rect);
$ritual_anim = animation::load("ritual_crafting_area"); $ritual_anim = animate2::load("assets/animate2.json", "ritual_crafting_area");
auto open_close_toggle = $gui.entity("ritual_ui"); auto open_close_toggle = $gui.entity("ritual_ui");
$gui.set<Clickable>(open_close_toggle, { $gui.set<Clickable>(open_close_toggle, {
[&](auto){ event(Event::TOGGLE); } [&](auto){ event(Event::TOGGLE); }
}); });
$craft_state = $ritual_engine.start(); $craft_state = $ritual_engine.start();
$gui.init(); $gui.init();
play_blanket("idle");
state(State::CLOSED); state(State::CLOSED);
} }
void UI::OPENED(Event ev, std::any data) { void UI::OPENED(Event ev, std::any data) {
if(ev == Event::TOGGLE) { if(ev == Event::TOGGLE) {
clear_blanket(); clear_blanket();
play_blanket("close");
state(State::CLOSING); state(State::CLOSING);
} else if(ev == Event::SELECT) { } else if(ev == Event::SELECT) {
// do this before transitioning // do this before transitioning
@ -73,6 +71,7 @@ namespace gui {
void UI::CRAFTING(Event ev, std::any data) { void UI::CRAFTING(Event ev, std::any data) {
if(ev == Event::TOGGLE) { if(ev == Event::TOGGLE) {
clear_blanket(); clear_blanket();
play_blanket("close");
state(State::CLOSING); state(State::CLOSING);
} else if(ev == Event::COMBINE) { } else if(ev == Event::COMBINE) {
complete_combine(); complete_combine();
@ -86,23 +85,28 @@ namespace gui {
void UI::CLOSED(Event ev) { void UI::CLOSED(Event ev) {
if(ev == Event::TOGGLE) { if(ev == Event::TOGGLE) {
$ritual_anim.play();
load_blanket(); load_blanket();
play_blanket("open");
state(State::OPENING); state(State::OPENING);
} }
} }
void UI::OPENING(Event ev) { void UI::OPENING(Event ev) {
if(ev == Event::TICK) { if(ev == Event::TICK) {
if(!$ritual_anim.apply(*$ritual_ui.sprite, {0,0})) { if($ritual_anim.playing) {
$ritual_anim.update();
$ritual_anim.apply(*$ritual_ui.sprite);
} else {
state(State::OPENED); state(State::OPENED);
} }
} }
} }
void UI::CLOSING(Event ev) { void UI::CLOSING(Event ev) {
if(ev == Event::TICK) { if($ritual_anim.playing) {
$ritual_ui.sprite->setTextureRect($ritual_closed_rect); $ritual_anim.update();
$ritual_anim.apply(*$ritual_ui.sprite);
} else {
state(State::CLOSED); state(State::CLOSED);
} }
} }
@ -247,6 +251,11 @@ namespace gui {
$gui.close<Sprite>("result_image"); $gui.close<Sprite>("result_image");
} }
void UI::play_blanket(const std::string& form) {
$ritual_anim.set_form(form);
$ritual_anim.play();
}
::ritual::Blanket& UI::blanket() { ::ritual::Blanket& UI::blanket() {
auto world = GameDB::current_world(); auto world = GameDB::current_world();
return world->get_the<::ritual::Blanket>(); return world->get_the<::ritual::Blanket>();

View file

@ -5,6 +5,7 @@
#include <guecs/ui.hpp> #include <guecs/ui.hpp>
#include "rituals.hpp" #include "rituals.hpp"
#include "simplefsm.hpp" #include "simplefsm.hpp"
#include "animate2.hpp"
namespace gui { namespace gui {
namespace ritual { namespace ritual {
@ -34,7 +35,7 @@ namespace gui {
public: public:
sf::IntRect $ritual_closed_rect{{0,0},{380,720}}; sf::IntRect $ritual_closed_rect{{0,0},{380,720}};
sf::IntRect $ritual_open_rect{{380 * 2,0},{380,720}}; sf::IntRect $ritual_open_rect{{380 * 2,0},{380,720}};
components::Animation $ritual_anim; animate2::Animate2 $ritual_anim;
guecs::UI $gui; guecs::UI $gui;
textures::SpriteTexture $ritual_ui; textures::SpriteTexture $ritual_ui;
::ritual::Engine $ritual_engine; ::ritual::Engine $ritual_engine;
@ -61,6 +62,7 @@ namespace gui {
void run_crafting_engine(); void run_crafting_engine();
void complete_combine(); void complete_combine();
void update_selection_state(); void update_selection_state();
void play_blanket(const std::string& form);
::ritual::Blanket& blanket(); ::ritual::Blanket& blanket();
}; };
} }