There's now an hp status indicator 'doll' when you click on it your host (character) will tell you how they're doing for HP.

master
Zed A. Shaw 11 months ago
parent dac9b1b3de
commit ad1d08ca96
  1. 7
      assets/config.json
  2. BIN
      assets/sounds/hp_status_00.ogg
  3. BIN
      assets/sounds/hp_status_10.ogg
  4. BIN
      assets/sounds/hp_status_30.ogg
  5. BIN
      assets/sounds/hp_status_60.ogg
  6. BIN
      assets/sounds/hp_status_80.ogg
  7. 15
      combat_ui.cpp
  8. 2
      events.hpp
  9. 3
      gui_fsm.cpp
  10. 16
      systems.cpp
  11. 1
      systems.hpp

@ -22,7 +22,12 @@
"ui_hover": "assets/sounds/ui_hover.ogg", "ui_hover": "assets/sounds/ui_hover.ogg",
"punch_cartoony": "assets/sounds/punch_cartoony.ogg", "punch_cartoony": "assets/sounds/punch_cartoony.ogg",
"electric_shock_01": "assets/sounds/electric_shock_01.ogg", "electric_shock_01": "assets/sounds/electric_shock_01.ogg",
"fireball_01": "assets/sounds/fireball_01.ogg" "fireball_01": "assets/sounds/fireball_01.ogg",
"hp_status_80": "assets/sounds/hp_status_80.ogg",
"hp_status_60": "assets/sounds/hp_status_60.ogg",
"hp_status_30": "assets/sounds/hp_status_30.ogg",
"hp_status_10": "assets/sounds/hp_status_10.ogg",
"hp_status_00": "assets/sounds/hp_status_00.ogg"
}, },
"sprites": { "sprites": {
"gold_savior": "gold_savior":

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

@ -12,7 +12,9 @@ namespace gui {
{ {
$gui.position(COMBAT_UI_X, COMBAT_UI_Y, COMBAT_UI_WIDTH, COMBAT_UI_HEIGHT); $gui.position(COMBAT_UI_X, COMBAT_UI_Y, COMBAT_UI_WIDTH, COMBAT_UI_HEIGHT);
$gui.layout( $gui.layout(
"[*%(100,150)button_0 | *%(100,150)button_1 | *%(100,150)button_2 | *%(100,150)button_3]"); "[button_0 | button_1 | button_2 | button_3"
"|button_4 | button_5 | button_6 | hp_gauge ]"
);
} }
DinkyECS::Entity CombatUI::make_button(std::string name, std::wstring label, Events::GUI event, int action, const std::string &icon_name, DinkyECS::Entity CombatUI::make_button(std::string name, std::wstring label, Events::GUI event, int action, const std::string &icon_name,
@ -24,7 +26,7 @@ namespace gui {
// $gui.set<Rectangle>(button, {}); // $gui.set<Rectangle>(button, {});
// $gui.set<Label>(button, {label}); // $gui.set<Label>(button, {label});
$gui.set<Sound>(button, {sound}); $gui.set<Sound>(button, {sound});
$gui.set<Effect>(button, {.duration=1.0f, .name=effect_name}); $gui.set<Effect>(button, {.duration=0.5f, .name=effect_name});
$gui.set<Clickable>(button, $gui.set<Clickable>(button,
guecs::make_action(*$level.world, event, {action})); guecs::make_action(*$level.world, event, {action}));
@ -41,8 +43,6 @@ namespace gui {
std::wstring label = fmt::format(L"Attack {}", slot+1); std::wstring label = fmt::format(L"Attack {}", slot+1);
auto& ritual = the_belt.get(slot); auto& ritual = the_belt.get(slot);
using enum combat::RitualElement; using enum combat::RitualElement;
switch(ritual.element) { switch(ritual.element) {
@ -52,7 +52,7 @@ namespace gui {
break; break;
case LIGHTNING: case LIGHTNING:
make_button(name, label, Events::GUI::ATTACK, make_button(name, label, Events::GUI::ATTACK,
slot, "stone_doll_cursed-64", "electric_shock_01", "lightning"); slot, "pocket_watch-64", "electric_shock_01", "lightning");
break; break;
default: default:
make_button(name, label, Events::GUI::ATTACK, make_button(name, label, Events::GUI::ATTACK,
@ -61,6 +61,11 @@ namespace gui {
} }
} }
auto hp_gauge = $gui.entity("hp_gauge");
$gui.set<Sprite>(hp_gauge, {"stone_doll_cursed-64"});
$gui.set<Clickable>(hp_gauge,
guecs::make_action(*$level.world, Events::GUI::HP_STATUS, {}));
$gui.init(); $gui.init();
} }

@ -3,7 +3,7 @@
namespace Events { namespace Events {
enum GUI { enum GUI {
START, COMBAT, LOOT, DEATH, STAIRS_UP, STAIRS_DOWN, TRAP, START, COMBAT, LOOT, DEATH, STAIRS_UP, STAIRS_DOWN, TRAP,
COMBAT_START, NO_NEIGHBORS, COMBAT_START, NO_NEIGHBORS, HP_STATUS,
ATTACK, BLOCK, EVADE, HEAL, ATTACK, BLOCK, EVADE, HEAL,
UPDATE_SPRITE, ENEMY_SPAWN, NOOP UPDATE_SPRITE, ENEMY_SPAWN, NOOP
}; };

@ -396,6 +396,9 @@ namespace gui {
// std::string(item.data["name"]))); // std::string(item.data["name"])));
$status_ui.log(L"You picked up an item."); $status_ui.log(L"You picked up an item.");
} break; } break;
case eGUI::HP_STATUS: {
System::player_status($level);
} break;
case eGUI::EVADE: case eGUI::EVADE:
case eGUI::BLOCK: case eGUI::BLOCK:
case eGUI::HEAL: case eGUI::HEAL:

@ -408,6 +408,22 @@ std::wstring System::draw_map(GameLevel level, size_t view_x, size_t view_y, int
return result; return result;
} }
void System::player_status(GameLevel &level) {
auto& combat = level.world->get<Combat>(level.player);
float percent = float(combat.hp) / float(combat.max_hp);
if(percent > 0.8) {
sound::play("hp_status_80");
} else if(percent > 0.6) {
sound::play("hp_status_60");
} else if(percent > 0.3) {
sound::play("hp_status_30");
} else if(percent > 0.1) {
sound::play("hp_status_10");
} else {
sound::play("hp_status_00");
}
}
std::shared_ptr<sf::Shader> System::sprite_effect(GameLevel &level, DinkyECS::Entity entity) { std::shared_ptr<sf::Shader> System::sprite_effect(GameLevel &level, DinkyECS::Entity entity) {
if(level.world->has<SpriteEffect>(entity)) { if(level.world->has<SpriteEffect>(entity)) {

@ -23,5 +23,6 @@ namespace System {
void combat(GameLevel &level, int attack_id); void combat(GameLevel &level, int attack_id);
std::shared_ptr<sf::Shader> sprite_effect(GameLevel &level, DinkyECS::Entity entity); std::shared_ptr<sf::Shader> sprite_effect(GameLevel &level, DinkyECS::Entity entity);
void player_status(GameLevel &level);
} }