Mercurial > nagslang
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() |