2021-12-24 10:38:44 -05:00
|
|
|
use ::specs::prelude::*;
|
2021-11-18 10:28:49 -05:00
|
|
|
|
2022-01-11 10:01:37 -05:00
|
|
|
use crate::components::{HungerClock, HungerState, MyTurn, SufferDamage};
|
2021-12-10 20:16:48 -05:00
|
|
|
use crate::game_log::GameLog;
|
|
|
|
|
2021-11-18 10:28:49 -05:00
|
|
|
pub struct HungerSystem {}
|
|
|
|
|
|
|
|
impl<'a> System<'a> for HungerSystem {
|
|
|
|
#[allow(clippy::type_complexity)]
|
|
|
|
type SystemData = (
|
|
|
|
Entities<'a>,
|
|
|
|
WriteStorage<'a, HungerClock>,
|
|
|
|
ReadExpect<'a, Entity>, // The player
|
|
|
|
WriteStorage<'a, SufferDamage>,
|
|
|
|
WriteExpect<'a, GameLog>,
|
2022-01-11 10:01:37 -05:00
|
|
|
ReadStorage<'a, MyTurn>,
|
2021-11-18 10:28:49 -05:00
|
|
|
);
|
|
|
|
|
|
|
|
fn run(&mut self, data: Self::SystemData) {
|
2022-01-11 14:16:23 -05:00
|
|
|
let (entities, mut hunger_clock, player_entity, mut inflict_damage, mut log, turns) = data;
|
2021-11-18 10:28:49 -05:00
|
|
|
|
2022-01-11 10:01:37 -05:00
|
|
|
for (entity, mut clock, _myturn) in (&entities, &mut hunger_clock, &turns).join() {
|
|
|
|
clock.duration -= 1;
|
2021-11-18 10:28:49 -05:00
|
|
|
|
2022-01-11 10:01:37 -05:00
|
|
|
if clock.duration < 1 {
|
|
|
|
match clock.state {
|
|
|
|
HungerState::WellFed => {
|
|
|
|
clock.state = HungerState::Normal;
|
|
|
|
clock.duration = 200;
|
2021-11-18 10:28:49 -05:00
|
|
|
|
2022-01-11 10:01:37 -05:00
|
|
|
if entity == *player_entity {
|
|
|
|
log.append("You are no longer well fed.");
|
2021-11-18 10:28:49 -05:00
|
|
|
}
|
2022-01-11 10:01:37 -05:00
|
|
|
}
|
|
|
|
HungerState::Normal => {
|
|
|
|
clock.state = HungerState::Hungry;
|
|
|
|
clock.duration = 200;
|
2021-11-18 10:28:49 -05:00
|
|
|
|
2022-01-11 10:01:37 -05:00
|
|
|
if entity == *player_entity {
|
|
|
|
log.append("You are hungry.");
|
2021-11-18 10:28:49 -05:00
|
|
|
}
|
2022-01-11 10:01:37 -05:00
|
|
|
}
|
|
|
|
HungerState::Hungry => {
|
|
|
|
clock.state = HungerState::Starving;
|
|
|
|
clock.duration = 200;
|
2021-11-18 10:28:49 -05:00
|
|
|
|
2022-01-11 10:01:37 -05:00
|
|
|
if entity == *player_entity {
|
|
|
|
log.append("You are starving!");
|
2021-11-18 10:28:49 -05:00
|
|
|
}
|
2022-01-11 10:01:37 -05:00
|
|
|
}
|
|
|
|
HungerState::Starving => {
|
|
|
|
// Inflict damage from hunger
|
|
|
|
if entity == *player_entity {
|
|
|
|
log.append("Your hunger pangs are getting painful!");
|
2021-11-18 10:28:49 -05:00
|
|
|
}
|
2022-01-11 10:01:37 -05:00
|
|
|
|
|
|
|
SufferDamage::new_damage(&mut inflict_damage, entity, 1, false);
|
2021-11-18 10:28:49 -05:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|