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