diff nagslang/screens/area.py @ 520:3f79a77ef1e3

Ephemeral messages
author Stefano Rivera <stefano@rivera.za.net>
date Sat, 07 Sep 2013 20:20:25 +0200
parents a46767c61ad6
children bf7960e49063
line wrap: on
line diff
--- a/nagslang/screens/area.py	Sat Sep 07 20:09:31 2013 +0200
+++ b/nagslang/screens/area.py	Sat Sep 07 20:20:25 2013 +0200
@@ -9,7 +9,8 @@
     COLLISION_TYPE_WALL, COLLISION_TYPE_PLAYER, CALLBACK_COLLIDERS,
     COLLISION_TYPE_FURNITURE, COLLISION_TYPE_WEREWOLF_ATTACK,
     CMD_TOGGLE_FORM, CMD_ACTION)
-from nagslang.events import ScreenChange, DoorEvent, QuitEvent, DeathEvent
+from nagslang.events import (
+    AddDrawableEvent, DeathEvent, DoorEvent, QuitEvent, ScreenChange)
 from nagslang.level import Level
 from nagslang.screens.base import Screen
 from nagslang.sound import sound
@@ -203,7 +204,10 @@
             level, pos = Level.game_starting_point()
             self.protagonist.set_position(pos)
             ScreenChange.post(level)
-
+        elif AddDrawableEvent.matches(ev):
+            self._drawables.add(ev.drawable)
+            if ev.drawable.overlay:
+                self._level.overlay_drawables.append(ev.drawable.overlay)
         self.keys.handle_event(ev)
 
     def _calc_viewport(self, level_surface, display_surface):
@@ -247,9 +251,10 @@
         surface.blit(self._surface, (0, 0), render_rect)
         # Maximum width we allow for overlays
         max_width = min(render_rect.width, self._surface.get_width())
-        for overlay in self._level.overlay_drawables:
+        for overlay in reversed(self._level.overlay_drawables):
             if overlay.is_visible():
                 overlay.render(surface, render_rect.topleft, max_width)
+                break
         self.render_health_bar(surface)
 
     def tick_protagonist(self):
@@ -268,8 +273,12 @@
         if result is not None:
             for drawable in result.add:
                 self._drawables.add(drawable)
+                if drawable.overlay:
+                    self._level.overlay_drawables.add(drawable.overlay)
             for drawable in result.remove:
                 self._drawables.remove(drawable)
+                if drawable.overlay:
+                    self._level.overlay_drawables.remove(drawable.overlay)
 
     def render_health_bar(self, surface, damage_experienced=None):
         bar_surface = pygame.Surface((110, 50)).convert(surface)