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), )
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
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])
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)))
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), )
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), )
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)
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)
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), )
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), )