From a51d63963f6ca37548749765b0fd2af19dcf5ac4 Mon Sep 17 00:00:00 2001 From: Timothy Warren Date: Wed, 10 Nov 2021 15:52:45 -0500 Subject: [PATCH] Add turn skipping and healing on skipped turns --- src/player.rs | 35 ++++++++++++++++++++++++++++++++++- 1 file changed, 34 insertions(+), 1 deletion(-) diff --git a/src/player.rs b/src/player.rs index 7111c0e..6de1a64 100644 --- a/src/player.rs +++ b/src/player.rs @@ -1,5 +1,5 @@ use crate::components::{ - CombatStats, Item, Player, Position, Viewshed, WantsToMelee, WantsToPickupItem, + CombatStats, Item, Monster, Player, Position, Viewshed, WantsToMelee, WantsToPickupItem, }; use crate::{game_log::GameLog, Map, RunState, State, TileType}; use rltk::{Point, Rltk, VirtualKeyCode}; @@ -114,6 +114,9 @@ pub fn player_input(gs: &mut State, ctx: &mut Rltk) -> RunState { } } + // Skip Turn + VirtualKeyCode::Numpad5 | VirtualKeyCode::Space => return skip_turn(&mut gs.ecs), + _ => return RunState::AwaitingInput, }, } @@ -170,3 +173,33 @@ pub fn try_next_level(ecs: &mut World) -> bool { false } } + +fn skip_turn(ecs: &mut World) -> RunState { + let player_entity = ecs.fetch::(); + let viewshed_components = ecs.read_storage::(); + let monsters = ecs.read_storage::(); + + let worldmap_resource = ecs.fetch::(); + + let mut can_heal = true; + 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); + for entity_id in worldmap_resource.tile_content[idx].iter() { + match monsters.get(*entity_id) { + None => {} + Some(_) => { + can_heal = false; + } + } + } + } + + if can_heal { + let mut health_components = ecs.write_storage::(); + let player_hp = health_components.get_mut(*player_entity).unwrap(); + player_hp.hp = i32::min(player_hp.hp + 1, player_hp.max_hp); + } + + RunState::PlayerTurn +}