Beispiel #1
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)))
Beispiel #2
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
Beispiel #3
0
def create_cop(atlas, dispatcher, x, y):
    """
    Create a cop entity
    :param dispatcher:
    :return:
    """
    cop_entity = Entity(id='cop')
    t = Widget(*atlas.get_element('cop_r'))
    widget = deserialize_widget(repr(t))
    widget_component = WidgetComponent(dispatcher, widget, owner=cop_entity)
    position_component = WalkerComponent(dispatcher,
                                         x=x,
                                         y=y,
                                         owner=cop_entity)
    collision = WalkerCollisionComponent(dispatcher, owner=cop_entity)
    passing = PassingComponent(dispatcher,
                               shadow_pos=(0, 15),
                               shadow_size=(13, 3),
                               owner=cop_entity)
    dispatcher.add_event(
        BearEvent(event_type='ecs_create', event_value=cop_entity))
    dispatcher.add_event(
        BearEvent(event_type='ecs_add', event_value=('cop', x, y)))
Beispiel #4
0
            create_wall(dispatcher, atlas, f'wall{x}{y}', x * 6, y * 6)
# Spawner house is just an image. It doesn't even collide.
create_spawner_house(dispatcher, atlas, 35, 0)
# Actual spawning is done by this invisible listener:
spawner = SpawnerListener(dispatcher=dispatcher,
                          atlas=atlas,
                          x=36,
                          y=1,
                          cooldown=5.0,
                          enemies=3)
dispatcher.register_listener(spawner, ['tick', 'ecs_destroy'])
# These two are sidebar widgets, which can accept the events but are outside the
# ECSLayout (ie game map)
score = ScoreLabel(terminal)
dispatcher.register_listener(score, 'ecs_destroy')
hp = HPLabel(terminal)
dispatcher.register_listener(hp, 'ac_damage')
# And this listener should display the GAME OVER widget
gameover_widget = Widget(*atlas.get_element('game_over'))
gameover_listener = GameOverListener(terminal, widget=gameover_widget)
dispatcher.register_listener(gameover_listener, 'ecs_destroy')

################################################################################
# Launching
################################################################################

terminal.start()
terminal.add_widget(layout)
terminal.add_widget(score, pos=(85, 10))
terminal.add_widget(hp, pos=(85, 15))
loop.run()
Beispiel #5
0
def init_game():
    """
    Initalize all game variables and objects.
    :return:
    """
    global atlas
    global field
    global building
    global tetris
    global figures
    global t
    global attractor
    global attractor2
    global emitter
    global initial_figure
    global score
    global loop
    global dispatcher
    field = GravityField((60, 45))
    building = BuildingWidget((60, 45))
    tetris = TetrisSystem((60, 45))
    figures = FigureManager(field=field,
                            tetris=tetris,
                            dispatcher=dispatcher,
                            building=building,
                            atlas=atlas)
    figures.register_terminal(t)
    dispatcher.register_listener(
        figures, ['request_destruction', 'request_installation'])
    dispatcher.register_listener(building, ['square', 'h7', 'v7'])
    sound = SoundListener({
        'fly_away': 'Fly.wav',
        'explosion': 'Explosion.wav',
        'connect': 'Connect.wav',
        'fail': 'Fail.wav'
    })
    dispatcher.register_listener(sound, 'play_sound')
    # The construction's start
    building.add_figure(
        Widget([[' ', '*', ' '], ['*', '*', '*'], [' ', '*', ' ']],
               [['blue', 'blue', 'blue'], ['blue', 'blue', 'blue'],
                ['blue', 'blue', 'blue']]),
        pos=(29, 20))
    tetris[30][20] = 1
    tetris[29][21] = 1
    tetris[30][21] = 1
    tetris[31][21] = 1
    tetris[30][22] = 1

    # Emitter and attractors
    attractor = Attractor(*atlas.get_element('attractor'),
                          field=field,
                          mass=150)
    field.add_attractor(attractor, (10, 25))
    attractor2 = Attractor(*atlas.get_element('attractor'),
                           field=field,
                           mass=150)
    field.add_attractor(attractor2, (50, 25))
    dispatcher.register_listener(attractor,
                                 ['misc_input', 'key_up', 'key_down'])
    dispatcher.register_listener(attractor2,
                                 ['misc_input', 'key_up', 'key_down'])
    emitter = EmitterWidget(*atlas.get_element('emitter'),
                            manager=figures,
                            dispatcher=dispatcher,
                            tetris=tetris)
    dispatcher.register_listener(
        emitter,
        ['tick', 'service', 'request_installation', 'request_destruction'])
    initial_figure = figures.create_figure()
    dispatcher.register_listener(initial_figure, 'tick')
    score = ScoreCounter()
    dispatcher.register_listener(score, ['h7', 'v7', 'square'])
    # Adding stuff
    t.add_widget(score, pos=(39, 47), layer=1)
    t.add_widget(building, pos=(0, 0), layer=0)
    t.add_widget(attractor, pos=(10, 25), layer=1)
    t.add_widget(attractor2, pos=(50, 25), layer=3)
    t.add_widget(emitter, pos=(40, 40), layer=4)
    t.add_widget(initial_figure, pos=(25, 40), layer=6)
    dispatcher.add_event(
        BearEvent(event_type='request_destruction',
                  event_value=initial_figure))
Beispiel #6
0
dispatcher.register_listener(closing, ['misc_input', 'tick'])

# Game objects
# Init here so that the same objects can be reused (and safely created and
# destroyed) between multiple games
atlas = Atlas(XpLoader('indirectris.xp'), 'indirectris.json')
field = None
building = None
tetris = None
figures = None
attractor = None
attractor2 = None
emitter = None
score = None
initial_figure = None
sound = None

# Debug stuff
r = Refresher(t)
restart = RestartButton('RESTART', color='#ff0000ff')
losing = LosingListener(t, Widget(*atlas.get_element('loss')))
dispatcher.register_listener(losing, 'game_lost')
dispatcher.register_listener(r, 'service')
dispatcher.register_listener(restart, 'key_down')

t.start()
init_game()
t.add_widget(Widget(*atlas.get_element('bottom_bar')), pos=(0, 45), layer=0)
t.add_widget(restart, pos=(49, 47), layer=1)
loop.run()
Beispiel #7
0
 def update_bg(self, color):
     new_bg = Widget(copy_shape(self.chars, '.'),
                     copy_shape(self.colors, color))
     self.background = new_bg
Beispiel #8
0
t = BearTerminal(size='50x45',
                 title='Test window',
                 filter=['keyboard', 'mouse'])
dispatcher = BearEventDispatcher()
loop = BearLoop(t, dispatcher)
dispatcher.register_listener(ClosingListener(), ['misc_input', 'tick'])

# Fireworks box
box = FireworkBox([['.' for x in range(38)] for x in range(10)],
                  [['gray' for x in range(38)] for x in range(10)], dispatcher)
dispatcher.register_listener(box, ['key_down', 'service'])

# A tank, TXTLoader test
loader = TxtLoader('bear_hug/demo_assets/tank.txt')
tank1 = Widget(*loader.get_image_region(0, 0, 5, 6))
tank2 = Widget(*loader.get_image_region(6, 0, 5, 6))

# XPLoader tests
# A tree without layer2 apples
xploader = XpLoader('bear_hug/demo_assets/tree_lamp.xp')
lamp = Widget(*xploader.get_image_region(7, 1, 7, 8))

# Monitor, with BG loaded from XP atlas and widgets added in monitor.__init__
atlas = Atlas(XpLoader('bear_hug/demo_assets/test_atlas.xp'),
              'bear_hug/demo_assets/test_atlas.json')
monitor = DevMonitor(*atlas.get_element('dev_bg'), dispatcher)
dispatcher.register_listener(monitor, ['tick', 'service'])

# Barrel, an animation test
anim = Animation(