예제 #1
0
def create_trash_can(world, x, y, level_ent, item_name):
    return world.create_entity(
        Sprite("data/images/trash_can.png"),
        Position(x, y, level_ent),
        Collidable(match_components=[Inventory]),
        HitCircle(radius=25),
        Dispenser(item_name=item_name),
    )
예제 #2
0
def player_sprite_for(colour, facing):
    s = Sprite(
        "data/kenney_robot-pack_side/robot_blueDrive1.png",
        scale=0.25,
        draw_layer=CHARACTER_LAYER,
    )
    s._arcade_sprite.texture = player_texture_for(colour, facing)
    return s
예제 #3
0
def create_level_item(world, name, x, y, level_ent):
    level_item_data, _ = ITEM_DATA[name]
    return world.create_entity(
        LevelItem(name), HitCircle(level_item_data.radius),
        Collidable(match_components=[Inventory]), Position(x, y, level_ent),
        Sprite(level_item_data.image,
               scale=level_item_data.scale,
               draw_layer=ITEM_LAYER), Timeout(1),
        *[c.build() for c in level_item_data.component_classes])
예제 #4
0
def create_inventory_item_animation(world, source_ent, player_ent, index,
                                    inventory_item_data):
    start_pos = world.component_for_entity(source_ent, Position)
    mp = world.component_for_entity(player_ent, MultiplayerIdentifier)
    base_x = player_base_x(mp)
    end_pos = Position(base_x + 100 + INVENTORY_X_SPACING * index, INVENTORY_Y,
                       start_pos.level)
    world.create_entity(
        Sprite(inventory_item_data.image, 0.25), start_pos,
        SpriteEffects(ThrowToEffect(.5, start_pos, end_pos, 50),
                      FadeEffect(.8)))
예제 #5
0
def create_enemy(world, spawner_entity, position: Position):
    return world.create_entity(
        Velocity(0, 0),
        DesiredVelocity(0, 0),
        Position(position.x, position.y, position.level),
        Sprite(":resources:images/enemies/bee.png", scale=0.5),
        Enemy(spawner_entity),
        Health(1),
        Hurt(1, [Player]),
        FireballThrower(timeout=1),
        Collidable(match_components=[Player]),
        HitCircle(radius=25),
    )
예제 #6
0
def create_gate(world, obj, level_ent):
    level_listen = None
    if obj.properties.get("in_level", False):
        level_listen = level_ent
    closed_path, open_path, scale = GATE_SPRITES[obj.properties.get("sprite")][
        obj.properties.get("orientation")
    ]
    world.create_entity(
        Position(obj.x, obj.y, level_ent),
        Collidable(match_components=[Velocity]),
        HitPoly(obj.point_list),
        Barrier(),
        ChannelListener(
            channel=obj.properties.get("channel"),
            script=toggle_gate,
            level_ent=level_listen,
        ),
        Sprite(closed_path, scale, draw_layer=GATES_LAYER),
        Gate(open_path, closed_path),
    )
예제 #7
0
def use_lazorgun(world, message):
    if not world.has_component(message.payload['item_ent'], LazorGun):
        return
    if world.has_component(message.payload['item_ent'], Timeout):
        return

    player_ent = message.payload['player_ent']
    position = world.component_for_entity(player_ent, Position)
    facing = world.component_for_entity(player_ent, Facing)
    velocity = facing.velocity()
    velocity.magnitude = 1000
    world.create_entity(
        Sprite(":resources:images/items/star.png", scale=0.5),
        Position(x=position.x, y=position.y, level=position.level),
        velocity,
        Bullet(0.5, Enemy),
        Collidable(match_components=[Enemy]),
        HitCircle(radius=20),
    )
    world.add_component(message.payload['item_ent'], Timeout(0.5))
    create_sound(world, LAZOR_SOUND)
예제 #8
0
    def process(self, dt):
        for thrower_ent, (thrower, thrower_pos) in self.world.get_components(
                FireballThrower, Position):
            level = self.world.component_for_entity(thrower_pos.level, Level)
            if not level.active:
                continue

            thrower.timeout = max(0, thrower.timeout - dt)
            if thrower.timeout:
                continue

            choices = [
                pos
                for _, (p, pos) in self.world.get_components(Player, Position)
            ]
            if not choices:
                continue

            if thrower.use_facing:
                facing = self.world.component_for_entity(thrower_ent, Facing)
                v = facing.velocity()
                v.magnitude = 250
            else:
                target_pos = random.choice(choices)
                v = (-target_pos.point2().connect(
                    thrower_pos.point2()).v.normalize() * 250)
                v = Velocity(v.x, v.y)

            self.world.create_entity(
                Sprite(FIREBALL_IMAGE, scale=0.5),
                Position(x=thrower_pos.x,
                         y=thrower_pos.y,
                         level=thrower_pos.level), v,
                Collidable(match_components=[Player]), HitCircle(radius=10),
                Bullet(1, Player),
                SpriteEffects(SpinEffect(play_time=1, speed=-800)),
                HitEmitter(smoke_poof))
            create_sound(self.world, FIREBALL_SHOOT_SOUND)
            thrower.timeout = random.randint(1, 3)
예제 #9
0
def create_button(world, obj, level_ent):
    properties = obj.properties
    if properties is None:
        properties = {}
    channel = properties.get("channel")
    in_level = properties.get("in_level", False)

    match_components = locate_classes(properties, "match_components")
    avoid_components = locate_classes(properties, "avoid_components")
    up_image = "data/button_up_sprite.png"
    down_image = "data/button_down_sprite.png"
    return world.create_entity(
        Button(channel=channel,
               in_level=in_level,
               up_image=up_image,
               down_image=down_image),
        Position(x=obj.location.x, y=obj.location.y, level=level_ent),
        Collidable(match_components=match_components,
                   avoid_components=avoid_components),
        HitCircle(20),
        Sprite(up_image, scale=0.5),
    )
예제 #10
0
def create_prop(world, x, y, type, radius, level_ent):
    if type == "goat":
        comps = [
            Sprite("data/images/goat-1.png"),
            SpriteEffects(
                AnimatedTextureEffect([
                    (5, arcade.load_texture("data/images/goat-1.png")),
                    (0.05, arcade.load_texture("data/images/goat-2.png")),
                    (0.05, arcade.load_texture("data/images/goat-3.png")),
                    (0.5, arcade.load_texture("data/images/goat-4.png")),
                    (0.05, arcade.load_texture("data/images/goat-3.png")),
                    (0.05, arcade.load_texture("data/images/goat-2.png")),
                ])),
        ]

    if radius:
        comps.extend([Collidable(), HitCircle(radius)])

    world.create_entity(
        Prop(type),
        *comps,
        Position(x, y, level_ent),
    )