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