Mercurial > nagslang
annotate nagslang/enemies.py @ 307:c2bbb1e70d6f
Rename animate to update and pass seconds, for future fun
author | Neil Muller <drnlmuller@gmail.com> |
---|---|
date | Fri, 06 Sep 2013 00:32:38 +0200 |
parents | ce11e1cae0ed |
children | 3dee86b6c216 |
rev | line source |
---|---|
229
329b3044ddef
Much better facing renderers.
Jeremy Thurgood <firxen@gmail.com>
parents:
218
diff
changeset
|
1 import math |
329b3044ddef
Much better facing renderers.
Jeremy Thurgood <firxen@gmail.com>
parents:
218
diff
changeset
|
2 |
168 | 3 import pymunk |
4 import pymunk.pygame_util | |
5 | |
207 | 6 from nagslang import render |
168 | 7 from nagslang.constants import COLLISION_TYPE_ENEMY, ZORDER_MID |
207 | 8 from nagslang.game_object import GameObject, SingleShapePhysicser, make_body |
168 | 9 from nagslang.mutators import FLIP_H |
10 from nagslang.resources import resources | |
11 | |
12 | |
235
831e4f6b3d18
Add hints for the level editor
Neil Muller <drnlmuller@gmail.com>
parents:
229
diff
changeset
|
13 def get_editable_enemies(): |
831e4f6b3d18
Add hints for the level editor
Neil Muller <drnlmuller@gmail.com>
parents:
229
diff
changeset
|
14 classes = [] |
831e4f6b3d18
Add hints for the level editor
Neil Muller <drnlmuller@gmail.com>
parents:
229
diff
changeset
|
15 for cls_name, cls in globals().iteritems(): |
831e4f6b3d18
Add hints for the level editor
Neil Muller <drnlmuller@gmail.com>
parents:
229
diff
changeset
|
16 if isinstance(cls, type) and issubclass(cls, Enemy): |
831e4f6b3d18
Add hints for the level editor
Neil Muller <drnlmuller@gmail.com>
parents:
229
diff
changeset
|
17 if hasattr(cls, 'requires'): |
831e4f6b3d18
Add hints for the level editor
Neil Muller <drnlmuller@gmail.com>
parents:
229
diff
changeset
|
18 classes.append((cls_name, cls)) |
831e4f6b3d18
Add hints for the level editor
Neil Muller <drnlmuller@gmail.com>
parents:
229
diff
changeset
|
19 return classes |
831e4f6b3d18
Add hints for the level editor
Neil Muller <drnlmuller@gmail.com>
parents:
229
diff
changeset
|
20 |
831e4f6b3d18
Add hints for the level editor
Neil Muller <drnlmuller@gmail.com>
parents:
229
diff
changeset
|
21 |
168 | 22 class Enemy(GameObject): |
23 """A base class for mobile enemies""" | |
24 | |
277
56e42c00da25
Protagonist and enemies should see the world
Neil Muller <drnlmuller@gmail.com>
parents:
265
diff
changeset
|
25 def __init__(self, space, world, position): |
168 | 26 self._setup_physics(space, position) |
27 self._setup_renderer() | |
305 | 28 self.health = 42 |
168 | 29 |
30 super(Enemy, self).__init__( | |
31 self._physicser, self.renderer) | |
32 self.zorder = ZORDER_MID | |
277
56e42c00da25
Protagonist and enemies should see the world
Neil Muller <drnlmuller@gmail.com>
parents:
265
diff
changeset
|
33 self.world = world |
168 | 34 |
35 def _get_image(self, name, *transforms): | |
36 return resources.get_image('creatures', name, transforms=transforms) | |
37 | |
38 def _setup_physics(self, space, position): | |
39 raise NotImplementedError | |
40 | |
41 def _setup_renderer(self): | |
42 raise NotImplementedError | |
43 | |
44 def attack(self): | |
45 raise NotImplementedError | |
46 | |
235
831e4f6b3d18
Add hints for the level editor
Neil Muller <drnlmuller@gmail.com>
parents:
229
diff
changeset
|
47 @classmethod |
831e4f6b3d18
Add hints for the level editor
Neil Muller <drnlmuller@gmail.com>
parents:
229
diff
changeset
|
48 def requires(cls): |
831e4f6b3d18
Add hints for the level editor
Neil Muller <drnlmuller@gmail.com>
parents:
229
diff
changeset
|
49 return [("name", "string"), ("position", "coordinates")] |
831e4f6b3d18
Add hints for the level editor
Neil Muller <drnlmuller@gmail.com>
parents:
229
diff
changeset
|
50 |
305 | 51 def lose_health(self, amount): |
52 self.health -= amount | |
53 if self.health < 0: | |
54 self.world.kills += 1 | |
55 self.physicser.remove_from_space() | |
56 self.remove = True | |
57 | |
168 | 58 |
59 class PatrollingAlien(Enemy): | |
218
9e2ef2f15035
Better rendering and movement detection.
Jeremy Thurgood <firxen@gmail.com>
parents:
217
diff
changeset
|
60 is_moving = True # Always walking. |
168 | 61 |
277
56e42c00da25
Protagonist and enemies should see the world
Neil Muller <drnlmuller@gmail.com>
parents:
265
diff
changeset
|
62 def __init__(self, space, world, position, end_position): |
168 | 63 # An enemy that patrols between the two points |
277
56e42c00da25
Protagonist and enemies should see the world
Neil Muller <drnlmuller@gmail.com>
parents:
265
diff
changeset
|
64 super(PatrollingAlien, self).__init__(space, world, position) |
168 | 65 self._start_pos = position |
66 self._end_pos = end_position | |
67 self._direction = 'away' | |
68 | |
69 def _setup_physics(self, space, position): | |
208
3d54fe7a2998
Fun with mass and friction.
Jeremy Thurgood <firxen@gmail.com>
parents:
207
diff
changeset
|
70 self._body = make_body(10, pymunk.inf, position, 0.8) |
168 | 71 |
72 self._shape = pymunk.Circle(self._body, 30) | |
73 | |
74 self._shape.elasticity = 1.0 | |
208
3d54fe7a2998
Fun with mass and friction.
Jeremy Thurgood <firxen@gmail.com>
parents:
207
diff
changeset
|
75 self._shape.friction = 0.05 |
168 | 76 self._shape.collision_type = COLLISION_TYPE_ENEMY |
77 self._physicser = SingleShapePhysicser(space, self._shape) | |
78 self.impulse_factor = 50 | |
79 self.angle = 0 | |
80 | |
81 def _setup_renderer(self): | |
217
d98daba73055
Composition-based renderers.
Jeremy Thurgood <firxen@gmail.com>
parents:
208
diff
changeset
|
82 self.renderer = render.FacingSelectionRenderer({ |
d98daba73055
Composition-based renderers.
Jeremy Thurgood <firxen@gmail.com>
parents:
208
diff
changeset
|
83 'left': render.TimedAnimatedRenderer( |
d98daba73055
Composition-based renderers.
Jeremy Thurgood <firxen@gmail.com>
parents:
208
diff
changeset
|
84 [self._get_image('alien_A_1.png'), |
d98daba73055
Composition-based renderers.
Jeremy Thurgood <firxen@gmail.com>
parents:
208
diff
changeset
|
85 self._get_image('alien_A_2.png')], 3), |
d98daba73055
Composition-based renderers.
Jeremy Thurgood <firxen@gmail.com>
parents:
208
diff
changeset
|
86 'right': render.TimedAnimatedRenderer( |
d98daba73055
Composition-based renderers.
Jeremy Thurgood <firxen@gmail.com>
parents:
208
diff
changeset
|
87 [self._get_image('alien_A_1.png', FLIP_H), |
d98daba73055
Composition-based renderers.
Jeremy Thurgood <firxen@gmail.com>
parents:
208
diff
changeset
|
88 self._get_image('alien_A_2.png', FLIP_H)], 3), |
d98daba73055
Composition-based renderers.
Jeremy Thurgood <firxen@gmail.com>
parents:
208
diff
changeset
|
89 }) |
168 | 90 |
91 def get_render_angle(self): | |
229
329b3044ddef
Much better facing renderers.
Jeremy Thurgood <firxen@gmail.com>
parents:
218
diff
changeset
|
92 # No image rotation when rendering, please. |
329b3044ddef
Much better facing renderers.
Jeremy Thurgood <firxen@gmail.com>
parents:
218
diff
changeset
|
93 return 0 |
329b3044ddef
Much better facing renderers.
Jeremy Thurgood <firxen@gmail.com>
parents:
218
diff
changeset
|
94 |
329b3044ddef
Much better facing renderers.
Jeremy Thurgood <firxen@gmail.com>
parents:
218
diff
changeset
|
95 def get_facing_direction(self): |
329b3044ddef
Much better facing renderers.
Jeremy Thurgood <firxen@gmail.com>
parents:
218
diff
changeset
|
96 # Enemies can face left or right. |
329b3044ddef
Much better facing renderers.
Jeremy Thurgood <firxen@gmail.com>
parents:
218
diff
changeset
|
97 if - math.pi / 2 < self.angle <= math.pi / 2: |
329b3044ddef
Much better facing renderers.
Jeremy Thurgood <firxen@gmail.com>
parents:
218
diff
changeset
|
98 return 'right' |
329b3044ddef
Much better facing renderers.
Jeremy Thurgood <firxen@gmail.com>
parents:
218
diff
changeset
|
99 else: |
329b3044ddef
Much better facing renderers.
Jeremy Thurgood <firxen@gmail.com>
parents:
218
diff
changeset
|
100 return 'left' |
168 | 101 |
102 def _switch_direction(self): | |
103 if self._direction == 'away': | |
104 self._direction = 'towards' | |
105 else: | |
106 self._direction = 'away' | |
107 | |
108 def set_direction(self, dx, dy): | |
109 self.angle = pymunk.Vec2d((dx, dy)).angle | |
110 self._body.apply_impulse( | |
111 (dx * self.impulse_factor, dy * self.impulse_factor)) | |
112 | |
307
c2bbb1e70d6f
Rename animate to update and pass seconds, for future fun
Neil Muller <drnlmuller@gmail.com>
parents:
305
diff
changeset
|
113 def update(self, seconds): |
168 | 114 # Calculate the step every frame |
115 if self._direction == 'away': | |
116 target = self._end_pos | |
117 else: | |
118 target = self._start_pos | |
119 x_step = 0 | |
120 y_step = 0 | |
121 if (target[0] < self._body.position[0]): | |
122 x_step = max(-1, target[0] - self._body.position[0]) | |
123 elif (target[0] > self._body.position[0]): | |
124 x_step = min(1, target[0] - self._body.position[0]) | |
125 if abs(x_step) < 0.5: | |
126 x_step = 0 | |
127 if (target[1] < self._body.position[1]): | |
128 y_step = max(-1, target[1] - self._body.position[1]) | |
129 elif (target[1] > self._body.position[1]): | |
130 y_step = min(1, target[1] - self._body.position[1]) | |
131 if abs(y_step) < 0.5: | |
132 y_step = 0 | |
133 if abs(x_step) < 1 and abs(y_step) < 1: | |
134 self._switch_direction() | |
135 self.set_direction(x_step, y_step) | |
307
c2bbb1e70d6f
Rename animate to update and pass seconds, for future fun
Neil Muller <drnlmuller@gmail.com>
parents:
305
diff
changeset
|
136 super(PatrollingAlien, self).update(seconds) |
235
831e4f6b3d18
Add hints for the level editor
Neil Muller <drnlmuller@gmail.com>
parents:
229
diff
changeset
|
137 |
259 | 138 def collide_with_protagonist(self, protagonist): |
265 | 139 protagonist.lose_health(15) |
258 | 140 |
305 | 141 def hit(self, weapon): |
142 self.lose_health(weapon.damage) | |
143 | |
235
831e4f6b3d18
Add hints for the level editor
Neil Muller <drnlmuller@gmail.com>
parents:
229
diff
changeset
|
144 @classmethod |
831e4f6b3d18
Add hints for the level editor
Neil Muller <drnlmuller@gmail.com>
parents:
229
diff
changeset
|
145 def requires(cls): |
831e4f6b3d18
Add hints for the level editor
Neil Muller <drnlmuller@gmail.com>
parents:
229
diff
changeset
|
146 return [("name", "string"), ("position", "coordinates"), |
831e4f6b3d18
Add hints for the level editor
Neil Muller <drnlmuller@gmail.com>
parents:
229
diff
changeset
|
147 ("end_position", "coordinates")] |
278
e72025e9aa07
simple slow charging alien
Neil Muller <drnlmuller@gmail.com>
parents:
277
diff
changeset
|
148 |
e72025e9aa07
simple slow charging alien
Neil Muller <drnlmuller@gmail.com>
parents:
277
diff
changeset
|
149 |
e72025e9aa07
simple slow charging alien
Neil Muller <drnlmuller@gmail.com>
parents:
277
diff
changeset
|
150 class ChargingAlien(Enemy): |
e72025e9aa07
simple slow charging alien
Neil Muller <drnlmuller@gmail.com>
parents:
277
diff
changeset
|
151 # Simplistic charging of the protagonist |
e72025e9aa07
simple slow charging alien
Neil Muller <drnlmuller@gmail.com>
parents:
277
diff
changeset
|
152 is_moving = False |
e72025e9aa07
simple slow charging alien
Neil Muller <drnlmuller@gmail.com>
parents:
277
diff
changeset
|
153 |
e72025e9aa07
simple slow charging alien
Neil Muller <drnlmuller@gmail.com>
parents:
277
diff
changeset
|
154 def __init__(self, space, world, position, attack_range=100): |
e72025e9aa07
simple slow charging alien
Neil Muller <drnlmuller@gmail.com>
parents:
277
diff
changeset
|
155 super(ChargingAlien, self).__init__(space, world, position) |
e72025e9aa07
simple slow charging alien
Neil Muller <drnlmuller@gmail.com>
parents:
277
diff
changeset
|
156 self._range = attack_range |
e72025e9aa07
simple slow charging alien
Neil Muller <drnlmuller@gmail.com>
parents:
277
diff
changeset
|
157 |
e72025e9aa07
simple slow charging alien
Neil Muller <drnlmuller@gmail.com>
parents:
277
diff
changeset
|
158 def _setup_physics(self, space, position): |
e72025e9aa07
simple slow charging alien
Neil Muller <drnlmuller@gmail.com>
parents:
277
diff
changeset
|
159 self._body = make_body(100, pymunk.inf, position, 0.8) |
e72025e9aa07
simple slow charging alien
Neil Muller <drnlmuller@gmail.com>
parents:
277
diff
changeset
|
160 |
e72025e9aa07
simple slow charging alien
Neil Muller <drnlmuller@gmail.com>
parents:
277
diff
changeset
|
161 self._shape = pymunk.Circle(self._body, 30) |
e72025e9aa07
simple slow charging alien
Neil Muller <drnlmuller@gmail.com>
parents:
277
diff
changeset
|
162 |
e72025e9aa07
simple slow charging alien
Neil Muller <drnlmuller@gmail.com>
parents:
277
diff
changeset
|
163 self._shape.elasticity = 1.0 |
e72025e9aa07
simple slow charging alien
Neil Muller <drnlmuller@gmail.com>
parents:
277
diff
changeset
|
164 self._shape.friction = 0.05 |
e72025e9aa07
simple slow charging alien
Neil Muller <drnlmuller@gmail.com>
parents:
277
diff
changeset
|
165 self._shape.collision_type = COLLISION_TYPE_ENEMY |
e72025e9aa07
simple slow charging alien
Neil Muller <drnlmuller@gmail.com>
parents:
277
diff
changeset
|
166 self._physicser = SingleShapePhysicser(space, self._shape) |
e72025e9aa07
simple slow charging alien
Neil Muller <drnlmuller@gmail.com>
parents:
277
diff
changeset
|
167 self.impulse_factor = 300 |
e72025e9aa07
simple slow charging alien
Neil Muller <drnlmuller@gmail.com>
parents:
277
diff
changeset
|
168 self.angle = 0 |
e72025e9aa07
simple slow charging alien
Neil Muller <drnlmuller@gmail.com>
parents:
277
diff
changeset
|
169 |
e72025e9aa07
simple slow charging alien
Neil Muller <drnlmuller@gmail.com>
parents:
277
diff
changeset
|
170 def _setup_renderer(self): |
e72025e9aa07
simple slow charging alien
Neil Muller <drnlmuller@gmail.com>
parents:
277
diff
changeset
|
171 self.renderer = render.FacingSelectionRenderer({ |
e72025e9aa07
simple slow charging alien
Neil Muller <drnlmuller@gmail.com>
parents:
277
diff
changeset
|
172 'left': render.TimedAnimatedRenderer( |
e72025e9aa07
simple slow charging alien
Neil Muller <drnlmuller@gmail.com>
parents:
277
diff
changeset
|
173 [self._get_image('alien_B_1.png'), |
e72025e9aa07
simple slow charging alien
Neil Muller <drnlmuller@gmail.com>
parents:
277
diff
changeset
|
174 self._get_image('alien_B_2.png')], 3), |
e72025e9aa07
simple slow charging alien
Neil Muller <drnlmuller@gmail.com>
parents:
277
diff
changeset
|
175 'right': render.TimedAnimatedRenderer( |
e72025e9aa07
simple slow charging alien
Neil Muller <drnlmuller@gmail.com>
parents:
277
diff
changeset
|
176 [self._get_image('alien_B_1.png', FLIP_H), |
e72025e9aa07
simple slow charging alien
Neil Muller <drnlmuller@gmail.com>
parents:
277
diff
changeset
|
177 self._get_image('alien_B_2.png', FLIP_H)], 3), |
e72025e9aa07
simple slow charging alien
Neil Muller <drnlmuller@gmail.com>
parents:
277
diff
changeset
|
178 }) |
e72025e9aa07
simple slow charging alien
Neil Muller <drnlmuller@gmail.com>
parents:
277
diff
changeset
|
179 |
e72025e9aa07
simple slow charging alien
Neil Muller <drnlmuller@gmail.com>
parents:
277
diff
changeset
|
180 def get_render_angle(self): |
e72025e9aa07
simple slow charging alien
Neil Muller <drnlmuller@gmail.com>
parents:
277
diff
changeset
|
181 # No image rotation when rendering, please. |
e72025e9aa07
simple slow charging alien
Neil Muller <drnlmuller@gmail.com>
parents:
277
diff
changeset
|
182 return 0 |
e72025e9aa07
simple slow charging alien
Neil Muller <drnlmuller@gmail.com>
parents:
277
diff
changeset
|
183 |
e72025e9aa07
simple slow charging alien
Neil Muller <drnlmuller@gmail.com>
parents:
277
diff
changeset
|
184 def get_facing_direction(self): |
e72025e9aa07
simple slow charging alien
Neil Muller <drnlmuller@gmail.com>
parents:
277
diff
changeset
|
185 # Enemies can face left or right. |
e72025e9aa07
simple slow charging alien
Neil Muller <drnlmuller@gmail.com>
parents:
277
diff
changeset
|
186 if - math.pi / 2 < self.angle <= math.pi / 2: |
e72025e9aa07
simple slow charging alien
Neil Muller <drnlmuller@gmail.com>
parents:
277
diff
changeset
|
187 return 'right' |
e72025e9aa07
simple slow charging alien
Neil Muller <drnlmuller@gmail.com>
parents:
277
diff
changeset
|
188 else: |
e72025e9aa07
simple slow charging alien
Neil Muller <drnlmuller@gmail.com>
parents:
277
diff
changeset
|
189 return 'left' |
e72025e9aa07
simple slow charging alien
Neil Muller <drnlmuller@gmail.com>
parents:
277
diff
changeset
|
190 |
e72025e9aa07
simple slow charging alien
Neil Muller <drnlmuller@gmail.com>
parents:
277
diff
changeset
|
191 def set_direction(self, dx, dy): |
e72025e9aa07
simple slow charging alien
Neil Muller <drnlmuller@gmail.com>
parents:
277
diff
changeset
|
192 self.angle = pymunk.Vec2d((dx, dy)).angle |
e72025e9aa07
simple slow charging alien
Neil Muller <drnlmuller@gmail.com>
parents:
277
diff
changeset
|
193 self._body.apply_impulse( |
e72025e9aa07
simple slow charging alien
Neil Muller <drnlmuller@gmail.com>
parents:
277
diff
changeset
|
194 (dx * self.impulse_factor, dy * self.impulse_factor)) |
e72025e9aa07
simple slow charging alien
Neil Muller <drnlmuller@gmail.com>
parents:
277
diff
changeset
|
195 |
307
c2bbb1e70d6f
Rename animate to update and pass seconds, for future fun
Neil Muller <drnlmuller@gmail.com>
parents:
305
diff
changeset
|
196 def update(self, seconds): |
278
e72025e9aa07
simple slow charging alien
Neil Muller <drnlmuller@gmail.com>
parents:
277
diff
changeset
|
197 # Calculate the step every frame |
e72025e9aa07
simple slow charging alien
Neil Muller <drnlmuller@gmail.com>
parents:
277
diff
changeset
|
198 # Distance to the protagonist |
e72025e9aa07
simple slow charging alien
Neil Muller <drnlmuller@gmail.com>
parents:
277
diff
changeset
|
199 pos = self._body.position |
e72025e9aa07
simple slow charging alien
Neil Muller <drnlmuller@gmail.com>
parents:
277
diff
changeset
|
200 target = self.world.protagonist.get_shape().body.position |
e72025e9aa07
simple slow charging alien
Neil Muller <drnlmuller@gmail.com>
parents:
277
diff
changeset
|
201 if pos.get_distance(target) > self._range: |
e72025e9aa07
simple slow charging alien
Neil Muller <drnlmuller@gmail.com>
parents:
277
diff
changeset
|
202 # stop |
e72025e9aa07
simple slow charging alien
Neil Muller <drnlmuller@gmail.com>
parents:
277
diff
changeset
|
203 self.is_moving = False |
e72025e9aa07
simple slow charging alien
Neil Muller <drnlmuller@gmail.com>
parents:
277
diff
changeset
|
204 return |
e72025e9aa07
simple slow charging alien
Neil Muller <drnlmuller@gmail.com>
parents:
277
diff
changeset
|
205 self.is_moving = True |
e72025e9aa07
simple slow charging alien
Neil Muller <drnlmuller@gmail.com>
parents:
277
diff
changeset
|
206 x_step = 0 |
e72025e9aa07
simple slow charging alien
Neil Muller <drnlmuller@gmail.com>
parents:
277
diff
changeset
|
207 y_step = 0 |
e72025e9aa07
simple slow charging alien
Neil Muller <drnlmuller@gmail.com>
parents:
277
diff
changeset
|
208 if (target[0] < pos[0]): |
e72025e9aa07
simple slow charging alien
Neil Muller <drnlmuller@gmail.com>
parents:
277
diff
changeset
|
209 x_step = max(-1, target[0] - pos[0]) |
e72025e9aa07
simple slow charging alien
Neil Muller <drnlmuller@gmail.com>
parents:
277
diff
changeset
|
210 elif (target[0] > pos[0]): |
e72025e9aa07
simple slow charging alien
Neil Muller <drnlmuller@gmail.com>
parents:
277
diff
changeset
|
211 x_step = min(1, target[0] - pos[0]) |
e72025e9aa07
simple slow charging alien
Neil Muller <drnlmuller@gmail.com>
parents:
277
diff
changeset
|
212 if abs(x_step) < 0.5: |
e72025e9aa07
simple slow charging alien
Neil Muller <drnlmuller@gmail.com>
parents:
277
diff
changeset
|
213 x_step = 0 |
e72025e9aa07
simple slow charging alien
Neil Muller <drnlmuller@gmail.com>
parents:
277
diff
changeset
|
214 if (target[1] < pos[1]): |
e72025e9aa07
simple slow charging alien
Neil Muller <drnlmuller@gmail.com>
parents:
277
diff
changeset
|
215 y_step = max(-1, target[1] - pos[1]) |
e72025e9aa07
simple slow charging alien
Neil Muller <drnlmuller@gmail.com>
parents:
277
diff
changeset
|
216 elif (target[1] > pos[1]): |
e72025e9aa07
simple slow charging alien
Neil Muller <drnlmuller@gmail.com>
parents:
277
diff
changeset
|
217 y_step = min(1, target[1] - pos[1]) |
e72025e9aa07
simple slow charging alien
Neil Muller <drnlmuller@gmail.com>
parents:
277
diff
changeset
|
218 if abs(y_step) < 0.5: |
e72025e9aa07
simple slow charging alien
Neil Muller <drnlmuller@gmail.com>
parents:
277
diff
changeset
|
219 y_step = 0 |
e72025e9aa07
simple slow charging alien
Neil Muller <drnlmuller@gmail.com>
parents:
277
diff
changeset
|
220 self.set_direction(x_step, y_step) |
307
c2bbb1e70d6f
Rename animate to update and pass seconds, for future fun
Neil Muller <drnlmuller@gmail.com>
parents:
305
diff
changeset
|
221 super(ChargingAlien, self).update(seconds) |
278
e72025e9aa07
simple slow charging alien
Neil Muller <drnlmuller@gmail.com>
parents:
277
diff
changeset
|
222 |
e72025e9aa07
simple slow charging alien
Neil Muller <drnlmuller@gmail.com>
parents:
277
diff
changeset
|
223 def collide_with_protagonist(self, protagonist): |
e72025e9aa07
simple slow charging alien
Neil Muller <drnlmuller@gmail.com>
parents:
277
diff
changeset
|
224 protagonist.lose_health(20) |
e72025e9aa07
simple slow charging alien
Neil Muller <drnlmuller@gmail.com>
parents:
277
diff
changeset
|
225 |
e72025e9aa07
simple slow charging alien
Neil Muller <drnlmuller@gmail.com>
parents:
277
diff
changeset
|
226 @classmethod |
e72025e9aa07
simple slow charging alien
Neil Muller <drnlmuller@gmail.com>
parents:
277
diff
changeset
|
227 def requires(cls): |
e72025e9aa07
simple slow charging alien
Neil Muller <drnlmuller@gmail.com>
parents:
277
diff
changeset
|
228 return [("name", "string"), ("position", "coordinates"), |
e72025e9aa07
simple slow charging alien
Neil Muller <drnlmuller@gmail.com>
parents:
277
diff
changeset
|
229 ("attack_range", "distance")] |