Skip to content

Commit 49cd908

Browse files
committed
prevent crash if the player kills itself; allow using it on recent enemy that attacked
1 parent 058207e commit 49cd908

1 file changed

Lines changed: 11 additions & 3 deletions

File tree

src/game.rs

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -318,15 +318,21 @@ impl Game {
318318

319319
fn combat(&mut self) -> String {
320320
let mut damage = 0;
321+
let mut last = String::new();
321322
let res = self.items.iter().fold(String::new(), |acc, (id, ent)| {
322323
if ent.is_in(self.player_location()) && ent.is_aggressive() && *id != self.player {
323324
damage += ent.damage();
325+
last = ent.name().to_owned();
324326
format!("{}\n\nThe {} hits you.", acc, ent.name()) // TODO: random different messages
325327
} else {
326328
acc
327329
}
328330
});
329331

332+
if !last.is_empty() {
333+
self.last_it = last;
334+
}
335+
330336
let player = self.item_mut(&self.player.to_owned());
331337
player.hurt(damage);
332338

@@ -346,8 +352,10 @@ impl Game {
346352
enemy_item.hurt(damage);
347353

348354
let enemy_name = enemy_item.name().to_owned();
349-
let dies = if self.item(enemy).hp() <= 0 {
350-
self.items.remove(enemy);
355+
let dies = if enemy_item.hp() <= 0 {
356+
if enemy != self.player {
357+
self.items.remove(enemy);
358+
}
351359

352360
let player_location = self.player_location().to_owned();
353361
let loot = self
@@ -361,7 +369,7 @@ impl Game {
361369
.collect::<Vec<_>>();
362370

363371
if loot.is_empty() {
364-
" It dies.".to_owned()
372+
" It dies.".to_owned() // TODO: death message
365373
} else {
366374
if loot.len() == 1 {
367375
self.last_it = loot[0].to_owned();

0 commit comments

Comments
 (0)