hunger system
This commit is contained in:
parent
b6a29df222
commit
73bd07c1b8
11 changed files with 337 additions and 97 deletions
|
|
@ -1,6 +1,6 @@
|
|||
use super::{
|
||||
gamelog, CombatStats, Item, Map, Monster, Name, Player, Position, RunState, State, Telepath, TileType, Viewshed,
|
||||
WantsToMelee, WantsToPickupItem, MAPHEIGHT, MAPWIDTH,
|
||||
gamelog, CombatStats, HungerClock, HungerState, Item, Map, Monster, Name, Player, Position, RunState, State,
|
||||
Telepath, TileType, Viewshed, WantsToMelee, WantsToPickupItem, MAPHEIGHT, MAPWIDTH,
|
||||
};
|
||||
use rltk::{Point, RandomNumberGenerator, Rltk, VirtualKeyCode};
|
||||
use specs::prelude::*;
|
||||
|
|
@ -172,8 +172,12 @@ fn skip_turn(ecs: &mut World) -> RunState {
|
|||
let viewshed_components = ecs.read_storage::<Viewshed>();
|
||||
let monsters = ecs.read_storage::<Monster>();
|
||||
let worldmap_resource = ecs.fetch::<Map>();
|
||||
let hunger_clocks = ecs.read_storage::<HungerClock>();
|
||||
|
||||
// Default to being able to heal by waiting.
|
||||
let mut can_heal = true;
|
||||
|
||||
// Check viewshed for monsters nearby. If we can see a monster, we can't heal.
|
||||
let viewshed = viewshed_components.get(*player_entity).unwrap();
|
||||
for tile in viewshed.visible_tiles.iter() {
|
||||
let idx = worldmap_resource.xy_idx(tile.x, tile.y);
|
||||
|
|
@ -188,6 +192,17 @@ fn skip_turn(ecs: &mut World) -> RunState {
|
|||
}
|
||||
}
|
||||
|
||||
// Check player's hunger state - if we're hungry or worse, we can't heal.
|
||||
let player_hunger_clock = hunger_clocks.get(*player_entity);
|
||||
if let Some(clock) = player_hunger_clock {
|
||||
match clock.state {
|
||||
HungerState::Hungry => can_heal = false,
|
||||
HungerState::Weak => can_heal = false,
|
||||
HungerState::Fainting => can_heal = false,
|
||||
_ => {}
|
||||
}
|
||||
}
|
||||
|
||||
let mut did_heal = false;
|
||||
if can_heal {
|
||||
let mut health_components = ecs.write_storage::<CombatStats>();
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue