|
|
|
@ -3,6 +3,7 @@ |
|
|
|
|
#include "guecs.hpp" |
|
|
|
|
#include "rand.hpp" |
|
|
|
|
#include "animation.hpp" |
|
|
|
|
#include "rand.hpp" |
|
|
|
|
|
|
|
|
|
namespace gui { |
|
|
|
|
using namespace guecs; |
|
|
|
@ -32,20 +33,26 @@ namespace gui { |
|
|
|
|
auto button = $gui.entity(name); |
|
|
|
|
|
|
|
|
|
if(name == "circle_area") { |
|
|
|
|
// $gui.set<Rectangle>(button, {});
|
|
|
|
|
$gui.set<Sprite>(button, {"the_ritual_circle"}); |
|
|
|
|
$gui.set<Clickable>(button, { |
|
|
|
|
[this](auto, auto){ dbc::log("circle clicked"); } |
|
|
|
|
[&](auto ent, auto){ ritual_circle_clicked(ent); } |
|
|
|
|
}); |
|
|
|
|
} else if(name.starts_with("inv_slot")) { |
|
|
|
|
$gui.set<Sprite>(button, {"the_ritual_circle"}); |
|
|
|
|
// $gui.set<Rectangle>(button, {});
|
|
|
|
|
|
|
|
|
|
if(button % 5 == 0) { |
|
|
|
|
$gui.set<Sprite>(button, {"cinqueda"}); |
|
|
|
|
} else if(button % 9 == 0) { |
|
|
|
|
$gui.set<Sprite>(button, {"healing_potion_small"}); |
|
|
|
|
} else if(button % 3 == 0) { |
|
|
|
|
$gui.set<Sprite>(button, {"torch_horizontal_floor"}); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
$gui.set<Clickable>(button, { |
|
|
|
|
[this, name](auto, auto){ dbc::log(fmt::format("inv_slot {}", name)); } |
|
|
|
|
[&](auto ent, auto){ inv_slot_clicked(ent); } |
|
|
|
|
}); |
|
|
|
|
} else if(name == "ritual_ui") { |
|
|
|
|
$gui.set<Clickable>(button, { |
|
|
|
|
[this](auto, auto){ toggle(); } |
|
|
|
|
[&](auto, auto){ toggle(); } |
|
|
|
|
}); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
@ -57,12 +64,51 @@ namespace gui { |
|
|
|
|
$ritual_anim = animation::load("ritual_blanket"); |
|
|
|
|
|
|
|
|
|
$gui.init(); |
|
|
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
bool RitualUI::is_open() { |
|
|
|
|
return $ritual_state != RitualUIState::CLOSED; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
void RitualUI::inv_slot_clicked(DinkyECS::Entity ent) { |
|
|
|
|
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)); |
|
|
|
|
|
|
|
|
|
int inner_x = ritual_cell.x + ritual_cell.x / 2; |
|
|
|
|
int inner_y = ritual_cell.y + ritual_cell.y / 2; |
|
|
|
|
|
|
|
|
|
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)}); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
void RitualUI::reset_inv_positions() { |
|
|
|
|
auto ritual_circle = $gui.entity("circle_area"); |
|
|
|
|
|
|
|
|
|
$gui.world().query<lel::Cell, Sprite>( |
|
|
|
|
[&](const auto ent, auto &cell, auto &bs) { |
|
|
|
|
if(ent == ritual_circle) { |
|
|
|
|
bs.sprite->setColor({255,255,255,255}); |
|
|
|
|
bs.sprite->setRotation(sf::degrees(0.0)); |
|
|
|
|
} else { |
|
|
|
|
bs.sprite->setPosition({(float)cell.x, (float)cell.y}); |
|
|
|
|
} |
|
|
|
|
}); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
void RitualUI::ritual_circle_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::rotate(*bs.sprite, 20.0); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
bool RitualUI::mouse(float x, float y) { |
|
|
|
|
return $gui.mouse(x, y); |
|
|
|
|
} |
|
|
|
@ -91,6 +137,7 @@ namespace gui { |
|
|
|
|
$ritual_state = OPEN; |
|
|
|
|
} |
|
|
|
|
} else if($ritual_state == CLOSING) { |
|
|
|
|
reset_inv_positions(); |
|
|
|
|
$ritual_ui.sprite->setTextureRect($ritual_closed_rect); |
|
|
|
|
$ritual_state = CLOSED; |
|
|
|
|
} |
|
|
|
|