Mercurial > mamba
annotate mamba/mutators.py @ 267:1e8dca95c48a
Hook up hot-keys in editor for jerith
author | Neil Muller <drnlmuller@gmail.com> |
---|---|
date | Thu, 15 Sep 2011 12:54:16 +0200 |
parents | 0dfa3f52742b |
children |
rev | line source |
---|---|
65
ca2206efeeb1
Add mutators concept to image loader.
Simon Cross <hodgestar@gmail.com>
parents:
diff
changeset
|
1 """Mutations to apply to images when they're loaded.""" |
ca2206efeeb1
Add mutators concept to image loader.
Simon Cross <hodgestar@gmail.com>
parents:
diff
changeset
|
2 |
67
1b086362d7d4
First mutators (untested).
Simon Cross <hodgestar@gmail.com>
parents:
65
diff
changeset
|
3 from pygame.transform import rotate |
224
0dfa3f52742b
Support alpha mutating
Stefano Rivera <stefano@rivera.za.net>
parents:
212
diff
changeset
|
4 from pygame.locals import BLEND_RGBA_MULT, SRCALPHA |
195
d488731886dc
Wean colour overlays off image colour patches.
Simon Cross <hodgestar@gmail.com>
parents:
182
diff
changeset
|
5 from pygame.surface import Surface |
85
5dd9d91aa94f
Overlay mutators (untested).
Simon Cross <hodgestar@gmail.com>
parents:
69
diff
changeset
|
6 |
212
e768056b0588
Refactor tile image loading stuff. More magic is good, right?
Jeremy Thurgood <firxen@gmail.com>
parents:
195
diff
changeset
|
7 from mamba.data import load_tile_image |
65
ca2206efeeb1
Add mutators concept to image loader.
Simon Cross <hodgestar@gmail.com>
parents:
diff
changeset
|
8 |
67
1b086362d7d4
First mutators (untested).
Simon Cross <hodgestar@gmail.com>
parents:
65
diff
changeset
|
9 |
1b086362d7d4
First mutators (untested).
Simon Cross <hodgestar@gmail.com>
parents:
65
diff
changeset
|
10 class Mutator(object): |
1b086362d7d4
First mutators (untested).
Simon Cross <hodgestar@gmail.com>
parents:
65
diff
changeset
|
11 |
1b086362d7d4
First mutators (untested).
Simon Cross <hodgestar@gmail.com>
parents:
65
diff
changeset
|
12 def __init__(self, func, *args): |
1b086362d7d4
First mutators (untested).
Simon Cross <hodgestar@gmail.com>
parents:
65
diff
changeset
|
13 self._func = func |
69 | 14 self._args = args |
67
1b086362d7d4
First mutators (untested).
Simon Cross <hodgestar@gmail.com>
parents:
65
diff
changeset
|
15 |
1b086362d7d4
First mutators (untested).
Simon Cross <hodgestar@gmail.com>
parents:
65
diff
changeset
|
16 def __call__(self, image): |
69 | 17 return self._func(image, *self._args) |
67
1b086362d7d4
First mutators (untested).
Simon Cross <hodgestar@gmail.com>
parents:
65
diff
changeset
|
18 |
1b086362d7d4
First mutators (untested).
Simon Cross <hodgestar@gmail.com>
parents:
65
diff
changeset
|
19 def __hash__(self): |
1b086362d7d4
First mutators (untested).
Simon Cross <hodgestar@gmail.com>
parents:
65
diff
changeset
|
20 return hash((id(self._func), self._args)) |
1b086362d7d4
First mutators (untested).
Simon Cross <hodgestar@gmail.com>
parents:
65
diff
changeset
|
21 |
1b086362d7d4
First mutators (untested).
Simon Cross <hodgestar@gmail.com>
parents:
65
diff
changeset
|
22 def __eq__(self, other): |
182
0a955d2536f0
Painted Jezebel! (Assuming you name your snake Jezebel.)
Jeremy Thurgood <firxen@gmail.com>
parents:
177
diff
changeset
|
23 return (self._func is other._func) and self._args == other._args |
67
1b086362d7d4
First mutators (untested).
Simon Cross <hodgestar@gmail.com>
parents:
65
diff
changeset
|
24 |
131 | 25 def __repr__(self): |
26 return "<%s args=%r>" % (self.__class__.__name__, self._args) | |
27 | |
85
5dd9d91aa94f
Overlay mutators (untested).
Simon Cross <hodgestar@gmail.com>
parents:
69
diff
changeset
|
28 |
5dd9d91aa94f
Overlay mutators (untested).
Simon Cross <hodgestar@gmail.com>
parents:
69
diff
changeset
|
29 # mutator that does nothing |
67
1b086362d7d4
First mutators (untested).
Simon Cross <hodgestar@gmail.com>
parents:
65
diff
changeset
|
30 NULL = Mutator(lambda x: x) |
1b086362d7d4
First mutators (untested).
Simon Cross <hodgestar@gmail.com>
parents:
65
diff
changeset
|
31 |
136
00ada2e29798
Somewhat better (but still hideous) image variant support.
Jeremy Thurgood <firxen@gmail.com>
parents:
131
diff
changeset
|
32 # base mutators |
00ada2e29798
Somewhat better (but still hideous) image variant support.
Jeremy Thurgood <firxen@gmail.com>
parents:
131
diff
changeset
|
33 R90 = Mutator(rotate, 90) |
00ada2e29798
Somewhat better (but still hideous) image variant support.
Jeremy Thurgood <firxen@gmail.com>
parents:
131
diff
changeset
|
34 R180 = Mutator(rotate, 180) |
00ada2e29798
Somewhat better (but still hideous) image variant support.
Jeremy Thurgood <firxen@gmail.com>
parents:
131
diff
changeset
|
35 R270 = Mutator(rotate, -90) |
67
1b086362d7d4
First mutators (untested).
Simon Cross <hodgestar@gmail.com>
parents:
65
diff
changeset
|
36 |
136
00ada2e29798
Somewhat better (but still hideous) image variant support.
Jeremy Thurgood <firxen@gmail.com>
parents:
131
diff
changeset
|
37 # sprites mutator aliases |
00ada2e29798
Somewhat better (but still hideous) image variant support.
Jeremy Thurgood <firxen@gmail.com>
parents:
131
diff
changeset
|
38 RIGHT = NULL |
177
e0573297b17c
Snake that moves (my god that was an epic struggle).
Simon Cross <hodgestar@gmail.com>
parents:
136
diff
changeset
|
39 UP = R90 |
136
00ada2e29798
Somewhat better (but still hideous) image variant support.
Jeremy Thurgood <firxen@gmail.com>
parents:
131
diff
changeset
|
40 LEFT = R180 |
177
e0573297b17c
Snake that moves (my god that was an epic struggle).
Simon Cross <hodgestar@gmail.com>
parents:
136
diff
changeset
|
41 DOWN = R270 |
85
5dd9d91aa94f
Overlay mutators (untested).
Simon Cross <hodgestar@gmail.com>
parents:
69
diff
changeset
|
42 |
5dd9d91aa94f
Overlay mutators (untested).
Simon Cross <hodgestar@gmail.com>
parents:
69
diff
changeset
|
43 |
5dd9d91aa94f
Overlay mutators (untested).
Simon Cross <hodgestar@gmail.com>
parents:
69
diff
changeset
|
44 # overlays |
5dd9d91aa94f
Overlay mutators (untested).
Simon Cross <hodgestar@gmail.com>
parents:
69
diff
changeset
|
45 class Overlay(Mutator): |
5dd9d91aa94f
Overlay mutators (untested).
Simon Cross <hodgestar@gmail.com>
parents:
69
diff
changeset
|
46 """Overlay another image on top of the given one.""" |
5dd9d91aa94f
Overlay mutators (untested).
Simon Cross <hodgestar@gmail.com>
parents:
69
diff
changeset
|
47 |
212
e768056b0588
Refactor tile image loading stuff. More magic is good, right?
Jeremy Thurgood <firxen@gmail.com>
parents:
195
diff
changeset
|
48 def __init__(self, image_name, tileset="common", blend=0): |
e768056b0588
Refactor tile image loading stuff. More magic is good, right?
Jeremy Thurgood <firxen@gmail.com>
parents:
195
diff
changeset
|
49 super(Overlay, self).__init__(self.overlay, image_name, tileset, blend) |
85
5dd9d91aa94f
Overlay mutators (untested).
Simon Cross <hodgestar@gmail.com>
parents:
69
diff
changeset
|
50 |
212
e768056b0588
Refactor tile image loading stuff. More magic is good, right?
Jeremy Thurgood <firxen@gmail.com>
parents:
195
diff
changeset
|
51 def overlay(self, image, image_name, tileset, blend): |
85
5dd9d91aa94f
Overlay mutators (untested).
Simon Cross <hodgestar@gmail.com>
parents:
69
diff
changeset
|
52 image = image.copy() |
212
e768056b0588
Refactor tile image loading stuff. More magic is good, right?
Jeremy Thurgood <firxen@gmail.com>
parents:
195
diff
changeset
|
53 overlay = load_tile_image(image_name, tileset) |
125
625b22f92efa
the snake is green
Adrianna Pińska <adrianna.pinska@gmail.com>
parents:
89
diff
changeset
|
54 image.blit(overlay, (0, 0), None, blend) |
85
5dd9d91aa94f
Overlay mutators (untested).
Simon Cross <hodgestar@gmail.com>
parents:
69
diff
changeset
|
55 return image |
5dd9d91aa94f
Overlay mutators (untested).
Simon Cross <hodgestar@gmail.com>
parents:
69
diff
changeset
|
56 |
5dd9d91aa94f
Overlay mutators (untested).
Simon Cross <hodgestar@gmail.com>
parents:
69
diff
changeset
|
57 |
195
d488731886dc
Wean colour overlays off image colour patches.
Simon Cross <hodgestar@gmail.com>
parents:
182
diff
changeset
|
58 # colour overlays |
d488731886dc
Wean colour overlays off image colour patches.
Simon Cross <hodgestar@gmail.com>
parents:
182
diff
changeset
|
59 class Colour(Mutator): |
d488731886dc
Wean colour overlays off image colour patches.
Simon Cross <hodgestar@gmail.com>
parents:
182
diff
changeset
|
60 """Overlay an image with a colour.""" |
d488731886dc
Wean colour overlays off image colour patches.
Simon Cross <hodgestar@gmail.com>
parents:
182
diff
changeset
|
61 |
224
0dfa3f52742b
Support alpha mutating
Stefano Rivera <stefano@rivera.za.net>
parents:
212
diff
changeset
|
62 def __init__(self, colour, blend=BLEND_RGBA_MULT): |
195
d488731886dc
Wean colour overlays off image colour patches.
Simon Cross <hodgestar@gmail.com>
parents:
182
diff
changeset
|
63 super(Colour, self).__init__(self.colour, colour, blend) |
d488731886dc
Wean colour overlays off image colour patches.
Simon Cross <hodgestar@gmail.com>
parents:
182
diff
changeset
|
64 |
d488731886dc
Wean colour overlays off image colour patches.
Simon Cross <hodgestar@gmail.com>
parents:
182
diff
changeset
|
65 def colour(self, image, colour, blend): |
d488731886dc
Wean colour overlays off image colour patches.
Simon Cross <hodgestar@gmail.com>
parents:
182
diff
changeset
|
66 image = image.copy() |
224
0dfa3f52742b
Support alpha mutating
Stefano Rivera <stefano@rivera.za.net>
parents:
212
diff
changeset
|
67 overlay = Surface(image.get_size(), SRCALPHA, image) |
195
d488731886dc
Wean colour overlays off image colour patches.
Simon Cross <hodgestar@gmail.com>
parents:
182
diff
changeset
|
68 overlay.fill(colour) |
d488731886dc
Wean colour overlays off image colour patches.
Simon Cross <hodgestar@gmail.com>
parents:
182
diff
changeset
|
69 image.blit(overlay, (0, 0), None, blend) |
d488731886dc
Wean colour overlays off image colour patches.
Simon Cross <hodgestar@gmail.com>
parents:
182
diff
changeset
|
70 return image |
d488731886dc
Wean colour overlays off image colour patches.
Simon Cross <hodgestar@gmail.com>
parents:
182
diff
changeset
|
71 |
d488731886dc
Wean colour overlays off image colour patches.
Simon Cross <hodgestar@gmail.com>
parents:
182
diff
changeset
|
72 |
89 | 73 # colours |
195
d488731886dc
Wean colour overlays off image colour patches.
Simon Cross <hodgestar@gmail.com>
parents:
182
diff
changeset
|
74 RED = Colour((0xff, 0, 0)) |
d488731886dc
Wean colour overlays off image colour patches.
Simon Cross <hodgestar@gmail.com>
parents:
182
diff
changeset
|
75 BLUE = Colour((0, 0, 255)) |
d488731886dc
Wean colour overlays off image colour patches.
Simon Cross <hodgestar@gmail.com>
parents:
182
diff
changeset
|
76 YELLOW = Colour((0xff, 0xff, 0)) |
d488731886dc
Wean colour overlays off image colour patches.
Simon Cross <hodgestar@gmail.com>
parents:
182
diff
changeset
|
77 SNAKE_GREEN = Colour((0x7c, 0xff, 0)) |