Mercurial > mamba
annotate mamba/mutators.py @ 182:0a955d2536f0
Painted Jezebel! (Assuming you name your snake Jezebel.)
author | Jeremy Thurgood <firxen@gmail.com> |
---|---|
date | Wed, 14 Sep 2011 16:27:11 +0200 |
parents | e0573297b17c |
children | d488731886dc |
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 |
177
e0573297b17c
Snake that moves (my god that was an epic struggle).
Simon Cross <hodgestar@gmail.com>
parents:
136
diff
changeset
|
4 from pygame.locals import BLEND_MULT |
85
5dd9d91aa94f
Overlay mutators (untested).
Simon Cross <hodgestar@gmail.com>
parents:
69
diff
changeset
|
5 |
5dd9d91aa94f
Overlay mutators (untested).
Simon Cross <hodgestar@gmail.com>
parents:
69
diff
changeset
|
6 from mamba.data import load_image |
65
ca2206efeeb1
Add mutators concept to image loader.
Simon Cross <hodgestar@gmail.com>
parents:
diff
changeset
|
7 |
67
1b086362d7d4
First mutators (untested).
Simon Cross <hodgestar@gmail.com>
parents:
65
diff
changeset
|
8 |
1b086362d7d4
First mutators (untested).
Simon Cross <hodgestar@gmail.com>
parents:
65
diff
changeset
|
9 class Mutator(object): |
1b086362d7d4
First mutators (untested).
Simon Cross <hodgestar@gmail.com>
parents:
65
diff
changeset
|
10 |
1b086362d7d4
First mutators (untested).
Simon Cross <hodgestar@gmail.com>
parents:
65
diff
changeset
|
11 def __init__(self, func, *args): |
1b086362d7d4
First mutators (untested).
Simon Cross <hodgestar@gmail.com>
parents:
65
diff
changeset
|
12 self._func = func |
69 | 13 self._args = args |
67
1b086362d7d4
First mutators (untested).
Simon Cross <hodgestar@gmail.com>
parents:
65
diff
changeset
|
14 |
1b086362d7d4
First mutators (untested).
Simon Cross <hodgestar@gmail.com>
parents:
65
diff
changeset
|
15 def __call__(self, image): |
69 | 16 return self._func(image, *self._args) |
67
1b086362d7d4
First mutators (untested).
Simon Cross <hodgestar@gmail.com>
parents:
65
diff
changeset
|
17 |
1b086362d7d4
First mutators (untested).
Simon Cross <hodgestar@gmail.com>
parents:
65
diff
changeset
|
18 def __hash__(self): |
1b086362d7d4
First mutators (untested).
Simon Cross <hodgestar@gmail.com>
parents:
65
diff
changeset
|
19 return hash((id(self._func), self._args)) |
1b086362d7d4
First mutators (untested).
Simon Cross <hodgestar@gmail.com>
parents:
65
diff
changeset
|
20 |
1b086362d7d4
First mutators (untested).
Simon Cross <hodgestar@gmail.com>
parents:
65
diff
changeset
|
21 def __eq__(self, other): |
182
0a955d2536f0
Painted Jezebel! (Assuming you name your snake Jezebel.)
Jeremy Thurgood <firxen@gmail.com>
parents:
177
diff
changeset
|
22 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
|
23 |
131 | 24 def __repr__(self): |
25 return "<%s args=%r>" % (self.__class__.__name__, self._args) | |
26 | |
85
5dd9d91aa94f
Overlay mutators (untested).
Simon Cross <hodgestar@gmail.com>
parents:
69
diff
changeset
|
27 |
5dd9d91aa94f
Overlay mutators (untested).
Simon Cross <hodgestar@gmail.com>
parents:
69
diff
changeset
|
28 # mutator that does nothing |
67
1b086362d7d4
First mutators (untested).
Simon Cross <hodgestar@gmail.com>
parents:
65
diff
changeset
|
29 NULL = Mutator(lambda x: x) |
1b086362d7d4
First mutators (untested).
Simon Cross <hodgestar@gmail.com>
parents:
65
diff
changeset
|
30 |
136
00ada2e29798
Somewhat better (but still hideous) image variant support.
Jeremy Thurgood <firxen@gmail.com>
parents:
131
diff
changeset
|
31 # base mutators |
00ada2e29798
Somewhat better (but still hideous) image variant support.
Jeremy Thurgood <firxen@gmail.com>
parents:
131
diff
changeset
|
32 R90 = Mutator(rotate, 90) |
00ada2e29798
Somewhat better (but still hideous) image variant support.
Jeremy Thurgood <firxen@gmail.com>
parents:
131
diff
changeset
|
33 R180 = Mutator(rotate, 180) |
00ada2e29798
Somewhat better (but still hideous) image variant support.
Jeremy Thurgood <firxen@gmail.com>
parents:
131
diff
changeset
|
34 R270 = Mutator(rotate, -90) |
67
1b086362d7d4
First mutators (untested).
Simon Cross <hodgestar@gmail.com>
parents:
65
diff
changeset
|
35 |
136
00ada2e29798
Somewhat better (but still hideous) image variant support.
Jeremy Thurgood <firxen@gmail.com>
parents:
131
diff
changeset
|
36 # sprites mutator aliases |
00ada2e29798
Somewhat better (but still hideous) image variant support.
Jeremy Thurgood <firxen@gmail.com>
parents:
131
diff
changeset
|
37 RIGHT = NULL |
177
e0573297b17c
Snake that moves (my god that was an epic struggle).
Simon Cross <hodgestar@gmail.com>
parents:
136
diff
changeset
|
38 UP = R90 |
136
00ada2e29798
Somewhat better (but still hideous) image variant support.
Jeremy Thurgood <firxen@gmail.com>
parents:
131
diff
changeset
|
39 LEFT = R180 |
177
e0573297b17c
Snake that moves (my god that was an epic struggle).
Simon Cross <hodgestar@gmail.com>
parents:
136
diff
changeset
|
40 DOWN = R270 |
85
5dd9d91aa94f
Overlay mutators (untested).
Simon Cross <hodgestar@gmail.com>
parents:
69
diff
changeset
|
41 |
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 # overlays |
5dd9d91aa94f
Overlay mutators (untested).
Simon Cross <hodgestar@gmail.com>
parents:
69
diff
changeset
|
44 class Overlay(Mutator): |
5dd9d91aa94f
Overlay mutators (untested).
Simon Cross <hodgestar@gmail.com>
parents:
69
diff
changeset
|
45 """Overlay another image on top of the given one.""" |
5dd9d91aa94f
Overlay mutators (untested).
Simon Cross <hodgestar@gmail.com>
parents:
69
diff
changeset
|
46 |
131 | 47 def __init__(self, filename, blend=0): |
125
625b22f92efa
the snake is green
Adrianna Pińska <adrianna.pinska@gmail.com>
parents:
89
diff
changeset
|
48 super(Overlay, self).__init__(self.overlay, filename, blend) |
85
5dd9d91aa94f
Overlay mutators (untested).
Simon Cross <hodgestar@gmail.com>
parents:
69
diff
changeset
|
49 |
5dd9d91aa94f
Overlay mutators (untested).
Simon Cross <hodgestar@gmail.com>
parents:
69
diff
changeset
|
50 def overlay(self, image, filename, blend): |
5dd9d91aa94f
Overlay mutators (untested).
Simon Cross <hodgestar@gmail.com>
parents:
69
diff
changeset
|
51 image = image.copy() |
5dd9d91aa94f
Overlay mutators (untested).
Simon Cross <hodgestar@gmail.com>
parents:
69
diff
changeset
|
52 overlay = load_image(filename) |
125
625b22f92efa
the snake is green
Adrianna Pińska <adrianna.pinska@gmail.com>
parents:
89
diff
changeset
|
53 image.blit(overlay, (0, 0), None, blend) |
85
5dd9d91aa94f
Overlay mutators (untested).
Simon Cross <hodgestar@gmail.com>
parents:
69
diff
changeset
|
54 return image |
5dd9d91aa94f
Overlay mutators (untested).
Simon Cross <hodgestar@gmail.com>
parents:
69
diff
changeset
|
55 |
5dd9d91aa94f
Overlay mutators (untested).
Simon Cross <hodgestar@gmail.com>
parents:
69
diff
changeset
|
56 |
89 | 57 # colours |
125
625b22f92efa
the snake is green
Adrianna Pińska <adrianna.pinska@gmail.com>
parents:
89
diff
changeset
|
58 BLUE = Overlay("tiles/common/blue.png", BLEND_MULT) |
625b22f92efa
the snake is green
Adrianna Pińska <adrianna.pinska@gmail.com>
parents:
89
diff
changeset
|
59 RED = Overlay("tiles/common/red.png", BLEND_MULT) |
625b22f92efa
the snake is green
Adrianna Pińska <adrianna.pinska@gmail.com>
parents:
89
diff
changeset
|
60 YELLOW = Overlay("tiles/common/yellow.png", BLEND_MULT) |