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
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
158
6a866d4710e3 Level chooser scene
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
1 """Level menu."""
6a866d4710e3 Level chooser scene
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
2
6a866d4710e3 Level chooser scene
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
3 from pygame.locals import KEYDOWN
6a866d4710e3 Level chooser scene
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
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
6a866d4710e3 Level chooser scene
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
6 from mamba.constants import ESCAPE_KEYS
6a866d4710e3 Level chooser scene
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
7 from mamba.engine import Habitat, NewHabitatEvent
6a866d4710e3 Level chooser scene
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
8 from mamba.widgets.imagebutton import LockableTextButton
6a866d4710e3 Level chooser scene
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
9
6a866d4710e3 Level chooser scene
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
10
6a866d4710e3 Level chooser scene
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
11 class LevelMenu(Habitat):
6a866d4710e3 Level chooser scene
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
12
6a866d4710e3 Level chooser scene
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
13 def __init__(self):
6a866d4710e3 Level chooser scene
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
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
6a866d4710e3 Level chooser scene
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
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
6a866d4710e3 Level chooser scene
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
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
6a866d4710e3 Level chooser scene
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
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
6a866d4710e3 Level chooser scene
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
34 # Demo:
6a866d4710e3 Level chooser scene
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
35 if widget.locked:
6a866d4710e3 Level chooser scene
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
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
6a866d4710e3 Level chooser scene
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
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
6a866d4710e3 Level chooser scene
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
44
6a866d4710e3 Level chooser scene
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
45 def keydown_event(self, ev, widget):
6a866d4710e3 Level chooser scene
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
46 if ev.key in ESCAPE_KEYS:
6a866d4710e3 Level chooser scene
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
47 return self.return_to_mainmenu(ev, widget)
6a866d4710e3 Level chooser scene
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
48
6a866d4710e3 Level chooser scene
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
49 def return_to_mainmenu(self, ev, widget):
6a866d4710e3 Level chooser scene
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
50 from mamba.habitats.mainmenu import MainMenu
6a866d4710e3 Level chooser scene
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
51 NewHabitatEvent.post(MainMenu())
6a866d4710e3 Level chooser scene
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
52 return True