Mercurial > mamba
annotate mamba/sprites.py @ 212:e768056b0588
Refactor tile image loading stuff. More magic is good, right?
author | Jeremy Thurgood <firxen@gmail.com> |
---|---|
date | Wed, 14 Sep 2011 21:12:20 +0200 |
parents | dd2c735fdaf4 |
children | 7a9be9add4c7 |
rev | line source |
---|---|
50 | 1 from pygame.sprite import Sprite |
199
986e72d2cb4d
Rejiggered entrances and shifted directions around.
Jeremy Thurgood <firxen@gmail.com>
parents:
183
diff
changeset
|
2 from pygame import Rect |
50 | 3 |
212
e768056b0588
Refactor tile image loading stuff. More magic is good, right?
Jeremy Thurgood <firxen@gmail.com>
parents:
207
diff
changeset
|
4 from mamba.data import load_tile_image |
199
986e72d2cb4d
Rejiggered entrances and shifted directions around.
Jeremy Thurgood <firxen@gmail.com>
parents:
183
diff
changeset
|
5 from mamba.constants import TILE_SIZE, UP, DOWN, LEFT, RIGHT |
130
9bef49d6db86
Ugly yucky half-done tile orientation magic.
Jeremy Thurgood <firxen@gmail.com>
parents:
121
diff
changeset
|
6 from mamba import mutators |
50 | 7 |
8 | |
182
0a955d2536f0
Painted Jezebel! (Assuming you name your snake Jezebel.)
Jeremy Thurgood <firxen@gmail.com>
parents:
181
diff
changeset
|
9 COLOURS = { |
0a955d2536f0
Painted Jezebel! (Assuming you name your snake Jezebel.)
Jeremy Thurgood <firxen@gmail.com>
parents:
181
diff
changeset
|
10 'red': mutators.RED, |
0a955d2536f0
Painted Jezebel! (Assuming you name your snake Jezebel.)
Jeremy Thurgood <firxen@gmail.com>
parents:
181
diff
changeset
|
11 'blue': mutators.BLUE, |
0a955d2536f0
Painted Jezebel! (Assuming you name your snake Jezebel.)
Jeremy Thurgood <firxen@gmail.com>
parents:
181
diff
changeset
|
12 'yellow': mutators.YELLOW, |
0a955d2536f0
Painted Jezebel! (Assuming you name your snake Jezebel.)
Jeremy Thurgood <firxen@gmail.com>
parents:
181
diff
changeset
|
13 } |
0a955d2536f0
Painted Jezebel! (Assuming you name your snake Jezebel.)
Jeremy Thurgood <firxen@gmail.com>
parents:
181
diff
changeset
|
14 |
0a955d2536f0
Painted Jezebel! (Assuming you name your snake Jezebel.)
Jeremy Thurgood <firxen@gmail.com>
parents:
181
diff
changeset
|
15 |
0a955d2536f0
Painted Jezebel! (Assuming you name your snake Jezebel.)
Jeremy Thurgood <firxen@gmail.com>
parents:
181
diff
changeset
|
16 def colour_with_fittings(image_name, tileset, colour): |
212
e768056b0588
Refactor tile image loading stuff. More magic is good, right?
Jeremy Thurgood <firxen@gmail.com>
parents:
207
diff
changeset
|
17 fittings_mutator = mutators.Overlay("%s-fittings" % (image_name,), tileset) |
182
0a955d2536f0
Painted Jezebel! (Assuming you name your snake Jezebel.)
Jeremy Thurgood <firxen@gmail.com>
parents:
181
diff
changeset
|
18 return image_name, (COLOURS[colour], fittings_mutator) |
0a955d2536f0
Painted Jezebel! (Assuming you name your snake Jezebel.)
Jeremy Thurgood <firxen@gmail.com>
parents:
181
diff
changeset
|
19 |
0a955d2536f0
Painted Jezebel! (Assuming you name your snake Jezebel.)
Jeremy Thurgood <firxen@gmail.com>
parents:
181
diff
changeset
|
20 |
50 | 21 def tile_sizify(pos): |
22 ts_x, ts_y = TILE_SIZE | |
23 p_x, p_y = pos | |
24 return (ts_x * p_x, ts_y * p_y) | |
25 | |
26 | |
136
00ada2e29798
Somewhat better (but still hideous) image variant support.
Jeremy Thurgood <firxen@gmail.com>
parents:
135
diff
changeset
|
27 class SpriteImageVariants(object): |
00ada2e29798
Somewhat better (but still hideous) image variant support.
Jeremy Thurgood <firxen@gmail.com>
parents:
135
diff
changeset
|
28 VARIANTS = { |
00ada2e29798
Somewhat better (but still hideous) image variant support.
Jeremy Thurgood <firxen@gmail.com>
parents:
135
diff
changeset
|
29 '....': ('-0', ()), |
00ada2e29798
Somewhat better (but still hideous) image variant support.
Jeremy Thurgood <firxen@gmail.com>
parents:
135
diff
changeset
|
30 |
00ada2e29798
Somewhat better (but still hideous) image variant support.
Jeremy Thurgood <firxen@gmail.com>
parents:
135
diff
changeset
|
31 'X...': ('-1', (mutators.R90,)), |
00ada2e29798
Somewhat better (but still hideous) image variant support.
Jeremy Thurgood <firxen@gmail.com>
parents:
135
diff
changeset
|
32 '.X..': ('-1', (mutators.R270,)), |
00ada2e29798
Somewhat better (but still hideous) image variant support.
Jeremy Thurgood <firxen@gmail.com>
parents:
135
diff
changeset
|
33 '..X.': ('-1', (mutators.NULL,)), |
00ada2e29798
Somewhat better (but still hideous) image variant support.
Jeremy Thurgood <firxen@gmail.com>
parents:
135
diff
changeset
|
34 '...X': ('-1', (mutators.R180,)), |
00ada2e29798
Somewhat better (but still hideous) image variant support.
Jeremy Thurgood <firxen@gmail.com>
parents:
135
diff
changeset
|
35 |
00ada2e29798
Somewhat better (but still hideous) image variant support.
Jeremy Thurgood <firxen@gmail.com>
parents:
135
diff
changeset
|
36 'XX..': ('-2o', (mutators.NULL,)), |
00ada2e29798
Somewhat better (but still hideous) image variant support.
Jeremy Thurgood <firxen@gmail.com>
parents:
135
diff
changeset
|
37 '..XX': ('-2o', (mutators.R90,)), |
00ada2e29798
Somewhat better (but still hideous) image variant support.
Jeremy Thurgood <firxen@gmail.com>
parents:
135
diff
changeset
|
38 |
00ada2e29798
Somewhat better (but still hideous) image variant support.
Jeremy Thurgood <firxen@gmail.com>
parents:
135
diff
changeset
|
39 'X.X.': ('-2a', (mutators.R180,)), |
00ada2e29798
Somewhat better (but still hideous) image variant support.
Jeremy Thurgood <firxen@gmail.com>
parents:
135
diff
changeset
|
40 'X..X': ('-2a', (mutators.R270,)), |
00ada2e29798
Somewhat better (but still hideous) image variant support.
Jeremy Thurgood <firxen@gmail.com>
parents:
135
diff
changeset
|
41 '.XX.': ('-2a', (mutators.R90,)), |
00ada2e29798
Somewhat better (but still hideous) image variant support.
Jeremy Thurgood <firxen@gmail.com>
parents:
135
diff
changeset
|
42 '.X.X': ('-2a', (mutators.NULL,)), |
00ada2e29798
Somewhat better (but still hideous) image variant support.
Jeremy Thurgood <firxen@gmail.com>
parents:
135
diff
changeset
|
43 |
00ada2e29798
Somewhat better (but still hideous) image variant support.
Jeremy Thurgood <firxen@gmail.com>
parents:
135
diff
changeset
|
44 '.XXX': ('-3', (mutators.R90,)), |
00ada2e29798
Somewhat better (but still hideous) image variant support.
Jeremy Thurgood <firxen@gmail.com>
parents:
135
diff
changeset
|
45 'X.XX': ('-3', (mutators.R270,)), |
00ada2e29798
Somewhat better (but still hideous) image variant support.
Jeremy Thurgood <firxen@gmail.com>
parents:
135
diff
changeset
|
46 'XX.X': ('-3', (mutators.NULL,)), |
00ada2e29798
Somewhat better (but still hideous) image variant support.
Jeremy Thurgood <firxen@gmail.com>
parents:
135
diff
changeset
|
47 'XXX.': ('-3', (mutators.R180,)), |
00ada2e29798
Somewhat better (but still hideous) image variant support.
Jeremy Thurgood <firxen@gmail.com>
parents:
135
diff
changeset
|
48 |
00ada2e29798
Somewhat better (but still hideous) image variant support.
Jeremy Thurgood <firxen@gmail.com>
parents:
135
diff
changeset
|
49 'XXXX': ('', ()), |
00ada2e29798
Somewhat better (but still hideous) image variant support.
Jeremy Thurgood <firxen@gmail.com>
parents:
135
diff
changeset
|
50 } |
00ada2e29798
Somewhat better (but still hideous) image variant support.
Jeremy Thurgood <firxen@gmail.com>
parents:
135
diff
changeset
|
51 |
00ada2e29798
Somewhat better (but still hideous) image variant support.
Jeremy Thurgood <firxen@gmail.com>
parents:
135
diff
changeset
|
52 def __init__(self, base_image_name): |
00ada2e29798
Somewhat better (but still hideous) image variant support.
Jeremy Thurgood <firxen@gmail.com>
parents:
135
diff
changeset
|
53 self.base_image_name = base_image_name |
00ada2e29798
Somewhat better (but still hideous) image variant support.
Jeremy Thurgood <firxen@gmail.com>
parents:
135
diff
changeset
|
54 |
00ada2e29798
Somewhat better (but still hideous) image variant support.
Jeremy Thurgood <firxen@gmail.com>
parents:
135
diff
changeset
|
55 def __call__(self, top, bottom, left, right): |
00ada2e29798
Somewhat better (but still hideous) image variant support.
Jeremy Thurgood <firxen@gmail.com>
parents:
135
diff
changeset
|
56 variant_str = ''.join('X' if d else '.' |
00ada2e29798
Somewhat better (but still hideous) image variant support.
Jeremy Thurgood <firxen@gmail.com>
parents:
135
diff
changeset
|
57 for d in [top, bottom, left, right]) |
00ada2e29798
Somewhat better (but still hideous) image variant support.
Jeremy Thurgood <firxen@gmail.com>
parents:
135
diff
changeset
|
58 variant_suffix, mutators = self.VARIANTS[variant_str] |
00ada2e29798
Somewhat better (but still hideous) image variant support.
Jeremy Thurgood <firxen@gmail.com>
parents:
135
diff
changeset
|
59 return (self.base_image_name + variant_suffix, mutators) |
00ada2e29798
Somewhat better (but still hideous) image variant support.
Jeremy Thurgood <firxen@gmail.com>
parents:
135
diff
changeset
|
60 |
00ada2e29798
Somewhat better (but still hideous) image variant support.
Jeremy Thurgood <firxen@gmail.com>
parents:
135
diff
changeset
|
61 |
00ada2e29798
Somewhat better (but still hideous) image variant support.
Jeremy Thurgood <firxen@gmail.com>
parents:
135
diff
changeset
|
62 class SolidSpriteImageVariants(SpriteImageVariants): |
00ada2e29798
Somewhat better (but still hideous) image variant support.
Jeremy Thurgood <firxen@gmail.com>
parents:
135
diff
changeset
|
63 VARIANTS = { |
00ada2e29798
Somewhat better (but still hideous) image variant support.
Jeremy Thurgood <firxen@gmail.com>
parents:
135
diff
changeset
|
64 '....': ('-0', ()), |
00ada2e29798
Somewhat better (but still hideous) image variant support.
Jeremy Thurgood <firxen@gmail.com>
parents:
135
diff
changeset
|
65 |
144
b292370c4548
Rearranged the orientation stuff. :-)
Jeremy Thurgood <firxen@gmail.com>
parents:
136
diff
changeset
|
66 'X...': ('-1', (mutators.R270,)), |
b292370c4548
Rearranged the orientation stuff. :-)
Jeremy Thurgood <firxen@gmail.com>
parents:
136
diff
changeset
|
67 '.X..': ('-1', (mutators.R90,)), |
136
00ada2e29798
Somewhat better (but still hideous) image variant support.
Jeremy Thurgood <firxen@gmail.com>
parents:
135
diff
changeset
|
68 '..X.': ('-1', (mutators.NULL,)), |
00ada2e29798
Somewhat better (but still hideous) image variant support.
Jeremy Thurgood <firxen@gmail.com>
parents:
135
diff
changeset
|
69 '...X': ('-1', (mutators.R180,)), |
00ada2e29798
Somewhat better (but still hideous) image variant support.
Jeremy Thurgood <firxen@gmail.com>
parents:
135
diff
changeset
|
70 |
00ada2e29798
Somewhat better (but still hideous) image variant support.
Jeremy Thurgood <firxen@gmail.com>
parents:
135
diff
changeset
|
71 'XX..': ('', ()), |
00ada2e29798
Somewhat better (but still hideous) image variant support.
Jeremy Thurgood <firxen@gmail.com>
parents:
135
diff
changeset
|
72 '..XX': ('', ()), |
00ada2e29798
Somewhat better (but still hideous) image variant support.
Jeremy Thurgood <firxen@gmail.com>
parents:
135
diff
changeset
|
73 |
00ada2e29798
Somewhat better (but still hideous) image variant support.
Jeremy Thurgood <firxen@gmail.com>
parents:
135
diff
changeset
|
74 'X.X.': ('-2a', (mutators.R180,)), |
144
b292370c4548
Rearranged the orientation stuff. :-)
Jeremy Thurgood <firxen@gmail.com>
parents:
136
diff
changeset
|
75 'X..X': ('-2a', (mutators.R90,)), |
b292370c4548
Rearranged the orientation stuff. :-)
Jeremy Thurgood <firxen@gmail.com>
parents:
136
diff
changeset
|
76 '.XX.': ('-2a', (mutators.R270,)), |
136
00ada2e29798
Somewhat better (but still hideous) image variant support.
Jeremy Thurgood <firxen@gmail.com>
parents:
135
diff
changeset
|
77 '.X.X': ('-2a', (mutators.NULL,)), |
00ada2e29798
Somewhat better (but still hideous) image variant support.
Jeremy Thurgood <firxen@gmail.com>
parents:
135
diff
changeset
|
78 |
00ada2e29798
Somewhat better (but still hideous) image variant support.
Jeremy Thurgood <firxen@gmail.com>
parents:
135
diff
changeset
|
79 '.XXX': ('', ()), |
00ada2e29798
Somewhat better (but still hideous) image variant support.
Jeremy Thurgood <firxen@gmail.com>
parents:
135
diff
changeset
|
80 'X.XX': ('', ()), |
00ada2e29798
Somewhat better (but still hideous) image variant support.
Jeremy Thurgood <firxen@gmail.com>
parents:
135
diff
changeset
|
81 'XX.X': ('', ()), |
00ada2e29798
Somewhat better (but still hideous) image variant support.
Jeremy Thurgood <firxen@gmail.com>
parents:
135
diff
changeset
|
82 'XXX.': ('', ()), |
00ada2e29798
Somewhat better (but still hideous) image variant support.
Jeremy Thurgood <firxen@gmail.com>
parents:
135
diff
changeset
|
83 |
00ada2e29798
Somewhat better (but still hideous) image variant support.
Jeremy Thurgood <firxen@gmail.com>
parents:
135
diff
changeset
|
84 'XXXX': ('', ()), |
00ada2e29798
Somewhat better (but still hideous) image variant support.
Jeremy Thurgood <firxen@gmail.com>
parents:
135
diff
changeset
|
85 } |
00ada2e29798
Somewhat better (but still hideous) image variant support.
Jeremy Thurgood <firxen@gmail.com>
parents:
135
diff
changeset
|
86 |
00ada2e29798
Somewhat better (but still hideous) image variant support.
Jeremy Thurgood <firxen@gmail.com>
parents:
135
diff
changeset
|
87 |
50 | 88 class BaseSprite(Sprite): |
89 tileset = 'common' | |
182
0a955d2536f0
Painted Jezebel! (Assuming you name your snake Jezebel.)
Jeremy Thurgood <firxen@gmail.com>
parents:
181
diff
changeset
|
90 variants_class = None |
136
00ada2e29798
Somewhat better (but still hideous) image variant support.
Jeremy Thurgood <firxen@gmail.com>
parents:
135
diff
changeset
|
91 variants = None |
180
d9ee0e50a78f
Teach editor about THING_MAP
Neil Muller <drnlmuller@gmail.com>
parents:
168
diff
changeset
|
92 name = None |
181
061d711ba570
Interact with the world.
Jeremy Thurgood <firxen@gmail.com>
parents:
180
diff
changeset
|
93 alive = True |
130
9bef49d6db86
Ugly yucky half-done tile orientation magic.
Jeremy Thurgood <firxen@gmail.com>
parents:
121
diff
changeset
|
94 |
168
0fffb97db193
Add name field to sprites for editor
Neil Muller <drnlmuller@gmail.com>
parents:
164
diff
changeset
|
95 def __init__(self, tileset=None, image_name=None, name=None, |
0fffb97db193
Add name field to sprites for editor
Neil Muller <drnlmuller@gmail.com>
parents:
164
diff
changeset
|
96 mutators=()): |
98 | 97 super(BaseSprite, self).__init__() |
168
0fffb97db193
Add name field to sprites for editor
Neil Muller <drnlmuller@gmail.com>
parents:
164
diff
changeset
|
98 if name is not None: |
0fffb97db193
Add name field to sprites for editor
Neil Muller <drnlmuller@gmail.com>
parents:
164
diff
changeset
|
99 self.name = name |
98 | 100 if tileset is not None: |
101 self.tileset = tileset | |
102 if image_name is not None: | |
144
b292370c4548
Rearranged the orientation stuff. :-)
Jeremy Thurgood <firxen@gmail.com>
parents:
136
diff
changeset
|
103 self.image_name = image_name |
130
9bef49d6db86
Ugly yucky half-done tile orientation magic.
Jeremy Thurgood <firxen@gmail.com>
parents:
121
diff
changeset
|
104 self.image = self.load_image(image_name, mutators=mutators) |
56 | 105 |
98 | 106 def load_image(self, image_name, mutators=()): |
212
e768056b0588
Refactor tile image loading stuff. More magic is good, right?
Jeremy Thurgood <firxen@gmail.com>
parents:
207
diff
changeset
|
107 return load_tile_image(image_name, self.tileset, mutators) |
50 | 108 |
109 def set_tile_pos(self, tile_pos): | |
81
c8d6ca296884
Better level entry points.
Jeremy Thurgood <firxen@gmail.com>
parents:
71
diff
changeset
|
110 self.tile_pos = tile_pos |
199
986e72d2cb4d
Rejiggered entrances and shifted directions around.
Jeremy Thurgood <firxen@gmail.com>
parents:
183
diff
changeset
|
111 self.rect = Rect(tile_sizify(tile_pos), TILE_SIZE) |
50 | 112 |
136
00ada2e29798
Somewhat better (but still hideous) image variant support.
Jeremy Thurgood <firxen@gmail.com>
parents:
135
diff
changeset
|
113 def get_variant(self, top, bottom, left, right): |
144
b292370c4548
Rearranged the orientation stuff. :-)
Jeremy Thurgood <firxen@gmail.com>
parents:
136
diff
changeset
|
114 if self.variants is None: |
136
00ada2e29798
Somewhat better (but still hideous) image variant support.
Jeremy Thurgood <firxen@gmail.com>
parents:
135
diff
changeset
|
115 self.variants = self.variants_class(self.image_name) |
00ada2e29798
Somewhat better (but still hideous) image variant support.
Jeremy Thurgood <firxen@gmail.com>
parents:
135
diff
changeset
|
116 return self.variants(top, bottom, left, right) |
130
9bef49d6db86
Ugly yucky half-done tile orientation magic.
Jeremy Thurgood <firxen@gmail.com>
parents:
121
diff
changeset
|
117 |
144
b292370c4548
Rearranged the orientation stuff. :-)
Jeremy Thurgood <firxen@gmail.com>
parents:
136
diff
changeset
|
118 def use_variant(self, *args): |
182
0a955d2536f0
Painted Jezebel! (Assuming you name your snake Jezebel.)
Jeremy Thurgood <firxen@gmail.com>
parents:
181
diff
changeset
|
119 if self.variants_class is not None: |
0a955d2536f0
Painted Jezebel! (Assuming you name your snake Jezebel.)
Jeremy Thurgood <firxen@gmail.com>
parents:
181
diff
changeset
|
120 self.image = self.load_image(*self.get_variant(*args)) |
144
b292370c4548
Rearranged the orientation stuff. :-)
Jeremy Thurgood <firxen@gmail.com>
parents:
136
diff
changeset
|
121 |
163
41e8d4ce3af2
TileSprites are less magic.
Jeremy Thurgood <firxen@gmail.com>
parents:
162
diff
changeset
|
122 |
41e8d4ce3af2
TileSprites are less magic.
Jeremy Thurgood <firxen@gmail.com>
parents:
162
diff
changeset
|
123 class TileSprite(BaseSprite): |
41e8d4ce3af2
TileSprites are less magic.
Jeremy Thurgood <firxen@gmail.com>
parents:
162
diff
changeset
|
124 def __init__(self, tile_char, solid=False, **kw): |
41e8d4ce3af2
TileSprites are less magic.
Jeremy Thurgood <firxen@gmail.com>
parents:
162
diff
changeset
|
125 super(TileSprite, self).__init__(**kw) |
41e8d4ce3af2
TileSprites are less magic.
Jeremy Thurgood <firxen@gmail.com>
parents:
162
diff
changeset
|
126 self.tile_char = tile_char |
41e8d4ce3af2
TileSprites are less magic.
Jeremy Thurgood <firxen@gmail.com>
parents:
162
diff
changeset
|
127 self.solid = solid |
41e8d4ce3af2
TileSprites are less magic.
Jeremy Thurgood <firxen@gmail.com>
parents:
162
diff
changeset
|
128 |
182
0a955d2536f0
Painted Jezebel! (Assuming you name your snake Jezebel.)
Jeremy Thurgood <firxen@gmail.com>
parents:
181
diff
changeset
|
129 def get_solid(self, snake, segment): |
144
b292370c4548
Rearranged the orientation stuff. :-)
Jeremy Thurgood <firxen@gmail.com>
parents:
136
diff
changeset
|
130 return self.solid |
b292370c4548
Rearranged the orientation stuff. :-)
Jeremy Thurgood <firxen@gmail.com>
parents:
136
diff
changeset
|
131 |
182
0a955d2536f0
Painted Jezebel! (Assuming you name your snake Jezebel.)
Jeremy Thurgood <firxen@gmail.com>
parents:
181
diff
changeset
|
132 def interact(self, snake, segment): |
0a955d2536f0
Painted Jezebel! (Assuming you name your snake Jezebel.)
Jeremy Thurgood <firxen@gmail.com>
parents:
181
diff
changeset
|
133 if self.get_solid(snake, segment): |
181
061d711ba570
Interact with the world.
Jeremy Thurgood <firxen@gmail.com>
parents:
180
diff
changeset
|
134 snake.crash() |
061d711ba570
Interact with the world.
Jeremy Thurgood <firxen@gmail.com>
parents:
180
diff
changeset
|
135 |
50 | 136 |
71
58557a89ec86
Some tile improvements and stuff.
Jeremy Thurgood <firxen@gmail.com>
parents:
57
diff
changeset
|
137 class SingleImageTileSprite(TileSprite): |
121
f670ef33ae2e
Comment SingleImageTileSprite convention
Neil Muller <drnlmuller@gmail.com>
parents:
105
diff
changeset
|
138 image_name = None # subclasses will override this |
f670ef33ae2e
Comment SingleImageTileSprite convention
Neil Muller <drnlmuller@gmail.com>
parents:
105
diff
changeset
|
139 |
104 | 140 def __init__(self, **kw): |
141 kw.setdefault('image_name', self.image_name) | |
168
0fffb97db193
Add name field to sprites for editor
Neil Muller <drnlmuller@gmail.com>
parents:
164
diff
changeset
|
142 kw.setdefault('name', self.name) |
104 | 143 super(SingleImageTileSprite, self).__init__(**kw) |
71
58557a89ec86
Some tile improvements and stuff.
Jeremy Thurgood <firxen@gmail.com>
parents:
57
diff
changeset
|
144 |
58557a89ec86
Some tile improvements and stuff.
Jeremy Thurgood <firxen@gmail.com>
parents:
57
diff
changeset
|
145 |
56 | 146 class DoorSprite(TileSprite): |
168
0fffb97db193
Add name field to sprites for editor
Neil Muller <drnlmuller@gmail.com>
parents:
164
diff
changeset
|
147 name = 'door' |
0fffb97db193
Add name field to sprites for editor
Neil Muller <drnlmuller@gmail.com>
parents:
164
diff
changeset
|
148 |
104 | 149 def __init__(self, colour, **kw): |
57 | 150 self.colour = colour |
104 | 151 super(DoorSprite, self).__init__(**kw) |
182
0a955d2536f0
Painted Jezebel! (Assuming you name your snake Jezebel.)
Jeremy Thurgood <firxen@gmail.com>
parents:
181
diff
changeset
|
152 self.image = self.load_image( |
0a955d2536f0
Painted Jezebel! (Assuming you name your snake Jezebel.)
Jeremy Thurgood <firxen@gmail.com>
parents:
181
diff
changeset
|
153 *colour_with_fittings("door", self.tileset, colour)) |
71
58557a89ec86
Some tile improvements and stuff.
Jeremy Thurgood <firxen@gmail.com>
parents:
57
diff
changeset
|
154 |
182
0a955d2536f0
Painted Jezebel! (Assuming you name your snake Jezebel.)
Jeremy Thurgood <firxen@gmail.com>
parents:
181
diff
changeset
|
155 def get_solid(self, snake, segment): |
205
2b5956bedf64
Set colour of default new segment to colour of snake head.
Simon Cross <hodgestar@gmail.com>
parents:
203
diff
changeset
|
156 return COLOURS[self.colour] != segment.colour |
144
b292370c4548
Rearranged the orientation stuff. :-)
Jeremy Thurgood <firxen@gmail.com>
parents:
136
diff
changeset
|
157 |
71
58557a89ec86
Some tile improvements and stuff.
Jeremy Thurgood <firxen@gmail.com>
parents:
57
diff
changeset
|
158 |
207
dd2c735fdaf4
Arrow tiles are walls from the pointy end.
Jeremy Thurgood <firxen@gmail.com>
parents:
205
diff
changeset
|
159 class DirectionalTile(SingleImageTileSprite): |
199
986e72d2cb4d
Rejiggered entrances and shifted directions around.
Jeremy Thurgood <firxen@gmail.com>
parents:
183
diff
changeset
|
160 def set_direction(self, direction): |
81
c8d6ca296884
Better level entry points.
Jeremy Thurgood <firxen@gmail.com>
parents:
71
diff
changeset
|
161 self.direction = direction |
199
986e72d2cb4d
Rejiggered entrances and shifted directions around.
Jeremy Thurgood <firxen@gmail.com>
parents:
183
diff
changeset
|
162 mutator = { |
986e72d2cb4d
Rejiggered entrances and shifted directions around.
Jeremy Thurgood <firxen@gmail.com>
parents:
183
diff
changeset
|
163 UP: mutators.UP, |
986e72d2cb4d
Rejiggered entrances and shifted directions around.
Jeremy Thurgood <firxen@gmail.com>
parents:
183
diff
changeset
|
164 DOWN: mutators.DOWN, |
986e72d2cb4d
Rejiggered entrances and shifted directions around.
Jeremy Thurgood <firxen@gmail.com>
parents:
183
diff
changeset
|
165 LEFT: mutators.LEFT, |
986e72d2cb4d
Rejiggered entrances and shifted directions around.
Jeremy Thurgood <firxen@gmail.com>
parents:
183
diff
changeset
|
166 RIGHT: mutators.RIGHT, |
986e72d2cb4d
Rejiggered entrances and shifted directions around.
Jeremy Thurgood <firxen@gmail.com>
parents:
183
diff
changeset
|
167 }[direction] |
986e72d2cb4d
Rejiggered entrances and shifted directions around.
Jeremy Thurgood <firxen@gmail.com>
parents:
183
diff
changeset
|
168 self.image = self.load_image(self.image_name, (mutator,)) |
81
c8d6ca296884
Better level entry points.
Jeremy Thurgood <firxen@gmail.com>
parents:
71
diff
changeset
|
169 |
207
dd2c735fdaf4
Arrow tiles are walls from the pointy end.
Jeremy Thurgood <firxen@gmail.com>
parents:
205
diff
changeset
|
170 def get_solid(self, snake, segment): |
dd2c735fdaf4
Arrow tiles are walls from the pointy end.
Jeremy Thurgood <firxen@gmail.com>
parents:
205
diff
changeset
|
171 dx, dy = self.direction |
dd2c735fdaf4
Arrow tiles are walls from the pointy end.
Jeremy Thurgood <firxen@gmail.com>
parents:
205
diff
changeset
|
172 sx, sy = segment.orientation |
dd2c735fdaf4
Arrow tiles are walls from the pointy end.
Jeremy Thurgood <firxen@gmail.com>
parents:
205
diff
changeset
|
173 if not (dx + sx or dy + sy): |
dd2c735fdaf4
Arrow tiles are walls from the pointy end.
Jeremy Thurgood <firxen@gmail.com>
parents:
205
diff
changeset
|
174 print "Wrong direction, buster." |
dd2c735fdaf4
Arrow tiles are walls from the pointy end.
Jeremy Thurgood <firxen@gmail.com>
parents:
205
diff
changeset
|
175 return True |
dd2c735fdaf4
Arrow tiles are walls from the pointy end.
Jeremy Thurgood <firxen@gmail.com>
parents:
205
diff
changeset
|
176 return False |
dd2c735fdaf4
Arrow tiles are walls from the pointy end.
Jeremy Thurgood <firxen@gmail.com>
parents:
205
diff
changeset
|
177 |
dd2c735fdaf4
Arrow tiles are walls from the pointy end.
Jeremy Thurgood <firxen@gmail.com>
parents:
205
diff
changeset
|
178 |
dd2c735fdaf4
Arrow tiles are walls from the pointy end.
Jeremy Thurgood <firxen@gmail.com>
parents:
205
diff
changeset
|
179 class EntrySprite(DirectionalTile): |
dd2c735fdaf4
Arrow tiles are walls from the pointy end.
Jeremy Thurgood <firxen@gmail.com>
parents:
205
diff
changeset
|
180 image_name = 'arrow-r' |
dd2c735fdaf4
Arrow tiles are walls from the pointy end.
Jeremy Thurgood <firxen@gmail.com>
parents:
205
diff
changeset
|
181 name = 'entrance' |
dd2c735fdaf4
Arrow tiles are walls from the pointy end.
Jeremy Thurgood <firxen@gmail.com>
parents:
205
diff
changeset
|
182 |
71
58557a89ec86
Some tile improvements and stuff.
Jeremy Thurgood <firxen@gmail.com>
parents:
57
diff
changeset
|
183 |
58557a89ec86
Some tile improvements and stuff.
Jeremy Thurgood <firxen@gmail.com>
parents:
57
diff
changeset
|
184 class ExitSprite(SingleImageTileSprite): |
164
a904c1c55f92
replaced entrance/exit with arrow; no rotation yet
Adrianna Pińska <adrianna.pinska@gmail.com>
parents:
163
diff
changeset
|
185 image_name = 'arrow-r' |
168
0fffb97db193
Add name field to sprites for editor
Neil Muller <drnlmuller@gmail.com>
parents:
164
diff
changeset
|
186 name = 'exit' |
71
58557a89ec86
Some tile improvements and stuff.
Jeremy Thurgood <firxen@gmail.com>
parents:
57
diff
changeset
|
187 |
58557a89ec86
Some tile improvements and stuff.
Jeremy Thurgood <firxen@gmail.com>
parents:
57
diff
changeset
|
188 |
58557a89ec86
Some tile improvements and stuff.
Jeremy Thurgood <firxen@gmail.com>
parents:
57
diff
changeset
|
189 class PuddleSprite(SingleImageTileSprite): |
58557a89ec86
Some tile improvements and stuff.
Jeremy Thurgood <firxen@gmail.com>
parents:
57
diff
changeset
|
190 image_name = 'puddle' |
168
0fffb97db193
Add name field to sprites for editor
Neil Muller <drnlmuller@gmail.com>
parents:
164
diff
changeset
|
191 name = 'puddle' |
136
00ada2e29798
Somewhat better (but still hideous) image variant support.
Jeremy Thurgood <firxen@gmail.com>
parents:
135
diff
changeset
|
192 variants_class = SolidSpriteImageVariants |
130
9bef49d6db86
Ugly yucky half-done tile orientation magic.
Jeremy Thurgood <firxen@gmail.com>
parents:
121
diff
changeset
|
193 |
9bef49d6db86
Ugly yucky half-done tile orientation magic.
Jeremy Thurgood <firxen@gmail.com>
parents:
121
diff
changeset
|
194 def __init__(self, variant=(0, 0, 0, 0), **kw): |
9bef49d6db86
Ugly yucky half-done tile orientation magic.
Jeremy Thurgood <firxen@gmail.com>
parents:
121
diff
changeset
|
195 super(PuddleSprite, self).__init__(**kw) |
136
00ada2e29798
Somewhat better (but still hideous) image variant support.
Jeremy Thurgood <firxen@gmail.com>
parents:
135
diff
changeset
|
196 self.image = self.load_image(*self.get_variant(*variant)) |
162
7fbbe27120a9
Rodents! Amphibians! Import juggling!
Jeremy Thurgood <firxen@gmail.com>
parents:
144
diff
changeset
|
197 |
182
0a955d2536f0
Painted Jezebel! (Assuming you name your snake Jezebel.)
Jeremy Thurgood <firxen@gmail.com>
parents:
181
diff
changeset
|
198 def get_solid(self, snake, segment): |
181
061d711ba570
Interact with the world.
Jeremy Thurgood <firxen@gmail.com>
parents:
180
diff
changeset
|
199 if snake.can_swim(): |
061d711ba570
Interact with the world.
Jeremy Thurgood <firxen@gmail.com>
parents:
180
diff
changeset
|
200 return False |
061d711ba570
Interact with the world.
Jeremy Thurgood <firxen@gmail.com>
parents:
180
diff
changeset
|
201 print "Drownded. :-(" |
061d711ba570
Interact with the world.
Jeremy Thurgood <firxen@gmail.com>
parents:
180
diff
changeset
|
202 return True |
061d711ba570
Interact with the world.
Jeremy Thurgood <firxen@gmail.com>
parents:
180
diff
changeset
|
203 |
183 | 204 def interact(self, snake, segment): |
205 segment.set_colour(segment.GREEN) | |
206 super(PuddleSprite, self).interact(snake, segment) | |
207 | |
162
7fbbe27120a9
Rodents! Amphibians! Import juggling!
Jeremy Thurgood <firxen@gmail.com>
parents:
144
diff
changeset
|
208 |
7fbbe27120a9
Rodents! Amphibians! Import juggling!
Jeremy Thurgood <firxen@gmail.com>
parents:
144
diff
changeset
|
209 class EdibleTile(SingleImageTileSprite): |
182
0a955d2536f0
Painted Jezebel! (Assuming you name your snake Jezebel.)
Jeremy Thurgood <firxen@gmail.com>
parents:
181
diff
changeset
|
210 def interact(self, snake, segment): |
0a955d2536f0
Painted Jezebel! (Assuming you name your snake Jezebel.)
Jeremy Thurgood <firxen@gmail.com>
parents:
181
diff
changeset
|
211 if not segment.is_head: |
0a955d2536f0
Painted Jezebel! (Assuming you name your snake Jezebel.)
Jeremy Thurgood <firxen@gmail.com>
parents:
181
diff
changeset
|
212 return |
0a955d2536f0
Painted Jezebel! (Assuming you name your snake Jezebel.)
Jeremy Thurgood <firxen@gmail.com>
parents:
181
diff
changeset
|
213 self.eat(snake) |
181
061d711ba570
Interact with the world.
Jeremy Thurgood <firxen@gmail.com>
parents:
180
diff
changeset
|
214 self.alive = False |
061d711ba570
Interact with the world.
Jeremy Thurgood <firxen@gmail.com>
parents:
180
diff
changeset
|
215 self.kill() |
162
7fbbe27120a9
Rodents! Amphibians! Import juggling!
Jeremy Thurgood <firxen@gmail.com>
parents:
144
diff
changeset
|
216 |
182
0a955d2536f0
Painted Jezebel! (Assuming you name your snake Jezebel.)
Jeremy Thurgood <firxen@gmail.com>
parents:
181
diff
changeset
|
217 def eat(self, snake): |
0a955d2536f0
Painted Jezebel! (Assuming you name your snake Jezebel.)
Jeremy Thurgood <firxen@gmail.com>
parents:
181
diff
changeset
|
218 print "I'm delicious!" |
0a955d2536f0
Painted Jezebel! (Assuming you name your snake Jezebel.)
Jeremy Thurgood <firxen@gmail.com>
parents:
181
diff
changeset
|
219 |
162
7fbbe27120a9
Rodents! Amphibians! Import juggling!
Jeremy Thurgood <firxen@gmail.com>
parents:
144
diff
changeset
|
220 |
7fbbe27120a9
Rodents! Amphibians! Import juggling!
Jeremy Thurgood <firxen@gmail.com>
parents:
144
diff
changeset
|
221 class BigMouse(EdibleTile): |
7fbbe27120a9
Rodents! Amphibians! Import juggling!
Jeremy Thurgood <firxen@gmail.com>
parents:
144
diff
changeset
|
222 image_name = "rat-big" |
7fbbe27120a9
Rodents! Amphibians! Import juggling!
Jeremy Thurgood <firxen@gmail.com>
parents:
144
diff
changeset
|
223 |
182
0a955d2536f0
Painted Jezebel! (Assuming you name your snake Jezebel.)
Jeremy Thurgood <firxen@gmail.com>
parents:
181
diff
changeset
|
224 def eat(self, snake): |
203
8009742103e7
Add a segment when driving over the big rat.
Simon Cross <hodgestar@gmail.com>
parents:
202
diff
changeset
|
225 snake.add_segment() |
162
7fbbe27120a9
Rodents! Amphibians! Import juggling!
Jeremy Thurgood <firxen@gmail.com>
parents:
144
diff
changeset
|
226 |
7fbbe27120a9
Rodents! Amphibians! Import juggling!
Jeremy Thurgood <firxen@gmail.com>
parents:
144
diff
changeset
|
227 |
7fbbe27120a9
Rodents! Amphibians! Import juggling!
Jeremy Thurgood <firxen@gmail.com>
parents:
144
diff
changeset
|
228 class SmallMouse(EdibleTile): |
7fbbe27120a9
Rodents! Amphibians! Import juggling!
Jeremy Thurgood <firxen@gmail.com>
parents:
144
diff
changeset
|
229 image_name = "rat-small" |
7fbbe27120a9
Rodents! Amphibians! Import juggling!
Jeremy Thurgood <firxen@gmail.com>
parents:
144
diff
changeset
|
230 |
182
0a955d2536f0
Painted Jezebel! (Assuming you name your snake Jezebel.)
Jeremy Thurgood <firxen@gmail.com>
parents:
181
diff
changeset
|
231 def eat(self, snake): |
202
498c1d659a94
Remove a segment when driving over the small rat.
Simon Cross <hodgestar@gmail.com>
parents:
200
diff
changeset
|
232 snake.remove_segment() |
162
7fbbe27120a9
Rodents! Amphibians! Import juggling!
Jeremy Thurgood <firxen@gmail.com>
parents:
144
diff
changeset
|
233 |
7fbbe27120a9
Rodents! Amphibians! Import juggling!
Jeremy Thurgood <firxen@gmail.com>
parents:
144
diff
changeset
|
234 |
7fbbe27120a9
Rodents! Amphibians! Import juggling!
Jeremy Thurgood <firxen@gmail.com>
parents:
144
diff
changeset
|
235 class Frog(EdibleTile): |
7fbbe27120a9
Rodents! Amphibians! Import juggling!
Jeremy Thurgood <firxen@gmail.com>
parents:
144
diff
changeset
|
236 image_name = "frog" |
7fbbe27120a9
Rodents! Amphibians! Import juggling!
Jeremy Thurgood <firxen@gmail.com>
parents:
144
diff
changeset
|
237 |
182
0a955d2536f0
Painted Jezebel! (Assuming you name your snake Jezebel.)
Jeremy Thurgood <firxen@gmail.com>
parents:
181
diff
changeset
|
238 def eat(self, snake): |
162
7fbbe27120a9
Rodents! Amphibians! Import juggling!
Jeremy Thurgood <firxen@gmail.com>
parents:
144
diff
changeset
|
239 print "Swimmery!" |
181
061d711ba570
Interact with the world.
Jeremy Thurgood <firxen@gmail.com>
parents:
180
diff
changeset
|
240 snake.mutate('amphibious') |
182
0a955d2536f0
Painted Jezebel! (Assuming you name your snake Jezebel.)
Jeremy Thurgood <firxen@gmail.com>
parents:
181
diff
changeset
|
241 |
0a955d2536f0
Painted Jezebel! (Assuming you name your snake Jezebel.)
Jeremy Thurgood <firxen@gmail.com>
parents:
181
diff
changeset
|
242 |
0a955d2536f0
Painted Jezebel! (Assuming you name your snake Jezebel.)
Jeremy Thurgood <firxen@gmail.com>
parents:
181
diff
changeset
|
243 class Painter(TileSprite): |
0a955d2536f0
Painted Jezebel! (Assuming you name your snake Jezebel.)
Jeremy Thurgood <firxen@gmail.com>
parents:
181
diff
changeset
|
244 def __init__(self, colour, **kw): |
0a955d2536f0
Painted Jezebel! (Assuming you name your snake Jezebel.)
Jeremy Thurgood <firxen@gmail.com>
parents:
181
diff
changeset
|
245 super(Painter, self).__init__(**kw) |
0a955d2536f0
Painted Jezebel! (Assuming you name your snake Jezebel.)
Jeremy Thurgood <firxen@gmail.com>
parents:
181
diff
changeset
|
246 self.colour = colour |
0a955d2536f0
Painted Jezebel! (Assuming you name your snake Jezebel.)
Jeremy Thurgood <firxen@gmail.com>
parents:
181
diff
changeset
|
247 self.image = self.load_image( |
0a955d2536f0
Painted Jezebel! (Assuming you name your snake Jezebel.)
Jeremy Thurgood <firxen@gmail.com>
parents:
181
diff
changeset
|
248 *colour_with_fittings("spray", self.tileset, colour)) |
0a955d2536f0
Painted Jezebel! (Assuming you name your snake Jezebel.)
Jeremy Thurgood <firxen@gmail.com>
parents:
181
diff
changeset
|
249 |
0a955d2536f0
Painted Jezebel! (Assuming you name your snake Jezebel.)
Jeremy Thurgood <firxen@gmail.com>
parents:
181
diff
changeset
|
250 def interact(self, snake, segment): |
0a955d2536f0
Painted Jezebel! (Assuming you name your snake Jezebel.)
Jeremy Thurgood <firxen@gmail.com>
parents:
181
diff
changeset
|
251 segment.set_colour(COLOURS[self.colour]) |