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

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

View file

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