From 388754e5ddb50d0cdb8a05a58a43443a08b1ec76 Mon Sep 17 00:00:00 2001 From: Eryn Wells Date: Sat, 14 May 2022 23:43:38 -0700 Subject: [PATCH] When the Hero dies, swap MainGameEventHandler for GameOverEventHandler --- erynrl/actions.py | 3 +-- erynrl/engine.py | 14 +++++++++++++- 2 files changed, 14 insertions(+), 3 deletions(-) diff --git a/erynrl/actions.py b/erynrl/actions.py index ca3f447..790acaa 100644 --- a/erynrl/actions.py +++ b/erynrl/actions.py @@ -221,8 +221,7 @@ class DieAction(Action): '''Kill an Actor''' def perform(self, engine: 'Engine') -> ActionResult: - log.ACTIONS.debug('%s dies', self.actor) - engine.entities.remove(self.actor) + engine.kill_actor(self.actor) if self.actor.yields_corpse_on_death: log.ACTIONS.debug('%s leaves a corpse behind', self.actor) diff --git a/erynrl/engine.py b/erynrl/engine.py index 9573973..4b5125b 100644 --- a/erynrl/engine.py +++ b/erynrl/engine.py @@ -12,7 +12,7 @@ from . import log from . import monsters from .actions import Action, ActionResult from .ai import HostileEnemy -from .events import MainGameEventHandler +from .events import GameOverEventHandler, MainGameEventHandler from .geometry import Size from .map import Map from .object import Actor, Entity, Hero, Monster @@ -179,3 +179,15 @@ class Engine: # Visible tiles should be added to the explored list self.map.explored |= self.map.visible + + def kill_actor(self, actor: Actor) -> None: + '''Kill an entity. Remove it from the game.''' + + if actor == self.hero: + # When the hero dies, the game is over. + # TODO: Transition to game over state + log.ACTIONS.debug('Time to die.') + self.event_handler = GameOverEventHandler(self) + else: + log.ACTIONS.debug('%s dies', actor) + self.entities.remove(actor)