Mercurial > mamba
annotate mamba/habitats/level.py @ 531:dee11e9a37b0
Caption fiddling
author | Neil Muller <drnlmuller@gmail.com> |
---|---|
date | Sun, 18 Sep 2011 01:10:32 +0200 |
parents | 30ce046d08c3 |
children | 6a4f9a2f6820 |
rev | line source |
---|---|
19
6d195a3a4557
Somewhere for levels to live.
Simon Cross <hodgestar@gmail.com>
parents:
diff
changeset
|
1 """Where a level object hides.""" |
6d195a3a4557
Somewhere for levels to live.
Simon Cross <hodgestar@gmail.com>
parents:
diff
changeset
|
2 |
531 | 3 import pygame.display |
119
119c0fb758c2
Move key handling into GameWidget and GameWidget into widgets.game.
Simon Cross <hodgestar@gmail.com>
parents:
111
diff
changeset
|
4 from pygame.locals import KEYDOWN |
61 | 5 |
531 | 6 from mamba.constants import ESCAPE_KEYS, NAME |
416
30ce046d08c3
Fix clicking in dead dialog bug
Stefano Rivera <stefano@rivera.za.net>
parents:
415
diff
changeset
|
7 from mamba.engine import Habitat, LevelCompletedEvent, SnakeDiedEvent |
344
214b2bd173a8
Move level_completed to the Level habitat, so that we can go_menu()
Stefano Rivera <stefano@rivera.za.net>
parents:
332
diff
changeset
|
8 from mamba.gamestate import level_done |
214b2bd173a8
Move level_completed to the Level habitat, so that we can go_menu()
Stefano Rivera <stefano@rivera.za.net>
parents:
332
diff
changeset
|
9 from mamba.widgets.game import GameWidget |
214b2bd173a8
Move level_completed to the Level habitat, so that we can go_menu()
Stefano Rivera <stefano@rivera.za.net>
parents:
332
diff
changeset
|
10 from mamba.widgets.messagebox import MessageBox |
78
b1019923cb12
Direction control for snake.
Simon Cross <hodgestar@gmail.com>
parents:
72
diff
changeset
|
11 from mamba.world import World |
19
6d195a3a4557
Somewhere for levels to live.
Simon Cross <hodgestar@gmail.com>
parents:
diff
changeset
|
12 |
6d195a3a4557
Somewhere for levels to live.
Simon Cross <hodgestar@gmail.com>
parents:
diff
changeset
|
13 |
6d195a3a4557
Somewhere for levels to live.
Simon Cross <hodgestar@gmail.com>
parents:
diff
changeset
|
14 class LevelHabitat(Habitat): |
415
f1ba457772ae
Go to next level, not back to menu. (Official levels only, though.)
Jeremy Thurgood <firxen@gmail.com>
parents:
405
diff
changeset
|
15 def __init__(self, level, go_menu, go_next_level): |
24
30d4f3e62bcf
Refactor widgets *again*, add container to Habitat
Stefano Rivera <stefano@rivera.za.net>
parents:
19
diff
changeset
|
16 super(LevelHabitat, self).__init__() |
332
8643c7dbc8ad
Allow sub-classing level menu.
Simon Cross <hodgestar@gmail.com>
parents:
314
diff
changeset
|
17 self.go_menu = go_menu |
415
f1ba457772ae
Go to next level, not back to menu. (Official levels only, though.)
Jeremy Thurgood <firxen@gmail.com>
parents:
405
diff
changeset
|
18 self.go_next_level = go_next_level |
344
214b2bd173a8
Move level_completed to the Level habitat, so that we can go_menu()
Stefano Rivera <stefano@rivera.za.net>
parents:
332
diff
changeset
|
19 self.world = World(level) |
531 | 20 self.level_name = level.name |
416
30ce046d08c3
Fix clicking in dead dialog bug
Stefano Rivera <stefano@rivera.za.net>
parents:
415
diff
changeset
|
21 self.game_widget = GameWidget(self.world) |
30ce046d08c3
Fix clicking in dead dialog bug
Stefano Rivera <stefano@rivera.za.net>
parents:
415
diff
changeset
|
22 self.container.add(self.game_widget) |
61 | 23 self.container.add_callback(KEYDOWN, self.keydown_event) |
344
214b2bd173a8
Move level_completed to the Level habitat, so that we can go_menu()
Stefano Rivera <stefano@rivera.za.net>
parents:
332
diff
changeset
|
24 self.container.add_callback(LevelCompletedEvent, self.level_completed) |
416
30ce046d08c3
Fix clicking in dead dialog bug
Stefano Rivera <stefano@rivera.za.net>
parents:
415
diff
changeset
|
25 self.container.add_callback(SnakeDiedEvent, self.snake_died) |
111 | 26 |
61 | 27 def keydown_event(self, ev, widget): |
28 if ev.key in ESCAPE_KEYS: | |
405
35680740f163
Pause the world when getting off.
Jeremy Thurgood <firxen@gmail.com>
parents:
404
diff
changeset
|
29 self.world.pause() |
332
8643c7dbc8ad
Allow sub-classing level menu.
Simon Cross <hodgestar@gmail.com>
parents:
314
diff
changeset
|
30 self.go_menu() |
72
095914aee329
Return True from keydown_event so that the container knows the event has been handled.
Simon Cross <hodgestar@gmail.com>
parents:
62
diff
changeset
|
31 return True |
344
214b2bd173a8
Move level_completed to the Level habitat, so that we can go_menu()
Stefano Rivera <stefano@rivera.za.net>
parents:
332
diff
changeset
|
32 |
531 | 33 def on_enter(self): |
34 """Set the caption to the level name""" | |
35 super(LevelHabitat, self).on_enter() | |
36 pygame.display.set_caption('%s: %s' % (NAME, self.level_name)) | |
37 | |
38 def on_exit(self): | |
39 """Fix name""" | |
40 super(LevelHabitat, self).on_exit() | |
41 pygame.display.set_caption(NAME) | |
42 | |
344
214b2bd173a8
Move level_completed to the Level habitat, so that we can go_menu()
Stefano Rivera <stefano@rivera.za.net>
parents:
332
diff
changeset
|
43 def level_completed(self, ev, widget): |
214b2bd173a8
Move level_completed to the Level habitat, so that we can go_menu()
Stefano Rivera <stefano@rivera.za.net>
parents:
332
diff
changeset
|
44 if not self.world.pause(): |
214b2bd173a8
Move level_completed to the Level habitat, so that we can go_menu()
Stefano Rivera <stefano@rivera.za.net>
parents:
332
diff
changeset
|
45 return False |
404 | 46 self.display_dialog( |
415
f1ba457772ae
Go to next level, not back to menu. (Official levels only, though.)
Jeremy Thurgood <firxen@gmail.com>
parents:
405
diff
changeset
|
47 MessageBox((300, 200), 'Level complete!', self.go_next_level)) |
361
d4062344d8f4
Level namespaces (for telling that a level is complete, no matter where it came from)
Stefano Rivera <stefano@rivera.za.net>
parents:
344
diff
changeset
|
48 level_done(self.world.level.unique_name()) |
344
214b2bd173a8
Move level_completed to the Level habitat, so that we can go_menu()
Stefano Rivera <stefano@rivera.za.net>
parents:
332
diff
changeset
|
49 return True |
416
30ce046d08c3
Fix clicking in dead dialog bug
Stefano Rivera <stefano@rivera.za.net>
parents:
415
diff
changeset
|
50 |
30ce046d08c3
Fix clicking in dead dialog bug
Stefano Rivera <stefano@rivera.za.net>
parents:
415
diff
changeset
|
51 def snake_died(self, ev, widget): |
30ce046d08c3
Fix clicking in dead dialog bug
Stefano Rivera <stefano@rivera.za.net>
parents:
415
diff
changeset
|
52 if not self.world.pause(): |
30ce046d08c3
Fix clicking in dead dialog bug
Stefano Rivera <stefano@rivera.za.net>
parents:
415
diff
changeset
|
53 return False |
30ce046d08c3
Fix clicking in dead dialog bug
Stefano Rivera <stefano@rivera.za.net>
parents:
415
diff
changeset
|
54 self.display_dialog(MessageBox((300, 200), 'You died!\n%s' % ev.reason, |
30ce046d08c3
Fix clicking in dead dialog bug
Stefano Rivera <stefano@rivera.za.net>
parents:
415
diff
changeset
|
55 self.game_widget.restart)) |
30ce046d08c3
Fix clicking in dead dialog bug
Stefano Rivera <stefano@rivera.za.net>
parents:
415
diff
changeset
|
56 self.world.snake.alive = False |
30ce046d08c3
Fix clicking in dead dialog bug
Stefano Rivera <stefano@rivera.za.net>
parents:
415
diff
changeset
|
57 return True |