|
|
@ -2,20 +2,22 @@ |
|
|
|
#include "easings.hpp" |
|
|
|
#include "easings.hpp" |
|
|
|
|
|
|
|
|
|
|
|
namespace gui { |
|
|
|
namespace gui { |
|
|
|
BossFightUI::BossFightUI() { |
|
|
|
BossFightUI::BossFightUI(GameLevel level) |
|
|
|
|
|
|
|
: $level(level) |
|
|
|
|
|
|
|
{ |
|
|
|
$status.position(0, 0, 300, SCREEN_HEIGHT); |
|
|
|
$status.position(0, 0, 300, SCREEN_HEIGHT); |
|
|
|
$status.layout( |
|
|
|
$status.layout( |
|
|
|
"[(150)status_1|(150)status_2]" |
|
|
|
"[main_status]" |
|
|
|
"[(150)status_3|(150)status_4]" |
|
|
|
"[(150)status_3|(150)status_4]" |
|
|
|
"[(150)status_5|(150)status_6]" |
|
|
|
"[(150)status_5|(150)status_6]" |
|
|
|
"[(150)status_7|(150)status_8]" |
|
|
|
"[(150)status_7|(150)status_8]" |
|
|
|
); |
|
|
|
); |
|
|
|
|
|
|
|
|
|
|
|
$overlay.position(300, 0, SCREEN_WIDTH - 300, SCREEN_HEIGHT); |
|
|
|
$overlay.position(300, 0, SCREEN_WIDTH - 300, SCREEN_HEIGHT); |
|
|
|
$overlay.layout("[overlay_1|overlay_2|overlay_3|overlay_4]" |
|
|
|
$overlay.layout("[overlay_1|overlay_2|overlay_4]" |
|
|
|
"[overlay_5|overlay_6|overlay_7|overlay_8]" |
|
|
|
"[overlay_5|overlay_6|overlay_8]" |
|
|
|
"[overlay_9|overlay_10|overlay_11|overlay_12]" |
|
|
|
"[overlay_9|overlay_10|overlay_12]" |
|
|
|
"[overlay_13|overlay_14|overlay_15|overlay_16]"); |
|
|
|
"[overlay_13|overlay_14|overlay_16]"); |
|
|
|
|
|
|
|
|
|
|
|
$boss_image = textures::get("boss_fight"); |
|
|
|
$boss_image = textures::get("boss_fight"); |
|
|
|
auto bounds = $boss_image.sprite->getLocalBounds(); |
|
|
|
auto bounds = $boss_image.sprite->getLocalBounds(); |
|
|
@ -32,7 +34,11 @@ namespace gui { |
|
|
|
$status.set<Clickable>(button, { |
|
|
|
$status.set<Clickable>(button, { |
|
|
|
[this, name](auto, auto){ fmt::println("STATUS: {}", name); } |
|
|
|
[this, name](auto, auto){ fmt::println("STATUS: {}", name); } |
|
|
|
}); |
|
|
|
}); |
|
|
|
$status.set<Label>(button, {name}); |
|
|
|
if(name == "main_status") { |
|
|
|
|
|
|
|
$status.set<Textual>(button, {fmt::format("HP: {}", $boss_hp)}); |
|
|
|
|
|
|
|
} else { |
|
|
|
|
|
|
|
$status.set<Label>(button, {"Attack"}); |
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
$status.init(); |
|
|
|
$status.init(); |
|
|
|
|
|
|
|
|
|
|
@ -43,15 +49,13 @@ namespace gui { |
|
|
|
}); |
|
|
|
}); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
auto region = $overlay.entity("overlay_2"); |
|
|
|
|
|
|
|
$overlay.set<Label>(region, {"THE RAT KING!"}); |
|
|
|
|
|
|
|
$overlay.init(); |
|
|
|
$overlay.init(); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
void BossFightUI::bounce_boss(sf::RenderWindow& window) { |
|
|
|
void BossFightUI::bounce_boss(sf::RenderWindow& window) { |
|
|
|
auto time = $clock.getElapsedTime(); |
|
|
|
auto time = $clock.getElapsedTime(); |
|
|
|
float tick = ease::in_out_back(ease::sine(time.asSeconds())); |
|
|
|
float tick = ease::out_bounce(ease::sine(time.asSeconds())); |
|
|
|
float scale = std::lerp(1.1, 1.3, tick); |
|
|
|
float scale = std::lerp(1.0, 1.15, tick); |
|
|
|
$boss_image.sprite->setScale({scale, scale}); |
|
|
|
$boss_image.sprite->setScale({scale, scale}); |
|
|
|
window.draw(*$boss_image.sprite); |
|
|
|
window.draw(*$boss_image.sprite); |
|
|
|
} |
|
|
|
} |
|
|
@ -63,6 +67,11 @@ namespace gui { |
|
|
|
window.draw(*$boss_image.sprite); |
|
|
|
window.draw(*$boss_image.sprite); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if($boss_hp == 0) { |
|
|
|
|
|
|
|
$overlay.show_label("overlay_1", "YOU WON!"); |
|
|
|
|
|
|
|
$overlay.show_label("overlay_4", "CLICK TO CONTINUE..."); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
$status.render(window); |
|
|
|
$status.render(window); |
|
|
|
$overlay.render(window); |
|
|
|
$overlay.render(window); |
|
|
|
} |
|
|
|
} |
|
|
@ -73,10 +82,19 @@ namespace gui { |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
if($overlay.mouse(x, y)) { |
|
|
|
if($overlay.mouse(x, y)) { |
|
|
|
fmt::println("OVERLAY"); |
|
|
|
|
|
|
|
$boss_hit = !$boss_hit; |
|
|
|
$boss_hit = !$boss_hit; |
|
|
|
|
|
|
|
$boss_hp--; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
return false; |
|
|
|
return false; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
void BossFightUI::update_level(GameLevel &level) { |
|
|
|
|
|
|
|
$level = level; |
|
|
|
|
|
|
|
$boss_hp = 10 * $level.index + 1; // make him stronger
|
|
|
|
|
|
|
|
$boss_hit = false; |
|
|
|
|
|
|
|
$overlay.close<Label>("overlay_1"); |
|
|
|
|
|
|
|
$overlay.close<Label>("overlay_4"); |
|
|
|
|
|
|
|
init(); |
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|