Add method to remove gems with bounds check

This commit is contained in:
Alex Page 2022-01-29 01:55:06 -05:00
parent 67d6396e60
commit b417c53a01
4 changed files with 23 additions and 7 deletions

View file

@ -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,

View file

@ -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
}
}
}

View file

@ -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);
}
}

View file

@ -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 {