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