Mercurial > nagslang
view nagslang/screens/menu.py @ 346:282113d86d75
Save door and lever state.
author | Jeremy Thurgood <firxen@gmail.com> |
---|---|
date | Fri, 06 Sep 2013 15:14:27 +0200 |
parents | 4708e86a9a3c |
children | e36e6101b766 |
line wrap: on
line source
"""Display a menu screen.""" import pygame from nagslang.screens.base import Screen from nagslang.events import QuitEvent, ScreenChange from nagslang.widgets.text import TextWidget, MultiLineWidget class MenuScreen(Screen): def setup(self): # Position is hacked later self.cursor = TextWidget((0, 0), u'\N{Rightwards Arrow}', colour='red') self.cursor_pos = 0 self.options = [ self.play, self.restart, self.quit, ] self.widgets = [ TextWidget((10, 10), 'Menu', fontsize=20), TextWidget((40, 50), 'Play the game'), TextWidget((40, 70), 'Start the game from the beginning again'), TextWidget((40, 90), 'Quit'), MultiLineWidget((60, 120), self.world.get_formatted_stats()), self.cursor, ] def handle_event(self, ev): if ev.type == pygame.locals.KEYDOWN: if ev.key == pygame.locals.K_ESCAPE: self.quit() elif ev.key == pygame.locals.K_DOWN: self.cursor_pos = (self.cursor_pos + 1) % len(self.options) elif ev.key == pygame.locals.K_UP: self.cursor_pos = (self.cursor_pos - 1) % len(self.options) elif ev.key == pygame.locals.K_RETURN: self.options[self.cursor_pos]() def render(self, surface): surface.fill(pygame.color.Color(255, 255, 255)) self.cursor.pos = (10, 50 + 20 * self.cursor_pos) self.cursor.rect.top = self.cursor.pos[1] for widget in self.widgets: widget.draw(surface) def play(self): level_name, pos = self.world.level self.world.protagonist.set_position(tuple(pos)) ScreenChange.post(level_name) def restart(self): self.world.reset() self.setup() def quit(self): QuitEvent.post()