示例#1
0
def renderer():  # to be called every frame to render every image in a list
    """
    ===========================================================================
    Blits everything to the screen that needs to be. Called every frame.
    ===========================================================================
    """

    if Room.prev_room:
        Helper.DISPLAY_SURFACE.blit(Room.prev_room.texture,
                                    Room.prev_room.position)
    Helper.DISPLAY_SURFACE.blit(Room.current_room.texture,
                                Room.current_room.position)
    Helper.DISPLAY_SURFACE.blit(Room.next_room.texture,
                                Room.next_room.position)

    Room.move_room()

    Helper.DISPLAY_SURFACE.blit(Player.Player.playerSurf,
                                Player.Player.playerPos)

    if Player.Player.inventoryIsOpen:
        Helper.DISPLAY_SURFACE.blit(
            ImageFiles.images['UI']['Inventory_Background'],
            Helper.INVENTORY_POSITION)

    for projectile in Projectile.attackSprites:
        Helper.DISPLAY_SURFACE.blit(projectile.sprite,
                                    (projectile.pos_x, projectile.pos_y))

    for enemy in Entity.enemy_list:
        Helper.DISPLAY_SURFACE.blit(enemy.sprite, enemy.pos)

    pygame.time.Clock().tick(Helper.REFRESH_RATE)
    pygame.display.flip()
示例#2
0
def renderer():
    """
    ===========================================================================
    Blits everything to the screen that needs to be.
        Called every frame to render every image in a list.
    ===========================================================================
    """

    if Room.prev_room:
        Helper.DISPLAY_SURFACE.blit(Room.prev_room.texture,
                                    Room.prev_room.position)
    Helper.DISPLAY_SURFACE.blit(Room.current_room.texture,
                                Room.current_room.position)
    Helper.DISPLAY_SURFACE.blit(Room.next_room.texture,
                                Room.next_room.position)

    Room.move_room()

    Helper.DISPLAY_SURFACE.blit(Player.Player.playerSurf,
                                Player.Player.playerPos)

    # display health bars

    for bar in Entity.health_bars:
        bar_background = pygame.Surface((bar.size[0] + 4, bar.size[1] + 4))
        bar_background.fill((0, 0, 0))
        bar_surface = pygame.Surface(
            (bar.size[0] * (bar.health / bar.max_health), bar.size[1]))

        bar_surface.fill(bar.colour)
        Helper.DISPLAY_SURFACE.blit(bar_background,
                                    (bar.pos[0] - 2, bar.pos[1] - 2))
        Helper.DISPLAY_SURFACE.blit(bar_surface, (bar.pos[0], bar.pos[1]))

    for projectile in Projectile.attackSprites:
        Helper.DISPLAY_SURFACE.blit(projectile.sprite,
                                    (projectile.pos_x, projectile.pos_y))

    # display inventory if it is open

    if Player.Player.inventoryIsOpen:
        Helper.DISPLAY_SURFACE.blit(
            ImageFiles.images['UI']['Inventory_Background'],
            Helper.INVENTORY_POSITION)

    # display enemies

    for enemy in Entity.enemy_list:
        Helper.DISPLAY_SURFACE.blit(enemy.sprite, enemy.pos)

    global message_to_display
    global time_since_last_display

    if message_to_display == '':

        if time_since_last_display < pygame.time.get_ticks() + display_delay\
                and len(display_messages) > 0:

            message_to_display = display_messages.pop(0)
            time_since_last_display = pygame.time.get_ticks()
    else:
        if time_since_last_display + display_time < pygame.time.get_ticks():
            message_to_display = ''

    text_surface = FONT_DISPLAY.render(message_to_display, False, Helper.WHITE)

    if text_surface.get_width() > Helper.DISPLAY_SURFACE.get_width():
        messages = message_to_display.split(',')
        index = 0
        for message in messages:
            if message is not '':
                if message not in display_messages:
                    display_messages.insert(0 + index, message)
                    index += 1

        text_surface = FONT_DISPLAY.render('', False, Helper.WHITE)
    # create strings for stats
    stats = [
        str('Level : ' + str(Player.Player.playerInstance.level)),
        str('HP : ' + str(Player.Player.playerInstance.health) + '/' +
            str(Player.Player.playerInstance.max_health)),
        str('XP : ' + str(Player.Player.playerInstance.exp) + '/' +
            str(Player.Player.playerInstance.exp_to_level_up))
    ]

    # offset text if inventory is not open

    vertical_offset = 500 if not Player.Player.inventoryIsOpen else 0

    for stat_key in Player.Player.playerInstance.stats.keys():
        stats.append(
            stat_key + ' : ' +
            str(Player.Player.playerInstance.stats[stat_key]['Value']))

    for stat_index in range(0, len(stats)):
        stat_surface = FONT_DISPLAY_SMALL.render(stats[stat_index], False,
                                                 Helper.BLACK)
        Helper.DISPLAY_SURFACE.blit(
            stat_surface,
            (Helper.INVENTORY_POSITION[0] + 40, Helper.INVENTORY_POSITION[1] +
             20 * stat_index + 100 + vertical_offset))
        stat_index += 1

    stats.clear()

    # display inventory

    for slot in range(0, Player.Player.Backpack.size):
        item_surf = None if slot > len(Player.Player.Backpack.items) - 1\
            else Player.Player.Backpack.items[slot].\
            weapon_thumbnail.convert_alpha() \
            if type(Player.Player.Backpack.items[slot]) == Item.Weapon \
            else None

        if item_surf is None:
            item_surf = pygame.Surface((80, 80))
            item_surf.fill(Helper.WHITE)

        row = 0 if slot < int(Player.Player.Backpack.size / 2) else 1
        column = slot if slot < int(Player.Player.Backpack.size / 2)\
            else slot - Player.Player.Backpack.size / 2

        position = [
            Helper.INVENTORY_POSITION[0] + 350 +
            (item_surf.get_width() + 20) * column,
            Helper.INVENTORY_POSITION[1] + 100 +
            (item_surf.get_height() + 20) * row + vertical_offset
        ]

        Helper.DISPLAY_SURFACE.blit(item_surf, position)

        del item_surf

    Helper.DISPLAY_SURFACE.blit(text_surface, (10, 10))

    pygame.time.Clock().tick(Helper.REFRESH_RATE)
    pygame.display.flip()