예제 #1
0
def create_wall(dispatcher, atlas, entity_id, x, y):
    wall = Entity(entity_id)
    wall.add_component(PositionComponent(dispatcher, x, y))
    wall.add_component(CollisionComponent(dispatcher))
    wall.add_component(PassingComponent(dispatcher))
    wall.add_component(DestructorComponent(dispatcher))
    images_dict = {
        'wall_3': atlas.get_element('wall_3'),
        'wall_2': atlas.get_element('wall_2'),
        'wall_1': atlas.get_element('wall_1')
    }
    wall.add_component(
        SwitchWidgetComponent(
            dispatcher,
            SwitchingWidget(images_dict=images_dict, initial_image='wall_3')))
    wall.add_component(
        VisualDamageHealthComponent(dispatcher,
                                    hitpoints=3,
                                    widgets_dict={
                                        3: 'wall_3',
                                        2: 'wall_2',
                                        1: 'wall_1'
                                    }))

    dispatcher.add_event(BearEvent('ecs_create', wall))
    dispatcher.add_event(
        BearEvent('ecs_add', (wall.id, wall.position.x, wall.position.y)))
    pass
예제 #2
0
def create_enemy_tank(dispatcher, atlas, entity_id, x, y):
    # ControllerComponent
    # DestructorHealthComponent
    # WalkerCollisionComponent
    # SwitchWidgetComponent
    enemy = Entity(id=entity_id)
    # Adding all necessary components, in our case input (which also spawns
    # bullets), two collision-related ones, position, health and a destructor
    # for orderly entity removal.
    enemy.add_component(WalkerCollisionComponent(dispatcher))
    enemy.add_component(PassingComponent(dispatcher))
    enemy.add_component(PositionComponent(dispatcher, x, y))
    enemy.add_component(DestructorHealthComponent(dispatcher, hitpoints=1))
    enemy.add_component(DestructorComponent(dispatcher))
    enemy.add_component(ControllerComponent(dispatcher))
    # Also a WidgetComponent, which requires a Widget
    images_dict = {
        'enemy_r': atlas.get_element('enemy_r'),
        'enemy_l': atlas.get_element('enemy_l'),
        'enemy_d': atlas.get_element('enemy_d'),
        'enemy_u': atlas.get_element('enemy_u')
    }
    enemy.add_component(
        SwitchWidgetComponent(
            dispatcher,
            SwitchingWidget(images_dict=images_dict, initial_image='enemy_r')))
    dispatcher.add_event(BearEvent('ecs_create', enemy))
    dispatcher.add_event(
        BearEvent('ecs_add', (enemy.id, enemy.position.x, enemy.position.y)))
    return enemy
예제 #3
0
def create_player_tank(dispatcher, atlas, x, y):
    # Creating the actual entity, which currently has only a name
    player = Entity(id='player')
    # Adding all necessary components, in our case input (which also spawns
    # bullets), two collision-related ones, position, health and a destructor
    # for orderly entity removal.
    player.add_component(InputComponent(dispatcher))
    player.add_component(WalkerCollisionComponent(dispatcher))
    player.add_component(PassingComponent(dispatcher))
    player.add_component(PositionComponent(dispatcher, x, y))
    player.add_component(DestructorHealthComponent(dispatcher, hitpoints=5))
    player.add_component(DestructorComponent(dispatcher))
    # Also a WidgetComponent, which requires a Widget
    images_dict = {
        'player_r': atlas.get_element('player_r'),
        'player_l': atlas.get_element('player_l'),
        'player_d': atlas.get_element('player_d'),
        'player_u': atlas.get_element('player_u')
    }
    player.add_component(
        SwitchWidgetComponent(
            dispatcher,
            SwitchingWidget(images_dict=images_dict,
                            initial_image='player_r')))
    dispatcher.add_event(BearEvent('ecs_create', player))
    dispatcher.add_event(
        BearEvent('ecs_add',
                  (player.id, player.position.x, player.position.y)))
    return player
예제 #4
0
def create_spawner_house(dispatcher, atlas, x, y):
    house = Entity('house')
    house.add_component(
        WidgetComponent(dispatcher, Widget(*atlas.get_element('spawner'))))
    house.add_component(DestructorComponent(dispatcher))
    house.add_component(PositionComponent(dispatcher, x, y))
    dispatcher.add_event(BearEvent('ecs_create', house))
    dispatcher.add_event(
        BearEvent('ecs_add', (house.id, house.position.x, house.position.y)))
예제 #5
0
def create_bullet(dispatcher, entity_id, x, y, vx, vy):
    bullet = Entity(entity_id)
    bullet.add_component(
        WidgetComponent(dispatcher, Widget([['*']], [['red']])))
    bullet.add_component(PositionComponent(dispatcher, x, y, vx, vy))
    bullet.add_component(ProjectileCollisionComponent(dispatcher, damage=1))
    bullet.add_component(DestructorComponent(dispatcher))
    dispatcher.add_event(BearEvent('ecs_create', bullet))
    dispatcher.add_event(
        BearEvent('ecs_add',
                  (bullet.id, bullet.position.x, bullet.position.y)))
    return bullet
예제 #6
0
def create_barrel(atlas, dispatcher, x, y):
    barrel_entity = Entity(id='Barrel')
    widget = SimpleAnimationWidget(Animation(
        (atlas.get_element('barrel_1'), atlas.get_element('barrel_2')), 2),
                                   emit_ecs=True)
    widget_component = WidgetComponent(dispatcher, widget, owner=barrel_entity)
    position_component = PositionComponent(dispatcher,
                                           x=x,
                                           y=y,
                                           owner=barrel_entity)
    collision = CollisionComponent(dispatcher, owner=barrel_entity)
    dispatcher.add_event(
        BearEvent(event_type='ecs_create', event_value=barrel_entity))
    dispatcher.add_event(
        BearEvent(event_type='ecs_add', event_value=('Barrel', x, y)))