You now have blood on your screen when below half health.
This commit is contained in:
parent
1c8f542c21
commit
d2700d2928
12 changed files with 90 additions and 13 deletions
61
gui.cpp
61
gui.cpp
|
@ -6,6 +6,7 @@
|
|||
#include "components.hpp"
|
||||
#include <numbers>
|
||||
#include "systems.hpp"
|
||||
#include "events.hpp"
|
||||
|
||||
|
||||
namespace gui {
|
||||
|
@ -50,6 +51,7 @@ namespace gui {
|
|||
$rayview.position_camera($player.x + 0.5, $player.y + 0.5);
|
||||
|
||||
$status_view.create_render();
|
||||
$status_view.log("Welcome to the game!");
|
||||
|
||||
$renderer.init_terminal();
|
||||
$map_view.create_render();
|
||||
|
@ -143,6 +145,7 @@ namespace gui {
|
|||
state(State::MAPPING);
|
||||
break;
|
||||
case ATTACK:
|
||||
$status_view.log("You attack!");
|
||||
$rotation = -30.0f;
|
||||
state(State::ATTACKING);
|
||||
break;
|
||||
|
@ -215,7 +218,10 @@ namespace gui {
|
|||
auto& debug = $level.world->get_the<Debug>();
|
||||
debug.FPS = !debug.FPS;
|
||||
debug.PATHS = !debug.PATHS;
|
||||
} break;
|
||||
auto player = $level.world->get_the<Player>();
|
||||
auto& player_combat = $level.world->get<Combat>(player.entity);
|
||||
player_combat.hp = player_combat.max_hp;
|
||||
} break;
|
||||
default:
|
||||
break; // ignored
|
||||
}
|
||||
|
@ -253,6 +259,18 @@ namespace gui {
|
|||
$window.draw($text);
|
||||
}
|
||||
|
||||
void FSM::draw_blood() {
|
||||
auto player = $level.world->get_the<Player>();
|
||||
auto player_combat = $level.world->get<Combat>(player.entity);
|
||||
|
||||
if(float(player_combat.hp) / float(player_combat.max_hp) < 0.5) {
|
||||
auto blood = $textures.sprite_textures.at("blood_splatter").sprite;
|
||||
blood->setPosition({RAY_VIEW_X,0});
|
||||
blood->setScale({3.0, 3.0});
|
||||
$window.draw(*blood);
|
||||
}
|
||||
}
|
||||
|
||||
void FSM::draw_gui() {
|
||||
sf::RectangleShape rect({SCREEN_WIDTH - RAY_VIEW_WIDTH, SCREEN_HEIGHT});
|
||||
rect.setPosition({0,0});
|
||||
|
@ -290,6 +308,7 @@ namespace gui {
|
|||
$stats.sample(1/elapsed.count());
|
||||
|
||||
draw_gui();
|
||||
draw_blood();
|
||||
draw_weapon();
|
||||
}
|
||||
|
||||
|
@ -314,9 +333,49 @@ namespace gui {
|
|||
System::motion($level);
|
||||
System::lighting($level);
|
||||
System::death($level);
|
||||
handle_world_events();
|
||||
}
|
||||
|
||||
bool FSM::active() {
|
||||
return !in_state(State::END);
|
||||
}
|
||||
|
||||
void FSM::handle_world_events() {
|
||||
using eGUI = Events::GUI;
|
||||
auto& world = *$level.world;
|
||||
|
||||
while(world.has_event<eGUI>()) {
|
||||
auto [evt, entity, data] = world.recv<eGUI>();
|
||||
|
||||
switch(evt) {
|
||||
case eGUI::COMBAT: {
|
||||
auto &damage = std::any_cast<Events::Combat&>(data);
|
||||
auto enemy_combat = world.get<Combat>(entity);
|
||||
|
||||
if(damage.enemy_did > 0) {
|
||||
$status_view.log(fmt::format("Enemy HIT YOU for {} damage!", damage.enemy_did));
|
||||
$status_view.log(fmt::format("-- Enemy has {} HP left.", enemy_combat.hp));
|
||||
} else {
|
||||
$status_view.log("Enemy MISSED YOU.");
|
||||
}
|
||||
|
||||
if(damage.player_did > 0) {
|
||||
$status_view.log(fmt::format("You HIT enemy for {} damage!", damage.player_did));
|
||||
} else {
|
||||
$status_view.log("You MISSED the enemy.");
|
||||
}
|
||||
}
|
||||
break;
|
||||
case eGUI::LOOT: {
|
||||
// auto &item = std::any_cast<InventoryItem&>(data);
|
||||
// $status_view.log(fmt::format("You picked up a {}.",
|
||||
// std::string(item.data["name"])));
|
||||
$status_view.log("You picked up an item.");
|
||||
}
|
||||
break;
|
||||
default:
|
||||
$status_view.log(fmt::format("INVALID EVENT! {},{}", evt, entity));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue