Mercurial > nagslang
annotate nagslang/screens/menu.py @ 345:4708e86a9a3c
Remember start position on a level (a bit hacky)
author | Stefano Rivera <stefano@rivera.za.net> |
---|---|
date | Fri, 06 Sep 2013 13:42:42 +0200 |
parents | 11febdb72296 |
children | 282113d86d75 |
rev | line source |
---|---|
18 | 1 """Display a menu screen.""" |
2 | |
19 | 3 import pygame |
18 | 4 |
5 from nagslang.screens.base import Screen | |
20 | 6 from nagslang.events import QuitEvent, ScreenChange |
238
28d906fc2ab1
Add a world object to collect some stats
Neil Muller <drnlmuller@gmail.com>
parents:
226
diff
changeset
|
7 from nagslang.widgets.text import TextWidget, MultiLineWidget |
18 | 8 |
9 | |
10 class MenuScreen(Screen): | |
226
e89a43d208b9
A stupid, simple menu
Stefano Rivera <stefano@rivera.za.net>
parents:
180
diff
changeset
|
11 def setup(self): |
e89a43d208b9
A stupid, simple menu
Stefano Rivera <stefano@rivera.za.net>
parents:
180
diff
changeset
|
12 # Position is hacked later |
e89a43d208b9
A stupid, simple menu
Stefano Rivera <stefano@rivera.za.net>
parents:
180
diff
changeset
|
13 self.cursor = TextWidget((0, 0), u'\N{Rightwards Arrow}', |
e89a43d208b9
A stupid, simple menu
Stefano Rivera <stefano@rivera.za.net>
parents:
180
diff
changeset
|
14 colour='red') |
e89a43d208b9
A stupid, simple menu
Stefano Rivera <stefano@rivera.za.net>
parents:
180
diff
changeset
|
15 self.cursor_pos = 0 |
e89a43d208b9
A stupid, simple menu
Stefano Rivera <stefano@rivera.za.net>
parents:
180
diff
changeset
|
16 self.options = [ |
252 | 17 self.play, |
18 self.restart, | |
226
e89a43d208b9
A stupid, simple menu
Stefano Rivera <stefano@rivera.za.net>
parents:
180
diff
changeset
|
19 self.quit, |
e89a43d208b9
A stupid, simple menu
Stefano Rivera <stefano@rivera.za.net>
parents:
180
diff
changeset
|
20 ] |
e89a43d208b9
A stupid, simple menu
Stefano Rivera <stefano@rivera.za.net>
parents:
180
diff
changeset
|
21 self.widgets = [ |
e89a43d208b9
A stupid, simple menu
Stefano Rivera <stefano@rivera.za.net>
parents:
180
diff
changeset
|
22 TextWidget((10, 10), 'Menu', fontsize=20), |
252 | 23 TextWidget((40, 50), 'Play the game'), |
24 TextWidget((40, 70), 'Start the game from the beginning again'), | |
226
e89a43d208b9
A stupid, simple menu
Stefano Rivera <stefano@rivera.za.net>
parents:
180
diff
changeset
|
25 TextWidget((40, 90), 'Quit'), |
238
28d906fc2ab1
Add a world object to collect some stats
Neil Muller <drnlmuller@gmail.com>
parents:
226
diff
changeset
|
26 MultiLineWidget((60, 120), self.world.get_formatted_stats()), |
226
e89a43d208b9
A stupid, simple menu
Stefano Rivera <stefano@rivera.za.net>
parents:
180
diff
changeset
|
27 self.cursor, |
e89a43d208b9
A stupid, simple menu
Stefano Rivera <stefano@rivera.za.net>
parents:
180
diff
changeset
|
28 ] |
18 | 29 |
30 def handle_event(self, ev): | |
20 | 31 if ev.type == pygame.locals.KEYDOWN: |
32 if ev.key == pygame.locals.K_ESCAPE: | |
226
e89a43d208b9
A stupid, simple menu
Stefano Rivera <stefano@rivera.za.net>
parents:
180
diff
changeset
|
33 self.quit() |
e89a43d208b9
A stupid, simple menu
Stefano Rivera <stefano@rivera.za.net>
parents:
180
diff
changeset
|
34 elif ev.key == pygame.locals.K_DOWN: |
e89a43d208b9
A stupid, simple menu
Stefano Rivera <stefano@rivera.za.net>
parents:
180
diff
changeset
|
35 self.cursor_pos = (self.cursor_pos + 1) % len(self.options) |
e89a43d208b9
A stupid, simple menu
Stefano Rivera <stefano@rivera.za.net>
parents:
180
diff
changeset
|
36 elif ev.key == pygame.locals.K_UP: |
e89a43d208b9
A stupid, simple menu
Stefano Rivera <stefano@rivera.za.net>
parents:
180
diff
changeset
|
37 self.cursor_pos = (self.cursor_pos - 1) % len(self.options) |
e89a43d208b9
A stupid, simple menu
Stefano Rivera <stefano@rivera.za.net>
parents:
180
diff
changeset
|
38 elif ev.key == pygame.locals.K_RETURN: |
e89a43d208b9
A stupid, simple menu
Stefano Rivera <stefano@rivera.za.net>
parents:
180
diff
changeset
|
39 self.options[self.cursor_pos]() |
18 | 40 |
41 def render(self, surface): | |
29
58505d3482b6
Text on the menu screen
Stefano Rivera <stefano@rivera.za.net>
parents:
21
diff
changeset
|
42 surface.fill(pygame.color.Color(255, 255, 255)) |
226
e89a43d208b9
A stupid, simple menu
Stefano Rivera <stefano@rivera.za.net>
parents:
180
diff
changeset
|
43 self.cursor.pos = (10, 50 + 20 * self.cursor_pos) |
e89a43d208b9
A stupid, simple menu
Stefano Rivera <stefano@rivera.za.net>
parents:
180
diff
changeset
|
44 self.cursor.rect.top = self.cursor.pos[1] |
e89a43d208b9
A stupid, simple menu
Stefano Rivera <stefano@rivera.za.net>
parents:
180
diff
changeset
|
45 for widget in self.widgets: |
e89a43d208b9
A stupid, simple menu
Stefano Rivera <stefano@rivera.za.net>
parents:
180
diff
changeset
|
46 widget.draw(surface) |
e89a43d208b9
A stupid, simple menu
Stefano Rivera <stefano@rivera.za.net>
parents:
180
diff
changeset
|
47 |
252 | 48 def play(self): |
345
4708e86a9a3c
Remember start position on a level (a bit hacky)
Stefano Rivera <stefano@rivera.za.net>
parents:
342
diff
changeset
|
49 level_name, pos = self.world.level |
4708e86a9a3c
Remember start position on a level (a bit hacky)
Stefano Rivera <stefano@rivera.za.net>
parents:
342
diff
changeset
|
50 self.world.protagonist.set_position(pos) |
4708e86a9a3c
Remember start position on a level (a bit hacky)
Stefano Rivera <stefano@rivera.za.net>
parents:
342
diff
changeset
|
51 ScreenChange.post(level_name) |
226
e89a43d208b9
A stupid, simple menu
Stefano Rivera <stefano@rivera.za.net>
parents:
180
diff
changeset
|
52 |
252 | 53 def restart(self): |
54 self.world.reset() | |
55 self.setup() | |
226
e89a43d208b9
A stupid, simple menu
Stefano Rivera <stefano@rivera.za.net>
parents:
180
diff
changeset
|
56 |
e89a43d208b9
A stupid, simple menu
Stefano Rivera <stefano@rivera.za.net>
parents:
180
diff
changeset
|
57 def quit(self): |
e89a43d208b9
A stupid, simple menu
Stefano Rivera <stefano@rivera.za.net>
parents:
180
diff
changeset
|
58 QuitEvent.post() |