comparison nagslang/game_object.py @ 143:deac6a4008e7

Hook up protagnist animations
author Neil Muller <drnlmuller@gmail.com>
date Mon, 02 Sep 2013 22:35:41 +0200
parents f36a7075d9a0
children 0c49627920eb
comparison
equal deleted inserted replaced
142:cd77974b2a87 143:deac6a4008e7
148 pos = self.game_object.get_render_position(surface) 148 pos = self.game_object.get_render_position(surface)
149 angle = self.game_object.get_render_angle() 149 angle = self.game_object.get_render_angle()
150 if options.debug: 150 if options.debug:
151 self._render_shape(surface, pos, angle) 151 self._render_shape(surface, pos, angle)
152 152
153 def animate(self):
154 # Used by time animatations to advance the clock
155 pass
156
153 157
154 def image_pos(image, pos): 158 def image_pos(image, pos):
155 return (pos[0] - image.get_width() / 2, 159 return (pos[0] - image.get_width() / 2,
156 pos[1] - image.get_height() / 2) 160 pos[1] - image.get_height() / 2)
157 161
181 def render(self, surface): 185 def render(self, surface):
182 pos = self.game_object.get_render_position(surface) 186 pos = self.game_object.get_render_position(surface)
183 image = self.get_image(self.game_object.get_render_angle()) 187 image = self.get_image(self.game_object.get_render_angle())
184 surface.blit(image, image_pos(image, pos)) 188 surface.blit(image, image_pos(image, pos))
185 super(FacingImageRenderer, self).render(surface) 189 super(FacingImageRenderer, self).render(surface)
190
191
192 class AnimatedFacingImageRenderer(FacingImageRenderer):
193 def __init__(self, left_images, right_images):
194 self._images = {
195 'left': left_images,
196 'right': right_images,
197 }
198 self._frame = 0
199 self._moving = False
200
201 def get_image(self, angle):
202 if abs(angle) < math.pi / 2:
203 face = 'right'
204 else:
205 face = 'left'
206 if self._frame >= len(self._images[face]):
207 self._frame = 0
208 return self._images[face][self._frame]
209
210 def render(self, surface):
211 pos = self.game_object.get_render_position(surface)
212 image = self.get_image(self.game_object.get_render_angle())
213 surface.blit(image, image_pos(image, pos))
214 super(FacingImageRenderer, self).render(surface)
215
216 def animate(self):
217 if self._moving:
218 self._frame += 1
219 else:
220 self._frame = 0
221
222 def start(self):
223 self._moving = True
224
225 def stop(self):
226 self._moving = False
227
228
229 class TimedAnimatedRenderer(ImageRenderer):
230
231 def __init__(self, images):
232 self._images = images
233 self._frame = 0
234 self._image = None
235
236 def _get_image(self):
237 if self._frame > len(self._imaages):
238 self._frame = 0
239 return self._images[self._frame]
240
241 def render(self, surface):
242 self._image = self._get_image()
243 super(TimedAnimatedRenderer, self).render(surface)
244
245 def animate(self):
246 self._frame += 1
186 247
187 248
188 class ShapeRenderer(Renderer): 249 class ShapeRenderer(Renderer):
189 def render(self, surface): 250 def render(self, surface):
190 self._render_shape(surface) 251 self._render_shape(surface)
251 def get_render_angle(self): 312 def get_render_angle(self):
252 return self.physicser.get_angle() 313 return self.physicser.get_angle()
253 314
254 def render(self, surface): 315 def render(self, surface):
255 return self.renderer.render(surface) 316 return self.renderer.render(surface)
317
318 def animate(self):
319 self.renderer.animate()
256 320
257 321
258 class FloorSwitch(GameObject): 322 class FloorSwitch(GameObject):
259 def __init__(self, space, position): 323 def __init__(self, space, position):
260 body = pymunk.Body() 324 body = pymunk.Body()