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
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
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
80c97a6e53d2 Fix mutator bugs.
Simon Cross <hodgestar@gmail.com>
parents: 67
diff changeset
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
80c97a6e53d2 Fix mutator bugs.
Simon Cross <hodgestar@gmail.com>
parents: 67
diff changeset
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
Adrianna Pińska <adrianna.pinska@gmail.com>
parents: 130
diff changeset
24 def __repr__(self):
Adrianna Pińska <adrianna.pinska@gmail.com>
parents: 130
diff changeset
25 return "<%s args=%r>" % (self.__class__.__name__, self._args)
Adrianna Pińska <adrianna.pinska@gmail.com>
parents: 130
diff changeset
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
Adrianna Pińska <adrianna.pinska@gmail.com>
parents: 130
diff changeset
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
Simon Cross <hodgestar@gmail.com>
parents: 85
diff changeset
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)