annotate mamba/mutators.py @ 85:5dd9d91aa94f

Overlay mutators (untested).
author Simon Cross <hodgestar@gmail.com>
date Sun, 11 Sep 2011 18:57:11 +0200
parents 80c97a6e53d2
children 9c43a23aa204
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
85
5dd9d91aa94f Overlay mutators (untested).
Simon Cross <hodgestar@gmail.com>
parents: 69
diff changeset
4 from pygame.locals import BLEND_ADD, BLEND_MULT
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):
1b086362d7d4 First mutators (untested).
Simon Cross <hodgestar@gmail.com>
parents: 65
diff changeset
22 return (self._func is other.func) and self._args == other._args
1b086362d7d4 First mutators (untested).
Simon Cross <hodgestar@gmail.com>
parents: 65
diff changeset
23
85
5dd9d91aa94f Overlay mutators (untested).
Simon Cross <hodgestar@gmail.com>
parents: 69
diff changeset
24
5dd9d91aa94f Overlay mutators (untested).
Simon Cross <hodgestar@gmail.com>
parents: 69
diff changeset
25 # mutator that does nothing
67
1b086362d7d4 First mutators (untested).
Simon Cross <hodgestar@gmail.com>
parents: 65
diff changeset
26 NULL = Mutator(lambda x: x)
1b086362d7d4 First mutators (untested).
Simon Cross <hodgestar@gmail.com>
parents: 65
diff changeset
27
1b086362d7d4 First mutators (untested).
Simon Cross <hodgestar@gmail.com>
parents: 65
diff changeset
28 # sprites mutators
1b086362d7d4 First mutators (untested).
Simon Cross <hodgestar@gmail.com>
parents: 65
diff changeset
29 RIGHT = NULL
1b086362d7d4 First mutators (untested).
Simon Cross <hodgestar@gmail.com>
parents: 65
diff changeset
30 DOWN = Mutator(rotate, 90)
1b086362d7d4 First mutators (untested).
Simon Cross <hodgestar@gmail.com>
parents: 65
diff changeset
31 LEFT = Mutator(rotate, 180)
1b086362d7d4 First mutators (untested).
Simon Cross <hodgestar@gmail.com>
parents: 65
diff changeset
32 UP = Mutator(rotate, -90)
1b086362d7d4 First mutators (untested).
Simon Cross <hodgestar@gmail.com>
parents: 65
diff changeset
33
1b086362d7d4 First mutators (untested).
Simon Cross <hodgestar@gmail.com>
parents: 65
diff changeset
34 # tile mutators
1b086362d7d4 First mutators (untested).
Simon Cross <hodgestar@gmail.com>
parents: 65
diff changeset
35 TL = NULL
1b086362d7d4 First mutators (untested).
Simon Cross <hodgestar@gmail.com>
parents: 65
diff changeset
36 BL = Mutator(rotate, -90)
1b086362d7d4 First mutators (untested).
Simon Cross <hodgestar@gmail.com>
parents: 65
diff changeset
37 TR = Mutator(rotate, 90)
1b086362d7d4 First mutators (untested).
Simon Cross <hodgestar@gmail.com>
parents: 65
diff changeset
38 BR = Mutator(rotate, 180)
85
5dd9d91aa94f Overlay mutators (untested).
Simon Cross <hodgestar@gmail.com>
parents: 69
diff changeset
39
5dd9d91aa94f Overlay mutators (untested).
Simon Cross <hodgestar@gmail.com>
parents: 69
diff changeset
40
5dd9d91aa94f Overlay mutators (untested).
Simon Cross <hodgestar@gmail.com>
parents: 69
diff changeset
41 # overlays
5dd9d91aa94f Overlay mutators (untested).
Simon Cross <hodgestar@gmail.com>
parents: 69
diff changeset
42 class Overlay(Mutator):
5dd9d91aa94f Overlay mutators (untested).
Simon Cross <hodgestar@gmail.com>
parents: 69
diff changeset
43 """Overlay another image on top of the given one."""
5dd9d91aa94f Overlay mutators (untested).
Simon Cross <hodgestar@gmail.com>
parents: 69
diff changeset
44
5dd9d91aa94f Overlay mutators (untested).
Simon Cross <hodgestar@gmail.com>
parents: 69
diff changeset
45 BLEND = BLEND_ADD
5dd9d91aa94f Overlay mutators (untested).
Simon Cross <hodgestar@gmail.com>
parents: 69
diff changeset
46
5dd9d91aa94f Overlay mutators (untested).
Simon Cross <hodgestar@gmail.com>
parents: 69
diff changeset
47 def __init__(self, filename, blend=None):
5dd9d91aa94f Overlay mutators (untested).
Simon Cross <hodgestar@gmail.com>
parents: 69
diff changeset
48 if blend is None:
5dd9d91aa94f Overlay mutators (untested).
Simon Cross <hodgestar@gmail.com>
parents: 69
diff changeset
49 blend = self.BLEND
5dd9d91aa94f Overlay mutators (untested).
Simon Cross <hodgestar@gmail.com>
parents: 69
diff changeset
50 super(Overlay, self).__init__(self.overlay, blend, filename)
5dd9d91aa94f Overlay mutators (untested).
Simon Cross <hodgestar@gmail.com>
parents: 69
diff changeset
51
5dd9d91aa94f Overlay mutators (untested).
Simon Cross <hodgestar@gmail.com>
parents: 69
diff changeset
52 def overlay(self, image, filename, blend):
5dd9d91aa94f Overlay mutators (untested).
Simon Cross <hodgestar@gmail.com>
parents: 69
diff changeset
53 image = image.copy()
5dd9d91aa94f Overlay mutators (untested).
Simon Cross <hodgestar@gmail.com>
parents: 69
diff changeset
54 overlay = load_image(filename)
5dd9d91aa94f Overlay mutators (untested).
Simon Cross <hodgestar@gmail.com>
parents: 69
diff changeset
55 overlay.blit(image, None, blend)
5dd9d91aa94f Overlay mutators (untested).
Simon Cross <hodgestar@gmail.com>
parents: 69
diff changeset
56 return image
5dd9d91aa94f Overlay mutators (untested).
Simon Cross <hodgestar@gmail.com>
parents: 69
diff changeset
57
5dd9d91aa94f Overlay mutators (untested).
Simon Cross <hodgestar@gmail.com>
parents: 69
diff changeset
58
5dd9d91aa94f Overlay mutators (untested).
Simon Cross <hodgestar@gmail.com>
parents: 69
diff changeset
59 class Multiply(Overlay):
5dd9d91aa94f Overlay mutators (untested).
Simon Cross <hodgestar@gmail.com>
parents: 69
diff changeset
60 BLEND = BLEND_MULT