changeset 560:8cd13b82585e

Allow ESC to exit high score menu and then still exit game if pressed a second time.
author Simon Cross <hodgestar@gmail.com>
date Sat, 28 Nov 2009 18:27:59 +0000
parents b71b7fcf6dc1
children 7f037ee2a6c8
files gamelib/engine.py gamelib/gameover.py gamelib/mainmenu.py
diffstat 3 files changed, 36 insertions(+), 23 deletions(-) [+]
line wrap: on
line diff
--- a/gamelib/engine.py	Sat Nov 28 18:27:02 2009 +0000
+++ b/gamelib/engine.py	Sat Nov 28 18:27:59 2009 +0000
@@ -78,14 +78,6 @@
             return DayState(self.game)
         elif events_equal(e, GO_HELP_SCREEN):
             return HelpScreenState(self.game)
-        elif e.type is KEYDOWN:
-            if e.key == K_ESCAPE:
-                return Quit(self.game)
-            elif e.key == K_s:
-                self.game.create_game_board()
-                return DayState(self.game)
-            elif e.key == K_i:
-                return HelpScreenState(self.game)
         elif e.type is DO_LOAD_LEVEL:
             self.game.load_new_level(e.level)
             return
@@ -93,8 +85,8 @@
             self.game.switch_gameboard(e.gameboard)
             e.gameboard.skip_next_start_day()
             return DayState(self.game)
-        elif e.type is not QUIT:
-            self.game.main_app.event(e)
+
+        self.game.main_app.event(e)
 
     def paint(self, screen):
         screen.fill((0,0,0))
--- a/gamelib/gameover.py	Sat Nov 28 18:27:02 2009 +0000
+++ b/gamelib/gameover.py	Sat Nov 28 18:27:59 2009 +0000
@@ -3,8 +3,10 @@
 import os
 
 from pgu import gui
+from pgu import html
 from pgu.high import Highs
 import pygame
+from pygame.locals import KEYDOWN, K_ESCAPE
 
 import engine
 import constants
@@ -174,18 +176,23 @@
         self.td(gui.Spacer(0, height), colspan=3)
 
 
-class Scoreboard(gui.Table):
+class ScoreDialog(gui.Dialog):
 
     def __init__(self, level, **params):
-        gui.Table.__init__(self, **params)
-
+        title = html.HTML("<b>High Scores for Level<i>%s</i></b>"
+            % level.level_name)
         scoreboard = ScoreTable(level)
 
-        self.tr()
-        self.td(gui.Label('Level: %s' % level.level_name, colspan=3))
-
+        tbl = gui.Table()
         for highscore in scoreboard:
-            self.tr()
-            self.td(gui.Label(highscore.name), colspan=2)
-            self.td(gui.Label('%d' % highscore.score))
+            tbl.tr()
+            tbl.td(gui.Label(highscore.name), colspan=2)
+            tbl.td(gui.Label('%d' % highscore.score))
+
+        gui.Dialog.__init__(self, title, tbl, **params)
 
+    def event(self, e):
+        if e.type == KEYDOWN and e.key == K_ESCAPE:
+            self.close()
+            return True
+        return gui.Dialog.event(self, e)
--- a/gamelib/mainmenu.py	Sat Nov 28 18:27:02 2009 +0000
+++ b/gamelib/mainmenu.py	Sat Nov 28 18:27:59 2009 +0000
@@ -1,6 +1,7 @@
 """Main menu."""
 
 from pgu import gui
+from pygame.locals import QUIT, KEYDOWN, K_ESCAPE
 import pygame
 import constants
 import engine
@@ -29,6 +30,22 @@
     def get_mode(self):
         return self.widgets[0].mode
 
+    def event(self, e):
+        if gui.Container.event(self, e):
+            return True
+        if e.type is KEYDOWN:
+            if e.key == K_ESCAPE:
+                pygame.event.post(pygame.event.Event(QUIT))
+                return True
+            elif e.key == K_s:
+                pygame.event.post(engine.START_DAY)
+                return True
+            elif e.key == K_i:
+                pygame.event.post(engine.GO_HELP_SCREEN)
+                return True
+        return False
+
+
 class MainMenu(gui.Table):
     def __init__(self, level, **params):
         gui.Table.__init__(self, **params)
@@ -55,9 +72,7 @@
             savegame.RestoreDialog(gameboard.GameBoard.restore_game).open()
 
         def scores_pressed():
-            scoreboard = gameover.Scoreboard(self.level)
-            title = gui.Label("High Scores for Level %s" % self.level.level_name)
-            gui.Dialog(title, scoreboard).open()
+            gameover.ScoreDialog(self.level).open()
 
         def help_pressed():
             pygame.event.post(engine.GO_HELP_SCREEN)
@@ -105,6 +120,5 @@
         # self.tr()
         # self.td(fullscreen_toggle, **td_kwargs)
 
-
     def redraw(self):
         self.start_button.value = self.level.level_name