annotate mamba/habitats/level.py @ 564:6a4f9a2f6820

Include author in caption if available
author Neil Muller <drnlmuller@gmail.com>
date Tue, 18 Oct 2011 12:50:56 +0200
parents dee11e9a37b0
children
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
564
6a4f9a2f6820 Include author in caption if available
Neil Muller <drnlmuller@gmail.com>
parents: 531
diff changeset
21 self.author = level.author
416
30ce046d08c3 Fix clicking in dead dialog bug
Stefano Rivera <stefano@rivera.za.net>
parents: 415
diff changeset
22 self.game_widget = GameWidget(self.world)
30ce046d08c3 Fix clicking in dead dialog bug
Stefano Rivera <stefano@rivera.za.net>
parents: 415
diff changeset
23 self.container.add(self.game_widget)
61
fc4b7db1d832 Habitat switching.
Simon Cross <hodgestar@gmail.com>
parents: 24
diff changeset
24 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
25 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
26 self.container.add_callback(SnakeDiedEvent, self.snake_died)
111
0c1005c76c87 More worldify.
Simon Cross <hodgestar@gmail.com>
parents: 79
diff changeset
27
61
fc4b7db1d832 Habitat switching.
Simon Cross <hodgestar@gmail.com>
parents: 24
diff changeset
28 def keydown_event(self, ev, widget):
fc4b7db1d832 Habitat switching.
Simon Cross <hodgestar@gmail.com>
parents: 24
diff changeset
29 if ev.key in ESCAPE_KEYS:
405
35680740f163 Pause the world when getting off.
Jeremy Thurgood <firxen@gmail.com>
parents: 404
diff changeset
30 self.world.pause()
332
8643c7dbc8ad Allow sub-classing level menu.
Simon Cross <hodgestar@gmail.com>
parents: 314
diff changeset
31 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
32 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
33
531
dee11e9a37b0 Caption fiddling
Neil Muller <drnlmuller@gmail.com>
parents: 416
diff changeset
34 def on_enter(self):
dee11e9a37b0 Caption fiddling
Neil Muller <drnlmuller@gmail.com>
parents: 416
diff changeset
35 """Set the caption to the level name"""
dee11e9a37b0 Caption fiddling
Neil Muller <drnlmuller@gmail.com>
parents: 416
diff changeset
36 super(LevelHabitat, self).on_enter()
564
6a4f9a2f6820 Include author in caption if available
Neil Muller <drnlmuller@gmail.com>
parents: 531
diff changeset
37 if self.author:
6a4f9a2f6820 Include author in caption if available
Neil Muller <drnlmuller@gmail.com>
parents: 531
diff changeset
38 pygame.display.set_caption('%s: %s by %s' %
6a4f9a2f6820 Include author in caption if available
Neil Muller <drnlmuller@gmail.com>
parents: 531
diff changeset
39 (NAME, self.level_name, self.author))
6a4f9a2f6820 Include author in caption if available
Neil Muller <drnlmuller@gmail.com>
parents: 531
diff changeset
40 else:
6a4f9a2f6820 Include author in caption if available
Neil Muller <drnlmuller@gmail.com>
parents: 531
diff changeset
41 pygame.display.set_caption('%s: %s' % (NAME, self.level_name))
531
dee11e9a37b0 Caption fiddling
Neil Muller <drnlmuller@gmail.com>
parents: 416
diff changeset
42
dee11e9a37b0 Caption fiddling
Neil Muller <drnlmuller@gmail.com>
parents: 416
diff changeset
43 def on_exit(self):
dee11e9a37b0 Caption fiddling
Neil Muller <drnlmuller@gmail.com>
parents: 416
diff changeset
44 """Fix name"""
dee11e9a37b0 Caption fiddling
Neil Muller <drnlmuller@gmail.com>
parents: 416
diff changeset
45 super(LevelHabitat, self).on_exit()
dee11e9a37b0 Caption fiddling
Neil Muller <drnlmuller@gmail.com>
parents: 416
diff changeset
46 pygame.display.set_caption(NAME)
dee11e9a37b0 Caption fiddling
Neil Muller <drnlmuller@gmail.com>
parents: 416
diff changeset
47
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
48 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
49 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
50 return False
404
38f95fbc3710 Better dialog handling.
Jeremy Thurgood <firxen@gmail.com>
parents: 361
diff changeset
51 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
52 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
53 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
54 return True
416
30ce046d08c3 Fix clicking in dead dialog bug
Stefano Rivera <stefano@rivera.za.net>
parents: 415
diff changeset
55
30ce046d08c3 Fix clicking in dead dialog bug
Stefano Rivera <stefano@rivera.za.net>
parents: 415
diff changeset
56 def snake_died(self, ev, widget):
30ce046d08c3 Fix clicking in dead dialog bug
Stefano Rivera <stefano@rivera.za.net>
parents: 415
diff changeset
57 if not self.world.pause():
30ce046d08c3 Fix clicking in dead dialog bug
Stefano Rivera <stefano@rivera.za.net>
parents: 415
diff changeset
58 return False
30ce046d08c3 Fix clicking in dead dialog bug
Stefano Rivera <stefano@rivera.za.net>
parents: 415
diff changeset
59 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
60 self.game_widget.restart))
30ce046d08c3 Fix clicking in dead dialog bug
Stefano Rivera <stefano@rivera.za.net>
parents: 415
diff changeset
61 self.world.snake.alive = False
30ce046d08c3 Fix clicking in dead dialog bug
Stefano Rivera <stefano@rivera.za.net>
parents: 415
diff changeset
62 return True