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
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
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
dee11e9a37b0 Caption fiddling
Neil Muller <drnlmuller@gmail.com>
parents: 416
diff changeset
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
fc4b7db1d832 Habitat switching.
Simon Cross <hodgestar@gmail.com>
parents: 24
diff changeset
5
531
dee11e9a37b0 Caption fiddling
Neil Muller <drnlmuller@gmail.com>
parents: 416
diff changeset
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
dee11e9a37b0 Caption fiddling
Neil Muller <drnlmuller@gmail.com>
parents: 416
diff changeset
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
fc4b7db1d832 Habitat switching.
Simon Cross <hodgestar@gmail.com>
parents: 24
diff changeset
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
0c1005c76c87 More worldify.
Simon Cross <hodgestar@gmail.com>
parents: 79
diff changeset
26
61
fc4b7db1d832 Habitat switching.
Simon Cross <hodgestar@gmail.com>
parents: 24
diff changeset
27 def keydown_event(self, ev, widget):
fc4b7db1d832 Habitat switching.
Simon Cross <hodgestar@gmail.com>
parents: 24
diff changeset
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
dee11e9a37b0 Caption fiddling
Neil Muller <drnlmuller@gmail.com>
parents: 416
diff changeset
33 def on_enter(self):
dee11e9a37b0 Caption fiddling
Neil Muller <drnlmuller@gmail.com>
parents: 416
diff changeset
34 """Set the caption to the level name"""
dee11e9a37b0 Caption fiddling
Neil Muller <drnlmuller@gmail.com>
parents: 416
diff changeset
35 super(LevelHabitat, self).on_enter()
dee11e9a37b0 Caption fiddling
Neil Muller <drnlmuller@gmail.com>
parents: 416
diff changeset
36 pygame.display.set_caption('%s: %s' % (NAME, self.level_name))
dee11e9a37b0 Caption fiddling
Neil Muller <drnlmuller@gmail.com>
parents: 416
diff changeset
37
dee11e9a37b0 Caption fiddling
Neil Muller <drnlmuller@gmail.com>
parents: 416
diff changeset
38 def on_exit(self):
dee11e9a37b0 Caption fiddling
Neil Muller <drnlmuller@gmail.com>
parents: 416
diff changeset
39 """Fix name"""
dee11e9a37b0 Caption fiddling
Neil Muller <drnlmuller@gmail.com>
parents: 416
diff changeset
40 super(LevelHabitat, self).on_exit()
dee11e9a37b0 Caption fiddling
Neil Muller <drnlmuller@gmail.com>
parents: 416
diff changeset
41 pygame.display.set_caption(NAME)
dee11e9a37b0 Caption fiddling
Neil Muller <drnlmuller@gmail.com>
parents: 416
diff changeset
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
38f95fbc3710 Better dialog handling.
Jeremy Thurgood <firxen@gmail.com>
parents: 361
diff changeset
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