# HG changeset patch # User Simon Cross # Date 1259432879 0 # Node ID 8cd13b82585e6b4c991c1baab489656725d50ef2 # Parent b71b7fcf6dc1b29ebd4bb1a84cfa290bc15754ea Allow ESC to exit high score menu and then still exit game if pressed a second time. diff -r b71b7fcf6dc1 -r 8cd13b82585e gamelib/engine.py --- 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)) diff -r b71b7fcf6dc1 -r 8cd13b82585e gamelib/gameover.py --- 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("High Scores for Level%s" + % 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) diff -r b71b7fcf6dc1 -r 8cd13b82585e gamelib/mainmenu.py --- 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