comparison nagslang/game_object.py @ 160:0c9b0449485e

Consolidate image rendering stuff a bit.
author Jeremy Thurgood <firxen@gmail.com>
date Tue, 03 Sep 2013 00:50:11 +0200
parents f80323140317
children 507df17cfbaf
comparison
equal deleted inserted replaced
159:f80323140317 160:0c9b0449485e
163 163
164 class ImageRenderer(Renderer): 164 class ImageRenderer(Renderer):
165 def __init__(self, image): 165 def __init__(self, image):
166 self._image = image 166 self._image = image
167 167
168 def render(self, surface): 168 def get_image(self):
169 return self._image
170
171 def rotate_image(self, image):
172 angle = self.game_object.get_render_angle() * 180 / math.pi
173 return pygame.transform.rotate(image, angle)
174
175 def render_image(self, surface, image):
176 image = self.rotate_image(image)
169 pos = self.game_object.get_render_position(surface) 177 pos = self.game_object.get_render_position(surface)
170 angle = self.game_object.get_render_angle() * 180 / math.pi
171 image = pygame.transform.rotate(self._image, angle)
172 surface.blit(image, image_pos(image, pos)) 178 surface.blit(image, image_pos(image, pos))
179
180 def render(self, surface):
181 self.render_image(surface, self.get_image())
173 super(ImageRenderer, self).render(surface) 182 super(ImageRenderer, self).render(surface)
174 183
175 184
176 class FacingImageRenderer(Renderer): 185 class FacingImageRenderer(ImageRenderer):
177 def __init__(self, left_image, right_image): 186 def __init__(self, left_image, right_image):
178 self._images = { 187 self._images = {
179 'left': left_image, 188 'left': left_image,
180 'right': right_image, 189 'right': right_image,
181 } 190 }
185 if abs(angle) < math.pi / 2: 194 if abs(angle) < math.pi / 2:
186 self._face = 'right' 195 self._face = 'right'
187 elif abs(angle) > math.pi / 2: 196 elif abs(angle) > math.pi / 2:
188 self._face = 'left' 197 self._face = 'left'
189 198
190 def get_image(self, angle): 199 def rotate_image(self, image):
200 # Facing images don't get rotated.
201 return image
202
203 def get_facing_image(self):
204 return self._images[self._face]
205
206 def get_image(self):
207 angle = self.game_object.get_render_angle()
191 self._update_facing(angle) 208 self._update_facing(angle)
192 return self._images[self._face] 209 return self.get_facing_image()
193
194 def render(self, surface):
195 pos = self.game_object.get_render_position(surface)
196 image = self.get_image(self.game_object.get_render_angle())
197 surface.blit(image, image_pos(image, pos))
198 super(FacingImageRenderer, self).render(surface)
199 210
200 211
201 class AnimatedFacingImageRenderer(FacingImageRenderer): 212 class AnimatedFacingImageRenderer(FacingImageRenderer):
202 def __init__(self, left_images, right_images): 213 def __init__(self, left_images, right_images):
203 self._images = { 214 self._images = {
206 } 217 }
207 self._frame = 0 218 self._frame = 0
208 self._moving = False 219 self._moving = False
209 self._face = 'left' 220 self._face = 'left'
210 221
211 def get_image(self, angle): 222 def get_facing_image(self):
212 self._update_facing(angle)
213 if self._frame >= len(self._images[self._face]): 223 if self._frame >= len(self._images[self._face]):
214 self._frame = 0 224 self._frame = 0
215 return self._images[self._face][self._frame] 225 return self._images[self._face][self._frame]
216
217 def render(self, surface):
218 pos = self.game_object.get_render_position(surface)
219 image = self.get_image(self.game_object.get_render_angle())
220 surface.blit(image, image_pos(image, pos))
221 super(FacingImageRenderer, self).render(surface)
222 226
223 def animate(self): 227 def animate(self):
224 if self._moving: 228 if self._moving:
225 self._frame += 1 229 self._frame += 1
226 else: 230 else:
238 def __init__(self, images): 242 def __init__(self, images):
239 self._images = images 243 self._images = images
240 self._frame = 0 244 self._frame = 0
241 self._image = None 245 self._image = None
242 246
243 def _get_image(self): 247 def get_image(self):
244 if self._frame > len(self._imaages): 248 if self._frame > len(self._imaages):
245 self._frame = 0 249 self._frame = 0
246 return self._images[self._frame] 250 return self._images[self._frame]
247
248 def render(self, surface):
249 self._image = self._get_image()
250 super(TimedAnimatedRenderer, self).render(surface)
251 251
252 def animate(self): 252 def animate(self):
253 self._frame += 1 253 self._frame += 1
254 254
255 255