annotate mamba/world.py @ 577:486c7ae141ea

Add client support for level server API version 2.
author Simon Cross <hodgestar@gmail.com>
date Sun, 06 Oct 2013 22:46:41 +0200
parents 48e39d1ad5ae
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
78
b1019923cb12 Direction control for snake.
Simon Cross <hodgestar@gmail.com>
parents:
diff changeset
1 """World state (level, plus snake, plus other sprites)."""
b1019923cb12 Direction control for snake.
Simon Cross <hodgestar@gmail.com>
parents:
diff changeset
2
122
45dd79e9ba1b Rudimentary FPS and clock ticking.
Simon Cross <hodgestar@gmail.com>
parents: 119
diff changeset
3 import time
45dd79e9ba1b Rudimentary FPS and clock ticking.
Simon Cross <hodgestar@gmail.com>
parents: 119
diff changeset
4
78
b1019923cb12 Direction control for snake.
Simon Cross <hodgestar@gmail.com>
parents:
diff changeset
5 from mamba.snake import Snake
317
e89702425a73 Add support for playing music to levels
Neil Muller <drnlmuller@gmail.com>
parents: 286
diff changeset
6 from mamba.sound import play_music, pause_music, resume_music, stop_sound
78
b1019923cb12 Direction control for snake.
Simon Cross <hodgestar@gmail.com>
parents:
diff changeset
7
b1019923cb12 Direction control for snake.
Simon Cross <hodgestar@gmail.com>
parents:
diff changeset
8
b1019923cb12 Direction control for snake.
Simon Cross <hodgestar@gmail.com>
parents:
diff changeset
9 class World(object):
b1019923cb12 Direction control for snake.
Simon Cross <hodgestar@gmail.com>
parents:
diff changeset
10 def __init__(self, level):
b1019923cb12 Direction control for snake.
Simon Cross <hodgestar@gmail.com>
parents:
diff changeset
11 self.level = level
285
cacc03748580 Move world initialisation to restart
Stefano Rivera <stefano@rivera.za.net>
parents: 243
diff changeset
12 self.restart()
110
e6299eb296ce Draw the world!
Simon Cross <hodgestar@gmail.com>
parents: 82
diff changeset
13
111
0c1005c76c87 More worldify.
Simon Cross <hodgestar@gmail.com>
parents: 110
diff changeset
14 def get_size(self):
0c1005c76c87 More worldify.
Simon Cross <hodgestar@gmail.com>
parents: 110
diff changeset
15 return self.level.get_size()
0c1005c76c87 More worldify.
Simon Cross <hodgestar@gmail.com>
parents: 110
diff changeset
16
110
e6299eb296ce Draw the world!
Simon Cross <hodgestar@gmail.com>
parents: 82
diff changeset
17 def draw(self, surface):
111
0c1005c76c87 More worldify.
Simon Cross <hodgestar@gmail.com>
parents: 110
diff changeset
18 self.level.draw(surface)
110
e6299eb296ce Draw the world!
Simon Cross <hodgestar@gmail.com>
parents: 82
diff changeset
19 self.snake.draw(surface)
119
119c0fb758c2 Move key handling into GameWidget and GameWidget into widgets.game.
Simon Cross <hodgestar@gmail.com>
parents: 111
diff changeset
20
243
f9cc701a6be0 Hook up tunnels.
Simon Cross <hodgestar@gmail.com>
parents: 191
diff changeset
21 def get_sprite(self, sprite_id):
f9cc701a6be0 Hook up tunnels.
Simon Cross <hodgestar@gmail.com>
parents: 191
diff changeset
22 return self.level.extra_sprites[sprite_id]
f9cc701a6be0 Hook up tunnels.
Simon Cross <hodgestar@gmail.com>
parents: 191
diff changeset
23
119
119c0fb758c2 Move key handling into GameWidget and GameWidget into widgets.game.
Simon Cross <hodgestar@gmail.com>
parents: 111
diff changeset
24 def update(self):
122
45dd79e9ba1b Rudimentary FPS and clock ticking.
Simon Cross <hodgestar@gmail.com>
parents: 119
diff changeset
25 prev = self._prev
45dd79e9ba1b Rudimentary FPS and clock ticking.
Simon Cross <hodgestar@gmail.com>
parents: 119
diff changeset
26 self._prev = time.time()
191
454f7552e863 Pause the world, I may want to get off
Neil Muller <drnlmuller@gmail.com>
parents: 188
diff changeset
27 if self._paused:
454f7552e863 Pause the world, I may want to get off
Neil Muller <drnlmuller@gmail.com>
parents: 188
diff changeset
28 return
122
45dd79e9ba1b Rudimentary FPS and clock ticking.
Simon Cross <hodgestar@gmail.com>
parents: 119
diff changeset
29 if prev is None:
45dd79e9ba1b Rudimentary FPS and clock ticking.
Simon Cross <hodgestar@gmail.com>
parents: 119
diff changeset
30 return
45dd79e9ba1b Rudimentary FPS and clock ticking.
Simon Cross <hodgestar@gmail.com>
parents: 119
diff changeset
31 dt = self._prev - prev
45dd79e9ba1b Rudimentary FPS and clock ticking.
Simon Cross <hodgestar@gmail.com>
parents: 119
diff changeset
32
181
061d711ba570 Interact with the world.
Jeremy Thurgood <firxen@gmail.com>
parents: 122
diff changeset
33 self.snake.update(dt, self)
061d711ba570 Interact with the world.
Jeremy Thurgood <firxen@gmail.com>
parents: 122
diff changeset
34
182
0a955d2536f0 Painted Jezebel! (Assuming you name your snake Jezebel.)
Jeremy Thurgood <firxen@gmail.com>
parents: 181
diff changeset
35 def interact(self, segment):
188
d76c069164c0 Much better interaction detection.
Jeremy Thurgood <firxen@gmail.com>
parents: 186
diff changeset
36 tiles = segment.filter_collisions(self.level.sprites)
d76c069164c0 Much better interaction detection.
Jeremy Thurgood <firxen@gmail.com>
parents: 186
diff changeset
37 for tile in tiles:
243
f9cc701a6be0 Hook up tunnels.
Simon Cross <hodgestar@gmail.com>
parents: 191
diff changeset
38 tile.interact(self, segment)
186
275f0be6946c Reincarnating Snakes
Neil Muller <drnlmuller@gmail.com>
parents: 182
diff changeset
39
191
454f7552e863 Pause the world, I may want to get off
Neil Muller <drnlmuller@gmail.com>
parents: 188
diff changeset
40 def pause(self):
317
e89702425a73 Add support for playing music to levels
Neil Muller <drnlmuller@gmail.com>
parents: 286
diff changeset
41 pause_music()
286
71bc946ce1f1 Check if paused to avoid displaing two MessageBoxes on the screen if we manage to stack up SnakeDied events
Stefano Rivera <stefano@rivera.za.net>
parents: 285
diff changeset
42 was_paused, self._paused = self._paused, True
71bc946ce1f1 Check if paused to avoid displaing two MessageBoxes on the screen if we manage to stack up SnakeDied events
Stefano Rivera <stefano@rivera.za.net>
parents: 285
diff changeset
43 return was_paused == False
191
454f7552e863 Pause the world, I may want to get off
Neil Muller <drnlmuller@gmail.com>
parents: 188
diff changeset
44
454f7552e863 Pause the world, I may want to get off
Neil Muller <drnlmuller@gmail.com>
parents: 188
diff changeset
45 def resume(self):
317
e89702425a73 Add support for playing music to levels
Neil Muller <drnlmuller@gmail.com>
parents: 286
diff changeset
46 resume_music()
286
71bc946ce1f1 Check if paused to avoid displaing two MessageBoxes on the screen if we manage to stack up SnakeDied events
Stefano Rivera <stefano@rivera.za.net>
parents: 285
diff changeset
47 was_paused, self._paused = self._paused, False
71bc946ce1f1 Check if paused to avoid displaing two MessageBoxes on the screen if we manage to stack up SnakeDied events
Stefano Rivera <stefano@rivera.za.net>
parents: 285
diff changeset
48 return was_paused == True
191
454f7552e863 Pause the world, I may want to get off
Neil Muller <drnlmuller@gmail.com>
parents: 188
diff changeset
49
389
48e39d1ad5ae Add pause button (mostly for creating screenshots).
Simon Cross <hodgestar@gmail.com>
parents: 317
diff changeset
50 def toggle_pause(self):
48e39d1ad5ae Add pause button (mostly for creating screenshots).
Simon Cross <hodgestar@gmail.com>
parents: 317
diff changeset
51 if self._paused:
48e39d1ad5ae Add pause button (mostly for creating screenshots).
Simon Cross <hodgestar@gmail.com>
parents: 317
diff changeset
52 self.resume()
48e39d1ad5ae Add pause button (mostly for creating screenshots).
Simon Cross <hodgestar@gmail.com>
parents: 317
diff changeset
53 else:
48e39d1ad5ae Add pause button (mostly for creating screenshots).
Simon Cross <hodgestar@gmail.com>
parents: 317
diff changeset
54 self.pause()
48e39d1ad5ae Add pause button (mostly for creating screenshots).
Simon Cross <hodgestar@gmail.com>
parents: 317
diff changeset
55
186
275f0be6946c Reincarnating Snakes
Neil Muller <drnlmuller@gmail.com>
parents: 182
diff changeset
56 def restart(self):
317
e89702425a73 Add support for playing music to levels
Neil Muller <drnlmuller@gmail.com>
parents: 286
diff changeset
57 stop_sound()
186
275f0be6946c Reincarnating Snakes
Neil Muller <drnlmuller@gmail.com>
parents: 182
diff changeset
58 self.level.restart()
317
e89702425a73 Add support for playing music to levels
Neil Muller <drnlmuller@gmail.com>
parents: 286
diff changeset
59 play_music(self.level.background_track)
186
275f0be6946c Reincarnating Snakes
Neil Muller <drnlmuller@gmail.com>
parents: 182
diff changeset
60 tile_pos, orientation = self.level.get_entry()
275f0be6946c Reincarnating Snakes
Neil Muller <drnlmuller@gmail.com>
parents: 182
diff changeset
61 self.snake = Snake(tile_pos, orientation)
275f0be6946c Reincarnating Snakes
Neil Muller <drnlmuller@gmail.com>
parents: 182
diff changeset
62 self._prev = None
191
454f7552e863 Pause the world, I may want to get off
Neil Muller <drnlmuller@gmail.com>
parents: 188
diff changeset
63 self._paused = False