Mercurial > nagslang
diff nagslang/screens/area.py @ 180:026297a03963
Add DoorEvent and tweak ScreenChange to keep more state when the player goes through a door
author | Neil Muller <drnlmuller@gmail.com> |
---|---|
date | Tue, 03 Sep 2013 16:58:45 +0200 |
parents | 7d8e1682587f |
children | 3894cfe15823 |
line wrap: on
line diff
--- a/nagslang/screens/area.py Tue Sep 03 16:57:09 2013 +0200 +++ b/nagslang/screens/area.py Tue Sep 03 16:58:45 2013 +0200 @@ -4,7 +4,7 @@ import pymunk import pymunk.pygame_util -from nagslang.events import ScreenChange +from nagslang.events import ScreenChange, DoorEvent from nagslang.level import Level from nagslang.protagonist import Protagonist from nagslang.screens.base import Screen @@ -68,7 +68,14 @@ self._level.load(self.space) self._drawables = Drawables() self.add_walls() - self.add_protagonist() + if self.protagonist is not None: + # We do things this way to avoid extra pymunk + # juggling to move objects between spaces + old_protagonist = self.protagonist + self.add_protagonist() + self.protagonist.copy_state(old_protagonist) + else: + self.add_protagonist() self.add_game_objects() def add_walls(self): @@ -100,6 +107,13 @@ ScreenChange.post('menu') if ev.key == pygame.locals.K_c: self.protagonist.toggle_form() + elif DoorEvent.matches(ev): + self.protagonist.set_position(ev.dest_pos) + if ev.destination != self.name: + # Go to anther screen + ScreenChange.post(ev.destination, self.protagonist) + # else we're teleporting within the screen, and just the + # position change is enough self.keys.handle_event(ev) def _calc_viewport(self, level_surface, display_surface):