A few more fixes for how Combat works.
This commit is contained in:
parent
2a92687bc9
commit
54d0a41c52
3 changed files with 7 additions and 20 deletions
|
|
@ -303,7 +303,7 @@ void System::collision() {
|
||||||
for(auto entity : nearby) {
|
for(auto entity : nearby) {
|
||||||
if(world.has<Combat>(entity)) {
|
if(world.has<Combat>(entity)) {
|
||||||
auto combat = world.get<Combat>(entity);
|
auto combat = world.get<Combat>(entity);
|
||||||
if(!combat.is_dead()) {
|
if(!combat.has_died) {
|
||||||
combat_count++;
|
combat_count++;
|
||||||
world.send<game::Event>(game::Event::COMBAT_START, entity, entity);
|
world.send<game::Event>(game::Event::COMBAT_START, entity, entity);
|
||||||
}
|
}
|
||||||
|
|
@ -603,34 +603,22 @@ void System::render_map(Matrix& tiles, EntityGrid& entity_map, sf::RenderTexture
|
||||||
render.display();
|
render.display();
|
||||||
}
|
}
|
||||||
|
|
||||||
bool System::use_item(const string& slot_name) {
|
void System::use_item(const string& slot_name) {
|
||||||
auto& level = GameDB::current_level();
|
auto& level = GameDB::current_level();
|
||||||
auto& world = *level.world;
|
auto& world = *level.world;
|
||||||
auto& inventory = world.get<inventory::Model>(level.player);
|
auto& inventory = world.get<inventory::Model>(level.player);
|
||||||
auto& player_combat = world.get<Combat>(level.player);
|
auto& player_combat = world.get<Combat>(level.player);
|
||||||
|
|
||||||
if(player_combat.hp >= player_combat.max_hp) return false;
|
if(!(player_combat.can_heal() && inventory.has(slot_name))) return;
|
||||||
if(!inventory.has(slot_name)) return false;
|
|
||||||
|
|
||||||
auto what = inventory.get(slot_name);
|
auto what = inventory.get(slot_name);
|
||||||
|
|
||||||
if(auto curative = world.get_if<Curative>(what)) {
|
if(auto curative = world.get_if<Curative>(what)) {
|
||||||
inventory.remove(what);
|
inventory.remove(what);
|
||||||
|
player_combat.apply_healing(*curative);
|
||||||
player_combat.hp += curative->hp;
|
|
||||||
|
|
||||||
if(player_combat.hp > player_combat.max_hp) {
|
|
||||||
player_combat.hp = player_combat.max_hp;
|
|
||||||
}
|
|
||||||
|
|
||||||
dbc::log($F("player health now {}",
|
|
||||||
player_combat.hp));
|
|
||||||
|
|
||||||
world.remove<Curative>(what);
|
world.remove<Curative>(what);
|
||||||
return true;
|
|
||||||
} else {
|
} else {
|
||||||
dbc::log($F("no usable item at {}", what));
|
dbc::log($F("no usable item at {}", what));
|
||||||
return false;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -43,7 +43,7 @@ namespace System {
|
||||||
void render_map(Matrix& tiles, EntityGrid& entity_map, sf::RenderTexture& render, int compass_dir, wchar_t player_display);
|
void render_map(Matrix& tiles, EntityGrid& entity_map, sf::RenderTexture& render, int compass_dir, wchar_t player_display);
|
||||||
|
|
||||||
void set_position(DinkyECS::World& world, SpatialMap& collision, Entity entity, Position pos);
|
void set_position(DinkyECS::World& world, SpatialMap& collision, Entity entity, Position pos);
|
||||||
bool use_item(const std::string& slot_name);
|
void use_item(const std::string& slot_name);
|
||||||
|
|
||||||
game::Event shortest_rotate(Point player_at, Point aiming_at, Point turning_to);
|
game::Event shortest_rotate(Point player_at, Point aiming_at, Point turning_to);
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -193,9 +193,8 @@ namespace gui {
|
||||||
auto gui_id = std::any_cast<guecs::Entity>(data);
|
auto gui_id = std::any_cast<guecs::Entity>(data);
|
||||||
auto& slot_name = $status_ui.$gui.name_for(gui_id);
|
auto& slot_name = $status_ui.$gui.name_for(gui_id);
|
||||||
|
|
||||||
if(System::use_item(slot_name)) {
|
System::use_item(slot_name);
|
||||||
$status_ui.update();
|
$status_ui.update();
|
||||||
}
|
|
||||||
} break;
|
} break;
|
||||||
case MOUSE_CLICK:
|
case MOUSE_CLICK:
|
||||||
mouse_action(guecs::NO_MODS);
|
mouse_action(guecs::NO_MODS);
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue