changeset 416:30ce046d08c3

Fix clicking in dead dialog bug
author Stefano Rivera <stefano@rivera.za.net>
date Sat, 17 Sep 2011 16:40:29 +0200
parents f1ba457772ae
children 737e19e79857
files TODO.txt mamba/habitats/level.py mamba/widgets/base.py mamba/widgets/game.py
diffstat 4 files changed, 14 insertions(+), 18 deletions(-) [+]
line wrap: on
line diff
--- a/TODO.txt	Sat Sep 17 15:19:57 2011 +0200
+++ b/TODO.txt	Sat Sep 17 16:40:29 2011 +0200
@@ -2,7 +2,6 @@
 ====
 
 General:
-* Clicking in dead dialog
 * Enter + Space key in you dead dialogs
 * Highlight tile borders
 * Sounds, everywhere
--- a/mamba/habitats/level.py	Sat Sep 17 15:19:57 2011 +0200
+++ b/mamba/habitats/level.py	Sat Sep 17 16:40:29 2011 +0200
@@ -3,7 +3,7 @@
 from pygame.locals import KEYDOWN
 
 from mamba.constants import ESCAPE_KEYS
-from mamba.engine import Habitat, LevelCompletedEvent
+from mamba.engine import Habitat, LevelCompletedEvent, SnakeDiedEvent
 from mamba.gamestate import level_done
 from mamba.widgets.game import GameWidget
 from mamba.widgets.messagebox import MessageBox
@@ -16,10 +16,11 @@
         self.go_menu = go_menu
         self.go_next_level = go_next_level
         self.world = World(level)
-        game_widget = GameWidget(self.world)
-        self.container.add(game_widget)
+        self.game_widget = GameWidget(self.world)
+        self.container.add(self.game_widget)
         self.container.add_callback(KEYDOWN, self.keydown_event)
         self.container.add_callback(LevelCompletedEvent, self.level_completed)
+        self.container.add_callback(SnakeDiedEvent, self.snake_died)
 
     def keydown_event(self, ev, widget):
         if ev.key in ESCAPE_KEYS:
@@ -34,3 +35,11 @@
             MessageBox((300, 200), 'Level complete!', self.go_next_level))
         level_done(self.world.level.unique_name())
         return True
+
+    def snake_died(self, ev, widget):
+        if not self.world.pause():
+            return False
+        self.display_dialog(MessageBox((300, 200), 'You died!\n%s' % ev.reason,
+                            self.game_widget.restart))
+        self.world.snake.alive = False
+        return True
--- a/mamba/widgets/base.py	Sat Sep 17 15:19:57 2011 +0200
+++ b/mamba/widgets/base.py	Sat Sep 17 16:40:29 2011 +0200
@@ -116,7 +116,7 @@
                 if child.rect.collidepoint(ev.pos):
                     if ev.type == MOUSEBUTTONDOWN and child.focussable:
                         if not child.grab_focus():
-                            return False
+                            continue
                     if child.event(ev):
                         return True
 
--- a/mamba/widgets/game.py	Sat Sep 17 15:19:57 2011 +0200
+++ b/mamba/widgets/game.py	Sat Sep 17 16:40:29 2011 +0200
@@ -5,8 +5,7 @@
 
 from mamba.constants import UP, DOWN, LEFT, RIGHT
 from mamba.widgets.base import Widget
-from mamba.widgets.messagebox import MessageBox
-from mamba.engine import SnakeDiedEvent, FlipArrowsEvent
+from mamba.engine import FlipArrowsEvent
 
 
 class GameWidget(Widget):
@@ -17,7 +16,6 @@
         super(GameWidget, self).__init__(rect)
         self.focussable = True
         self.add_callback(KEYDOWN, self.action_callback)
-        self.add_callback(SnakeDiedEvent, self.snake_died)
         self.add_callback(FlipArrowsEvent, self.flip_arrows)
 
     def create_action_map(self):
@@ -42,16 +40,6 @@
         self.world.update()
         self.world.draw(surface)
 
-    def snake_died(self, ev, widget):
-        if not self.world.pause():
-            return False
-        messagebox = MessageBox((300, 200), 'You died!\n%s' % ev.reason,
-                self.restart)
-        self.parent.add(messagebox)
-        messagebox.grab_focus()
-        self.world.snake.alive = False
-        return True
-
     def restart(self):
         self.world.restart()
         self.actions = self.create_action_map()