Mercurial > mamba
annotate mamba/habitats/levelmenu.py @ 236:09247e08aeda
Refactor edit calling code. Tweak toolbar layout
author | Neil Muller <drnlmuller@gmail.com> |
---|---|
date | Wed, 14 Sep 2011 23:32:08 +0200 |
parents | bea4857487de |
children | e6a3b00f997b |
rev | line source |
---|---|
158 | 1 """Level menu.""" |
2 | |
3 from pygame.locals import KEYDOWN | |
4 | |
166
bea4857487de
Game state and level list
Stefano Rivera <stefano@rivera.za.net>
parents:
158
diff
changeset
|
5 from mamba.gamestate import levels, unlocked_levels, done_levels |
158 | 6 from mamba.constants import ESCAPE_KEYS |
7 from mamba.engine import Habitat, NewHabitatEvent | |
8 from mamba.widgets.imagebutton import LockableTextButton | |
9 | |
10 | |
11 class LevelMenu(Habitat): | |
12 | |
13 def __init__(self): | |
14 super(LevelMenu, self).__init__() | |
166
bea4857487de
Game state and level list
Stefano Rivera <stefano@rivera.za.net>
parents:
158
diff
changeset
|
15 self.level_buttons = [] |
bea4857487de
Game state and level list
Stefano Rivera <stefano@rivera.za.net>
parents:
158
diff
changeset
|
16 for level, name in enumerate(levels): |
bea4857487de
Game state and level list
Stefano Rivera <stefano@rivera.za.net>
parents:
158
diff
changeset
|
17 button = LockableTextButton((50 + 75 * level, 100), str(level + 1), |
bea4857487de
Game state and level list
Stefano Rivera <stefano@rivera.za.net>
parents:
158
diff
changeset
|
18 color='white') |
bea4857487de
Game state and level list
Stefano Rivera <stefano@rivera.za.net>
parents:
158
diff
changeset
|
19 button.add_callback('clicked', self.level_selected, name) |
bea4857487de
Game state and level list
Stefano Rivera <stefano@rivera.za.net>
parents:
158
diff
changeset
|
20 button.locked = level not in unlocked_levels |
158 | 21 self.container.add(button) |
166
bea4857487de
Game state and level list
Stefano Rivera <stefano@rivera.za.net>
parents:
158
diff
changeset
|
22 self.level_buttons.append(button) |
158 | 23 self.container.add_callback(KEYDOWN, self.keydown_event) |
166
bea4857487de
Game state and level list
Stefano Rivera <stefano@rivera.za.net>
parents:
158
diff
changeset
|
24 self.update_button_colors() |
158 | 25 |
166
bea4857487de
Game state and level list
Stefano Rivera <stefano@rivera.za.net>
parents:
158
diff
changeset
|
26 def update_button_colors(self): |
bea4857487de
Game state and level list
Stefano Rivera <stefano@rivera.za.net>
parents:
158
diff
changeset
|
27 for level, button in enumerate(self.level_buttons): |
bea4857487de
Game state and level list
Stefano Rivera <stefano@rivera.za.net>
parents:
158
diff
changeset
|
28 if not button.locked and level not in done_levels: |
bea4857487de
Game state and level list
Stefano Rivera <stefano@rivera.za.net>
parents:
158
diff
changeset
|
29 button.color = 'green' |
bea4857487de
Game state and level list
Stefano Rivera <stefano@rivera.za.net>
parents:
158
diff
changeset
|
30 else: |
bea4857487de
Game state and level list
Stefano Rivera <stefano@rivera.za.net>
parents:
158
diff
changeset
|
31 button.color = 'white' |
bea4857487de
Game state and level list
Stefano Rivera <stefano@rivera.za.net>
parents:
158
diff
changeset
|
32 |
bea4857487de
Game state and level list
Stefano Rivera <stefano@rivera.za.net>
parents:
158
diff
changeset
|
33 def level_selected(self, ev, widget, name): |
158 | 34 # Demo: |
35 if widget.locked: | |
36 widget.locked = False | |
166
bea4857487de
Game state and level list
Stefano Rivera <stefano@rivera.za.net>
parents:
158
diff
changeset
|
37 self.update_button_colors() |
bea4857487de
Game state and level list
Stefano Rivera <stefano@rivera.za.net>
parents:
158
diff
changeset
|
38 return True |
bea4857487de
Game state and level list
Stefano Rivera <stefano@rivera.za.net>
parents:
158
diff
changeset
|
39 |
bea4857487de
Game state and level list
Stefano Rivera <stefano@rivera.za.net>
parents:
158
diff
changeset
|
40 if not widget.locked: |
158 | 41 from mamba.habitats.level import LevelHabitat |
166
bea4857487de
Game state and level list
Stefano Rivera <stefano@rivera.za.net>
parents:
158
diff
changeset
|
42 NewHabitatEvent.post(LevelHabitat(name)) |
bea4857487de
Game state and level list
Stefano Rivera <stefano@rivera.za.net>
parents:
158
diff
changeset
|
43 return True |
158 | 44 |
45 def keydown_event(self, ev, widget): | |
46 if ev.key in ESCAPE_KEYS: | |
47 return self.return_to_mainmenu(ev, widget) | |
48 | |
49 def return_to_mainmenu(self, ev, widget): | |
50 from mamba.habitats.mainmenu import MainMenu | |
51 NewHabitatEvent.post(MainMenu()) | |
52 return True |