#include "boss_fight_ui.hpp" #include "easings.hpp" #include "sound.hpp" namespace gui { using namespace guecs; BossFightUI::BossFightUI(DinkyECS::World& world, std::string boss_name) : $config(world.get_the()), $boss_name(boss_name) { $status.position(0, 0, BOSS_VIEW_X, SCREEN_HEIGHT); $status.layout( "[main_status]" "[(150)status_3|(150)status_4]" "[(150)status_5|(150)status_6]" "[(150)status_7|(150)status_8]"); $overlay.position(BOSS_VIEW_X, BOSS_VIEW_Y, BOSS_VIEW_WIDTH, BOSS_VIEW_HEIGHT); $overlay.layout("[overlay_1|overlay_2|overlay_4]" "[overlay_5|overlay_6|overlay_8]" "[overlay_9|overlay_10|overlay_12]" "[overlay_13|overlay_14|overlay_16]"); $sounds = components::get($config.bosses[boss_name]); $combat = components::get($config.bosses[boss_name]); $weapon_hit_sound = $config.bosses[$boss_name]["weapon_sound"]; } void BossFightUI::configure_sprite() { auto& boss = $config.bosses[$boss_name]; $sprite_config = components::get(boss); $animation = components::get(boss); $animation.texture_width = $sprite_config.width; $boss_image = textures::get($sprite_config.name); sf::IntRect frame_rect{{0,0},{$sprite_config.width,$sprite_config.height}}; $boss_image.sprite->setTextureRect(frame_rect); $boss_image.sprite->setScale({$sprite_config.scale, $sprite_config.scale}); auto bounds = $boss_image.sprite->getLocalBounds(); auto bg_bounds = $boss_background.sprite->getLocalBounds(); float x_diff = bg_bounds.size.x / 2; $boss_image.sprite->setOrigin({bounds.size.x / 2, bounds.size.y / 2}); $boss_image.sprite->setPosition({float(BOSS_VIEW_X) + x_diff, bounds.size.y / 2}); } void BossFightUI::configure_background() { auto& boss = $config.bosses[$boss_name]; $boss_background = textures::get(boss["background"]); $boss_background.sprite->setPosition({BOSS_VIEW_X, BOSS_VIEW_Y}); $status.world().set_the({$status.$parser}); } void BossFightUI::configure_gui() { for(auto& [name, cell] : $status.cells()) { auto button = $status.entity(name); $status.set(button, {}); $status.set(button, { [this, name](auto, auto){ fmt::println("STATUS: {}", name); } }); if(name == "main_status") { $status.set(button, {fmt::format("HP: {}", $combat.hp)}); } else { $status.set