annotate nagslang/render.py @ 647:aeb366d97774

Show splash image on startup
author Stefano Rivera <stefano@rivera.za.net>
date Sun, 08 Sep 2013 02:02:09 +0200
parents 9ea26b835271
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
207
42e8993c31fd Break out Renderers
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
1 import math
397
a08965437df2 Fold long text messages somewhat
Neil Muller <drnlmuller@gmail.com>
parents: 396
diff changeset
2 import textwrap
207
42e8993c31fd Break out Renderers
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
3
42e8993c31fd Break out Renderers
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
4 import pygame
349
c4285f19894c Add a tiled renderer
Neil Muller <drnlmuller@gmail.com>
parents: 307
diff changeset
5 import pygame.locals as pgl
207
42e8993c31fd Break out Renderers
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
6 import pymunk
42e8993c31fd Break out Renderers
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
7
42e8993c31fd Break out Renderers
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
8 from nagslang.options import options
488
ae8eb7c0f7bb Better wall and bulkhead drawing.
Jeremy Thurgood <firxen@gmail.com>
parents: 474
diff changeset
9 from nagslang.utils import (
ae8eb7c0f7bb Better wall and bulkhead drawing.
Jeremy Thurgood <firxen@gmail.com>
parents: 474
diff changeset
10 tile_surface, vec_from_angle, points_to_pygame, extend_line)
397
a08965437df2 Fold long text messages somewhat
Neil Muller <drnlmuller@gmail.com>
parents: 396
diff changeset
11 from nagslang.widgets.text import LabelWidget, MultiLineWidget
207
42e8993c31fd Break out Renderers
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
12
42e8993c31fd Break out Renderers
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
13
42e8993c31fd Break out Renderers
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
14 class Renderer(object):
42e8993c31fd Break out Renderers
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
15 def set_game_object(self, game_object):
42e8993c31fd Break out Renderers
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
16 self.game_object = game_object
42e8993c31fd Break out Renderers
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
17
42e8993c31fd Break out Renderers
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
18 def _render_shape(self, surface):
42e8993c31fd Break out Renderers
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
19 shape = self.game_object.get_shape()
42e8993c31fd Break out Renderers
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
20 # Less general that pymunk.pygame_util.draw, but also a lot less noisy.
42e8993c31fd Break out Renderers
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
21 color = getattr(shape, 'color', pygame.color.THECOLORS['lightblue'])
42e8993c31fd Break out Renderers
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
22 # We only explicitly draw Circle and Poly shapes. Everything else we
42e8993c31fd Break out Renderers
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
23 # forward to pymunk.
42e8993c31fd Break out Renderers
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
24 if isinstance(shape, pymunk.Circle):
42e8993c31fd Break out Renderers
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
25 centre = pymunk.pygame_util.to_pygame(shape.body.position, surface)
42e8993c31fd Break out Renderers
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
26 radius = int(shape.radius)
42e8993c31fd Break out Renderers
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
27 pygame.draw.circle(surface, color, centre, radius, 2)
42e8993c31fd Break out Renderers
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
28 elif isinstance(shape, pymunk.Poly):
42e8993c31fd Break out Renderers
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
29 # polygon bounding box
42e8993c31fd Break out Renderers
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
30 points = [pymunk.pygame_util.to_pygame(p, surface)
42e8993c31fd Break out Renderers
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
31 for p in shape.get_vertices()]
42e8993c31fd Break out Renderers
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
32 pygame.draw.lines(surface, color, True, points, 2)
42e8993c31fd Break out Renderers
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
33 else:
42e8993c31fd Break out Renderers
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
34 pymunk.pygame_util.draw(surface, shape)
42e8993c31fd Break out Renderers
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
35
42e8993c31fd Break out Renderers
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
36 def render(self, surface):
454
803d53c86f7f Don't show debugging shapes by default in DEBUG mode
Stefano Rivera <stefano@rivera.za.net>
parents: 400
diff changeset
37 if options.shapes:
207
42e8993c31fd Break out Renderers
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
38 self._render_shape(surface)
42e8993c31fd Break out Renderers
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
39
307
c2bbb1e70d6f Rename animate to update and pass seconds, for future fun
Neil Muller <drnlmuller@gmail.com>
parents: 286
diff changeset
40 def update(self, seconds):
207
42e8993c31fd Break out Renderers
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
41 # Used by time animatations to advance the clock
42e8993c31fd Break out Renderers
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
42 pass
42e8993c31fd Break out Renderers
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
43
42e8993c31fd Break out Renderers
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
44
286
248b8fdb160c Collect gun (which currently looks like a bullet) to shoot.
Jeremy Thurgood <firxen@gmail.com>
parents: 230
diff changeset
45 class NullRenderer(Renderer):
248b8fdb160c Collect gun (which currently looks like a bullet) to shoot.
Jeremy Thurgood <firxen@gmail.com>
parents: 230
diff changeset
46 def render(self, surface):
248b8fdb160c Collect gun (which currently looks like a bullet) to shoot.
Jeremy Thurgood <firxen@gmail.com>
parents: 230
diff changeset
47 pass
248b8fdb160c Collect gun (which currently looks like a bullet) to shoot.
Jeremy Thurgood <firxen@gmail.com>
parents: 230
diff changeset
48
248b8fdb160c Collect gun (which currently looks like a bullet) to shoot.
Jeremy Thurgood <firxen@gmail.com>
parents: 230
diff changeset
49
609
9ea26b835271 KeyedHatch
Jeremy Thurgood <firxen@gmail.com>
parents: 558
diff changeset
50 class HatchRendererMixin(object):
558
4abf8cf717e9 Rename "bulkhead" to "hatch".
Jeremy Thurgood <firxen@gmail.com>
parents: 521
diff changeset
51 def draw_hatch_line(self, surface, a, b):
488
ae8eb7c0f7bb Better wall and bulkhead drawing.
Jeremy Thurgood <firxen@gmail.com>
parents: 474
diff changeset
52 ai, bi = extend_line(a, b, -2)
ae8eb7c0f7bb Better wall and bulkhead drawing.
Jeremy Thurgood <firxen@gmail.com>
parents: 474
diff changeset
53 a, b, ai, bi = points_to_pygame(surface, (a, b, ai, bi))
474
9775055ba2f0 Prettier bulkheads.
Jeremy Thurgood <firxen@gmail.com>
parents: 454
diff changeset
54 pygame.draw.line(
488
ae8eb7c0f7bb Better wall and bulkhead drawing.
Jeremy Thurgood <firxen@gmail.com>
parents: 474
diff changeset
55 surface, pygame.color.THECOLORS['black'], a, b, 7)
474
9775055ba2f0 Prettier bulkheads.
Jeremy Thurgood <firxen@gmail.com>
parents: 454
diff changeset
56 pygame.draw.line(
488
ae8eb7c0f7bb Better wall and bulkhead drawing.
Jeremy Thurgood <firxen@gmail.com>
parents: 474
diff changeset
57 surface, pygame.color.THECOLORS['lightblue'], ai, bi, 5)
474
9775055ba2f0 Prettier bulkheads.
Jeremy Thurgood <firxen@gmail.com>
parents: 454
diff changeset
58
609
9ea26b835271 KeyedHatch
Jeremy Thurgood <firxen@gmail.com>
parents: 558
diff changeset
59 def render_hatch(self, surface):
474
9775055ba2f0 Prettier bulkheads.
Jeremy Thurgood <firxen@gmail.com>
parents: 454
diff changeset
60 shape = self.game_object.get_shape()
609
9ea26b835271 KeyedHatch
Jeremy Thurgood <firxen@gmail.com>
parents: 558
diff changeset
61 a = shape.body.local_to_world(shape.a)
9ea26b835271 KeyedHatch
Jeremy Thurgood <firxen@gmail.com>
parents: 558
diff changeset
62 b = shape.body.local_to_world(shape.b)
474
9775055ba2f0 Prettier bulkheads.
Jeremy Thurgood <firxen@gmail.com>
parents: 454
diff changeset
63 if self.game_object.puzzler.get_state():
609
9ea26b835271 KeyedHatch
Jeremy Thurgood <firxen@gmail.com>
parents: 558
diff changeset
64 offset = vec_from_angle((b - a).angle, 10)
9ea26b835271 KeyedHatch
Jeremy Thurgood <firxen@gmail.com>
parents: 558
diff changeset
65 ai = a + offset
9ea26b835271 KeyedHatch
Jeremy Thurgood <firxen@gmail.com>
parents: 558
diff changeset
66 bi = b - offset
9ea26b835271 KeyedHatch
Jeremy Thurgood <firxen@gmail.com>
parents: 558
diff changeset
67 self.draw_hatch_line(surface, a, ai)
9ea26b835271 KeyedHatch
Jeremy Thurgood <firxen@gmail.com>
parents: 558
diff changeset
68 self.draw_hatch_line(surface, bi, b)
474
9775055ba2f0 Prettier bulkheads.
Jeremy Thurgood <firxen@gmail.com>
parents: 454
diff changeset
69 else:
609
9ea26b835271 KeyedHatch
Jeremy Thurgood <firxen@gmail.com>
parents: 558
diff changeset
70 mid = a + (b - a) / 2
9ea26b835271 KeyedHatch
Jeremy Thurgood <firxen@gmail.com>
parents: 558
diff changeset
71 self.draw_hatch_line(surface, a, mid)
9ea26b835271 KeyedHatch
Jeremy Thurgood <firxen@gmail.com>
parents: 558
diff changeset
72 self.draw_hatch_line(surface, mid, b)
9ea26b835271 KeyedHatch
Jeremy Thurgood <firxen@gmail.com>
parents: 558
diff changeset
73
9ea26b835271 KeyedHatch
Jeremy Thurgood <firxen@gmail.com>
parents: 558
diff changeset
74
9ea26b835271 KeyedHatch
Jeremy Thurgood <firxen@gmail.com>
parents: 558
diff changeset
75 class HatchRenderer(Renderer, HatchRendererMixin):
9ea26b835271 KeyedHatch
Jeremy Thurgood <firxen@gmail.com>
parents: 558
diff changeset
76 def render(self, surface):
9ea26b835271 KeyedHatch
Jeremy Thurgood <firxen@gmail.com>
parents: 558
diff changeset
77 self.render_hatch(surface)
474
9775055ba2f0 Prettier bulkheads.
Jeremy Thurgood <firxen@gmail.com>
parents: 454
diff changeset
78
9775055ba2f0 Prettier bulkheads.
Jeremy Thurgood <firxen@gmail.com>
parents: 454
diff changeset
79
207
42e8993c31fd Break out Renderers
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
80 def image_pos(image, pos):
42e8993c31fd Break out Renderers
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
81 return (pos[0] - image.get_width() / 2,
42e8993c31fd Break out Renderers
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
82 pos[1] - image.get_height() / 2)
42e8993c31fd Break out Renderers
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
83
42e8993c31fd Break out Renderers
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
84
42e8993c31fd Break out Renderers
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
85 class ImageRenderer(Renderer):
42e8993c31fd Break out Renderers
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
86 def __init__(self, image):
42e8993c31fd Break out Renderers
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
87 self._image = image
42e8993c31fd Break out Renderers
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
88
42e8993c31fd Break out Renderers
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
89 def get_image(self):
42e8993c31fd Break out Renderers
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
90 return self._image
42e8993c31fd Break out Renderers
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
91
42e8993c31fd Break out Renderers
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
92 def rotate_image(self, image):
42e8993c31fd Break out Renderers
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
93 angle = self.game_object.get_render_angle() * 180 / math.pi
42e8993c31fd Break out Renderers
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
94 return pygame.transform.rotate(image, angle)
42e8993c31fd Break out Renderers
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
95
42e8993c31fd Break out Renderers
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
96 def render_image(self, surface, image):
42e8993c31fd Break out Renderers
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
97 image = self.rotate_image(image)
42e8993c31fd Break out Renderers
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
98 pos = self.game_object.get_render_position(surface)
42e8993c31fd Break out Renderers
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
99 surface.blit(image, image_pos(image, pos))
42e8993c31fd Break out Renderers
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
100
42e8993c31fd Break out Renderers
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
101 def render(self, surface):
42e8993c31fd Break out Renderers
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
102 self.render_image(surface, self.get_image())
42e8993c31fd Break out Renderers
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
103 super(ImageRenderer, self).render(surface)
42e8993c31fd Break out Renderers
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
104
42e8993c31fd Break out Renderers
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
105
609
9ea26b835271 KeyedHatch
Jeremy Thurgood <firxen@gmail.com>
parents: 558
diff changeset
106 class KeyedHatchRenderer(ImageRenderer, HatchRendererMixin):
9ea26b835271 KeyedHatch
Jeremy Thurgood <firxen@gmail.com>
parents: 558
diff changeset
107 def render(self, surface):
9ea26b835271 KeyedHatch
Jeremy Thurgood <firxen@gmail.com>
parents: 558
diff changeset
108 self.render_hatch(surface)
9ea26b835271 KeyedHatch
Jeremy Thurgood <firxen@gmail.com>
parents: 558
diff changeset
109 if not self.game_object.puzzler.get_state():
9ea26b835271 KeyedHatch
Jeremy Thurgood <firxen@gmail.com>
parents: 558
diff changeset
110 self.render_image(surface, self.get_image())
9ea26b835271 KeyedHatch
Jeremy Thurgood <firxen@gmail.com>
parents: 558
diff changeset
111
9ea26b835271 KeyedHatch
Jeremy Thurgood <firxen@gmail.com>
parents: 558
diff changeset
112
207
42e8993c31fd Break out Renderers
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
113 class ImageStateRenderer(ImageRenderer):
42e8993c31fd Break out Renderers
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
114 def __init__(self, state_images):
42e8993c31fd Break out Renderers
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
115 self._state_images = state_images
42e8993c31fd Break out Renderers
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
116
42e8993c31fd Break out Renderers
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
117 def get_image(self):
42e8993c31fd Break out Renderers
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
118 return self._state_images[self.game_object.puzzler.get_state()]
42e8993c31fd Break out Renderers
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
119
42e8993c31fd Break out Renderers
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
120
217
d98daba73055 Composition-based renderers.
Jeremy Thurgood <firxen@gmail.com>
parents: 207
diff changeset
121 class TimedAnimatedRenderer(ImageRenderer):
d98daba73055 Composition-based renderers.
Jeremy Thurgood <firxen@gmail.com>
parents: 207
diff changeset
122 def __init__(self, images, frame_ticks=1):
d98daba73055 Composition-based renderers.
Jeremy Thurgood <firxen@gmail.com>
parents: 207
diff changeset
123 self._images = images
d98daba73055 Composition-based renderers.
Jeremy Thurgood <firxen@gmail.com>
parents: 207
diff changeset
124 self._frame_ticks = frame_ticks
d98daba73055 Composition-based renderers.
Jeremy Thurgood <firxen@gmail.com>
parents: 207
diff changeset
125 self._frame_tick = 0
d98daba73055 Composition-based renderers.
Jeremy Thurgood <firxen@gmail.com>
parents: 207
diff changeset
126 self._frame = 0
d98daba73055 Composition-based renderers.
Jeremy Thurgood <firxen@gmail.com>
parents: 207
diff changeset
127
d98daba73055 Composition-based renderers.
Jeremy Thurgood <firxen@gmail.com>
parents: 207
diff changeset
128 def advance_tick(self):
d98daba73055 Composition-based renderers.
Jeremy Thurgood <firxen@gmail.com>
parents: 207
diff changeset
129 self._frame_tick += 1
d98daba73055 Composition-based renderers.
Jeremy Thurgood <firxen@gmail.com>
parents: 207
diff changeset
130 if self._frame_tick > self._frame_ticks:
d98daba73055 Composition-based renderers.
Jeremy Thurgood <firxen@gmail.com>
parents: 207
diff changeset
131 self._frame_tick = 0
d98daba73055 Composition-based renderers.
Jeremy Thurgood <firxen@gmail.com>
parents: 207
diff changeset
132 self._frame += 1
d98daba73055 Composition-based renderers.
Jeremy Thurgood <firxen@gmail.com>
parents: 207
diff changeset
133 if self._frame >= len(self._images):
d98daba73055 Composition-based renderers.
Jeremy Thurgood <firxen@gmail.com>
parents: 207
diff changeset
134 self._frame = 0
d98daba73055 Composition-based renderers.
Jeremy Thurgood <firxen@gmail.com>
parents: 207
diff changeset
135
d98daba73055 Composition-based renderers.
Jeremy Thurgood <firxen@gmail.com>
parents: 207
diff changeset
136 def reset(self):
d98daba73055 Composition-based renderers.
Jeremy Thurgood <firxen@gmail.com>
parents: 207
diff changeset
137 self._frame_tick = 0
d98daba73055 Composition-based renderers.
Jeremy Thurgood <firxen@gmail.com>
parents: 207
diff changeset
138 self._frame = 0
d98daba73055 Composition-based renderers.
Jeremy Thurgood <firxen@gmail.com>
parents: 207
diff changeset
139
d98daba73055 Composition-based renderers.
Jeremy Thurgood <firxen@gmail.com>
parents: 207
diff changeset
140 def get_image(self):
d98daba73055 Composition-based renderers.
Jeremy Thurgood <firxen@gmail.com>
parents: 207
diff changeset
141 return self._images[self._frame]
d98daba73055 Composition-based renderers.
Jeremy Thurgood <firxen@gmail.com>
parents: 207
diff changeset
142
307
c2bbb1e70d6f Rename animate to update and pass seconds, for future fun
Neil Muller <drnlmuller@gmail.com>
parents: 286
diff changeset
143 def update(self, seconds):
217
d98daba73055 Composition-based renderers.
Jeremy Thurgood <firxen@gmail.com>
parents: 207
diff changeset
144 self.advance_tick()
d98daba73055 Composition-based renderers.
Jeremy Thurgood <firxen@gmail.com>
parents: 207
diff changeset
145
d98daba73055 Composition-based renderers.
Jeremy Thurgood <firxen@gmail.com>
parents: 207
diff changeset
146
d98daba73055 Composition-based renderers.
Jeremy Thurgood <firxen@gmail.com>
parents: 207
diff changeset
147 class MovementAnimatedRenderer(TimedAnimatedRenderer):
307
c2bbb1e70d6f Rename animate to update and pass seconds, for future fun
Neil Muller <drnlmuller@gmail.com>
parents: 286
diff changeset
148 def update(self, seconds):
218
9e2ef2f15035 Better rendering and movement detection.
Jeremy Thurgood <firxen@gmail.com>
parents: 217
diff changeset
149 if self.game_object.is_moving:
217
d98daba73055 Composition-based renderers.
Jeremy Thurgood <firxen@gmail.com>
parents: 207
diff changeset
150 self.advance_tick()
d98daba73055 Composition-based renderers.
Jeremy Thurgood <firxen@gmail.com>
parents: 207
diff changeset
151 else:
d98daba73055 Composition-based renderers.
Jeremy Thurgood <firxen@gmail.com>
parents: 207
diff changeset
152 self.reset()
d98daba73055 Composition-based renderers.
Jeremy Thurgood <firxen@gmail.com>
parents: 207
diff changeset
153
d98daba73055 Composition-based renderers.
Jeremy Thurgood <firxen@gmail.com>
parents: 207
diff changeset
154
d98daba73055 Composition-based renderers.
Jeremy Thurgood <firxen@gmail.com>
parents: 207
diff changeset
155 class RendererSelectionRenderer(Renderer):
d98daba73055 Composition-based renderers.
Jeremy Thurgood <firxen@gmail.com>
parents: 207
diff changeset
156 def __init__(self, renderers):
d98daba73055 Composition-based renderers.
Jeremy Thurgood <firxen@gmail.com>
parents: 207
diff changeset
157 self._renderers = renderers
d98daba73055 Composition-based renderers.
Jeremy Thurgood <firxen@gmail.com>
parents: 207
diff changeset
158
d98daba73055 Composition-based renderers.
Jeremy Thurgood <firxen@gmail.com>
parents: 207
diff changeset
159 def set_game_object(self, game_object):
d98daba73055 Composition-based renderers.
Jeremy Thurgood <firxen@gmail.com>
parents: 207
diff changeset
160 self.game_object = game_object
d98daba73055 Composition-based renderers.
Jeremy Thurgood <firxen@gmail.com>
parents: 207
diff changeset
161 for renderer in self._renderers.values():
d98daba73055 Composition-based renderers.
Jeremy Thurgood <firxen@gmail.com>
parents: 207
diff changeset
162 renderer.set_game_object(game_object)
d98daba73055 Composition-based renderers.
Jeremy Thurgood <firxen@gmail.com>
parents: 207
diff changeset
163
d98daba73055 Composition-based renderers.
Jeremy Thurgood <firxen@gmail.com>
parents: 207
diff changeset
164 @property
d98daba73055 Composition-based renderers.
Jeremy Thurgood <firxen@gmail.com>
parents: 207
diff changeset
165 def renderer(self):
d98daba73055 Composition-based renderers.
Jeremy Thurgood <firxen@gmail.com>
parents: 207
diff changeset
166 return self._renderers[self.select_renderer()]
d98daba73055 Composition-based renderers.
Jeremy Thurgood <firxen@gmail.com>
parents: 207
diff changeset
167
d98daba73055 Composition-based renderers.
Jeremy Thurgood <firxen@gmail.com>
parents: 207
diff changeset
168 def render(self, surface):
d98daba73055 Composition-based renderers.
Jeremy Thurgood <firxen@gmail.com>
parents: 207
diff changeset
169 return self.renderer.render(surface)
d98daba73055 Composition-based renderers.
Jeremy Thurgood <firxen@gmail.com>
parents: 207
diff changeset
170
307
c2bbb1e70d6f Rename animate to update and pass seconds, for future fun
Neil Muller <drnlmuller@gmail.com>
parents: 286
diff changeset
171 def update(self, seconds):
c2bbb1e70d6f Rename animate to update and pass seconds, for future fun
Neil Muller <drnlmuller@gmail.com>
parents: 286
diff changeset
172 return self.renderer.update(seconds)
217
d98daba73055 Composition-based renderers.
Jeremy Thurgood <firxen@gmail.com>
parents: 207
diff changeset
173
d98daba73055 Composition-based renderers.
Jeremy Thurgood <firxen@gmail.com>
parents: 207
diff changeset
174 def select_renderer(self):
d98daba73055 Composition-based renderers.
Jeremy Thurgood <firxen@gmail.com>
parents: 207
diff changeset
175 raise NotImplementedError()
d98daba73055 Composition-based renderers.
Jeremy Thurgood <firxen@gmail.com>
parents: 207
diff changeset
176
d98daba73055 Composition-based renderers.
Jeremy Thurgood <firxen@gmail.com>
parents: 207
diff changeset
177
d98daba73055 Composition-based renderers.
Jeremy Thurgood <firxen@gmail.com>
parents: 207
diff changeset
178 class FacingSelectionRenderer(RendererSelectionRenderer):
d98daba73055 Composition-based renderers.
Jeremy Thurgood <firxen@gmail.com>
parents: 207
diff changeset
179 def select_renderer(self):
229
329b3044ddef Much better facing renderers.
Jeremy Thurgood <firxen@gmail.com>
parents: 222
diff changeset
180 return self.game_object.get_facing_direction()
207
42e8993c31fd Break out Renderers
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
181
42e8993c31fd Break out Renderers
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
182
42e8993c31fd Break out Renderers
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
183 class ShapeRenderer(Renderer):
42e8993c31fd Break out Renderers
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
184 def render(self, surface):
42e8993c31fd Break out Renderers
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
185 self._render_shape(surface)
42e8993c31fd Break out Renderers
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
186 super(ShapeRenderer, self).render(surface)
42e8993c31fd Break out Renderers
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
187
42e8993c31fd Break out Renderers
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
188
42e8993c31fd Break out Renderers
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
189 class ShapeStateRenderer(ShapeRenderer):
42e8993c31fd Break out Renderers
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
190 """Renders the shape in a different colour depending on the state.
42e8993c31fd Break out Renderers
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
191
42e8993c31fd Break out Renderers
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
192 Requires the game object it's attached to to have a puzzler.
42e8993c31fd Break out Renderers
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
193 """
42e8993c31fd Break out Renderers
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
194 def render(self, surface):
42e8993c31fd Break out Renderers
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
195 if self.game_object.puzzler.get_state():
42e8993c31fd Break out Renderers
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
196 color = pygame.color.THECOLORS['green']
42e8993c31fd Break out Renderers
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
197 else:
42e8993c31fd Break out Renderers
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
198 color = pygame.color.THECOLORS['red']
42e8993c31fd Break out Renderers
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
199
42e8993c31fd Break out Renderers
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
200 self.game_object.get_shape().color = color
42e8993c31fd Break out Renderers
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
201 super(ShapeStateRenderer, self).render(surface)
222
cc5f2a5ac501 Overlays belong in render
Stefano Rivera <stefano@rivera.za.net>
parents: 221
diff changeset
202
cc5f2a5ac501 Overlays belong in render
Stefano Rivera <stefano@rivera.za.net>
parents: 221
diff changeset
203
cc5f2a5ac501 Overlays belong in render
Stefano Rivera <stefano@rivera.za.net>
parents: 221
diff changeset
204 class Overlay(object):
cc5f2a5ac501 Overlays belong in render
Stefano Rivera <stefano@rivera.za.net>
parents: 221
diff changeset
205 def set_game_object(self, game_object):
cc5f2a5ac501 Overlays belong in render
Stefano Rivera <stefano@rivera.za.net>
parents: 221
diff changeset
206 self.game_object = game_object
cc5f2a5ac501 Overlays belong in render
Stefano Rivera <stefano@rivera.za.net>
parents: 221
diff changeset
207
396
b3df20c76afd Pass layout hint to overlays
Neil Muller <drnlmuller@gmail.com>
parents: 388
diff changeset
208 def render(self, surface, display_offset, max_width):
222
cc5f2a5ac501 Overlays belong in render
Stefano Rivera <stefano@rivera.za.net>
parents: 221
diff changeset
209 pass
cc5f2a5ac501 Overlays belong in render
Stefano Rivera <stefano@rivera.za.net>
parents: 221
diff changeset
210
cc5f2a5ac501 Overlays belong in render
Stefano Rivera <stefano@rivera.za.net>
parents: 221
diff changeset
211 def is_visible(self):
cc5f2a5ac501 Overlays belong in render
Stefano Rivera <stefano@rivera.za.net>
parents: 221
diff changeset
212 return self.game_object.puzzler.get_state()
cc5f2a5ac501 Overlays belong in render
Stefano Rivera <stefano@rivera.za.net>
parents: 221
diff changeset
213
cc5f2a5ac501 Overlays belong in render
Stefano Rivera <stefano@rivera.za.net>
parents: 221
diff changeset
214
cc5f2a5ac501 Overlays belong in render
Stefano Rivera <stefano@rivera.za.net>
parents: 221
diff changeset
215 class TextOverlay(Overlay):
521
61e3e5d28a05 Sligthly pinker ephemeral notes
Stefano Rivera <stefano@rivera.za.net>
parents: 488
diff changeset
216 def __init__(self, text, **kwargs):
222
cc5f2a5ac501 Overlays belong in render
Stefano Rivera <stefano@rivera.za.net>
parents: 221
diff changeset
217 self.text = text
521
61e3e5d28a05 Sligthly pinker ephemeral notes
Stefano Rivera <stefano@rivera.za.net>
parents: 488
diff changeset
218 self.widget = LabelWidget((20, 20), self.text, **kwargs)
222
cc5f2a5ac501 Overlays belong in render
Stefano Rivera <stefano@rivera.za.net>
parents: 221
diff changeset
219
396
b3df20c76afd Pass layout hint to overlays
Neil Muller <drnlmuller@gmail.com>
parents: 388
diff changeset
220 def render(self, surface, display_offset, max_width):
222
cc5f2a5ac501 Overlays belong in render
Stefano Rivera <stefano@rivera.za.net>
parents: 221
diff changeset
221 x, y = 20, 20
cc5f2a5ac501 Overlays belong in render
Stefano Rivera <stefano@rivera.za.net>
parents: 221
diff changeset
222 if display_offset[0] < 0:
cc5f2a5ac501 Overlays belong in render
Stefano Rivera <stefano@rivera.za.net>
parents: 221
diff changeset
223 x += abs(display_offset[0])
cc5f2a5ac501 Overlays belong in render
Stefano Rivera <stefano@rivera.za.net>
parents: 221
diff changeset
224 if display_offset[1] < 0:
cc5f2a5ac501 Overlays belong in render
Stefano Rivera <stefano@rivera.za.net>
parents: 221
diff changeset
225 y += abs(display_offset[1])
397
a08965437df2 Fold long text messages somewhat
Neil Muller <drnlmuller@gmail.com>
parents: 396
diff changeset
226 if self.widget.rect.width > max_width - 40:
a08965437df2 Fold long text messages somewhat
Neil Muller <drnlmuller@gmail.com>
parents: 396
diff changeset
227 # Need to relayout the widget
a08965437df2 Fold long text messages somewhat
Neil Muller <drnlmuller@gmail.com>
parents: 396
diff changeset
228 factor = 2
a08965437df2 Fold long text messages somewhat
Neil Muller <drnlmuller@gmail.com>
parents: 396
diff changeset
229 while self.widget.rect.width > max_width - 40:
a08965437df2 Fold long text messages somewhat
Neil Muller <drnlmuller@gmail.com>
parents: 396
diff changeset
230 wrapped = '\n'.join(textwrap.wrap(self.text,
a08965437df2 Fold long text messages somewhat
Neil Muller <drnlmuller@gmail.com>
parents: 396
diff changeset
231 len(self.text) // factor))
a08965437df2 Fold long text messages somewhat
Neil Muller <drnlmuller@gmail.com>
parents: 396
diff changeset
232 factor *= 2
a08965437df2 Fold long text messages somewhat
Neil Muller <drnlmuller@gmail.com>
parents: 396
diff changeset
233 self.widget = MultiLineWidget((20, 20), wrapped)
a08965437df2 Fold long text messages somewhat
Neil Muller <drnlmuller@gmail.com>
parents: 396
diff changeset
234 if self.widget.rect.width < 100:
a08965437df2 Fold long text messages somewhat
Neil Muller <drnlmuller@gmail.com>
parents: 396
diff changeset
235 # safety valve
a08965437df2 Fold long text messages somewhat
Neil Muller <drnlmuller@gmail.com>
parents: 396
diff changeset
236 break
a08965437df2 Fold long text messages somewhat
Neil Muller <drnlmuller@gmail.com>
parents: 396
diff changeset
237 self.widget.rect.topleft = (x, y)
a08965437df2 Fold long text messages somewhat
Neil Muller <drnlmuller@gmail.com>
parents: 396
diff changeset
238 self.widget.draw(surface)
a08965437df2 Fold long text messages somewhat
Neil Muller <drnlmuller@gmail.com>
parents: 396
diff changeset
239 # TODO: undo the mad folding
a08965437df2 Fold long text messages somewhat
Neil Muller <drnlmuller@gmail.com>
parents: 396
diff changeset
240 else:
a08965437df2 Fold long text messages somewhat
Neil Muller <drnlmuller@gmail.com>
parents: 396
diff changeset
241 self.widget.rect.topleft = (x, y)
a08965437df2 Fold long text messages somewhat
Neil Muller <drnlmuller@gmail.com>
parents: 396
diff changeset
242 self.widget.draw(surface)
349
c4285f19894c Add a tiled renderer
Neil Muller <drnlmuller@gmail.com>
parents: 307
diff changeset
243
c4285f19894c Add a tiled renderer
Neil Muller <drnlmuller@gmail.com>
parents: 307
diff changeset
244
647
aeb366d97774 Show splash image on startup
Stefano Rivera <stefano@rivera.za.net>
parents: 609
diff changeset
245 class ImageOverlay(Overlay):
aeb366d97774 Show splash image on startup
Stefano Rivera <stefano@rivera.za.net>
parents: 609
diff changeset
246 def __init__(self, image):
aeb366d97774 Show splash image on startup
Stefano Rivera <stefano@rivera.za.net>
parents: 609
diff changeset
247 self.image = image
aeb366d97774 Show splash image on startup
Stefano Rivera <stefano@rivera.za.net>
parents: 609
diff changeset
248
aeb366d97774 Show splash image on startup
Stefano Rivera <stefano@rivera.za.net>
parents: 609
diff changeset
249 def render(self, surface, display_offset, max_width):
aeb366d97774 Show splash image on startup
Stefano Rivera <stefano@rivera.za.net>
parents: 609
diff changeset
250 x = (surface.get_width() - self.image.get_width()) / 2
aeb366d97774 Show splash image on startup
Stefano Rivera <stefano@rivera.za.net>
parents: 609
diff changeset
251 y = (surface.get_height() - self.image.get_height()) / 2
aeb366d97774 Show splash image on startup
Stefano Rivera <stefano@rivera.za.net>
parents: 609
diff changeset
252 surface.blit(self.image, (x, y))
aeb366d97774 Show splash image on startup
Stefano Rivera <stefano@rivera.za.net>
parents: 609
diff changeset
253
aeb366d97774 Show splash image on startup
Stefano Rivera <stefano@rivera.za.net>
parents: 609
diff changeset
254
349
c4285f19894c Add a tiled renderer
Neil Muller <drnlmuller@gmail.com>
parents: 307
diff changeset
255 class TiledRenderer(Renderer):
c4285f19894c Add a tiled renderer
Neil Muller <drnlmuller@gmail.com>
parents: 307
diff changeset
256 """Tile the given image to fit the given outline
c4285f19894c Add a tiled renderer
Neil Muller <drnlmuller@gmail.com>
parents: 307
diff changeset
257
c4285f19894c Add a tiled renderer
Neil Muller <drnlmuller@gmail.com>
parents: 307
diff changeset
258 Outline is assumed to be in pymunk coordinates"""
c4285f19894c Add a tiled renderer
Neil Muller <drnlmuller@gmail.com>
parents: 307
diff changeset
259
362
d0aeb893967d Transparent moonlight
Neil Muller <drnlmuller@gmail.com>
parents: 353
diff changeset
260 def __init__(self, outline, tile_image, alpha=255):
349
c4285f19894c Add a tiled renderer
Neil Muller <drnlmuller@gmail.com>
parents: 307
diff changeset
261 self._tile_image = tile_image
c4285f19894c Add a tiled renderer
Neil Muller <drnlmuller@gmail.com>
parents: 307
diff changeset
262 self.outline = outline
c4285f19894c Add a tiled renderer
Neil Muller <drnlmuller@gmail.com>
parents: 307
diff changeset
263 self._tiled = None
353
b67ea65dae2b Faster tiled renderer
Neil Muller <drnlmuller@gmail.com>
parents: 349
diff changeset
264 self._offset = None
362
d0aeb893967d Transparent moonlight
Neil Muller <drnlmuller@gmail.com>
parents: 353
diff changeset
265 self._alpha = alpha
349
c4285f19894c Add a tiled renderer
Neil Muller <drnlmuller@gmail.com>
parents: 307
diff changeset
266
400
4523b1ff17ae Hack together tile animation
Neil Muller <drnlmuller@gmail.com>
parents: 397
diff changeset
267 def _make_surface(self, surface, image):
4523b1ff17ae Hack together tile animation
Neil Muller <drnlmuller@gmail.com>
parents: 397
diff changeset
268 size = surface.get_size()
4523b1ff17ae Hack together tile animation
Neil Muller <drnlmuller@gmail.com>
parents: 397
diff changeset
269 mask = pygame.surface.Surface(size, pgl.SRCALPHA)
4523b1ff17ae Hack together tile animation
Neil Muller <drnlmuller@gmail.com>
parents: 397
diff changeset
270 pointlist = [pymunk.pygame_util.to_pygame(p, surface)
4523b1ff17ae Hack together tile animation
Neil Muller <drnlmuller@gmail.com>
parents: 397
diff changeset
271 for p in self.outline]
4523b1ff17ae Hack together tile animation
Neil Muller <drnlmuller@gmail.com>
parents: 397
diff changeset
272 rect = pygame.draw.polygon(mask,
4523b1ff17ae Hack together tile animation
Neil Muller <drnlmuller@gmail.com>
parents: 397
diff changeset
273 pygame.color.Color(
4523b1ff17ae Hack together tile animation
Neil Muller <drnlmuller@gmail.com>
parents: 397
diff changeset
274 255, 255, 255, self._alpha),
4523b1ff17ae Hack together tile animation
Neil Muller <drnlmuller@gmail.com>
parents: 397
diff changeset
275 pointlist, 0)
4523b1ff17ae Hack together tile animation
Neil Muller <drnlmuller@gmail.com>
parents: 397
diff changeset
276 self._offset = (rect.x, rect.y)
4523b1ff17ae Hack together tile animation
Neil Muller <drnlmuller@gmail.com>
parents: 397
diff changeset
277 tiled = tile_surface((rect.w, rect.h), image)
4523b1ff17ae Hack together tile animation
Neil Muller <drnlmuller@gmail.com>
parents: 397
diff changeset
278 tiled.blit(mask, (0, 0), rect,
4523b1ff17ae Hack together tile animation
Neil Muller <drnlmuller@gmail.com>
parents: 397
diff changeset
279 special_flags=pgl.BLEND_RGBA_MULT)
4523b1ff17ae Hack together tile animation
Neil Muller <drnlmuller@gmail.com>
parents: 397
diff changeset
280 return tiled
349
c4285f19894c Add a tiled renderer
Neil Muller <drnlmuller@gmail.com>
parents: 307
diff changeset
281
c4285f19894c Add a tiled renderer
Neil Muller <drnlmuller@gmail.com>
parents: 307
diff changeset
282 def render(self, surface):
400
4523b1ff17ae Hack together tile animation
Neil Muller <drnlmuller@gmail.com>
parents: 397
diff changeset
283 if not self._tiled:
4523b1ff17ae Hack together tile animation
Neil Muller <drnlmuller@gmail.com>
parents: 397
diff changeset
284 self._tiled = self._make_surface(surface, self._tile_image)
353
b67ea65dae2b Faster tiled renderer
Neil Muller <drnlmuller@gmail.com>
parents: 349
diff changeset
285 surface.blit(self._tiled, self._offset)
349
c4285f19894c Add a tiled renderer
Neil Muller <drnlmuller@gmail.com>
parents: 307
diff changeset
286 super(TiledRenderer, self).render(surface)
400
4523b1ff17ae Hack together tile animation
Neil Muller <drnlmuller@gmail.com>
parents: 397
diff changeset
287
4523b1ff17ae Hack together tile animation
Neil Muller <drnlmuller@gmail.com>
parents: 397
diff changeset
288
4523b1ff17ae Hack together tile animation
Neil Muller <drnlmuller@gmail.com>
parents: 397
diff changeset
289 class TimedTiledRenderer(TiledRenderer):
4523b1ff17ae Hack together tile animation
Neil Muller <drnlmuller@gmail.com>
parents: 397
diff changeset
290 """Animate tiles"""
4523b1ff17ae Hack together tile animation
Neil Muller <drnlmuller@gmail.com>
parents: 397
diff changeset
291
4523b1ff17ae Hack together tile animation
Neil Muller <drnlmuller@gmail.com>
parents: 397
diff changeset
292 # Should make this a mixin with TimeAnimate, but not right now
4523b1ff17ae Hack together tile animation
Neil Muller <drnlmuller@gmail.com>
parents: 397
diff changeset
293
4523b1ff17ae Hack together tile animation
Neil Muller <drnlmuller@gmail.com>
parents: 397
diff changeset
294 def __init__(self, outline, images, frame_ticks=1, alpha=255):
4523b1ff17ae Hack together tile animation
Neil Muller <drnlmuller@gmail.com>
parents: 397
diff changeset
295 self._images = images
4523b1ff17ae Hack together tile animation
Neil Muller <drnlmuller@gmail.com>
parents: 397
diff changeset
296 self._frame_ticks = frame_ticks
4523b1ff17ae Hack together tile animation
Neil Muller <drnlmuller@gmail.com>
parents: 397
diff changeset
297 self.outline = outline
4523b1ff17ae Hack together tile animation
Neil Muller <drnlmuller@gmail.com>
parents: 397
diff changeset
298 self._frames = [None] * len(images)
4523b1ff17ae Hack together tile animation
Neil Muller <drnlmuller@gmail.com>
parents: 397
diff changeset
299 self._offset = None
4523b1ff17ae Hack together tile animation
Neil Muller <drnlmuller@gmail.com>
parents: 397
diff changeset
300 self._alpha = alpha
4523b1ff17ae Hack together tile animation
Neil Muller <drnlmuller@gmail.com>
parents: 397
diff changeset
301 self._frame = 0
4523b1ff17ae Hack together tile animation
Neil Muller <drnlmuller@gmail.com>
parents: 397
diff changeset
302 self._frame_tick = 0
4523b1ff17ae Hack together tile animation
Neil Muller <drnlmuller@gmail.com>
parents: 397
diff changeset
303
4523b1ff17ae Hack together tile animation
Neil Muller <drnlmuller@gmail.com>
parents: 397
diff changeset
304 def advance_tick(self):
4523b1ff17ae Hack together tile animation
Neil Muller <drnlmuller@gmail.com>
parents: 397
diff changeset
305 self._frame_tick += 1
4523b1ff17ae Hack together tile animation
Neil Muller <drnlmuller@gmail.com>
parents: 397
diff changeset
306 if self._frame_tick > self._frame_ticks:
4523b1ff17ae Hack together tile animation
Neil Muller <drnlmuller@gmail.com>
parents: 397
diff changeset
307 self._frame_tick = 0
4523b1ff17ae Hack together tile animation
Neil Muller <drnlmuller@gmail.com>
parents: 397
diff changeset
308 self._frame += 1
4523b1ff17ae Hack together tile animation
Neil Muller <drnlmuller@gmail.com>
parents: 397
diff changeset
309 if self._frame >= len(self._images):
4523b1ff17ae Hack together tile animation
Neil Muller <drnlmuller@gmail.com>
parents: 397
diff changeset
310 self._frame = 0
4523b1ff17ae Hack together tile animation
Neil Muller <drnlmuller@gmail.com>
parents: 397
diff changeset
311
4523b1ff17ae Hack together tile animation
Neil Muller <drnlmuller@gmail.com>
parents: 397
diff changeset
312 def reset(self):
4523b1ff17ae Hack together tile animation
Neil Muller <drnlmuller@gmail.com>
parents: 397
diff changeset
313 self._frame_tick = 0
4523b1ff17ae Hack together tile animation
Neil Muller <drnlmuller@gmail.com>
parents: 397
diff changeset
314 self._frame = 0
4523b1ff17ae Hack together tile animation
Neil Muller <drnlmuller@gmail.com>
parents: 397
diff changeset
315
4523b1ff17ae Hack together tile animation
Neil Muller <drnlmuller@gmail.com>
parents: 397
diff changeset
316 def update(self, seconds):
4523b1ff17ae Hack together tile animation
Neil Muller <drnlmuller@gmail.com>
parents: 397
diff changeset
317 self.advance_tick()
4523b1ff17ae Hack together tile animation
Neil Muller <drnlmuller@gmail.com>
parents: 397
diff changeset
318
4523b1ff17ae Hack together tile animation
Neil Muller <drnlmuller@gmail.com>
parents: 397
diff changeset
319 def render(self, surface):
4523b1ff17ae Hack together tile animation
Neil Muller <drnlmuller@gmail.com>
parents: 397
diff changeset
320 if not self._frames[self._frame]:
4523b1ff17ae Hack together tile animation
Neil Muller <drnlmuller@gmail.com>
parents: 397
diff changeset
321 self._frames[self._frame] = self._make_surface(
4523b1ff17ae Hack together tile animation
Neil Muller <drnlmuller@gmail.com>
parents: 397
diff changeset
322 surface, self._images[self._frame])
4523b1ff17ae Hack together tile animation
Neil Muller <drnlmuller@gmail.com>
parents: 397
diff changeset
323 self._tiled = self._frames[self._frame]
4523b1ff17ae Hack together tile animation
Neil Muller <drnlmuller@gmail.com>
parents: 397
diff changeset
324 super(TimedTiledRenderer, self).render(surface)