def six(self): x, y = self.get_spawn_pos() behaviours_list = [[behaviours.delay], [behaviours.spin]] + \ [[behaviours.shoot_fire, ang] for ang in range(0, 360, 90)] enemy = EnemyShip(x=x, y=y, score=300, img=res.cleaner, particle_data={'rgb': res.cleaner_colors}, track=self.ship, batch=self.main_batch, cb_type=CONSTS.ENEMY_CB_TYPE, behaviours=behaviours_list) self.enemies.append(enemy) def evader_bundle(self, x, y): x, y = self.get_spawn_pos(50) return [get_bouncer(self, x, y) for i in xrange(3)] choice = [ (evader_bundle, 75, 30), (get_tracker, 50, 60), (spawn_line, 100, 50), (get_splitter, 50, 50), (get_evader, 100, 40), (get_blackhole, 200, 30), (spawn_corner, 1000, 20, [5, get_evader]), # old not working with append (self.spawn_sin, 400, 10, ['old']) ] to_spawn = get_spawn_list(points, choice) rate = 1.0 play_time = 0 while(len(to_spawn) > 0): if random.randint(0, 100) <= random.expovariate(1 / rate) and len(self.state.enemies) <= 30: x, y = self.get_spawn_pos() fn, params = to_spawn.pop() if params: if params[0] == 'old': # hack, for old (spawn_sin) fn() else: fn(self, *params) else: ret = fn(self, x, y) if ret: # spawn_line hack # incredible hackishness (bundles/list) if hasattr(ret, '__len__'): self.enemies.extend(ret) else: self.enemies.append(ret) play_time += 1 yield True yield five
def spawn_line(self, x=None, y=None): x, y = self.get_spawn_pos(150) # spawn the first enemy of the line (the anchor) enemy1 = EnemyShip(behaviours=[[behaviours.link], [behaviours.delay, 0]], img=res.liner, track=self.ship, x=x, y=y, batch=self.main_batch, cb_type=CONSTS.ENEMY_LINE_CB_TYPE) # start sensor spawn sensors = [] for d in xrange(1, 4): sensors.append(Sensor(callbacks=[behaviours.link_sensor], img=res.liner, track=self.ship, x=x + res.tracker.width * d, y=y, batch=self.main_batch, cb_type=CONSTS.SENSOR_CB_TYPE)) for sensor in sensors: sensor.scale = 0.5 self.enemies.append(sensor) enemy2 = EnemyShip(behaviours=[[behaviours.link, enemy1, sensors], [behaviours.delay, 0]], img=res.liner, track=self.ship, x=x + 100, y=y, batch=self.main_batch, cb_type=CONSTS.ENEMY_LINE_CB_TYPE) # end sensor spawn self.enemies.append(enemy1) self.enemies.append(enemy2) return False
def four(self): x, y = self.get_spawn_pos() behaviours_list = [[behaviours.delay], [behaviours.spin]] + \ [[behaviours.shoot_fire, ang] for ang in range(0, 360, 90)] enemy = EnemyShip(x=x, y=y, score=300, img=res.cleaner, particle_data={'rgb': res.cleaner_colors}, track=self.ship, batch=self.main_batch, cb_type=CONSTS.ENEMY_CB_TYPE, behaviours=behaviours_list) self.enemies.append(enemy) yield five
def get_bouncer(self, x=False, y=False, spawn=False, delay=0): if not x: x, y = self.get_spawn_pos() behaviours_list = [[behaviours.bounce], [behaviours.delay, delay]] enemy = EnemyShip(x=x, y=y, score=25, img=res.bouncer, particle_data={'rgb': res.bouncer_colors}, track=self.ship, batch=self.main_batch, cb_type=CONSTS.ENEMY_CB_TYPE, behaviours=behaviours_list) if spawn: self.enemies.append(enemy) return enemy
def spawn_circle(self, dt=0): angles = [a * math.pi / 180 for a in range(1, 360, 20)] angles_ln = len(angles) / 100.0 for a in angles: # x2 + y2 = r2 x = math.cos(a) * 200 + self.ship.x y = math.sin(a) * 200 + self.ship.y behaviours_list = [ [behaviours.follow_player, 1 + float(a) / 1000], [behaviours.delay, a * 10], [behaviours.split]] enemy = EnemyShip(behaviours=behaviours_list, img=res.splitter, particle_data={'rgb': res.splitter_colors}, track=self.ship, x=x, y=y, batch=self.main_batch, cb_type=CONSTS.ENEMY_CB_TYPE) self.enemies.append(enemy)
def get_flanker(self, x=False, y=False, spawn=False, delay=0, horizontal=True): if not x: x, y = self.get_spawn_pos() behaviours_list = [ [behaviours.flank, horizontal], [behaviours.delay, delay]] enemy = EnemyShip(x=x, y=y, score=50, img=res.squeezer, particle_data={'rgb': res.squeezer_colors}, track=self.ship, batch=self.main_batch, cb_type=CONSTS.ENEMY_CB_TYPE, behaviours=behaviours_list,) if spawn: self.enemies.append(enemy) return enemy
def get_blackhole(self, x=False, y=False, spawn=False, delay=0): if not x: x, y = self.get_spawn_pos() behaviours_list = [ [behaviours.pulse], [behaviours.attract], [behaviours.black_hole], [behaviours.delay, delay]] enemy = EnemyShip(x=x, y=y, score=500, img=res.black_hole, particle_data={'rgb': res.black_hole_colors}, track=self.ship, batch=self.main_batch, cb_type=CONSTS.ENEMY_BLACK_HOLE, behaviours=behaviours_list, callbacks=[behaviours.black_hole_cb]) if spawn: self.enemies.append(enemy) return enemy
def spawn_sin(self, c_x=False, c_y=False): angles = [a * math.pi / 180 for a in range(1, 320, 20)] angles_ln = len(angles) / 100.0 sin_dir = 0 if c_x: sin_dir = 180 if c_x >= CONSTS.game_width else 0 if c_y: sin_dir = 90 if c_y >= CONSTS.game_height else 270 for i in xrange(len(angles)): a = angles[i] x = i * 50 + c_x if c_x else self.ship.x y = i * 50 + c_y if c_y else self.ship.y behaviours_list = [ [behaviours.by_sin, sin_dir], [behaviours.exits]] enemy = EnemyShip(behaviours=behaviours_list, img=res.evader, particle_data={'rgb': res.evader_colors}, track=self.ship, x=x, y=y, batch=self.main_batch, cb_type=CONSTS.ENEMY_CB_TYPE) self.enemies.append(enemy)
def spawn_enemy(self, x, y, e_type, delay=0, alpha=50): behaviours_list = [[behaviours.evade], [behaviours.follow_player, 3], [behaviours.delay, delay, alpha]] enemy = EnemyShip(x=x, y=y, behaviours=behaviours_list, **e_type) self.enemies.append(enemy)