def __init__(self, mode, input_sources): super(GatherChallenge, self).__init__(mode, input_sources) startpos = py2d.Math.Vector(*crowd.constants.SCREEN_SIZE) / 2 self.players = [ChallengePlayer(self, isrc) for isrc in input_sources] self.player_entities = [ ec.Entity(self, [ ec.Position(startpos.clone()), ec.Movement(speed=crowd.constants.GATHER_PLAYER_SPEED), ec.Physics( decay_factor=crowd.constants.GATHER_PLAYER_SPEED_DECAY), ec.Owner(player), ec.Sprite(crowd.resource.image.cursor) ]) for player in self.players ] self.coin_entities = [ ec.Entity(self, [ ec.Position( py2d.Math.Vector( x * crowd.constants.SCREEN_SIZE[0] / (crowd.constants.GATHER_COINS_X), y * crowd.constants.SCREEN_SIZE[1] / (crowd.constants.GATHER_COINS_Y))), CoinComponent(), ec.Sprite(crowd.resource.image.coin) ]) for x in range(1, crowd.constants.GATHER_COINS_X) for y in range(1, crowd.constants.GATHER_COINS_Y) ] self.entities = self.coin_entities + self.player_entities
def __init__(self, mode, input_sources): super(JumpChallenge, self).__init__(mode, input_sources) startpos = py2d.Math.Vector(0, 0) self.camera = py2d.Math.Vector(*crowd.constants.SCREEN_SIZE) / -2 self.players = [ ChallengePlayer(self, isrc) for isrc in input_sources ] self.platform_positions = [ ( py2d.Math.Vector( math.sin( float(i) / crowd.constants.JUMP_PLATFORMS_PER_PHASE * math.pi) * crowd.constants.JUMP_PLATFORM_AMPLITUDE, (i+1) * -crowd.constants.JUMP_PLATFORM_STEP ), crowd.constants.JUMP_PLATFORM_WIDTH ) for i in range(100) ] self.player_entities = [ ec.Entity( self, [ ec.Position(startpos.clone()), ec.Movement(vertical=False, speed=crowd.constants.JUMP_PLAYER_SPEED), GravityJump(self.platform_positions), ec.Physics(decay_factor=crowd.constants.JUMP_PLAYER_SPEED_DECAY), ec.Owner(player), ec.Sprite(crowd.resource.image.cursor) ]) for player in self.players ] self.platform_entities = [ ec.Entity(self, [ ec.Position(pos), Platform(width) ]) for pos, width in self.platform_positions ] self.coin_entities = [ ec.Entity(self, [ ec.Position(pos + crowd.constants.JUMP_COIN_OFFSET), CoinComponent(gather_distance = crowd.constants.JUMP_GATHER_DISTANCE), ec.Sprite(crowd.resource.image.coin) ]) for pos, width in self.platform_positions ] self.entities = self.coin_entities + self.platform_entities + self.player_entities
def __init__(self, mode, input_sources): mode.game.player_color = (255, 255, 255) super(RainbowChallenge, self).__init__(mode, input_sources) startpos = py2d.Math.Vector(*crowd.constants.SCREEN_SIZE) / 2 self.rainbow = crowd.resource.image.rainbow self.rainbow_size = py2d.Math.Vector(*self.rainbow.get_size()) self.screen_size = py2d.Math.Vector(*crowd.constants.SCREEN_SIZE) self.players = [ ChallengePlayer(self, isrc) for isrc in input_sources ] self.player_entities = [ ec.Entity( self, [ ec.Position(startpos.clone()), ec.Movement(speed=crowd.constants.GATHER_PLAYER_SPEED), ec.Physics(decay_factor=crowd.constants.GATHER_PLAYER_SPEED_DECAY), ec.Owner(player), ec.Sprite(crowd.resource.image.cursor), TakeColor() ]) for player in self.players ] self.entities = self.player_entities
def __init__(self, mode, input_sources): super(RaceChallenge, self).__init__(mode, input_sources) transform = py2d.Math.Transform.scale( crowd.constants.RACE_TRACK_SCALING, crowd.constants.RACE_TRACK_SCALING) self.racetrack_coords = py2d.SVG.convert_svg( 'data/images/racetrack.svg', transform, bezier_max_divisions=3) self.racetrack_outer = self.racetrack_coords['track-outer'] self.racetrack_inner = self.racetrack_coords['track-inner'] self.racetrack_mid = self.racetrack_coords['track-mid'] startpos = self.racetrack_mid[0].points[52] self.camera = py2d.Math.Vector( *crowd.constants.SCREEN_SIZE) / -2 + startpos self.players = [ChallengePlayer(self, isrc) for isrc in input_sources] self.player_entities = [ ec.Entity( self, [ ec.Position(startpos.clone()), ec.Angle(math.pi / 2), Racer(self.racetrack_inner[0], self.racetrack_outer[0]), #ec.Physics(decay_factor=crowd.constants.JUMP_PLAYER_SPEED_DECAY), ec.Owner(player), ec.Sprite(crowd.resource.image.pointer) ]) for player in self.players ] self.racetrack_entity = ec.Entity( self, [Racetrack(self.racetrack_inner, self.racetrack_outer)]) self.coin_entities = [ ec.Entity(self, [ ec.Position(pos), CoinComponent( gather_distance=crowd.constants.JUMP_GATHER_DISTANCE), ec.Sprite(crowd.resource.image.coin) ]) for pos in self.racetrack_mid[0].points ] self.entities = [self.racetrack_entity ] + self.coin_entities + self.player_entities
def __init__(self, mode, input_sources): super(ShooterChallenge, self).__init__(mode, input_sources) startpos = py2d.Math.Vector(crowd.constants.SCREEN_SIZE[0] / 2, crowd.constants.SCREEN_SIZE[1] - 100) self.players = [ ChallengePlayer(self, isrc) for isrc in input_sources ] self.player_entities = [ ec.Entity( self, [ ec.Position(startpos.clone()), ec.Angle(math.pi / 2), ec.Movement(speed=crowd.constants.SHOOTER_PLAYER_SPEED, vertical=False), ec.Physics(decay_factor=crowd.constants.SHOOTER_PLAYER_SPEED_DECAY), ec.Owner(player), Fighter(), ec.Sprite(crowd.resource.image.pointer) ]) for player in self.players ] screen_size = py2d.Math.Vector(*crowd.constants.SCREEN_SIZE) target_positions = [ py2d.Math.Vector( (x - ( -0.25 + 0.5 * ( y % 2 ))) * (screen_size.x / (crowd.constants.SHOOTER_TARGETS_X )), y * (300 / crowd.constants.SHOOTER_TARGETS_Y) ) for x in range(1, crowd.constants.SHOOTER_TARGETS_X) for y in range(1, crowd.constants.SHOOTER_TARGETS_Y) ] print(target_positions) self.target_entities = [ ec.Entity( self, [ ec.Position(pos), ec.Sprite(crowd.resource.image.alien) ]) for pos in target_positions ] self.entities = self.target_entities + self.player_entities
def __init__(self, mode, input_sources): super(CaveChallenge, self).__init__(mode, input_sources) transform = py2d.Math.Transform.scale(crowd.constants.CAVE_SCALING, crowd.constants.CAVE_SCALING) self.cave = py2d.SVG.convert_svg('data/images/cave.svg', transform, bezier_max_divisions=2) startpos = self.cave['start'][0].points[0] coinspos = self.cave['coins'][0].points del self.cave['start'] del self.cave['coins'] self.camera = py2d.Math.Vector( *crowd.constants.SCREEN_SIZE) / -2 + startpos self.players = [ChallengePlayer(self, isrc) for isrc in input_sources] self.player_entities = [ ec.Entity(self, [ ec.Position(startpos.clone()), Flyer(list(itertools.chain(self.cave.values()))), ec.Physics( decay_factor=crowd.constants.JUMP_PLAYER_SPEED_DECAY), ec.Owner(player), ec.Sprite(crowd.resource.image.cursor) ]) for player in self.players ] self.cave_entity = ec.Entity( self, [Cave(list(itertools.chain(self.cave.values())))]) self.coin_entities = [ ec.Entity(self, [ ec.Position(pos), CoinComponent( gather_distance=crowd.constants.JUMP_GATHER_DISTANCE), ec.Sprite(crowd.resource.image.coin) ]) for pos in coinspos ] self.entities = [self.cave_entity ] + self.coin_entities + self.player_entities
def update(self, component, entity, event, time_elapsed): self.total_time += time_elapsed self.fire_cooldown = max(0, self.fire_cooldown - time_elapsed) owner = entity.handle('get_owner') position = entity.handle('get_position') if (owner.input.up or owner.input.a) and self.fire_cooldown == 0: self.fire_cooldown += self.fire_rate crowd.resource.sound.shoot.play() entity.challenge.entities.append(ec.Entity(entity.challenge, [ ec.Position(position + py2d.Math.VECTOR_Y * -20 + py2d.Math.VECTOR_X * math.sin(self.total_time / 10.0) * crowd.constants.SHOOTER_PLAYER_BULLET_DISTANCE), Projectile(), ec.Owner(owner), ec.Sprite(crowd.resource.image.projectile, hide_owner = True) ]))