Finish section 3.4

This commit is contained in:
Timothy Warren 2021-11-19 11:31:27 -05:00
parent 69194a2dd6
commit 87d825276e
2 changed files with 22 additions and 2 deletions

View File

@ -1,5 +1,6 @@
use crate::components::{ use crate::components::{
CombatStats, DefenseBonus, Equipped, MeleePowerBonus, Name, SufferDamage, WantsToMelee, CombatStats, DefenseBonus, Equipped, HungerClock, HungerState, MeleePowerBonus, Name,
SufferDamage, WantsToMelee,
}; };
use crate::{game_log::GameLog, particle_system::ParticleBuilder, Position}; use crate::{game_log::GameLog, particle_system::ParticleBuilder, Position};
use rltk::RGB; use rltk::RGB;
@ -21,6 +22,7 @@ impl<'a> System<'a> for MeleeCombatSystem {
ReadStorage<'a, Equipped>, ReadStorage<'a, Equipped>,
WriteExpect<'a, ParticleBuilder>, WriteExpect<'a, ParticleBuilder>,
ReadStorage<'a, Position>, ReadStorage<'a, Position>,
ReadStorage<'a, HungerClock>,
); );
fn run(&mut self, data: Self::SystemData) { fn run(&mut self, data: Self::SystemData) {
@ -36,6 +38,7 @@ impl<'a> System<'a> for MeleeCombatSystem {
equipped, equipped,
mut particle_builder, mut particle_builder,
positions, positions,
hunger_clock,
) = data; ) = data;
for (entity, wants_melee, name, stats) in for (entity, wants_melee, name, stats) in
@ -51,6 +54,12 @@ impl<'a> System<'a> for MeleeCombatSystem {
} }
} }
if let Some(hc) = hunger_clock.get(entity) {
if hc.state == HungerState::WellFed {
offensive_bonus += 1;
}
}
let target_stats = combat_stats.get(wants_melee.target).unwrap(); let target_stats = combat_stats.get(wants_melee.target).unwrap();
if target_stats.hp > 0 { if target_stats.hp > 0 {
let target_name = names.get(wants_melee.target).unwrap(); let target_name = names.get(wants_melee.target).unwrap();

View File

@ -1,5 +1,6 @@
use crate::components::{ use crate::components::{
CombatStats, Item, Monster, Player, Position, Viewshed, WantsToMelee, WantsToPickupItem, CombatStats, HungerClock, HungerState, Item, Monster, Player, Position, Viewshed, WantsToMelee,
WantsToPickupItem,
}; };
use crate::{game_log::GameLog, Map, RunState, State, TileType}; use crate::{game_log::GameLog, Map, RunState, State, TileType};
use rltk::{Point, Rltk, VirtualKeyCode}; use rltk::{Point, Rltk, VirtualKeyCode};
@ -125,6 +126,16 @@ fn skip_turn(ecs: &mut World) -> RunState {
} }
} }
// Don't allow healing when hungry or starving
let hunger_clocks = ecs.read_storage::<HungerClock>();
if let Some(hc) = hunger_clocks.get(*player_entity) {
match hc.state {
HungerState::Hungry => can_heal = false,
HungerState::Starving => can_heal = false,
_ => {}
}
}
if can_heal { if can_heal {
let mut health_components = ecs.write_storage::<CombatStats>(); let mut health_components = ecs.write_storage::<CombatStats>();
let player_hp = health_components.get_mut(*player_entity).unwrap(); let player_hp = health_components.get_mut(*player_entity).unwrap();