annotate nagslang/enemies.py @ 385:51deb78cae52

Use a result object to get new drawables back to the area
author Stefano Rivera <stefano@rivera.za.net>
date Fri, 06 Sep 2013 23:58:15 +0200
parents 024304f6d068
children 866cdc74b26a
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
229
329b3044ddef Much better facing renderers.
Jeremy Thurgood <firxen@gmail.com>
parents: 218
diff changeset
1 import math
368
57895217bd74 Start refactoring alien movement
Neil Muller <drnlmuller@gmail.com>
parents: 366
diff changeset
2 import random
229
329b3044ddef Much better facing renderers.
Jeremy Thurgood <firxen@gmail.com>
parents: 218
diff changeset
3
168
ce8d4fc3baf4 A patrolling alien
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
4 import pymunk
ce8d4fc3baf4 A patrolling alien
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
5 import pymunk.pygame_util
366
9898fa231c4b Move ranged attack code to Enemy. Don't shoot through solid objects
Stefano Rivera <stefano@rivera.za.net>
parents: 363
diff changeset
6 from pymunk.vec2d import Vec2d
168
ce8d4fc3baf4 A patrolling alien
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
7
207
42e8993c31fd Break out Renderers
Stefano Rivera <stefano@rivera.za.net>
parents: 168
diff changeset
8 from nagslang import render
318
26d1978fa1da BOX is no longer accurate
Stefano Rivera <stefano@rivera.za.net>
parents: 310
diff changeset
9 from nagslang.constants import (COLLISION_TYPE_ENEMY, COLLISION_TYPE_FURNITURE,
361
534eac55a178 ChargingEnemy spits acid
Stefano Rivera <stefano@rivera.za.net>
parents: 358
diff changeset
10 ACID_SPEED, ACID_DAMAGE, ZORDER_MID)
534eac55a178 ChargingEnemy spits acid
Stefano Rivera <stefano@rivera.za.net>
parents: 358
diff changeset
11 from nagslang.events import EnemyDeathEvent, FireEvent
385
51deb78cae52 Use a result object to get new drawables back to the area
Stefano Rivera <stefano@rivera.za.net>
parents: 372
diff changeset
12 from nagslang.game_object import (GameObject, SingleShapePhysicser, Result,
51deb78cae52 Use a result object to get new drawables back to the area
Stefano Rivera <stefano@rivera.za.net>
parents: 372
diff changeset
13 make_body)
168
ce8d4fc3baf4 A patrolling alien
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
14 from nagslang.mutators import FLIP_H
ce8d4fc3baf4 A patrolling alien
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
15 from nagslang.resources import resources
334
a3f1b2f0e3fb Physics-related cleanup.
Jeremy Thurgood <firxen@gmail.com>
parents: 333
diff changeset
16 from nagslang.utils import vec_with_length
168
ce8d4fc3baf4 A patrolling alien
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
17
ce8d4fc3baf4 A patrolling alien
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
18
235
831e4f6b3d18 Add hints for the level editor
Neil Muller <drnlmuller@gmail.com>
parents: 229
diff changeset
19 def get_editable_enemies():
831e4f6b3d18 Add hints for the level editor
Neil Muller <drnlmuller@gmail.com>
parents: 229
diff changeset
20 classes = []
831e4f6b3d18 Add hints for the level editor
Neil Muller <drnlmuller@gmail.com>
parents: 229
diff changeset
21 for cls_name, cls in globals().iteritems():
831e4f6b3d18 Add hints for the level editor
Neil Muller <drnlmuller@gmail.com>
parents: 229
diff changeset
22 if isinstance(cls, type) and issubclass(cls, Enemy):
831e4f6b3d18 Add hints for the level editor
Neil Muller <drnlmuller@gmail.com>
parents: 229
diff changeset
23 if hasattr(cls, 'requires'):
831e4f6b3d18 Add hints for the level editor
Neil Muller <drnlmuller@gmail.com>
parents: 229
diff changeset
24 classes.append((cls_name, cls))
831e4f6b3d18 Add hints for the level editor
Neil Muller <drnlmuller@gmail.com>
parents: 229
diff changeset
25 return classes
831e4f6b3d18 Add hints for the level editor
Neil Muller <drnlmuller@gmail.com>
parents: 229
diff changeset
26
831e4f6b3d18 Add hints for the level editor
Neil Muller <drnlmuller@gmail.com>
parents: 229
diff changeset
27
334
a3f1b2f0e3fb Physics-related cleanup.
Jeremy Thurgood <firxen@gmail.com>
parents: 333
diff changeset
28 def get_alien_image(enemy_type, suffix, *transforms):
a3f1b2f0e3fb Physics-related cleanup.
Jeremy Thurgood <firxen@gmail.com>
parents: 333
diff changeset
29 image_name = 'alien_%s_%s.png' % (enemy_type, suffix)
a3f1b2f0e3fb Physics-related cleanup.
Jeremy Thurgood <firxen@gmail.com>
parents: 333
diff changeset
30 return resources.get_image('creatures', image_name, transforms=transforms)
a3f1b2f0e3fb Physics-related cleanup.
Jeremy Thurgood <firxen@gmail.com>
parents: 333
diff changeset
31
a3f1b2f0e3fb Physics-related cleanup.
Jeremy Thurgood <firxen@gmail.com>
parents: 333
diff changeset
32
168
ce8d4fc3baf4 A patrolling alien
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
33 class Enemy(GameObject):
ce8d4fc3baf4 A patrolling alien
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
34 """A base class for mobile enemies"""
334
a3f1b2f0e3fb Physics-related cleanup.
Jeremy Thurgood <firxen@gmail.com>
parents: 333
diff changeset
35 zorder = ZORDER_MID
a3f1b2f0e3fb Physics-related cleanup.
Jeremy Thurgood <firxen@gmail.com>
parents: 333
diff changeset
36 enemy_type = None # Which set of images to use
333
3dd32686dbc3 Better wolf claw attack.
Jeremy Thurgood <firxen@gmail.com>
parents: 318
diff changeset
37 enemy_damage = None
334
a3f1b2f0e3fb Physics-related cleanup.
Jeremy Thurgood <firxen@gmail.com>
parents: 333
diff changeset
38 health = None
a3f1b2f0e3fb Physics-related cleanup.
Jeremy Thurgood <firxen@gmail.com>
parents: 333
diff changeset
39 impulse_factor = None
168
ce8d4fc3baf4 A patrolling alien
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
40
277
56e42c00da25 Protagonist and enemies should see the world
Neil Muller <drnlmuller@gmail.com>
parents: 265
diff changeset
41 def __init__(self, space, world, position):
334
a3f1b2f0e3fb Physics-related cleanup.
Jeremy Thurgood <firxen@gmail.com>
parents: 333
diff changeset
42 super(Enemy, self).__init__(
a3f1b2f0e3fb Physics-related cleanup.
Jeremy Thurgood <firxen@gmail.com>
parents: 333
diff changeset
43 self.make_physics(space, position), self.make_renderer())
a3f1b2f0e3fb Physics-related cleanup.
Jeremy Thurgood <firxen@gmail.com>
parents: 333
diff changeset
44 self.world = world
a3f1b2f0e3fb Physics-related cleanup.
Jeremy Thurgood <firxen@gmail.com>
parents: 333
diff changeset
45 self.angle = 0
168
ce8d4fc3baf4 A patrolling alien
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
46
334
a3f1b2f0e3fb Physics-related cleanup.
Jeremy Thurgood <firxen@gmail.com>
parents: 333
diff changeset
47 def make_physics(self, space, position):
168
ce8d4fc3baf4 A patrolling alien
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
48 raise NotImplementedError
ce8d4fc3baf4 A patrolling alien
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
49
334
a3f1b2f0e3fb Physics-related cleanup.
Jeremy Thurgood <firxen@gmail.com>
parents: 333
diff changeset
50 def make_renderer(self):
a3f1b2f0e3fb Physics-related cleanup.
Jeremy Thurgood <firxen@gmail.com>
parents: 333
diff changeset
51 return render.FacingSelectionRenderer({
a3f1b2f0e3fb Physics-related cleanup.
Jeremy Thurgood <firxen@gmail.com>
parents: 333
diff changeset
52 'left': render.TimedAnimatedRenderer(
a3f1b2f0e3fb Physics-related cleanup.
Jeremy Thurgood <firxen@gmail.com>
parents: 333
diff changeset
53 [get_alien_image(self.enemy_type, '1'),
a3f1b2f0e3fb Physics-related cleanup.
Jeremy Thurgood <firxen@gmail.com>
parents: 333
diff changeset
54 get_alien_image(self.enemy_type, '2')], 3),
a3f1b2f0e3fb Physics-related cleanup.
Jeremy Thurgood <firxen@gmail.com>
parents: 333
diff changeset
55 'right': render.TimedAnimatedRenderer(
a3f1b2f0e3fb Physics-related cleanup.
Jeremy Thurgood <firxen@gmail.com>
parents: 333
diff changeset
56 [get_alien_image(self.enemy_type, '1', FLIP_H),
a3f1b2f0e3fb Physics-related cleanup.
Jeremy Thurgood <firxen@gmail.com>
parents: 333
diff changeset
57 get_alien_image(self.enemy_type, '2', FLIP_H)], 3),
a3f1b2f0e3fb Physics-related cleanup.
Jeremy Thurgood <firxen@gmail.com>
parents: 333
diff changeset
58 })
168
ce8d4fc3baf4 A patrolling alien
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
59
ce8d4fc3baf4 A patrolling alien
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
60 def attack(self):
ce8d4fc3baf4 A patrolling alien
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
61 raise NotImplementedError
ce8d4fc3baf4 A patrolling alien
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
62
235
831e4f6b3d18 Add hints for the level editor
Neil Muller <drnlmuller@gmail.com>
parents: 229
diff changeset
63 @classmethod
831e4f6b3d18 Add hints for the level editor
Neil Muller <drnlmuller@gmail.com>
parents: 229
diff changeset
64 def requires(cls):
831e4f6b3d18 Add hints for the level editor
Neil Muller <drnlmuller@gmail.com>
parents: 229
diff changeset
65 return [("name", "string"), ("position", "coordinates")]
831e4f6b3d18 Add hints for the level editor
Neil Muller <drnlmuller@gmail.com>
parents: 229
diff changeset
66
310
fa408430a174 Now *both* types of enemies die
Stefano Rivera <stefano@rivera.za.net>
parents: 308
diff changeset
67 def hit(self, weapon):
fa408430a174 Now *both* types of enemies die
Stefano Rivera <stefano@rivera.za.net>
parents: 308
diff changeset
68 self.lose_health(weapon.damage)
fa408430a174 Now *both* types of enemies die
Stefano Rivera <stefano@rivera.za.net>
parents: 308
diff changeset
69
305
ce11e1cae0ed Enemies now die
Stefano Rivera <stefano@rivera.za.net>
parents: 278
diff changeset
70 def lose_health(self, amount):
ce11e1cae0ed Enemies now die
Stefano Rivera <stefano@rivera.za.net>
parents: 278
diff changeset
71 self.health -= amount
385
51deb78cae52 Use a result object to get new drawables back to the area
Stefano Rivera <stefano@rivera.za.net>
parents: 372
diff changeset
72 if self.health <= 0:
305
ce11e1cae0ed Enemies now die
Stefano Rivera <stefano@rivera.za.net>
parents: 278
diff changeset
73 self.physicser.remove_from_space()
310
fa408430a174 Now *both* types of enemies die
Stefano Rivera <stefano@rivera.za.net>
parents: 308
diff changeset
74 EnemyDeathEvent.post(self.physicser.position, self.enemy_type)
308
3dee86b6c216 Enemies leave corpses
Stefano Rivera <stefano@rivera.za.net>
parents: 307
diff changeset
75
334
a3f1b2f0e3fb Physics-related cleanup.
Jeremy Thurgood <firxen@gmail.com>
parents: 333
diff changeset
76 def set_direction(self, dx, dy):
a3f1b2f0e3fb Physics-related cleanup.
Jeremy Thurgood <firxen@gmail.com>
parents: 333
diff changeset
77 vec = vec_with_length((dx, dy), self.impulse_factor)
a3f1b2f0e3fb Physics-related cleanup.
Jeremy Thurgood <firxen@gmail.com>
parents: 333
diff changeset
78 self.angle = vec.angle
a3f1b2f0e3fb Physics-related cleanup.
Jeremy Thurgood <firxen@gmail.com>
parents: 333
diff changeset
79 self.physicser.apply_impulse(vec)
a3f1b2f0e3fb Physics-related cleanup.
Jeremy Thurgood <firxen@gmail.com>
parents: 333
diff changeset
80
333
3dd32686dbc3 Better wolf claw attack.
Jeremy Thurgood <firxen@gmail.com>
parents: 318
diff changeset
81 def collide_with_protagonist(self, protagonist):
3dd32686dbc3 Better wolf claw attack.
Jeremy Thurgood <firxen@gmail.com>
parents: 318
diff changeset
82 if self.enemy_damage is not None:
3dd32686dbc3 Better wolf claw attack.
Jeremy Thurgood <firxen@gmail.com>
parents: 318
diff changeset
83 protagonist.lose_health(self.enemy_damage)
3dd32686dbc3 Better wolf claw attack.
Jeremy Thurgood <firxen@gmail.com>
parents: 318
diff changeset
84
3dd32686dbc3 Better wolf claw attack.
Jeremy Thurgood <firxen@gmail.com>
parents: 318
diff changeset
85 def collide_with_claw_attack(self, claw_attack):
3dd32686dbc3 Better wolf claw attack.
Jeremy Thurgood <firxen@gmail.com>
parents: 318
diff changeset
86 self.lose_health(claw_attack.damage)
3dd32686dbc3 Better wolf claw attack.
Jeremy Thurgood <firxen@gmail.com>
parents: 318
diff changeset
87
366
9898fa231c4b Move ranged attack code to Enemy. Don't shoot through solid objects
Stefano Rivera <stefano@rivera.za.net>
parents: 363
diff changeset
88 def ranged_attack(self, range_, speed, damage, type_, reload_time):
9898fa231c4b Move ranged attack code to Enemy. Don't shoot through solid objects
Stefano Rivera <stefano@rivera.za.net>
parents: 363
diff changeset
89 pos = self.physicser.position
9898fa231c4b Move ranged attack code to Enemy. Don't shoot through solid objects
Stefano Rivera <stefano@rivera.za.net>
parents: 363
diff changeset
90 target = self.world.protagonist.get_shape().body.position
9898fa231c4b Move ranged attack code to Enemy. Don't shoot through solid objects
Stefano Rivera <stefano@rivera.za.net>
parents: 363
diff changeset
91
9898fa231c4b Move ranged attack code to Enemy. Don't shoot through solid objects
Stefano Rivera <stefano@rivera.za.net>
parents: 363
diff changeset
92 r = self.get_space().segment_query(pos, target)
9898fa231c4b Move ranged attack code to Enemy. Don't shoot through solid objects
Stefano Rivera <stefano@rivera.za.net>
parents: 363
diff changeset
93 for collision in r:
9898fa231c4b Move ranged attack code to Enemy. Don't shoot through solid objects
Stefano Rivera <stefano@rivera.za.net>
parents: 363
diff changeset
94 shape = collision.shape
9898fa231c4b Move ranged attack code to Enemy. Don't shoot through solid objects
Stefano Rivera <stefano@rivera.za.net>
parents: 363
diff changeset
95 if (shape in (self.get_shape(), self.world.protagonist.get_shape())
9898fa231c4b Move ranged attack code to Enemy. Don't shoot through solid objects
Stefano Rivera <stefano@rivera.za.net>
parents: 363
diff changeset
96 or shape.sensor):
9898fa231c4b Move ranged attack code to Enemy. Don't shoot through solid objects
Stefano Rivera <stefano@rivera.za.net>
parents: 363
diff changeset
97 continue
9898fa231c4b Move ranged attack code to Enemy. Don't shoot through solid objects
Stefano Rivera <stefano@rivera.za.net>
parents: 363
diff changeset
98 return
9898fa231c4b Move ranged attack code to Enemy. Don't shoot through solid objects
Stefano Rivera <stefano@rivera.za.net>
parents: 363
diff changeset
99
372
024304f6d068 Use timers for enemy ballistics cooldown.
Jeremy Thurgood <firxen@gmail.com>
parents: 368
diff changeset
100 if not self.check_timer('reload_time'):
024304f6d068 Use timers for enemy ballistics cooldown.
Jeremy Thurgood <firxen@gmail.com>
parents: 368
diff changeset
101 self.start_timer('reload_time', reload_time)
366
9898fa231c4b Move ranged attack code to Enemy. Don't shoot through solid objects
Stefano Rivera <stefano@rivera.za.net>
parents: 363
diff changeset
102 vec = Vec2d((target.x - pos.x, target.y - pos.y))
9898fa231c4b Move ranged attack code to Enemy. Don't shoot through solid objects
Stefano Rivera <stefano@rivera.za.net>
parents: 363
diff changeset
103 if vec.length < range_:
9898fa231c4b Move ranged attack code to Enemy. Don't shoot through solid objects
Stefano Rivera <stefano@rivera.za.net>
parents: 363
diff changeset
104 vec.length = speed
9898fa231c4b Move ranged attack code to Enemy. Don't shoot through solid objects
Stefano Rivera <stefano@rivera.za.net>
parents: 363
diff changeset
105 FireEvent.post(pos, vec, damage, type_,
9898fa231c4b Move ranged attack code to Enemy. Don't shoot through solid objects
Stefano Rivera <stefano@rivera.za.net>
parents: 363
diff changeset
106 COLLISION_TYPE_ENEMY)
9898fa231c4b Move ranged attack code to Enemy. Don't shoot through solid objects
Stefano Rivera <stefano@rivera.za.net>
parents: 363
diff changeset
107
368
57895217bd74 Start refactoring alien movement
Neil Muller <drnlmuller@gmail.com>
parents: 366
diff changeset
108 def greedy_move(self, target):
57895217bd74 Start refactoring alien movement
Neil Muller <drnlmuller@gmail.com>
parents: 366
diff changeset
109 """Simple greedy path finder"""
57895217bd74 Start refactoring alien movement
Neil Muller <drnlmuller@gmail.com>
parents: 366
diff changeset
110 def _calc_step(tp, pp):
57895217bd74 Start refactoring alien movement
Neil Muller <drnlmuller@gmail.com>
parents: 366
diff changeset
111 if (tp < pp):
57895217bd74 Start refactoring alien movement
Neil Muller <drnlmuller@gmail.com>
parents: 366
diff changeset
112 step = max(-1, tp - pp)
57895217bd74 Start refactoring alien movement
Neil Muller <drnlmuller@gmail.com>
parents: 366
diff changeset
113 elif (tp > pp):
57895217bd74 Start refactoring alien movement
Neil Muller <drnlmuller@gmail.com>
parents: 366
diff changeset
114 step = min(1, tp - pp)
57895217bd74 Start refactoring alien movement
Neil Muller <drnlmuller@gmail.com>
parents: 366
diff changeset
115 if abs(step) < 0.5:
57895217bd74 Start refactoring alien movement
Neil Muller <drnlmuller@gmail.com>
parents: 366
diff changeset
116 step = 0
57895217bd74 Start refactoring alien movement
Neil Muller <drnlmuller@gmail.com>
parents: 366
diff changeset
117 return step
57895217bd74 Start refactoring alien movement
Neil Muller <drnlmuller@gmail.com>
parents: 366
diff changeset
118 x_step = _calc_step(target[0], self.physicser.position[0])
57895217bd74 Start refactoring alien movement
Neil Muller <drnlmuller@gmail.com>
parents: 366
diff changeset
119 y_step = _calc_step(target[1], self.physicser.position[1])
57895217bd74 Start refactoring alien movement
Neil Muller <drnlmuller@gmail.com>
parents: 366
diff changeset
120 return (x_step, y_step)
57895217bd74 Start refactoring alien movement
Neil Muller <drnlmuller@gmail.com>
parents: 366
diff changeset
121
57895217bd74 Start refactoring alien movement
Neil Muller <drnlmuller@gmail.com>
parents: 366
diff changeset
122 def random_move(self):
57895217bd74 Start refactoring alien movement
Neil Muller <drnlmuller@gmail.com>
parents: 366
diff changeset
123 """Random move"""
57895217bd74 Start refactoring alien movement
Neil Muller <drnlmuller@gmail.com>
parents: 366
diff changeset
124 x_step = random.choice([-1, 0, 1])
57895217bd74 Start refactoring alien movement
Neil Muller <drnlmuller@gmail.com>
parents: 366
diff changeset
125 y_step = random.choice([-1, 0, 1])
57895217bd74 Start refactoring alien movement
Neil Muller <drnlmuller@gmail.com>
parents: 366
diff changeset
126 return x_step, y_step
57895217bd74 Start refactoring alien movement
Neil Muller <drnlmuller@gmail.com>
parents: 366
diff changeset
127
385
51deb78cae52 Use a result object to get new drawables back to the area
Stefano Rivera <stefano@rivera.za.net>
parents: 372
diff changeset
128 def update(self, dt):
51deb78cae52 Use a result object to get new drawables back to the area
Stefano Rivera <stefano@rivera.za.net>
parents: 372
diff changeset
129 super(Enemy, self).update(dt)
51deb78cae52 Use a result object to get new drawables back to the area
Stefano Rivera <stefano@rivera.za.net>
parents: 372
diff changeset
130 if self.health <= 0:
51deb78cae52 Use a result object to get new drawables back to the area
Stefano Rivera <stefano@rivera.za.net>
parents: 372
diff changeset
131 return Result(remove=[self])
51deb78cae52 Use a result object to get new drawables back to the area
Stefano Rivera <stefano@rivera.za.net>
parents: 372
diff changeset
132
308
3dee86b6c216 Enemies leave corpses
Stefano Rivera <stefano@rivera.za.net>
parents: 307
diff changeset
133
3dee86b6c216 Enemies leave corpses
Stefano Rivera <stefano@rivera.za.net>
parents: 307
diff changeset
134 class DeadEnemy(GameObject):
3dee86b6c216 Enemies leave corpses
Stefano Rivera <stefano@rivera.za.net>
parents: 307
diff changeset
135 def __init__(self, space, world, position, enemy_type='A'):
3dee86b6c216 Enemies leave corpses
Stefano Rivera <stefano@rivera.za.net>
parents: 307
diff changeset
136 body = make_body(10, 10000, position, damping=0.5)
3dee86b6c216 Enemies leave corpses
Stefano Rivera <stefano@rivera.za.net>
parents: 307
diff changeset
137 self.shape = pymunk.Poly(
3dee86b6c216 Enemies leave corpses
Stefano Rivera <stefano@rivera.za.net>
parents: 307
diff changeset
138 body, [(-20, -20), (20, -20), (20, 20), (-20, 20)])
3dee86b6c216 Enemies leave corpses
Stefano Rivera <stefano@rivera.za.net>
parents: 307
diff changeset
139 self.shape.friction = 0.5
318
26d1978fa1da BOX is no longer accurate
Stefano Rivera <stefano@rivera.za.net>
parents: 310
diff changeset
140 self.shape.collision_type = COLLISION_TYPE_FURNITURE
308
3dee86b6c216 Enemies leave corpses
Stefano Rivera <stefano@rivera.za.net>
parents: 307
diff changeset
141 super(DeadEnemy, self).__init__(
3dee86b6c216 Enemies leave corpses
Stefano Rivera <stefano@rivera.za.net>
parents: 307
diff changeset
142 SingleShapePhysicser(space, self.shape),
3dee86b6c216 Enemies leave corpses
Stefano Rivera <stefano@rivera.za.net>
parents: 307
diff changeset
143 render.ImageRenderer(resources.get_image(
3dee86b6c216 Enemies leave corpses
Stefano Rivera <stefano@rivera.za.net>
parents: 307
diff changeset
144 'creatures', 'alien_%s_dead.png' % enemy_type)),
3dee86b6c216 Enemies leave corpses
Stefano Rivera <stefano@rivera.za.net>
parents: 307
diff changeset
145 )
3dee86b6c216 Enemies leave corpses
Stefano Rivera <stefano@rivera.za.net>
parents: 307
diff changeset
146
3dee86b6c216 Enemies leave corpses
Stefano Rivera <stefano@rivera.za.net>
parents: 307
diff changeset
147 @classmethod
3dee86b6c216 Enemies leave corpses
Stefano Rivera <stefano@rivera.za.net>
parents: 307
diff changeset
148 def requires(cls):
3dee86b6c216 Enemies leave corpses
Stefano Rivera <stefano@rivera.za.net>
parents: 307
diff changeset
149 return [("name", "string"), ("position", "coordinates")]
305
ce11e1cae0ed Enemies now die
Stefano Rivera <stefano@rivera.za.net>
parents: 278
diff changeset
150
168
ce8d4fc3baf4 A patrolling alien
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
151
ce8d4fc3baf4 A patrolling alien
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
152 class PatrollingAlien(Enemy):
218
9e2ef2f15035 Better rendering and movement detection.
Jeremy Thurgood <firxen@gmail.com>
parents: 217
diff changeset
153 is_moving = True # Always walking.
308
3dee86b6c216 Enemies leave corpses
Stefano Rivera <stefano@rivera.za.net>
parents: 307
diff changeset
154 enemy_type = 'A'
334
a3f1b2f0e3fb Physics-related cleanup.
Jeremy Thurgood <firxen@gmail.com>
parents: 333
diff changeset
155 health = 42
341
63d0c70a4e15 Enemies can hurt things again. (Oops.)
Jeremy Thurgood <firxen@gmail.com>
parents: 334
diff changeset
156 enemy_damage = 15
334
a3f1b2f0e3fb Physics-related cleanup.
Jeremy Thurgood <firxen@gmail.com>
parents: 333
diff changeset
157 impulse_factor = 50
168
ce8d4fc3baf4 A patrolling alien
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
158
277
56e42c00da25 Protagonist and enemies should see the world
Neil Muller <drnlmuller@gmail.com>
parents: 265
diff changeset
159 def __init__(self, space, world, position, end_position):
168
ce8d4fc3baf4 A patrolling alien
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
160 # 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
161 super(PatrollingAlien, self).__init__(space, world, position)
168
ce8d4fc3baf4 A patrolling alien
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
162 self._start_pos = position
ce8d4fc3baf4 A patrolling alien
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
163 self._end_pos = end_position
ce8d4fc3baf4 A patrolling alien
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
164 self._direction = 'away'
ce8d4fc3baf4 A patrolling alien
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
165
334
a3f1b2f0e3fb Physics-related cleanup.
Jeremy Thurgood <firxen@gmail.com>
parents: 333
diff changeset
166 def make_physics(self, space, position):
a3f1b2f0e3fb Physics-related cleanup.
Jeremy Thurgood <firxen@gmail.com>
parents: 333
diff changeset
167 body = make_body(10, pymunk.inf, position, 0.8)
a3f1b2f0e3fb Physics-related cleanup.
Jeremy Thurgood <firxen@gmail.com>
parents: 333
diff changeset
168 shape = pymunk.Circle(body, 30)
a3f1b2f0e3fb Physics-related cleanup.
Jeremy Thurgood <firxen@gmail.com>
parents: 333
diff changeset
169 shape.elasticity = 1.0
a3f1b2f0e3fb Physics-related cleanup.
Jeremy Thurgood <firxen@gmail.com>
parents: 333
diff changeset
170 shape.friction = 0.05
a3f1b2f0e3fb Physics-related cleanup.
Jeremy Thurgood <firxen@gmail.com>
parents: 333
diff changeset
171 shape.collision_type = COLLISION_TYPE_ENEMY
a3f1b2f0e3fb Physics-related cleanup.
Jeremy Thurgood <firxen@gmail.com>
parents: 333
diff changeset
172 return SingleShapePhysicser(space, shape)
168
ce8d4fc3baf4 A patrolling alien
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
173
ce8d4fc3baf4 A patrolling alien
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
174 def get_render_angle(self):
229
329b3044ddef Much better facing renderers.
Jeremy Thurgood <firxen@gmail.com>
parents: 218
diff changeset
175 # No image rotation when rendering, please.
329b3044ddef Much better facing renderers.
Jeremy Thurgood <firxen@gmail.com>
parents: 218
diff changeset
176 return 0
329b3044ddef Much better facing renderers.
Jeremy Thurgood <firxen@gmail.com>
parents: 218
diff changeset
177
329b3044ddef Much better facing renderers.
Jeremy Thurgood <firxen@gmail.com>
parents: 218
diff changeset
178 def get_facing_direction(self):
329b3044ddef Much better facing renderers.
Jeremy Thurgood <firxen@gmail.com>
parents: 218
diff changeset
179 # Enemies can face left or right.
329b3044ddef Much better facing renderers.
Jeremy Thurgood <firxen@gmail.com>
parents: 218
diff changeset
180 if - math.pi / 2 < self.angle <= math.pi / 2:
329b3044ddef Much better facing renderers.
Jeremy Thurgood <firxen@gmail.com>
parents: 218
diff changeset
181 return 'right'
329b3044ddef Much better facing renderers.
Jeremy Thurgood <firxen@gmail.com>
parents: 218
diff changeset
182 else:
329b3044ddef Much better facing renderers.
Jeremy Thurgood <firxen@gmail.com>
parents: 218
diff changeset
183 return 'left'
168
ce8d4fc3baf4 A patrolling alien
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
184
ce8d4fc3baf4 A patrolling alien
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
185 def _switch_direction(self):
ce8d4fc3baf4 A patrolling alien
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
186 if self._direction == 'away':
ce8d4fc3baf4 A patrolling alien
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
187 self._direction = 'towards'
ce8d4fc3baf4 A patrolling alien
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
188 else:
ce8d4fc3baf4 A patrolling alien
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
189 self._direction = 'away'
ce8d4fc3baf4 A patrolling alien
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
190
333
3dd32686dbc3 Better wolf claw attack.
Jeremy Thurgood <firxen@gmail.com>
parents: 318
diff changeset
191 def update(self, dt):
168
ce8d4fc3baf4 A patrolling alien
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
192 # Calculate the step every frame
ce8d4fc3baf4 A patrolling alien
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
193 if self._direction == 'away':
ce8d4fc3baf4 A patrolling alien
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
194 target = self._end_pos
ce8d4fc3baf4 A patrolling alien
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
195 else:
ce8d4fc3baf4 A patrolling alien
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
196 target = self._start_pos
368
57895217bd74 Start refactoring alien movement
Neil Muller <drnlmuller@gmail.com>
parents: 366
diff changeset
197 x_step, y_step = self.greedy_move(target)
168
ce8d4fc3baf4 A patrolling alien
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
198 if abs(x_step) < 1 and abs(y_step) < 1:
ce8d4fc3baf4 A patrolling alien
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
199 self._switch_direction()
ce8d4fc3baf4 A patrolling alien
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
200 self.set_direction(x_step, y_step)
366
9898fa231c4b Move ranged attack code to Enemy. Don't shoot through solid objects
Stefano Rivera <stefano@rivera.za.net>
parents: 363
diff changeset
201 self.ranged_attack(300, ACID_SPEED, ACID_DAMAGE, 'acid', 0.2)
385
51deb78cae52 Use a result object to get new drawables back to the area
Stefano Rivera <stefano@rivera.za.net>
parents: 372
diff changeset
202 return super(PatrollingAlien, self).update(dt)
258
083053422a84 Added collision damage with enemies.
David Sharpe
parents: 235
diff changeset
203
235
831e4f6b3d18 Add hints for the level editor
Neil Muller <drnlmuller@gmail.com>
parents: 229
diff changeset
204 @classmethod
831e4f6b3d18 Add hints for the level editor
Neil Muller <drnlmuller@gmail.com>
parents: 229
diff changeset
205 def requires(cls):
831e4f6b3d18 Add hints for the level editor
Neil Muller <drnlmuller@gmail.com>
parents: 229
diff changeset
206 return [("name", "string"), ("position", "coordinates"),
831e4f6b3d18 Add hints for the level editor
Neil Muller <drnlmuller@gmail.com>
parents: 229
diff changeset
207 ("end_position", "coordinates")]
278
e72025e9aa07 simple slow charging alien
Neil Muller <drnlmuller@gmail.com>
parents: 277
diff changeset
208
e72025e9aa07 simple slow charging alien
Neil Muller <drnlmuller@gmail.com>
parents: 277
diff changeset
209
e72025e9aa07 simple slow charging alien
Neil Muller <drnlmuller@gmail.com>
parents: 277
diff changeset
210 class ChargingAlien(Enemy):
e72025e9aa07 simple slow charging alien
Neil Muller <drnlmuller@gmail.com>
parents: 277
diff changeset
211 # Simplistic charging of the protagonist
e72025e9aa07 simple slow charging alien
Neil Muller <drnlmuller@gmail.com>
parents: 277
diff changeset
212 is_moving = False
308
3dee86b6c216 Enemies leave corpses
Stefano Rivera <stefano@rivera.za.net>
parents: 307
diff changeset
213 enemy_type = 'B'
334
a3f1b2f0e3fb Physics-related cleanup.
Jeremy Thurgood <firxen@gmail.com>
parents: 333
diff changeset
214 health = 42
341
63d0c70a4e15 Enemies can hurt things again. (Oops.)
Jeremy Thurgood <firxen@gmail.com>
parents: 334
diff changeset
215 enemy_damage = 20
334
a3f1b2f0e3fb Physics-related cleanup.
Jeremy Thurgood <firxen@gmail.com>
parents: 333
diff changeset
216 impulse_factor = 300
278
e72025e9aa07 simple slow charging alien
Neil Muller <drnlmuller@gmail.com>
parents: 277
diff changeset
217
e72025e9aa07 simple slow charging alien
Neil Muller <drnlmuller@gmail.com>
parents: 277
diff changeset
218 def __init__(self, space, world, position, attack_range=100):
e72025e9aa07 simple slow charging alien
Neil Muller <drnlmuller@gmail.com>
parents: 277
diff changeset
219 super(ChargingAlien, self).__init__(space, world, position)
e72025e9aa07 simple slow charging alien
Neil Muller <drnlmuller@gmail.com>
parents: 277
diff changeset
220 self._range = attack_range
e72025e9aa07 simple slow charging alien
Neil Muller <drnlmuller@gmail.com>
parents: 277
diff changeset
221
334
a3f1b2f0e3fb Physics-related cleanup.
Jeremy Thurgood <firxen@gmail.com>
parents: 333
diff changeset
222 def make_physics(self, space, position):
a3f1b2f0e3fb Physics-related cleanup.
Jeremy Thurgood <firxen@gmail.com>
parents: 333
diff changeset
223 body = make_body(100, pymunk.inf, position, 0.8)
a3f1b2f0e3fb Physics-related cleanup.
Jeremy Thurgood <firxen@gmail.com>
parents: 333
diff changeset
224 shape = pymunk.Circle(body, 30)
a3f1b2f0e3fb Physics-related cleanup.
Jeremy Thurgood <firxen@gmail.com>
parents: 333
diff changeset
225 shape.elasticity = 1.0
a3f1b2f0e3fb Physics-related cleanup.
Jeremy Thurgood <firxen@gmail.com>
parents: 333
diff changeset
226 shape.friction = 0.05
a3f1b2f0e3fb Physics-related cleanup.
Jeremy Thurgood <firxen@gmail.com>
parents: 333
diff changeset
227 shape.collision_type = COLLISION_TYPE_ENEMY
a3f1b2f0e3fb Physics-related cleanup.
Jeremy Thurgood <firxen@gmail.com>
parents: 333
diff changeset
228 return SingleShapePhysicser(space, shape)
278
e72025e9aa07 simple slow charging alien
Neil Muller <drnlmuller@gmail.com>
parents: 277
diff changeset
229
e72025e9aa07 simple slow charging alien
Neil Muller <drnlmuller@gmail.com>
parents: 277
diff changeset
230 def get_render_angle(self):
e72025e9aa07 simple slow charging alien
Neil Muller <drnlmuller@gmail.com>
parents: 277
diff changeset
231 # No image rotation when rendering, please.
e72025e9aa07 simple slow charging alien
Neil Muller <drnlmuller@gmail.com>
parents: 277
diff changeset
232 return 0
e72025e9aa07 simple slow charging alien
Neil Muller <drnlmuller@gmail.com>
parents: 277
diff changeset
233
e72025e9aa07 simple slow charging alien
Neil Muller <drnlmuller@gmail.com>
parents: 277
diff changeset
234 def get_facing_direction(self):
e72025e9aa07 simple slow charging alien
Neil Muller <drnlmuller@gmail.com>
parents: 277
diff changeset
235 # Enemies can face left or right.
e72025e9aa07 simple slow charging alien
Neil Muller <drnlmuller@gmail.com>
parents: 277
diff changeset
236 if - math.pi / 2 < self.angle <= math.pi / 2:
e72025e9aa07 simple slow charging alien
Neil Muller <drnlmuller@gmail.com>
parents: 277
diff changeset
237 return 'right'
e72025e9aa07 simple slow charging alien
Neil Muller <drnlmuller@gmail.com>
parents: 277
diff changeset
238 else:
e72025e9aa07 simple slow charging alien
Neil Muller <drnlmuller@gmail.com>
parents: 277
diff changeset
239 return 'left'
e72025e9aa07 simple slow charging alien
Neil Muller <drnlmuller@gmail.com>
parents: 277
diff changeset
240
368
57895217bd74 Start refactoring alien movement
Neil Muller <drnlmuller@gmail.com>
parents: 366
diff changeset
241 def _calc_movement(self):
334
a3f1b2f0e3fb Physics-related cleanup.
Jeremy Thurgood <firxen@gmail.com>
parents: 333
diff changeset
242 pos = self.physicser.position
278
e72025e9aa07 simple slow charging alien
Neil Muller <drnlmuller@gmail.com>
parents: 277
diff changeset
243 target = self.world.protagonist.get_shape().body.position
e72025e9aa07 simple slow charging alien
Neil Muller <drnlmuller@gmail.com>
parents: 277
diff changeset
244 if pos.get_distance(target) > self._range:
e72025e9aa07 simple slow charging alien
Neil Muller <drnlmuller@gmail.com>
parents: 277
diff changeset
245 # stop
e72025e9aa07 simple slow charging alien
Neil Muller <drnlmuller@gmail.com>
parents: 277
diff changeset
246 self.is_moving = False
368
57895217bd74 Start refactoring alien movement
Neil Muller <drnlmuller@gmail.com>
parents: 366
diff changeset
247 return 0, 0
278
e72025e9aa07 simple slow charging alien
Neil Muller <drnlmuller@gmail.com>
parents: 277
diff changeset
248 self.is_moving = True
368
57895217bd74 Start refactoring alien movement
Neil Muller <drnlmuller@gmail.com>
parents: 366
diff changeset
249 dx, dy = self.greedy_move(target)
57895217bd74 Start refactoring alien movement
Neil Muller <drnlmuller@gmail.com>
parents: 366
diff changeset
250 return dx, dy
57895217bd74 Start refactoring alien movement
Neil Muller <drnlmuller@gmail.com>
parents: 366
diff changeset
251
57895217bd74 Start refactoring alien movement
Neil Muller <drnlmuller@gmail.com>
parents: 366
diff changeset
252 def update(self, dt):
57895217bd74 Start refactoring alien movement
Neil Muller <drnlmuller@gmail.com>
parents: 366
diff changeset
253 # Calculate the step every frame
57895217bd74 Start refactoring alien movement
Neil Muller <drnlmuller@gmail.com>
parents: 366
diff changeset
254 # Distance to the protagonist
57895217bd74 Start refactoring alien movement
Neil Muller <drnlmuller@gmail.com>
parents: 366
diff changeset
255 self.ranged_attack(300, ACID_SPEED, ACID_DAMAGE, 'acid', 0.2)
57895217bd74 Start refactoring alien movement
Neil Muller <drnlmuller@gmail.com>
parents: 366
diff changeset
256 dx, dy = self._calc_movement()
361
534eac55a178 ChargingEnemy spits acid
Stefano Rivera <stefano@rivera.za.net>
parents: 358
diff changeset
257 self.set_direction(dx, dy)
385
51deb78cae52 Use a result object to get new drawables back to the area
Stefano Rivera <stefano@rivera.za.net>
parents: 372
diff changeset
258 return super(ChargingAlien, self).update(dt)
278
e72025e9aa07 simple slow charging alien
Neil Muller <drnlmuller@gmail.com>
parents: 277
diff changeset
259
e72025e9aa07 simple slow charging alien
Neil Muller <drnlmuller@gmail.com>
parents: 277
diff changeset
260 @classmethod
e72025e9aa07 simple slow charging alien
Neil Muller <drnlmuller@gmail.com>
parents: 277
diff changeset
261 def requires(cls):
e72025e9aa07 simple slow charging alien
Neil Muller <drnlmuller@gmail.com>
parents: 277
diff changeset
262 return [("name", "string"), ("position", "coordinates"),
e72025e9aa07 simple slow charging alien
Neil Muller <drnlmuller@gmail.com>
parents: 277
diff changeset
263 ("attack_range", "distance")]
368
57895217bd74 Start refactoring alien movement
Neil Muller <drnlmuller@gmail.com>
parents: 366
diff changeset
264
57895217bd74 Start refactoring alien movement
Neil Muller <drnlmuller@gmail.com>
parents: 366
diff changeset
265
57895217bd74 Start refactoring alien movement
Neil Muller <drnlmuller@gmail.com>
parents: 366
diff changeset
266 class RunAndGunAlien(ChargingAlien):
57895217bd74 Start refactoring alien movement
Neil Muller <drnlmuller@gmail.com>
parents: 366
diff changeset
267 # Simplistic shooter
57895217bd74 Start refactoring alien movement
Neil Muller <drnlmuller@gmail.com>
parents: 366
diff changeset
268 # Move until we're in range, and then randomly
57895217bd74 Start refactoring alien movement
Neil Muller <drnlmuller@gmail.com>
parents: 366
diff changeset
269 impulse_factor = 90
57895217bd74 Start refactoring alien movement
Neil Muller <drnlmuller@gmail.com>
parents: 366
diff changeset
270 is_moving = True
57895217bd74 Start refactoring alien movement
Neil Muller <drnlmuller@gmail.com>
parents: 366
diff changeset
271
57895217bd74 Start refactoring alien movement
Neil Muller <drnlmuller@gmail.com>
parents: 366
diff changeset
272 def __init__(self, space, world, position, attack_range=100):
57895217bd74 Start refactoring alien movement
Neil Muller <drnlmuller@gmail.com>
parents: 366
diff changeset
273 super(RunAndGunAlien, self).__init__(space, world, position,
57895217bd74 Start refactoring alien movement
Neil Muller <drnlmuller@gmail.com>
parents: 366
diff changeset
274 attack_range)
57895217bd74 Start refactoring alien movement
Neil Muller <drnlmuller@gmail.com>
parents: 366
diff changeset
275 self.count = 0
57895217bd74 Start refactoring alien movement
Neil Muller <drnlmuller@gmail.com>
parents: 366
diff changeset
276 self._old_move = (0, 0)
57895217bd74 Start refactoring alien movement
Neil Muller <drnlmuller@gmail.com>
parents: 366
diff changeset
277
57895217bd74 Start refactoring alien movement
Neil Muller <drnlmuller@gmail.com>
parents: 366
diff changeset
278 def make_physics(self, space, position):
57895217bd74 Start refactoring alien movement
Neil Muller <drnlmuller@gmail.com>
parents: 366
diff changeset
279 body = make_body(10, pymunk.inf, position, 0.8)
57895217bd74 Start refactoring alien movement
Neil Muller <drnlmuller@gmail.com>
parents: 366
diff changeset
280 shape = pymunk.Circle(body, 30)
57895217bd74 Start refactoring alien movement
Neil Muller <drnlmuller@gmail.com>
parents: 366
diff changeset
281 shape.elasticity = 1.0
57895217bd74 Start refactoring alien movement
Neil Muller <drnlmuller@gmail.com>
parents: 366
diff changeset
282 shape.friction = 0.05
57895217bd74 Start refactoring alien movement
Neil Muller <drnlmuller@gmail.com>
parents: 366
diff changeset
283 shape.collision_type = COLLISION_TYPE_ENEMY
57895217bd74 Start refactoring alien movement
Neil Muller <drnlmuller@gmail.com>
parents: 366
diff changeset
284 return SingleShapePhysicser(space, shape)
57895217bd74 Start refactoring alien movement
Neil Muller <drnlmuller@gmail.com>
parents: 366
diff changeset
285
57895217bd74 Start refactoring alien movement
Neil Muller <drnlmuller@gmail.com>
parents: 366
diff changeset
286 def _calc_movement(self):
57895217bd74 Start refactoring alien movement
Neil Muller <drnlmuller@gmail.com>
parents: 366
diff changeset
287 pos = self.physicser.position
57895217bd74 Start refactoring alien movement
Neil Muller <drnlmuller@gmail.com>
parents: 366
diff changeset
288 target = self.world.protagonist.get_shape().body.position
57895217bd74 Start refactoring alien movement
Neil Muller <drnlmuller@gmail.com>
parents: 366
diff changeset
289 if pos.get_distance(target) < self._range:
57895217bd74 Start refactoring alien movement
Neil Muller <drnlmuller@gmail.com>
parents: 366
diff changeset
290 if self.count > 10:
57895217bd74 Start refactoring alien movement
Neil Muller <drnlmuller@gmail.com>
parents: 366
diff changeset
291 self._old_move = self.random_move()
57895217bd74 Start refactoring alien movement
Neil Muller <drnlmuller@gmail.com>
parents: 366
diff changeset
292 self.count = 0
57895217bd74 Start refactoring alien movement
Neil Muller <drnlmuller@gmail.com>
parents: 366
diff changeset
293 return self._old_move
57895217bd74 Start refactoring alien movement
Neil Muller <drnlmuller@gmail.com>
parents: 366
diff changeset
294 else:
57895217bd74 Start refactoring alien movement
Neil Muller <drnlmuller@gmail.com>
parents: 366
diff changeset
295 return self.greedy_move(target)
57895217bd74 Start refactoring alien movement
Neil Muller <drnlmuller@gmail.com>
parents: 366
diff changeset
296
57895217bd74 Start refactoring alien movement
Neil Muller <drnlmuller@gmail.com>
parents: 366
diff changeset
297 def update(self, dt):
57895217bd74 Start refactoring alien movement
Neil Muller <drnlmuller@gmail.com>
parents: 366
diff changeset
298 self.count += 1
385
51deb78cae52 Use a result object to get new drawables back to the area
Stefano Rivera <stefano@rivera.za.net>
parents: 372
diff changeset
299 return super(RunAndGunAlien, self).update(dt)
368
57895217bd74 Start refactoring alien movement
Neil Muller <drnlmuller@gmail.com>
parents: 366
diff changeset
300
57895217bd74 Start refactoring alien movement
Neil Muller <drnlmuller@gmail.com>
parents: 366
diff changeset
301 @classmethod
57895217bd74 Start refactoring alien movement
Neil Muller <drnlmuller@gmail.com>
parents: 366
diff changeset
302 def requires(cls):
57895217bd74 Start refactoring alien movement
Neil Muller <drnlmuller@gmail.com>
parents: 366
diff changeset
303 return [("name", "string"), ("position", "coordinates"),
57895217bd74 Start refactoring alien movement
Neil Muller <drnlmuller@gmail.com>
parents: 366
diff changeset
304 ("attack_range", "distance")]