Mercurial > skaapsteker
annotate skaapsteker/level.py @ 612:a91b2e4400a5
Fallback to using simplejson if json does not exist (this appears to be all that is needed to add Python2.5 compatibility).
author | Simon Cross <hodgestar@gmail.com> |
---|---|
date | Mon, 11 Apr 2011 23:54:56 +0200 |
parents | 4de4f94c326d |
children | 851c8726696c |
rev | line source |
---|---|
612
a91b2e4400a5
Fallback to using simplejson if json does not exist (this appears to be all that is needed to add Python2.5 compatibility).
Simon Cross <hodgestar@gmail.com>
parents:
522
diff
changeset
|
1 try: |
a91b2e4400a5
Fallback to using simplejson if json does not exist (this appears to be all that is needed to add Python2.5 compatibility).
Simon Cross <hodgestar@gmail.com>
parents:
522
diff
changeset
|
2 import json |
a91b2e4400a5
Fallback to using simplejson if json does not exist (this appears to be all that is needed to add Python2.5 compatibility).
Simon Cross <hodgestar@gmail.com>
parents:
522
diff
changeset
|
3 except ImportError: |
a91b2e4400a5
Fallback to using simplejson if json does not exist (this appears to be all that is needed to add Python2.5 compatibility).
Simon Cross <hodgestar@gmail.com>
parents:
522
diff
changeset
|
4 import simplejson as json |
8 | 5 |
243
4050e77dade6
Add support for background music tracks
Neil Muller <drnlmuller@gmail.com>
parents:
127
diff
changeset
|
6 from pygame import Rect, Surface, Color, mixer |
75
95cb0b575e05
Enemies in level editor, tile layers.
Jeremy Thurgood <firxen@gmail.com>
parents:
69
diff
changeset
|
7 from pygame.sprite import LayeredUpdates |
13
b83f2db218e6
Draw level background with scaled offset.
Jeremy Thurgood <firxen@gmail.com>
parents:
10
diff
changeset
|
8 |
101
b502e732f821
Add ? object-placement-help tiles
Stefano Rivera <stefano@rivera.za.net>
parents:
97
diff
changeset
|
9 from . import data |
428
6a8f98335a53
Crop background image if necessary.
Jeremy Thurgood <firxen@gmail.com>
parents:
344
diff
changeset
|
10 from .constants import SCREEN, Layers |
101
b502e732f821
Add ? object-placement-help tiles
Stefano Rivera <stefano@rivera.za.net>
parents:
97
diff
changeset
|
11 from .sprites.base import TILE_SIZE, find_sprite, Geography |
b502e732f821
Add ? object-placement-help tiles
Stefano Rivera <stefano@rivera.za.net>
parents:
97
diff
changeset
|
12 from .widgets.text import Text |
8 | 13 |
14 | |
15 | |
16 class TileSet(object): | |
17 def __init__(self, dirname): | |
341
9a0f0ea687da
removed per-set decor tiles; created common set of decorative tiles; added some bamboo to road
Adrianna Pińska <adrianna.pinska@gmail.com>
parents:
282
diff
changeset
|
18 self.dirname = dirname |
65 | 19 self.tile_factories = { |
20 '.': lambda pos: None, | |
101
b502e732f821
Add ? object-placement-help tiles
Stefano Rivera <stefano@rivera.za.net>
parents:
97
diff
changeset
|
21 '?': lambda pos: None, # Object placement helper |
65 | 22 '-': self.tile_factory('floor.png', True), |
107
a770ac0c3385
created xcf with tile shapes and Olli's backgrounds; wrote xcf2png script to generate tiles; switched levels to real tilesets
Adrianna Pińska <adrianna.pinska@gmail.com>
parents:
101
diff
changeset
|
23 'X': self.tile_factory('wall.png', True, True), |
a770ac0c3385
created xcf with tile shapes and Olli's backgrounds; wrote xcf2png script to generate tiles; switched levels to real tilesets
Adrianna Pińska <adrianna.pinska@gmail.com>
parents:
101
diff
changeset
|
24 '<': self.tile_factory('floor-end-l.png', True), |
a770ac0c3385
created xcf with tile shapes and Olli's backgrounds; wrote xcf2png script to generate tiles; switched levels to real tilesets
Adrianna Pińska <adrianna.pinska@gmail.com>
parents:
101
diff
changeset
|
25 '>': self.tile_factory('floor-end-r.png', True), |
118
081f78470dcf
Fix misclassified tiles.
Jeremy Thurgood <firxen@gmail.com>
parents:
107
diff
changeset
|
26 '=': self.tile_factory('floor-start-l.png', True), |
081f78470dcf
Fix misclassified tiles.
Jeremy Thurgood <firxen@gmail.com>
parents:
107
diff
changeset
|
27 '+': self.tile_factory('floor-start-r.png', True), |
107
a770ac0c3385
created xcf with tile shapes and Olli's backgrounds; wrote xcf2png script to generate tiles; switched levels to real tilesets
Adrianna Pińska <adrianna.pinska@gmail.com>
parents:
101
diff
changeset
|
28 '(': self.tile_factory('wall-end-l.png', True, True), |
a770ac0c3385
created xcf with tile shapes and Olli's backgrounds; wrote xcf2png script to generate tiles; switched levels to real tilesets
Adrianna Pińska <adrianna.pinska@gmail.com>
parents:
101
diff
changeset
|
29 ')': self.tile_factory('wall-end-r.png', True, True), |
a770ac0c3385
created xcf with tile shapes and Olli's backgrounds; wrote xcf2png script to generate tiles; switched levels to real tilesets
Adrianna Pińska <adrianna.pinska@gmail.com>
parents:
101
diff
changeset
|
30 'q': self.tile_factory('wall-end-tr.png', True, True), |
a770ac0c3385
created xcf with tile shapes and Olli's backgrounds; wrote xcf2png script to generate tiles; switched levels to real tilesets
Adrianna Pińska <adrianna.pinska@gmail.com>
parents:
101
diff
changeset
|
31 'd': self.tile_factory('wall-end-br.png', True, True), |
a770ac0c3385
created xcf with tile shapes and Olli's backgrounds; wrote xcf2png script to generate tiles; switched levels to real tilesets
Adrianna Pińska <adrianna.pinska@gmail.com>
parents:
101
diff
changeset
|
32 'p': self.tile_factory('wall-end-tl.png', True, True), |
a770ac0c3385
created xcf with tile shapes and Olli's backgrounds; wrote xcf2png script to generate tiles; switched levels to real tilesets
Adrianna Pińska <adrianna.pinska@gmail.com>
parents:
101
diff
changeset
|
33 'b': self.tile_factory('wall-end-bl.png', True, True), |
a770ac0c3385
created xcf with tile shapes and Olli's backgrounds; wrote xcf2png script to generate tiles; switched levels to real tilesets
Adrianna Pińska <adrianna.pinska@gmail.com>
parents:
101
diff
changeset
|
34 '{': self.tile_factory('arch-l.png'), |
a770ac0c3385
created xcf with tile shapes and Olli's backgrounds; wrote xcf2png script to generate tiles; switched levels to real tilesets
Adrianna Pińska <adrianna.pinska@gmail.com>
parents:
101
diff
changeset
|
35 '}': self.tile_factory('arch-r.png'), |
341
9a0f0ea687da
removed per-set decor tiles; created common set of decorative tiles; added some bamboo to road
Adrianna Pińska <adrianna.pinska@gmail.com>
parents:
282
diff
changeset
|
36 '|': self.tile_factory('bamboo.png', layer=Layers.BACKGROUND, dirname='common'), |
344
0bea8508484d
moar decorative tiles
Adrianna Pińska <adrianna.pinska@gmail.com>
parents:
341
diff
changeset
|
37 'h': self.tile_factory('hanging-lantern.png', layer=Layers.IN_FRONT, dirname='common'), |
0bea8508484d
moar decorative tiles
Adrianna Pińska <adrianna.pinska@gmail.com>
parents:
341
diff
changeset
|
38 's': self.tile_factory('standing-lantern.png', layer=Layers.IN_FRONT, dirname='common'), |
0bea8508484d
moar decorative tiles
Adrianna Pińska <adrianna.pinska@gmail.com>
parents:
341
diff
changeset
|
39 '!': self.tile_factory('dangly-bits.png', layer=Layers.IN_FRONT, dirname='common'), |
522
4de4f94c326d
Move skaapsteker behind stuff and make haiku scrolls display text on collection.
Jeremy Thurgood <firxen@gmail.com>
parents:
513
diff
changeset
|
40 'k': self.tile_factory('skaapsteker.png', layer=Layers.SKAAPSTEKER, dirname='skaapsteker'), |
65 | 41 } |
8 | 42 |
43 | |
35 | 44 def get_tile(self, tilechar, pos): |
65 | 45 return self.tile_factories[tilechar](pos) |
8 | 46 |
47 | |
341
9a0f0ea687da
removed per-set decor tiles; created common set of decorative tiles; added some bamboo to road
Adrianna Pińska <adrianna.pinska@gmail.com>
parents:
282
diff
changeset
|
48 def tile_factory(self, image_name, floor=False, block=False, layer=Layers.BACKGROUND, dirname=None): |
9a0f0ea687da
removed per-set decor tiles; created common set of decorative tiles; added some bamboo to road
Adrianna Pińska <adrianna.pinska@gmail.com>
parents:
282
diff
changeset
|
49 if not dirname: |
9a0f0ea687da
removed per-set decor tiles; created common set of decorative tiles; added some bamboo to road
Adrianna Pińska <adrianna.pinska@gmail.com>
parents:
282
diff
changeset
|
50 dirname = self.dirname |
9a0f0ea687da
removed per-set decor tiles; created common set of decorative tiles; added some bamboo to road
Adrianna Pińska <adrianna.pinska@gmail.com>
parents:
282
diff
changeset
|
51 image = data.load_image('tiles/' + dirname + '/' + image_name) |
65 | 52 def _tilefac(pos): |
53 tile = Geography(pos, image) | |
54 tile.block = block | |
55 tile.floor = floor | |
69
e4089417766e
FPS counter and tile sprite layering.
Jeremy Thurgood <firxen@gmail.com>
parents:
65
diff
changeset
|
56 tile._layer = layer |
97
a1d95c6152a0
Shiny new collision detection. Read code for usage information.
Simon Cross <hodgestar@gmail.com>
parents:
94
diff
changeset
|
57 if not (tile.block or tile.floor): |
a1d95c6152a0
Shiny new collision detection. Read code for usage information.
Simon Cross <hodgestar@gmail.com>
parents:
94
diff
changeset
|
58 tile.collides_with = set() |
65 | 59 return tile |
60 return _tilefac | |
8 | 61 |
62 | |
63 | |
64 class Level(object): | |
264
afd9256ad682
Move between doorways. (Still with hacky collision limiting.)
Jeremy Thurgood <firxen@gmail.com>
parents:
262
diff
changeset
|
65 def __init__(self, leveldef, soundsystem): |
127
e1dd3b785269
Initial game state stuff.
Jeremy Thurgood <firxen@gmail.com>
parents:
119
diff
changeset
|
66 self.name = leveldef |
20
f81e073fb8f5
Remove .json suffix from level defs.
Jeremy Thurgood <firxen@gmail.com>
parents:
13
diff
changeset
|
67 self.level_data = json.loads(data.load('levels/' + leveldef + '.json').read()) |
75
95cb0b575e05
Enemies in level editor, tile layers.
Jeremy Thurgood <firxen@gmail.com>
parents:
69
diff
changeset
|
68 self.sprites = LayeredUpdates() |
262 | 69 self._soundsystem = soundsystem |
428
6a8f98335a53
Crop background image if necessary.
Jeremy Thurgood <firxen@gmail.com>
parents:
344
diff
changeset
|
70 self.build_tiles() |
52
a18bf35519f3
Multiple layered backgrounds.
Jeremy Thurgood <firxen@gmail.com>
parents:
50
diff
changeset
|
71 self.build_backgrounds() |
25
fe87d828d093
Very basic enemy support.
Jeremy Thurgood <firxen@gmail.com>
parents:
24
diff
changeset
|
72 self.setup_enemies() |
249 | 73 self.setup_doorways() |
243
4050e77dade6
Add support for background music tracks
Neil Muller <drnlmuller@gmail.com>
parents:
127
diff
changeset
|
74 self._background_music = None |
262 | 75 if 'music' in self.level_data: |
76 # soundsystem will call data.filepath | |
453
9c9df17b98a7
Add support for choosing a volume. A music to temple.
Simon Cross <hodgestar@gmail.com>
parents:
428
diff
changeset
|
77 self._background_music = 'music/' + self.level_data['music'].get('track', '') |
9c9df17b98a7
Add support for choosing a volume. A music to temple.
Simon Cross <hodgestar@gmail.com>
parents:
428
diff
changeset
|
78 self._background_volume = self.level_data['music'].get('volume', 1.0) |
8 | 79 |
52
a18bf35519f3
Multiple layered backgrounds.
Jeremy Thurgood <firxen@gmail.com>
parents:
50
diff
changeset
|
80 def build_backgrounds(self): |
a18bf35519f3
Multiple layered backgrounds.
Jeremy Thurgood <firxen@gmail.com>
parents:
50
diff
changeset
|
81 self.backgrounds = [] |
428
6a8f98335a53
Crop background image if necessary.
Jeremy Thurgood <firxen@gmail.com>
parents:
344
diff
changeset
|
82 for i, background in enumerate(self.level_data['backgrounds']): |
6a8f98335a53
Crop background image if necessary.
Jeremy Thurgood <firxen@gmail.com>
parents:
344
diff
changeset
|
83 image = data.load_image('backgrounds/' + background) |
463
4dda5a0e4cf1
Better background clipping.
Jeremy Thurgood <firxen@gmail.com>
parents:
453
diff
changeset
|
84 clip_rect = Rect((0, 0), self.pixel_size) |
428
6a8f98335a53
Crop background image if necessary.
Jeremy Thurgood <firxen@gmail.com>
parents:
344
diff
changeset
|
85 if i == 0: |
6a8f98335a53
Crop background image if necessary.
Jeremy Thurgood <firxen@gmail.com>
parents:
344
diff
changeset
|
86 clip_rect = Rect((0, 0), (int(self.pixel_size[0] * 0.75), int(self.pixel_size[1] * 0.75))) |
463
4dda5a0e4cf1
Better background clipping.
Jeremy Thurgood <firxen@gmail.com>
parents:
453
diff
changeset
|
87 clip_rect = clip_rect.clip(image.get_rect()) |
4dda5a0e4cf1
Better background clipping.
Jeremy Thurgood <firxen@gmail.com>
parents:
453
diff
changeset
|
88 clip_rect = clip_rect.union(Rect((0, 0), SCREEN)) |
4dda5a0e4cf1
Better background clipping.
Jeremy Thurgood <firxen@gmail.com>
parents:
453
diff
changeset
|
89 clip_rect.midbottom = image.get_rect().midbottom |
4dda5a0e4cf1
Better background clipping.
Jeremy Thurgood <firxen@gmail.com>
parents:
453
diff
changeset
|
90 image = image.subsurface(clip_rect) |
428
6a8f98335a53
Crop background image if necessary.
Jeremy Thurgood <firxen@gmail.com>
parents:
344
diff
changeset
|
91 self.backgrounds.append(image) |
13
b83f2db218e6
Draw level background with scaled offset.
Jeremy Thurgood <firxen@gmail.com>
parents:
10
diff
changeset
|
92 |
262 | 93 def enter(self): |
94 if self._background_music: | |
453
9c9df17b98a7
Add support for choosing a volume. A music to temple.
Simon Cross <hodgestar@gmail.com>
parents:
428
diff
changeset
|
95 self._soundsystem.play_background_music(self._background_music, self._background_volume) |
13
b83f2db218e6
Draw level background with scaled offset.
Jeremy Thurgood <firxen@gmail.com>
parents:
10
diff
changeset
|
96 |
243
4050e77dade6
Add support for background music tracks
Neil Muller <drnlmuller@gmail.com>
parents:
127
diff
changeset
|
97 def leave(self): |
262 | 98 pass |
243
4050e77dade6
Add support for background music tracks
Neil Muller <drnlmuller@gmail.com>
parents:
127
diff
changeset
|
99 |
8 | 100 def build_tiles(self): |
13
b83f2db218e6
Draw level background with scaled offset.
Jeremy Thurgood <firxen@gmail.com>
parents:
10
diff
changeset
|
101 self.tileset = TileSet(self.level_data['tileset']) |
75
95cb0b575e05
Enemies in level editor, tile layers.
Jeremy Thurgood <firxen@gmail.com>
parents:
69
diff
changeset
|
102 self.tiles = LayeredUpdates() |
35 | 103 tile_data = self.level_data['tiles'] |
104 self.tile_size = (len(tile_data[0]), len(tile_data)) | |
105 self.pixel_size = (self.tile_size[0] * TILE_SIZE[0], self.tile_size[1] * TILE_SIZE[1]) | |
106 for y, row in enumerate(tile_data): | |
107 for x, char in enumerate(row): | |
108 tile = self.tileset.get_tile(char, (x, y)) | |
109 if tile: | |
40
fa1bb94cfa76
Re-factor drawing to blit to a clip rect in the One True Level Surface before blitting that to the screen.
Simon Cross <hodgestar@gmail.com>
parents:
35
diff
changeset
|
110 self.tiles.add(tile) |
47 | 111 self.sprites.add(tile) |
8 | 112 |
113 | |
25
fe87d828d093
Very basic enemy support.
Jeremy Thurgood <firxen@gmail.com>
parents:
24
diff
changeset
|
114 def setup_enemies(self): |
75
95cb0b575e05
Enemies in level editor, tile layers.
Jeremy Thurgood <firxen@gmail.com>
parents:
69
diff
changeset
|
115 self.enemies = LayeredUpdates() |
47 | 116 for enemy_def in self.level_data['enemies']: |
127
e1dd3b785269
Initial game state stuff.
Jeremy Thurgood <firxen@gmail.com>
parents:
119
diff
changeset
|
117 enemy = find_sprite(enemy_def, 'enemies') |
47 | 118 self.enemies.add(enemy) |
119 self.sprites.add(enemy) | |
120 | |
127
e1dd3b785269
Initial game state stuff.
Jeremy Thurgood <firxen@gmail.com>
parents:
119
diff
changeset
|
121 |
249 | 122 def setup_doorways(self): |
264
afd9256ad682
Move between doorways. (Still with hacky collision limiting.)
Jeremy Thurgood <firxen@gmail.com>
parents:
262
diff
changeset
|
123 self.doorways = {} |
afd9256ad682
Move between doorways. (Still with hacky collision limiting.)
Jeremy Thurgood <firxen@gmail.com>
parents:
262
diff
changeset
|
124 for door_name, door_def in self.level_data['doorways'].items(): |
249 | 125 doorway = find_sprite(door_def, 'base') |
264
afd9256ad682
Move between doorways. (Still with hacky collision limiting.)
Jeremy Thurgood <firxen@gmail.com>
parents:
262
diff
changeset
|
126 self.doorways[door_name] = doorway |
249 | 127 self.sprites.add(doorway) |
128 | |
129 | |
40
fa1bb94cfa76
Re-factor drawing to blit to a clip rect in the One True Level Surface before blitting that to the screen.
Simon Cross <hodgestar@gmail.com>
parents:
35
diff
changeset
|
130 def get_surface(self): |
64
13b9031febeb
remove SRCALPHA flag for performance reasons
Neil Muller <drnlmuller@gmail.com>
parents:
63
diff
changeset
|
131 return Surface(self.pixel_size) |
40
fa1bb94cfa76
Re-factor drawing to blit to a clip rect in the One True Level Surface before blitting that to the screen.
Simon Cross <hodgestar@gmail.com>
parents:
35
diff
changeset
|
132 |
8 | 133 |
52
a18bf35519f3
Multiple layered backgrounds.
Jeremy Thurgood <firxen@gmail.com>
parents:
50
diff
changeset
|
134 def get_background_pos(self, background, viewport): |
a18bf35519f3
Multiple layered backgrounds.
Jeremy Thurgood <firxen@gmail.com>
parents:
50
diff
changeset
|
135 vp_x, vp_y = viewport.size |
a18bf35519f3
Multiple layered backgrounds.
Jeremy Thurgood <firxen@gmail.com>
parents:
50
diff
changeset
|
136 bg_scalable = background.get_rect().inflate(-vp_x, -vp_y).size |
a18bf35519f3
Multiple layered backgrounds.
Jeremy Thurgood <firxen@gmail.com>
parents:
50
diff
changeset
|
137 lev_scalable = Rect((0, 0), self.pixel_size).inflate(-vp_x, -vp_y).size |
a18bf35519f3
Multiple layered backgrounds.
Jeremy Thurgood <firxen@gmail.com>
parents:
50
diff
changeset
|
138 return ((viewport.left * bg_scalable[0]) / lev_scalable[0], |
a18bf35519f3
Multiple layered backgrounds.
Jeremy Thurgood <firxen@gmail.com>
parents:
50
diff
changeset
|
139 (viewport.top * bg_scalable[1]) / lev_scalable[1]) |
13
b83f2db218e6
Draw level background with scaled offset.
Jeremy Thurgood <firxen@gmail.com>
parents:
10
diff
changeset
|
140 |
b83f2db218e6
Draw level background with scaled offset.
Jeremy Thurgood <firxen@gmail.com>
parents:
10
diff
changeset
|
141 |
40
fa1bb94cfa76
Re-factor drawing to blit to a clip rect in the One True Level Surface before blitting that to the screen.
Simon Cross <hodgestar@gmail.com>
parents:
35
diff
changeset
|
142 def draw_background(self, surface): |
fa1bb94cfa76
Re-factor drawing to blit to a clip rect in the One True Level Surface before blitting that to the screen.
Simon Cross <hodgestar@gmail.com>
parents:
35
diff
changeset
|
143 clip_rect = surface.get_clip() |
52
a18bf35519f3
Multiple layered backgrounds.
Jeremy Thurgood <firxen@gmail.com>
parents:
50
diff
changeset
|
144 for background in self.backgrounds: |
a18bf35519f3
Multiple layered backgrounds.
Jeremy Thurgood <firxen@gmail.com>
parents:
50
diff
changeset
|
145 bg_pos = self.get_background_pos(background, clip_rect) |
a18bf35519f3
Multiple layered backgrounds.
Jeremy Thurgood <firxen@gmail.com>
parents:
50
diff
changeset
|
146 surface.blit(background, clip_rect.topleft, Rect(bg_pos, clip_rect.size)) |
13
b83f2db218e6
Draw level background with scaled offset.
Jeremy Thurgood <firxen@gmail.com>
parents:
10
diff
changeset
|
147 |
b83f2db218e6
Draw level background with scaled offset.
Jeremy Thurgood <firxen@gmail.com>
parents:
10
diff
changeset
|
148 |
40
fa1bb94cfa76
Re-factor drawing to blit to a clip rect in the One True Level Surface before blitting that to the screen.
Simon Cross <hodgestar@gmail.com>
parents:
35
diff
changeset
|
149 def draw_tiles(self, surface): |
fa1bb94cfa76
Re-factor drawing to blit to a clip rect in the One True Level Surface before blitting that to the screen.
Simon Cross <hodgestar@gmail.com>
parents:
35
diff
changeset
|
150 self.tiles.draw(surface) |
13
b83f2db218e6
Draw level background with scaled offset.
Jeremy Thurgood <firxen@gmail.com>
parents:
10
diff
changeset
|
151 |
b83f2db218e6
Draw level background with scaled offset.
Jeremy Thurgood <firxen@gmail.com>
parents:
10
diff
changeset
|
152 |
40
fa1bb94cfa76
Re-factor drawing to blit to a clip rect in the One True Level Surface before blitting that to the screen.
Simon Cross <hodgestar@gmail.com>
parents:
35
diff
changeset
|
153 def draw(self, surface): |
fa1bb94cfa76
Re-factor drawing to blit to a clip rect in the One True Level Surface before blitting that to the screen.
Simon Cross <hodgestar@gmail.com>
parents:
35
diff
changeset
|
154 self.draw_background(surface) |
101
b502e732f821
Add ? object-placement-help tiles
Stefano Rivera <stefano@rivera.za.net>
parents:
97
diff
changeset
|
155 |
b502e732f821
Add ? object-placement-help tiles
Stefano Rivera <stefano@rivera.za.net>
parents:
97
diff
changeset
|
156 |
b502e732f821
Add ? object-placement-help tiles
Stefano Rivera <stefano@rivera.za.net>
parents:
97
diff
changeset
|
157 |
b502e732f821
Add ? object-placement-help tiles
Stefano Rivera <stefano@rivera.za.net>
parents:
97
diff
changeset
|
158 class DebugLevel(Level): |
b502e732f821
Add ? object-placement-help tiles
Stefano Rivera <stefano@rivera.za.net>
parents:
97
diff
changeset
|
159 """Used by level-editor""" |
b502e732f821
Add ? object-placement-help tiles
Stefano Rivera <stefano@rivera.za.net>
parents:
97
diff
changeset
|
160 def build_tiles(self): |
b502e732f821
Add ? object-placement-help tiles
Stefano Rivera <stefano@rivera.za.net>
parents:
97
diff
changeset
|
161 super(DebugLevel, self).build_tiles() |
b502e732f821
Add ? object-placement-help tiles
Stefano Rivera <stefano@rivera.za.net>
parents:
97
diff
changeset
|
162 tile_data = self.level_data['tiles'] |
b502e732f821
Add ? object-placement-help tiles
Stefano Rivera <stefano@rivera.za.net>
parents:
97
diff
changeset
|
163 for y, row in enumerate(tile_data): |
b502e732f821
Add ? object-placement-help tiles
Stefano Rivera <stefano@rivera.za.net>
parents:
97
diff
changeset
|
164 for x, char in enumerate(row): |
b502e732f821
Add ? object-placement-help tiles
Stefano Rivera <stefano@rivera.za.net>
parents:
97
diff
changeset
|
165 if char == '?': |
b502e732f821
Add ? object-placement-help tiles
Stefano Rivera <stefano@rivera.za.net>
parents:
97
diff
changeset
|
166 self.check_debug_tile(x, y) |
b502e732f821
Add ? object-placement-help tiles
Stefano Rivera <stefano@rivera.za.net>
parents:
97
diff
changeset
|
167 |
b502e732f821
Add ? object-placement-help tiles
Stefano Rivera <stefano@rivera.za.net>
parents:
97
diff
changeset
|
168 |
b502e732f821
Add ? object-placement-help tiles
Stefano Rivera <stefano@rivera.za.net>
parents:
97
diff
changeset
|
169 def check_debug_tile(self, x, y): |
b502e732f821
Add ? object-placement-help tiles
Stefano Rivera <stefano@rivera.za.net>
parents:
97
diff
changeset
|
170 objects = [] |
b502e732f821
Add ? object-placement-help tiles
Stefano Rivera <stefano@rivera.za.net>
parents:
97
diff
changeset
|
171 objects += self.level_data.get('enemies', []) |
b502e732f821
Add ? object-placement-help tiles
Stefano Rivera <stefano@rivera.za.net>
parents:
97
diff
changeset
|
172 objects += self.level_data.get('sprites', []) |
282
e157119d5e84
added doorways to debuggable level elements
Adrianna Pińska <adrianna.pinska@gmail.com>
parents:
279
diff
changeset
|
173 doorways = self.level_data.get('doorways', {}) |
e157119d5e84
added doorways to debuggable level elements
Adrianna Pińska <adrianna.pinska@gmail.com>
parents:
279
diff
changeset
|
174 objects += doorways.values() |
101
b502e732f821
Add ? object-placement-help tiles
Stefano Rivera <stefano@rivera.za.net>
parents:
97
diff
changeset
|
175 |
b502e732f821
Add ? object-placement-help tiles
Stefano Rivera <stefano@rivera.za.net>
parents:
97
diff
changeset
|
176 for object_ in objects: |
b502e732f821
Add ? object-placement-help tiles
Stefano Rivera <stefano@rivera.za.net>
parents:
97
diff
changeset
|
177 if [x, y] == object_['pos']: |
b502e732f821
Add ? object-placement-help tiles
Stefano Rivera <stefano@rivera.za.net>
parents:
97
diff
changeset
|
178 break |
b502e732f821
Add ? object-placement-help tiles
Stefano Rivera <stefano@rivera.za.net>
parents:
97
diff
changeset
|
179 else: |
b502e732f821
Add ? object-placement-help tiles
Stefano Rivera <stefano@rivera.za.net>
parents:
97
diff
changeset
|
180 tile = self.get_debug_tile(x, y) |
b502e732f821
Add ? object-placement-help tiles
Stefano Rivera <stefano@rivera.za.net>
parents:
97
diff
changeset
|
181 print "Debug tile at (%i, %i)" % (x, y) |
b502e732f821
Add ? object-placement-help tiles
Stefano Rivera <stefano@rivera.za.net>
parents:
97
diff
changeset
|
182 self.tiles.add(tile) |
b502e732f821
Add ? object-placement-help tiles
Stefano Rivera <stefano@rivera.za.net>
parents:
97
diff
changeset
|
183 self.sprites.add(tile) |
b502e732f821
Add ? object-placement-help tiles
Stefano Rivera <stefano@rivera.za.net>
parents:
97
diff
changeset
|
184 |
b502e732f821
Add ? object-placement-help tiles
Stefano Rivera <stefano@rivera.za.net>
parents:
97
diff
changeset
|
185 |
b502e732f821
Add ? object-placement-help tiles
Stefano Rivera <stefano@rivera.za.net>
parents:
97
diff
changeset
|
186 def get_debug_tile(self, x, y): |
b502e732f821
Add ? object-placement-help tiles
Stefano Rivera <stefano@rivera.za.net>
parents:
97
diff
changeset
|
187 surface = Surface((64, 64)) |
b502e732f821
Add ? object-placement-help tiles
Stefano Rivera <stefano@rivera.za.net>
parents:
97
diff
changeset
|
188 surface.fill(Color('black')) |
b502e732f821
Add ? object-placement-help tiles
Stefano Rivera <stefano@rivera.za.net>
parents:
97
diff
changeset
|
189 text = Text("? Tile at\n(%i, %i)" % (x, y), (2, 2), size=14, color='white') |
b502e732f821
Add ? object-placement-help tiles
Stefano Rivera <stefano@rivera.za.net>
parents:
97
diff
changeset
|
190 text.draw(surface) |
b502e732f821
Add ? object-placement-help tiles
Stefano Rivera <stefano@rivera.za.net>
parents:
97
diff
changeset
|
191 return Geography((x, y), surface.convert_alpha()) |