annotate mamba/world.py @ 286:71bc946ce1f1

Check if paused to avoid displaing two MessageBoxes on the screen if we manage to stack up SnakeDied events
author Stefano Rivera <stefano@rivera.za.net>
date Thu, 15 Sep 2011 23:07:18 +0200
parents cacc03748580
children e89702425a73
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
b1019923cb12 Direction control for snake.
Simon Cross <hodgestar@gmail.com>
parents:
diff changeset
6
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 class World(object):
b1019923cb12 Direction control for snake.
Simon Cross <hodgestar@gmail.com>
parents:
diff changeset
9 def __init__(self, level):
b1019923cb12 Direction control for snake.
Simon Cross <hodgestar@gmail.com>
parents:
diff changeset
10 self.level = level
285
cacc03748580 Move world initialisation to restart
Stefano Rivera <stefano@rivera.za.net>
parents: 243
diff changeset
11 self.restart()
110
e6299eb296ce Draw the world!
Simon Cross <hodgestar@gmail.com>
parents: 82
diff changeset
12
111
0c1005c76c87 More worldify.
Simon Cross <hodgestar@gmail.com>
parents: 110
diff changeset
13 def get_size(self):
0c1005c76c87 More worldify.
Simon Cross <hodgestar@gmail.com>
parents: 110
diff changeset
14 return self.level.get_size()
0c1005c76c87 More worldify.
Simon Cross <hodgestar@gmail.com>
parents: 110
diff changeset
15
110
e6299eb296ce Draw the world!
Simon Cross <hodgestar@gmail.com>
parents: 82
diff changeset
16 def draw(self, surface):
111
0c1005c76c87 More worldify.
Simon Cross <hodgestar@gmail.com>
parents: 110
diff changeset
17 self.level.draw(surface)
110
e6299eb296ce Draw the world!
Simon Cross <hodgestar@gmail.com>
parents: 82
diff changeset
18 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
19
243
f9cc701a6be0 Hook up tunnels.
Simon Cross <hodgestar@gmail.com>
parents: 191
diff changeset
20 def get_sprite(self, sprite_id):
f9cc701a6be0 Hook up tunnels.
Simon Cross <hodgestar@gmail.com>
parents: 191
diff changeset
21 return self.level.extra_sprites[sprite_id]
f9cc701a6be0 Hook up tunnels.
Simon Cross <hodgestar@gmail.com>
parents: 191
diff changeset
22
119
119c0fb758c2 Move key handling into GameWidget and GameWidget into widgets.game.
Simon Cross <hodgestar@gmail.com>
parents: 111
diff changeset
23 def update(self):
122
45dd79e9ba1b Rudimentary FPS and clock ticking.
Simon Cross <hodgestar@gmail.com>
parents: 119
diff changeset
24 prev = self._prev
45dd79e9ba1b Rudimentary FPS and clock ticking.
Simon Cross <hodgestar@gmail.com>
parents: 119
diff changeset
25 self._prev = time.time()
191
454f7552e863 Pause the world, I may want to get off
Neil Muller <drnlmuller@gmail.com>
parents: 188
diff changeset
26 if self._paused:
454f7552e863 Pause the world, I may want to get off
Neil Muller <drnlmuller@gmail.com>
parents: 188
diff changeset
27 return
122
45dd79e9ba1b Rudimentary FPS and clock ticking.
Simon Cross <hodgestar@gmail.com>
parents: 119
diff changeset
28 if prev is None:
45dd79e9ba1b Rudimentary FPS and clock ticking.
Simon Cross <hodgestar@gmail.com>
parents: 119
diff changeset
29 return
45dd79e9ba1b Rudimentary FPS and clock ticking.
Simon Cross <hodgestar@gmail.com>
parents: 119
diff changeset
30 dt = self._prev - prev
45dd79e9ba1b Rudimentary FPS and clock ticking.
Simon Cross <hodgestar@gmail.com>
parents: 119
diff changeset
31
181
061d711ba570 Interact with the world.
Jeremy Thurgood <firxen@gmail.com>
parents: 122
diff changeset
32 self.snake.update(dt, self)
061d711ba570 Interact with the world.
Jeremy Thurgood <firxen@gmail.com>
parents: 122
diff changeset
33
182
0a955d2536f0 Painted Jezebel! (Assuming you name your snake Jezebel.)
Jeremy Thurgood <firxen@gmail.com>
parents: 181
diff changeset
34 def interact(self, segment):
188
d76c069164c0 Much better interaction detection.
Jeremy Thurgood <firxen@gmail.com>
parents: 186
diff changeset
35 tiles = segment.filter_collisions(self.level.sprites)
d76c069164c0 Much better interaction detection.
Jeremy Thurgood <firxen@gmail.com>
parents: 186
diff changeset
36 for tile in tiles:
243
f9cc701a6be0 Hook up tunnels.
Simon Cross <hodgestar@gmail.com>
parents: 191
diff changeset
37 tile.interact(self, segment)
186
275f0be6946c Reincarnating Snakes
Neil Muller <drnlmuller@gmail.com>
parents: 182
diff changeset
38
191
454f7552e863 Pause the world, I may want to get off
Neil Muller <drnlmuller@gmail.com>
parents: 188
diff changeset
39 def pause(self):
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
40 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
41 return was_paused == False
191
454f7552e863 Pause the world, I may want to get off
Neil Muller <drnlmuller@gmail.com>
parents: 188
diff changeset
42
454f7552e863 Pause the world, I may want to get off
Neil Muller <drnlmuller@gmail.com>
parents: 188
diff changeset
43 def resume(self):
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
44 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
45 return was_paused == True
191
454f7552e863 Pause the world, I may want to get off
Neil Muller <drnlmuller@gmail.com>
parents: 188
diff changeset
46
186
275f0be6946c Reincarnating Snakes
Neil Muller <drnlmuller@gmail.com>
parents: 182
diff changeset
47 def restart(self):
275f0be6946c Reincarnating Snakes
Neil Muller <drnlmuller@gmail.com>
parents: 182
diff changeset
48 self.level.restart()
275f0be6946c Reincarnating Snakes
Neil Muller <drnlmuller@gmail.com>
parents: 182
diff changeset
49 tile_pos, orientation = self.level.get_entry()
275f0be6946c Reincarnating Snakes
Neil Muller <drnlmuller@gmail.com>
parents: 182
diff changeset
50 self.snake = Snake(tile_pos, orientation)
275f0be6946c Reincarnating Snakes
Neil Muller <drnlmuller@gmail.com>
parents: 182
diff changeset
51 self._prev = None
191
454f7552e863 Pause the world, I may want to get off
Neil Muller <drnlmuller@gmail.com>
parents: 188
diff changeset
52 self._paused = False