Mercurial > mamba
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 |
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 | 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): |
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 |