diff --git a/src/main.rs b/src/main.rs index 2e29d1c..23f4e94 100644 --- a/src/main.rs +++ b/src/main.rs @@ -61,7 +61,12 @@ fn main() -> BError { for (i, tile) in &mut map.get_tiles().iter().enumerate() { if rng.roll_dice(1, 16) < 2 && *tile == TileType::Floor { let position = map.index_to_point2d(i); - let kind = MonsterKind::Slow; + let kind = match rng.range(0, 3) { + 0 => MonsterKind::Slow, + 1 => MonsterKind::Medium, + 2 => MonsterKind::Fast, + _ => MonsterKind::Slow, + }; ecs.create_entity() .with(Position { x: position.x, diff --git a/src/resources/mod.rs b/src/resources/mod.rs index f497725..330b80e 100644 --- a/src/resources/mod.rs +++ b/src/resources/mod.rs @@ -48,3 +48,18 @@ pub struct Stats { pub teleports: u32, pub keys: u32, } + +type PlayerSurvived = bool; + +impl Stats { + pub fn take_gems(&mut self, num_gems: u32) -> PlayerSurvived { + let new_num_gems = self.gems as i64 - num_gems as i64; + if new_num_gems <= 0 { + self.gems = 0; + false + } else { + self.gems = new_num_gems as u32; + true + } + } +} diff --git a/src/state.rs b/src/state.rs index afa3d62..e69f991 100644 --- a/src/state.rs +++ b/src/state.rs @@ -111,9 +111,7 @@ impl State { } else { if let Some(e) = map.get_tile_content(map.point2d_to_index(destination)) { if let Some(monster) = monsters.get(e) { - if stats.gems > 0 { - stats.gems -= damage_for_kind(monster.kind); - } + stats.take_gems(damage_for_kind(monster.kind)); let _ = entities.delete(e); } } diff --git a/src/systems/monster_ai_system.rs b/src/systems/monster_ai_system.rs index 9b0eeb2..0457789 100644 --- a/src/systems/monster_ai_system.rs +++ b/src/systems/monster_ai_system.rs @@ -77,9 +77,7 @@ impl<'a> System<'a> for MonsterAiSystem { if let Some(e) = map.get_tile_content(map.point2d_to_index(destination)) { if let Some(_player) = players.get(e) { // TODO: Sound - if stats.gems > 0 { - stats.gems -= damage_for_kind(monster.kind); - } + stats.take_gems(damage_for_kind(monster.kind)); let _ = entities.delete(*entity); } } else {