Better UI for the ritual crafting that almost works, but need to get the selected items to move down. Might need some state machine love soon.
This commit is contained in:
parent
9d55b2954a
commit
14619558fa
9 changed files with 99 additions and 48 deletions
|
@ -20,23 +20,39 @@ namespace gui {
|
|||
"[inv_slot4 | inv_slot5 | inv_slot6| inv_slot7]"
|
||||
"[inv_slot8 | inv_slot9 | inv_slot10| inv_slot11]"
|
||||
"[inv_slot12 | inv_slot13 | inv_slot14| inv_slot15]"
|
||||
"[*%(100,600)circle_area]"
|
||||
"[_]"
|
||||
"[_]"
|
||||
"[_]"
|
||||
"[_]"
|
||||
"[_]"
|
||||
"[reset |*%(200,400)result_text|_]"
|
||||
"[*%(100,200)result_image|_ |_]"
|
||||
"[_|_|_]"
|
||||
"[combine|_|_]"
|
||||
"[_|craft1|craft2|craft3|craft4|_]"
|
||||
"[_|craft5|craft6|craft7|craft8|_]"
|
||||
"[ ritual_ui ]");
|
||||
}
|
||||
|
||||
void RitualUI::init() {
|
||||
update_items();
|
||||
|
||||
auto circle = $gui.entity("circle_area");
|
||||
$gui.set<Effect>(circle, {0.4f});
|
||||
$gui.set<Sprite>(circle, {"the_ritual_circle"});
|
||||
$gui.set<Clickable>(circle, {
|
||||
[&](auto ent, auto){ ritual_circle_clicked(ent); }
|
||||
auto combine = $gui.entity("combine");
|
||||
$gui.set<Effect>(combine, {0.4f});
|
||||
$gui.set<Sprite>(combine, {"the_ritual_circle"});
|
||||
$gui.set<Clickable>(combine, {
|
||||
[&](auto ent, auto){ combine_clicked(ent); }
|
||||
});
|
||||
|
||||
auto result_image = $gui.entity("result_image");
|
||||
$gui.set<Sprite>(result_image, {"severed_finger-128"});
|
||||
$gui.set<Rectangle>(result_image, {10, {60, 60, 60, 30}});
|
||||
|
||||
auto result_text = $gui.entity("result_text");
|
||||
$gui.set<Rectangle>(result_text, {15, {60, 60, 60, 30}});
|
||||
$gui.set<Textual>(result_text, {
|
||||
L"Celiac migas\nunicorn hexagon.\nBrooklyn williamsburg\ntruffaut pickled\nchillwave raclette\nchurch-key sus.", 16, ColorValue::LIGHT_LIGHT, 10});
|
||||
|
||||
auto reset = $gui.entity("reset");
|
||||
$gui.set<Rectangle>(reset, {});
|
||||
$gui.set<Label>(reset, L"reset");
|
||||
$gui.set<Clickable>(reset, {
|
||||
[&](auto ent, auto){ reset_clicked(ent); }
|
||||
});
|
||||
|
||||
auto open_close_toggle = $gui.entity("ritual_ui");
|
||||
|
@ -56,31 +72,27 @@ namespace gui {
|
|||
return $ritual_state != RitualUIState::CLOSED;
|
||||
}
|
||||
|
||||
void RitualUI::inv_slot_clicked(DinkyECS::Entity ent) {
|
||||
void RitualUI::inv_slot_clicked(DinkyECS::Entity ent, DinkyECS::Entity item_id) {
|
||||
if($gui.has<Sprite>(ent)) {
|
||||
auto& bs = $gui.get<Sprite>(ent);
|
||||
auto ritual_circle = $gui.entity("circle_area");
|
||||
auto& ritual_cell = $gui.cell_for(ritual_circle);
|
||||
dbc::log(fmt::format("inv_slot clicked {}", bs.name));
|
||||
// auto& bs = $gui.get<Sprite>(ent);
|
||||
// auto combine = $gui.entity("combine");
|
||||
|
||||
int inner_x = ritual_cell.x + ritual_cell.x / 2;
|
||||
int inner_y = ritual_cell.y + ritual_cell.y / 2;
|
||||
// do things to the combine button
|
||||
|
||||
float x = Random::uniform(inner_x, inner_x + ritual_cell.w / 2);
|
||||
float y = Random::uniform(inner_y, inner_y + ritual_cell.h / 2);
|
||||
bs.sprite->setPosition({float(x), float(y)});
|
||||
auto& blanket = $level.world->get_the<ritual::Blanket>();
|
||||
auto& junk_item = blanket.get(item_id);
|
||||
|
||||
$engine.load_junk($craft_state, junk_item);
|
||||
}
|
||||
|
||||
// BUG: get the actual thing they clicked on
|
||||
$engine.set_state($craft_state, "has_magick", true);
|
||||
}
|
||||
|
||||
void RitualUI::reset_inv_positions() {
|
||||
auto ritual_circle = $gui.entity("circle_area");
|
||||
$craft_state.reset();
|
||||
auto combine = $gui.entity("combine");
|
||||
|
||||
$gui.world().query<lel::Cell, Sprite>(
|
||||
[&](const auto ent, auto &cell, auto &bs) {
|
||||
if(ent == ritual_circle) {
|
||||
if(ent == combine) {
|
||||
bs.sprite->setColor({255,255,255,255});
|
||||
bs.sprite->setRotation(sf::degrees(0.0));
|
||||
} else {
|
||||
|
@ -89,11 +101,16 @@ namespace gui {
|
|||
});
|
||||
}
|
||||
|
||||
void RitualUI::ritual_circle_clicked(DinkyECS::Entity ent) {
|
||||
auto cell = $gui.cell_for(ent);
|
||||
void RitualUI::reset_clicked(DinkyECS::Entity ent) {
|
||||
(void)ent; // make button animate
|
||||
reset_inv_positions();
|
||||
}
|
||||
|
||||
void RitualUI::combine_clicked(DinkyECS::Entity ent) {
|
||||
// auto cell = $gui.cell_for(ent);
|
||||
auto& bs = $gui.get<Sprite>(ent);
|
||||
bs.sprite->setColor({200, 0, 0});
|
||||
animation::center(*bs.sprite, {(float)cell.x, (float)cell.y});
|
||||
// animation::center(*bs.sprite, {(float)cell.x, (float)cell.y});
|
||||
animation::rotate(*bs.sprite, 20.0);
|
||||
|
||||
// finalize here ritual here
|
||||
|
@ -102,8 +119,8 @@ namespace gui {
|
|||
if($craft_state.is_combined()) {
|
||||
// add it to the belt
|
||||
auto ritual = $engine.finalize($craft_state);
|
||||
// remove the items from the blanket now
|
||||
|
||||
// remove the items from the blanket now
|
||||
auto& the_belt = $level.world->get_the<ritual::Belt>();
|
||||
|
||||
the_belt.equip(the_belt.next(), ritual);
|
||||
|
@ -112,6 +129,7 @@ namespace gui {
|
|||
reset_inv_positions();
|
||||
} else {
|
||||
fmt::println("Failed to combine!");
|
||||
reset_inv_positions();
|
||||
sound::play("ui_click");
|
||||
}
|
||||
}
|
||||
|
@ -124,9 +142,8 @@ namespace gui {
|
|||
auto& blanket = $level.world->get_the<ritual::Blanket>();
|
||||
int i = 0;
|
||||
|
||||
blanket.contents.query<ritual::JunkItem>([&](const auto, auto& item) {
|
||||
std::string slot = fmt::format("inv_slot{}", i++);
|
||||
auto button = $gui.entity(slot);
|
||||
blanket.contents.query<ritual::JunkItem>([&](const auto item_id, auto& item) {
|
||||
auto button = $gui.entity("inv_slot", i++);
|
||||
std::string sprite_name = fmt::format("{}-64", item);
|
||||
|
||||
if($gui.has<Clickable>(button)) {
|
||||
|
@ -136,7 +153,7 @@ namespace gui {
|
|||
$gui.set<Effect>(button, {0.4f});
|
||||
$gui.set<Sound>(button, {"ui_click"});
|
||||
$gui.set<Clickable>(button, {
|
||||
[&](auto ent, auto){ inv_slot_clicked(ent); }
|
||||
[&, item_id](auto ent, auto){ inv_slot_clicked(ent, item_id); }
|
||||
});
|
||||
}
|
||||
});
|
||||
|
@ -174,6 +191,9 @@ namespace gui {
|
|||
}
|
||||
|
||||
window.draw(*$ritual_ui.sprite);
|
||||
if($ritual_state == OPEN) $gui.render(window);
|
||||
if($ritual_state == OPEN) {
|
||||
$gui.render(window);
|
||||
// $gui.debug_layout(window);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue