Mercurial > skaapsteker
annotate skaapsteker/level.py @ 632:0675f390653c
Initial port to Python 3 and Pygame 2.
author | Simon Cross <hodgestar@gmail.com> |
---|---|
date | Fri, 20 Jan 2023 20:01:06 +0100 |
parents | 65881746dc20 |
children |
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 |
621
851c8726696c
More cleanup. Mostly using utils.c* instead of doing things the long way.
Jeremy Thurgood <firxen@gmail.com>
parents:
612
diff
changeset
|
13 from .utils import cmul, cdiv, cint, cneg |
8 | 14 |
15 | |
16 | |
17 class TileSet(object): | |
18 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
|
19 self.dirname = dirname |
65 | 20 self.tile_factories = { |
21 '.': lambda pos: None, | |
101
b502e732f821
Add ? object-placement-help tiles
Stefano Rivera <stefano@rivera.za.net>
parents:
97
diff
changeset
|
22 '?': lambda pos: None, # Object placement helper |
65 | 23 '-': 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
|
24 '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
|
25 '<': 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
|
26 '>': self.tile_factory('floor-end-r.png', True), |
118
081f78470dcf
Fix misclassified tiles.
Jeremy Thurgood <firxen@gmail.com>
parents:
107
diff
changeset
|
27 '=': self.tile_factory('floor-start-l.png', True), |
081f78470dcf
Fix misclassified tiles.
Jeremy Thurgood <firxen@gmail.com>
parents:
107
diff
changeset
|
28 '+': 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
|
29 '(': 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
|
30 ')': 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
|
31 '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
|
32 '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
|
33 '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
|
34 '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
|
35 '{': 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
|
36 '}': 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
|
37 '|': 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
|
38 '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
|
39 '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
|
40 '!': 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
|
41 'k': self.tile_factory('skaapsteker.png', layer=Layers.SKAAPSTEKER, dirname='skaapsteker'), |
65 | 42 } |
8 | 43 |
44 | |
35 | 45 def get_tile(self, tilechar, pos): |
65 | 46 return self.tile_factories[tilechar](pos) |
8 | 47 |
48 | |
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
|
49 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
|
50 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
|
51 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
|
52 image = data.load_image('tiles/' + dirname + '/' + image_name) |
65 | 53 def _tilefac(pos): |
623
65881746dc20
More Sprite hierarchy work.
Jeremy Thurgood <firxen@gmail.com>
parents:
621
diff
changeset
|
54 tile = Geography(pos, image=image) |
65 | 55 tile.block = block |
56 tile.floor = floor | |
69
e4089417766e
FPS counter and tile sprite layering.
Jeremy Thurgood <firxen@gmail.com>
parents:
65
diff
changeset
|
57 tile._layer = layer |
97
a1d95c6152a0
Shiny new collision detection. Read code for usage information.
Simon Cross <hodgestar@gmail.com>
parents:
94
diff
changeset
|
58 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
|
59 tile.collides_with = set() |
65 | 60 return tile |
61 return _tilefac | |
8 | 62 |
63 | |
64 | |
65 class Level(object): | |
264
afd9256ad682
Move between doorways. (Still with hacky collision limiting.)
Jeremy Thurgood <firxen@gmail.com>
parents:
262
diff
changeset
|
66 def __init__(self, leveldef, soundsystem): |
127
e1dd3b785269
Initial game state stuff.
Jeremy Thurgood <firxen@gmail.com>
parents:
119
diff
changeset
|
67 self.name = leveldef |
20
f81e073fb8f5
Remove .json suffix from level defs.
Jeremy Thurgood <firxen@gmail.com>
parents:
13
diff
changeset
|
68 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
|
69 self.sprites = LayeredUpdates() |
262 | 70 self._soundsystem = soundsystem |
428
6a8f98335a53
Crop background image if necessary.
Jeremy Thurgood <firxen@gmail.com>
parents:
344
diff
changeset
|
71 self.build_tiles() |
52
a18bf35519f3
Multiple layered backgrounds.
Jeremy Thurgood <firxen@gmail.com>
parents:
50
diff
changeset
|
72 self.build_backgrounds() |
25
fe87d828d093
Very basic enemy support.
Jeremy Thurgood <firxen@gmail.com>
parents:
24
diff
changeset
|
73 self.setup_enemies() |
249 | 74 self.setup_doorways() |
243
4050e77dade6
Add support for background music tracks
Neil Muller <drnlmuller@gmail.com>
parents:
127
diff
changeset
|
75 self._background_music = None |
262 | 76 if 'music' in self.level_data: |
77 # 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
|
78 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
|
79 self._background_volume = self.level_data['music'].get('volume', 1.0) |
8 | 80 |
52
a18bf35519f3
Multiple layered backgrounds.
Jeremy Thurgood <firxen@gmail.com>
parents:
50
diff
changeset
|
81 def build_backgrounds(self): |
a18bf35519f3
Multiple layered backgrounds.
Jeremy Thurgood <firxen@gmail.com>
parents:
50
diff
changeset
|
82 self.backgrounds = [] |
428
6a8f98335a53
Crop background image if necessary.
Jeremy Thurgood <firxen@gmail.com>
parents:
344
diff
changeset
|
83 for i, background in enumerate(self.level_data['backgrounds']): |
6a8f98335a53
Crop background image if necessary.
Jeremy Thurgood <firxen@gmail.com>
parents:
344
diff
changeset
|
84 image = data.load_image('backgrounds/' + background) |
463
4dda5a0e4cf1
Better background clipping.
Jeremy Thurgood <firxen@gmail.com>
parents:
453
diff
changeset
|
85 clip_rect = Rect((0, 0), self.pixel_size) |
428
6a8f98335a53
Crop background image if necessary.
Jeremy Thurgood <firxen@gmail.com>
parents:
344
diff
changeset
|
86 if i == 0: |
621
851c8726696c
More cleanup. Mostly using utils.c* instead of doing things the long way.
Jeremy Thurgood <firxen@gmail.com>
parents:
612
diff
changeset
|
87 clip_rect = Rect((0, 0), (cint(cmul(self.pixel_size, 0.75)))) |
463
4dda5a0e4cf1
Better background clipping.
Jeremy Thurgood <firxen@gmail.com>
parents:
453
diff
changeset
|
88 clip_rect = clip_rect.clip(image.get_rect()) |
4dda5a0e4cf1
Better background clipping.
Jeremy Thurgood <firxen@gmail.com>
parents:
453
diff
changeset
|
89 clip_rect = clip_rect.union(Rect((0, 0), SCREEN)) |
4dda5a0e4cf1
Better background clipping.
Jeremy Thurgood <firxen@gmail.com>
parents:
453
diff
changeset
|
90 clip_rect.midbottom = image.get_rect().midbottom |
4dda5a0e4cf1
Better background clipping.
Jeremy Thurgood <firxen@gmail.com>
parents:
453
diff
changeset
|
91 image = image.subsurface(clip_rect) |
428
6a8f98335a53
Crop background image if necessary.
Jeremy Thurgood <firxen@gmail.com>
parents:
344
diff
changeset
|
92 self.backgrounds.append(image) |
13
b83f2db218e6
Draw level background with scaled offset.
Jeremy Thurgood <firxen@gmail.com>
parents:
10
diff
changeset
|
93 |
262 | 94 def enter(self): |
95 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
|
96 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
|
97 |
243
4050e77dade6
Add support for background music tracks
Neil Muller <drnlmuller@gmail.com>
parents:
127
diff
changeset
|
98 def leave(self): |
262 | 99 pass |
243
4050e77dade6
Add support for background music tracks
Neil Muller <drnlmuller@gmail.com>
parents:
127
diff
changeset
|
100 |
8 | 101 def build_tiles(self): |
13
b83f2db218e6
Draw level background with scaled offset.
Jeremy Thurgood <firxen@gmail.com>
parents:
10
diff
changeset
|
102 self.tileset = TileSet(self.level_data['tileset']) |
75
95cb0b575e05
Enemies in level editor, tile layers.
Jeremy Thurgood <firxen@gmail.com>
parents:
69
diff
changeset
|
103 self.tiles = LayeredUpdates() |
35 | 104 tile_data = self.level_data['tiles'] |
105 self.tile_size = (len(tile_data[0]), len(tile_data)) | |
621
851c8726696c
More cleanup. Mostly using utils.c* instead of doing things the long way.
Jeremy Thurgood <firxen@gmail.com>
parents:
612
diff
changeset
|
106 self.pixel_size = cmul(self.tile_size, TILE_SIZE) |
35 | 107 for y, row in enumerate(tile_data): |
108 for x, char in enumerate(row): | |
109 tile = self.tileset.get_tile(char, (x, y)) | |
110 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
|
111 self.tiles.add(tile) |
47 | 112 self.sprites.add(tile) |
8 | 113 |
114 | |
25
fe87d828d093
Very basic enemy support.
Jeremy Thurgood <firxen@gmail.com>
parents:
24
diff
changeset
|
115 def setup_enemies(self): |
75
95cb0b575e05
Enemies in level editor, tile layers.
Jeremy Thurgood <firxen@gmail.com>
parents:
69
diff
changeset
|
116 self.enemies = LayeredUpdates() |
47 | 117 for enemy_def in self.level_data['enemies']: |
127
e1dd3b785269
Initial game state stuff.
Jeremy Thurgood <firxen@gmail.com>
parents:
119
diff
changeset
|
118 enemy = find_sprite(enemy_def, 'enemies') |
47 | 119 self.enemies.add(enemy) |
120 self.sprites.add(enemy) | |
121 | |
127
e1dd3b785269
Initial game state stuff.
Jeremy Thurgood <firxen@gmail.com>
parents:
119
diff
changeset
|
122 |
249 | 123 def setup_doorways(self): |
264
afd9256ad682
Move between doorways. (Still with hacky collision limiting.)
Jeremy Thurgood <firxen@gmail.com>
parents:
262
diff
changeset
|
124 self.doorways = {} |
afd9256ad682
Move between doorways. (Still with hacky collision limiting.)
Jeremy Thurgood <firxen@gmail.com>
parents:
262
diff
changeset
|
125 for door_name, door_def in self.level_data['doorways'].items(): |
249 | 126 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
|
127 self.doorways[door_name] = doorway |
249 | 128 self.sprites.add(doorway) |
129 | |
130 | |
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
|
131 def get_surface(self): |
64
13b9031febeb
remove SRCALPHA flag for performance reasons
Neil Muller <drnlmuller@gmail.com>
parents:
63
diff
changeset
|
132 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
|
133 |
8 | 134 |
52
a18bf35519f3
Multiple layered backgrounds.
Jeremy Thurgood <firxen@gmail.com>
parents:
50
diff
changeset
|
135 def get_background_pos(self, background, viewport): |
621
851c8726696c
More cleanup. Mostly using utils.c* instead of doing things the long way.
Jeremy Thurgood <firxen@gmail.com>
parents:
612
diff
changeset
|
136 bg_scalable = background.get_rect().inflate(cneg(viewport.size)).size |
851c8726696c
More cleanup. Mostly using utils.c* instead of doing things the long way.
Jeremy Thurgood <firxen@gmail.com>
parents:
612
diff
changeset
|
137 lev_scalable = Rect((0, 0), self.pixel_size).inflate(cneg(viewport.size)).size |
851c8726696c
More cleanup. Mostly using utils.c* instead of doing things the long way.
Jeremy Thurgood <firxen@gmail.com>
parents:
612
diff
changeset
|
138 return cdiv(cmul(viewport.topleft, bg_scalable), lev_scalable) |
13
b83f2db218e6
Draw level background with scaled offset.
Jeremy Thurgood <firxen@gmail.com>
parents:
10
diff
changeset
|
139 |
b83f2db218e6
Draw level background with scaled offset.
Jeremy Thurgood <firxen@gmail.com>
parents:
10
diff
changeset
|
140 |
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
|
141 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
|
142 clip_rect = surface.get_clip() |
52
a18bf35519f3
Multiple layered backgrounds.
Jeremy Thurgood <firxen@gmail.com>
parents:
50
diff
changeset
|
143 for background in self.backgrounds: |
a18bf35519f3
Multiple layered backgrounds.
Jeremy Thurgood <firxen@gmail.com>
parents:
50
diff
changeset
|
144 bg_pos = self.get_background_pos(background, clip_rect) |
a18bf35519f3
Multiple layered backgrounds.
Jeremy Thurgood <firxen@gmail.com>
parents:
50
diff
changeset
|
145 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
|
146 |
b83f2db218e6
Draw level background with scaled offset.
Jeremy Thurgood <firxen@gmail.com>
parents:
10
diff
changeset
|
147 |
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
|
148 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
|
149 self.tiles.draw(surface) |
13
b83f2db218e6
Draw level background with scaled offset.
Jeremy Thurgood <firxen@gmail.com>
parents:
10
diff
changeset
|
150 |
b83f2db218e6
Draw level background with scaled offset.
Jeremy Thurgood <firxen@gmail.com>
parents:
10
diff
changeset
|
151 |
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
|
152 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
|
153 self.draw_background(surface) |
101
b502e732f821
Add ? object-placement-help tiles
Stefano Rivera <stefano@rivera.za.net>
parents:
97
diff
changeset
|
154 |
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 class DebugLevel(Level): |
b502e732f821
Add ? object-placement-help tiles
Stefano Rivera <stefano@rivera.za.net>
parents:
97
diff
changeset
|
158 """Used by level-editor""" |
b502e732f821
Add ? object-placement-help tiles
Stefano Rivera <stefano@rivera.za.net>
parents:
97
diff
changeset
|
159 def build_tiles(self): |
b502e732f821
Add ? object-placement-help tiles
Stefano Rivera <stefano@rivera.za.net>
parents:
97
diff
changeset
|
160 super(DebugLevel, self).build_tiles() |
b502e732f821
Add ? object-placement-help tiles
Stefano Rivera <stefano@rivera.za.net>
parents:
97
diff
changeset
|
161 tile_data = self.level_data['tiles'] |
b502e732f821
Add ? object-placement-help tiles
Stefano Rivera <stefano@rivera.za.net>
parents:
97
diff
changeset
|
162 for y, row in enumerate(tile_data): |
b502e732f821
Add ? object-placement-help tiles
Stefano Rivera <stefano@rivera.za.net>
parents:
97
diff
changeset
|
163 for x, char in enumerate(row): |
b502e732f821
Add ? object-placement-help tiles
Stefano Rivera <stefano@rivera.za.net>
parents:
97
diff
changeset
|
164 if char == '?': |
b502e732f821
Add ? object-placement-help tiles
Stefano Rivera <stefano@rivera.za.net>
parents:
97
diff
changeset
|
165 self.check_debug_tile(x, y) |
b502e732f821
Add ? object-placement-help tiles
Stefano Rivera <stefano@rivera.za.net>
parents:
97
diff
changeset
|
166 |
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 def check_debug_tile(self, x, y): |
b502e732f821
Add ? object-placement-help tiles
Stefano Rivera <stefano@rivera.za.net>
parents:
97
diff
changeset
|
169 objects = [] |
b502e732f821
Add ? object-placement-help tiles
Stefano Rivera <stefano@rivera.za.net>
parents:
97
diff
changeset
|
170 objects += self.level_data.get('enemies', []) |
b502e732f821
Add ? object-placement-help tiles
Stefano Rivera <stefano@rivera.za.net>
parents:
97
diff
changeset
|
171 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
|
172 doorways = self.level_data.get('doorways', {}) |
e157119d5e84
added doorways to debuggable level elements
Adrianna Pińska <adrianna.pinska@gmail.com>
parents:
279
diff
changeset
|
173 objects += doorways.values() |
101
b502e732f821
Add ? object-placement-help tiles
Stefano Rivera <stefano@rivera.za.net>
parents:
97
diff
changeset
|
174 |
b502e732f821
Add ? object-placement-help tiles
Stefano Rivera <stefano@rivera.za.net>
parents:
97
diff
changeset
|
175 for object_ in objects: |
b502e732f821
Add ? object-placement-help tiles
Stefano Rivera <stefano@rivera.za.net>
parents:
97
diff
changeset
|
176 if [x, y] == object_['pos']: |
b502e732f821
Add ? object-placement-help tiles
Stefano Rivera <stefano@rivera.za.net>
parents:
97
diff
changeset
|
177 break |
b502e732f821
Add ? object-placement-help tiles
Stefano Rivera <stefano@rivera.za.net>
parents:
97
diff
changeset
|
178 else: |
b502e732f821
Add ? object-placement-help tiles
Stefano Rivera <stefano@rivera.za.net>
parents:
97
diff
changeset
|
179 tile = self.get_debug_tile(x, y) |
632
0675f390653c
Initial port to Python 3 and Pygame 2.
Simon Cross <hodgestar@gmail.com>
parents:
623
diff
changeset
|
180 print("Debug tile at (%i, %i)" % (x, y)) |
101
b502e732f821
Add ? object-placement-help tiles
Stefano Rivera <stefano@rivera.za.net>
parents:
97
diff
changeset
|
181 self.tiles.add(tile) |
b502e732f821
Add ? object-placement-help tiles
Stefano Rivera <stefano@rivera.za.net>
parents:
97
diff
changeset
|
182 self.sprites.add(tile) |
b502e732f821
Add ? object-placement-help tiles
Stefano Rivera <stefano@rivera.za.net>
parents:
97
diff
changeset
|
183 |
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 def get_debug_tile(self, x, y): |
b502e732f821
Add ? object-placement-help tiles
Stefano Rivera <stefano@rivera.za.net>
parents:
97
diff
changeset
|
186 surface = Surface((64, 64)) |
b502e732f821
Add ? object-placement-help tiles
Stefano Rivera <stefano@rivera.za.net>
parents:
97
diff
changeset
|
187 surface.fill(Color('black')) |
b502e732f821
Add ? object-placement-help tiles
Stefano Rivera <stefano@rivera.za.net>
parents:
97
diff
changeset
|
188 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
|
189 text.draw(surface) |
623
65881746dc20
More Sprite hierarchy work.
Jeremy Thurgood <firxen@gmail.com>
parents:
621
diff
changeset
|
190 return Geography((x, y), image=surface.convert_alpha()) |