Mercurial > touhou
comparison pytouhou/game/sprite.py @ 439:723a3e67a223
Make pytouhou.game.sprite an extension type.
author | Emmanuel Gil Peyrot <linkmauve@linkmauve.fr> |
---|---|
date | Sat, 10 Aug 2013 20:48:17 +0200 |
parents | d4874ebaa06e |
children |
comparison
equal
deleted
inserted
replaced
438:43a8fed9a8d8 | 439:723a3e67a223 |
---|---|
10 ## but WITHOUT ANY WARRANTY; without even the implied warranty of | 10 ## but WITHOUT ANY WARRANTY; without even the implied warranty of |
11 ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | 11 ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
12 ## GNU General Public License for more details. | 12 ## GNU General Public License for more details. |
13 ## | 13 ## |
14 | 14 |
15 | |
16 from pytouhou.utils.interpolator import Interpolator | |
17 | |
18 | |
19 class Sprite(object): | 15 class Sprite(object): |
20 __slots__ = ('anm', 'removed', 'changed', 'width_override', 'height_override', | |
21 'angle', 'force_rotation', 'scale_interpolator', | |
22 'fade_interpolator', 'offset_interpolator', | |
23 'rotation_interpolator', 'color_interpolator', | |
24 'automatic_orientation', 'blendfunc', 'texcoords', | |
25 'dest_offset', 'allow_dest_offset', 'texoffsets', 'mirrored', | |
26 'rescale', 'scale_speed', 'rotations_3d', | |
27 'rotations_speed_3d', 'corner_relative_placement', 'frame', | |
28 'color', 'alpha', 'visible', '_rendering_data') | |
29 def __init__(self, width_override=0, height_override=0): | 16 def __init__(self, width_override=0, height_override=0): |
30 self.anm = None | 17 self.anm = None |
31 self.removed = False | 18 self.removed = False |
32 self.changed = True | 19 self.changed = True |
33 self.visible = True | 20 self.visible = True |
62 self.alpha = 255 | 49 self.alpha = 255 |
63 | 50 |
64 self._rendering_data = None | 51 self._rendering_data = None |
65 | 52 |
66 | 53 |
67 def fade(self, duration, alpha, formula): | 54 def fade(self, duration, alpha, formula=None): |
68 self.fade_interpolator = Interpolator((self.alpha,), self.frame, | 55 self.fade_interpolator = Interpolator((self.alpha,), self.frame, |
69 (alpha,), self.frame + duration, | 56 (alpha,), self.frame + duration, |
70 formula) | 57 formula) |
71 | 58 |
72 | 59 |
73 def scale_in(self, duration, sx, sy, formula): | 60 def scale_in(self, duration, sx, sy, formula=None): |
74 self.scale_interpolator = Interpolator(self.rescale, self.frame, | 61 self.scale_interpolator = Interpolator(self.rescale, self.frame, |
75 (sx, sy), self.frame + duration, | 62 (sx, sy), self.frame + duration, |
76 formula) | 63 formula) |
77 | 64 |
78 | 65 |
79 def move_in(self, duration, x, y, z, formula): | 66 def move_in(self, duration, x, y, z, formula=None): |
80 self.offset_interpolator = Interpolator(self.dest_offset, self.frame, | 67 self.offset_interpolator = Interpolator(self.dest_offset, self.frame, |
81 (x, y, z), self.frame + duration, | 68 (x, y, z), self.frame + duration, |
82 formula) | 69 formula) |
83 | 70 |
84 | 71 |
85 def rotate_in(self, duration, rx, ry, rz, formula): | 72 def rotate_in(self, duration, rx, ry, rz, formula=None): |
86 self.rotation_interpolator = Interpolator(self.rotations_3d, self.frame, | 73 self.rotation_interpolator = Interpolator(self.rotations_3d, self.frame, |
87 (rx, ry, rz), self.frame + duration, | 74 (rx, ry, rz), self.frame + duration, |
88 formula) | 75 formula) |
89 | 76 |
90 | 77 |
91 def change_color_in(self, duration, r, g, b, formula): | 78 def change_color_in(self, duration, r, g, b, formula=None): |
92 self.color_interpolator = Interpolator(self.color, self.frame, | 79 self.color_interpolator = Interpolator(self.color, self.frame, |
93 (r, g, b), self.frame + duration, | 80 (r, g, b), self.frame + duration, |
94 formula) | 81 formula) |
95 | 82 |
96 | 83 |
97 def update_orientation(self, angle_base=0., force_rotation=False): | 84 def update_orientation(self, angle_base=0., force_rotation=False): |
98 if (self.angle != angle_base or self.force_rotation != force_rotation): | 85 if (self.angle != angle_base or self.force_rotation != force_rotation): |
99 self.angle = angle_base | 86 self.angle = angle_base |
100 self.force_rotation = force_rotation | 87 self.force_rotation = force_rotation |
101 self.changed = True | 88 self.changed = True |
89 | |
90 | |
91 def copy(self): | |
92 sprite = Sprite(self.width_override, self.height_override) | |
93 | |
94 sprite.blendfunc = self.blendfunc | |
95 sprite.frame = self.frame | |
96 sprite.angle = self.angle | |
97 | |
98 sprite.removed = self.removed | |
99 sprite.changed = self.changed | |
100 sprite.visible = self.visible | |
101 sprite.force_rotation = self.force_rotation | |
102 sprite.automatic_orientation = self.automatic_orientation | |
103 sprite.allow_dest_offset = self.allow_dest_offset | |
104 sprite.mirrored = self.mirrored | |
105 sprite.corner_relative_placement = self.corner_relative_placement | |
106 | |
107 sprite.scale_interpolator = self.scale_interpolator | |
108 sprite.fade_interpolator = self.fade_interpolator | |
109 sprite.offset_interpolator = self.offset_interpolator | |
110 sprite.rotation_interpolator = self.rotation_interpolator | |
111 sprite.color_interpolator = self.color_interpolator | |
112 | |
113 sprite.texcoords = self.texcoords | |
114 sprite.dest_offset = self.dest_offset | |
115 sprite.texoffsets = self.texoffsets | |
116 sprite.rescale = self.rescale | |
117 sprite.scale_speed = self.scale_speed | |
118 sprite.rotations_3d = self.rotations_3d | |
119 sprite.rotations_speed_3d = self.rotations_speed_3d | |
120 sprite.color = self.color | |
121 | |
122 sprite.alpha = self.alpha | |
123 sprite.anm = self.anm | |
124 sprite._rendering_data = self._rendering_data | |
125 | |
126 return sprite | |
102 | 127 |
103 | 128 |
104 def update(self): | 129 def update(self): |
105 self.frame += 1 | 130 self.frame += 1 |
106 | 131 |
120 self.rescale = rx + rsx, ry + rsy | 145 self.rescale = rx + rsx, ry + rsy |
121 self.changed = True | 146 self.changed = True |
122 | 147 |
123 if self.fade_interpolator: | 148 if self.fade_interpolator: |
124 self.fade_interpolator.update(self.frame) | 149 self.fade_interpolator.update(self.frame) |
125 self.alpha = int(self.fade_interpolator.values[0]) | 150 self.alpha = self.fade_interpolator.values[0] |
126 self.changed = True | 151 self.changed = True |
127 | 152 |
128 if self.scale_interpolator: | 153 if self.scale_interpolator: |
129 self.scale_interpolator.update(self.frame) | 154 self.scale_interpolator.update(self.frame) |
130 self.rescale = self.scale_interpolator.values | 155 self.rescale = self.scale_interpolator.values |