예제 #1
0
def victory_screen(state_stack):
    victory_stack_panel = gui.StackPanelVertical((0, 0), alignment=gui.StackPanelVertical.ALIGN_CENTER)
    line = gui.HorizontalLine(graphic.GraphicChar(None, colors.YELLOW, icon.H_LINE), settings.SCREEN_WIDTH + 1)
    victory_text = gui.TextBox("A WINNER IS YOU", (0, 0), colors.WHITE)
    ironic_text = \
        gui.TextBox("Good job! No seriously, I bet it was real hard...",
                    (0, 0), colors.YELLOW_D)

    continue_option = \
        menu.MenuOption("Press Enter to Continue...", [lambda: state_stack.pop_to_main_menu()])

    continue_menu = menu.StaticMenu((0, 0), [continue_option], state_stack,
                                    margin=style.menu_theme.margin, may_escape=False)

    short_vspace = gui.VerticalSpace(7)
    long_vspace = gui.VerticalSpace(settings.SCREEN_HEIGHT - 22)

    victory_stack_panel.append(short_vspace)
    victory_stack_panel.append(line)
    victory_stack_panel.append(victory_text)
    victory_stack_panel.append(line)
    victory_stack_panel.append(ironic_text)
    victory_stack_panel.append(long_vspace)
    victory_stack_panel.append(continue_menu)

    grayout_rect = gui.RectangleChangeColor(rectfactory.full_screen_rect(), colors.DARK_BROWN, colors.YELLOW_D)

    ui_elements = [grayout_rect, victory_stack_panel]
    ui_state = state.UIState(gui.UIElementList(ui_elements))
    return ui_state
예제 #2
0
def game_over_screen(state_stack):
    game_over_stack_panel = gui.StackPanelVertical((0, 0), alignment=gui.StackPanelVertical.ALIGN_CENTER)
    red_line = gui.HorizontalLine(graphic.GraphicChar(None, colors.RED, icon.H_LINE), settings.SCREEN_WIDTH + 1)
    game_over_text = gui.TextBox("YOU DIED", (0, 0), colors.RED)
    insult_text = gui.TextBox("Like a bitch.", (0, 0), colors.DARK_BROWN)

    continue_option = \
        menu.MenuOption("Press Enter to Accept Your Fate...",
                        [lambda: state_stack.pop_to_main_menu()])

    continue_menu = menu.StaticMenu((0, 0), [continue_option], state_stack,
                                    margin=style.menu_theme.margin, may_escape=False)

    short_vspace = gui.VerticalSpace(7)
    long_vspace = gui.VerticalSpace(settings.SCREEN_HEIGHT - 22)

    game_over_stack_panel.append(short_vspace)
    game_over_stack_panel.append(red_line)
    game_over_stack_panel.append(game_over_text)
    game_over_stack_panel.append(red_line)
    game_over_stack_panel.append(insult_text)
    game_over_stack_panel.append(long_vspace)
    game_over_stack_panel.append(continue_menu)

    grayout_rect = gui.RectangleChangeColor(rectfactory.full_screen_rect(),
                                            colors.BLACK, colors.DARK_PURPLE)

    ui_elements = [grayout_rect, game_over_stack_panel]
    ui_state = state.UIState(gui.UIElementList(ui_elements))
    return ui_state
예제 #3
0
def context_menu(player, state_stack):
    current_dungeon_feature = (player.dungeon_level.value.get_tile(player.position.value).get_dungeon_feature())
    context_options = []
    stack_pop_function = menu.BackToGameFunction(state_stack)
    if not current_dungeon_feature is None:
        context_options.extend(get_dungeon_feature_menu_options(player, stack_pop_function))

    status_menu = player_status_menu(player)
    open_status_option = menu.MenuOption("Player Status", [lambda: state_stack.push(status_menu)])
    context_options.append(open_status_option)

    inventory_menu_opt = inventory_menu(player, state_stack)
    open_inventory_option = menu.MenuOption("Inventory", [lambda: state_stack.push(inventory_menu_opt)],
                                            (lambda: not player.inventory.is_empty()))
    context_options.append(open_inventory_option)

    equipment_menu_opt = equipment_menu(player, state_stack)
    open_equipment_option = menu.MenuOption("Equipment", [lambda: state_stack.push(equipment_menu_opt)])
    context_options.append(open_equipment_option)

    context_menu_rect = rectfactory.center_of_screen_rect(max(option.width for option in context_options) + 4,
                                                          len(context_options) * 2 + 3)
    resulting_menu = menu.StaticMenu(context_menu_rect.top_left, context_options, state_stack,
                                     margin=style.menu_theme.margin)
    background_rect = get_menu_background(context_menu_rect)

    ui_elements = [background_rect, resulting_menu]
    ui_state = state.UIState(gui.UIElementList(ui_elements))
    return ui_state
예제 #4
0
def _get_item_menu_composition(item_description_card, menu_stack_panel):
    inventory_menu_bg = gui.StyledRectangle(rectfactory.right_side_menu_rect(), style.MinimalChestStyle())
    inventory_gui = gui.UIElementList([inventory_menu_bg, menu_stack_panel])
    inventory_stack_panel = gui.StackPanelHorizontal((0, 0), alignment=gui.StackPanelHorizontal.ALIGN_BOTTOM)
    inventory_stack_panel.append(item_description_card)
    inventory_stack_panel.append(inventory_gui)
    dock = gui.UIDock(rectfactory.full_screen_rect())
    dock.bottom_right = inventory_stack_panel
    return state.UIState(dock)
예제 #5
0
def get_menu_with_options(options, state_stack, x_border=4, y_border=5):
    temp_position = (-1, -1)
    main_menu = menu.StaticMenu(temp_position, options, state_stack, margin=style.menu_theme.margin, vertical_space=1)
    main_menu_rect = rectfactory.ratio_of_screen_rect(main_menu.width + x_border, main_menu.height + y_border - 1, 0.5,
                                                      0.8)
    main_menu.offset = main_menu_rect.top_left

    background_rect = get_menu_background(main_menu_rect)
    ui_state = state.UIState(gui.UIElementList([background_rect, main_menu]))
    return ui_state
예제 #6
0
def get_status_list(player):
    context_options = []
    state_stack = player.game_state.value.menu_prompt_stack
    for status in player.status_bar.statuses:
        print status, status.graphic_char, status.graphic_char.color_fg
        status_option = menu.MenuOptionWithSymbols(status.name, status.graphic_char, status.graphic_char,
            [], (lambda: True))
        context_options.append(status_option)
    resulting_menu = menu.StaticMenu((0, 0), context_options, state_stack,
                                     margin=style.menu_theme.margin)
    return gui.UIElementList([resulting_menu])
예제 #7
0
def sacrifice_menu(player, powers, post_power_gain_function):
    game_state = player.game_state.value
    state_stack = game_state.menu_prompt_stack
    context_options = []
    stack_pop_function = menu.BackToGameFunction(state_stack)
    width = 24

    for power in powers:
        power_caption = power.description.name + str(power.buy_cost).rjust(width - len(power.description.name))
        power_option = menu.MenuOption(power_caption, [lambda p=power: player.set_child(p),
                                                       lambda p=power: p.on_power_gained(),
                                                       lambda p=power: sacrifice.sacrifice_health(player, p.buy_cost),
                                                       lambda: player.actor.add_energy_spent(gametime.single_turn),
                                                       post_power_gain_function,
                                                       stack_pop_function],
                                       (lambda: player.health.hp.value > power.buy_cost), payload=power)
        context_options.append(power_option)

    cancel_option = menu.MenuOption("Cancel", [stack_pop_function], (lambda: True))
    context_options.append(cancel_option)

    tmp = (0, 0)
    menu_stack_panel = gui.StackPanelVertical(tmp, style.menu_theme.margin, vertical_space=0,
                                              alignment=gui.StackPanelVertical.ALIGN_CENTER)

    heading_stack_panel = gui.StackPanelHorizontal((0, 0), (0, 0), horizontal_space=2)
    menu_stack_panel.append(heading_stack_panel)
    if any(powers):
        power_caption = "Power" + str("Cost").rjust(width - len("Cost   "))
        heading_stack_panel.append(gui.TextBox(power_caption, (1, 0), colors.GRAY))
        heading_stack_panel.append(gui.SymbolUIElement((0, 0), graphic.GraphicChar(colors.DARK_BLUE, colors.HP_BAR_FULL, icon.HEALTH_STAT)))
        menu_stack_panel.append(gui.VerticalSpace(2))
    else:
        power_caption = "There are no more powers."
        menu_stack_panel.append(gui.VerticalSpace(4))
        heading_stack_panel.append(gui.TextBox(power_caption, (1, 0), colors.GRAY))

    item_description_card = gui.new_item_description_card()
    resulting_menu = menu.StaticMenu((0, 0), context_options, state_stack, selected_payload_callback=(lambda item: item_description_card.set_item(item)))
    menu_stack_panel.append(resulting_menu)

    context_menu_rect = rectfactory.center_of_screen_rect(max(menu_stack_panel.total_width, 24),
                                                          max(menu_stack_panel.total_height, 6))
    menu_stack_panel.offset = context_menu_rect.top_left
    background_rect = get_menu_background(context_menu_rect, style.sacrifice_menu_theme.rect_style)

    dock = gui.UIDock(rectfactory.full_screen_rect())
    dock.bottom = item_description_card

    ui_elements = [background_rect, menu_stack_panel, dock]
    ui_state = state.UIState(gui.UIElementList(ui_elements))
    return ui_state
예제 #8
0
def item_actions_menu(item, player, state_stack):
    menu_stack_panel = gui.StackPanelVertical((2, 2), vertical_space=1)
    heading_stack = gui.StackPanelHorizontal((0, 1), horizontal_space=1)
    heading_stack.append(gui.SymbolUIElement((0, 0), item.graphic_char))
    heading = gui.TextBox(item.description.name, (0, 0), colors.INVENTORY_HEADING)
    heading_stack.append(heading)
    menu_stack_panel.append(heading_stack)

    item_actions_menu = menu.ItemActionsMenu((0, 0), item, player, state_stack, margin=(2, 2))
    menu_stack_panel.append(item_actions_menu)
    inventory_menu_bg = gui.StyledRectangle(rectfactory.right_side_menu_rect(),
                                            style.rogue_classic_theme.rect_style)

    dock = gui.UIDock(rectfactory.full_screen_rect())
    ui_elements = [inventory_menu_bg, menu_stack_panel]
    dock.bottom_right = gui.UIElementList(ui_elements)
    ui_state = state.UIState(dock)
    return ui_state
예제 #9
0
def player_status_menu(player):
    split_width = 27
    content_padding = (2, 2)
    player_status_stack_panel = gui.StackPanelVertical(geo.add_2d((0, 0), content_padding),
                                                       alignment=gui.StackPanelVertical.ALIGN_LEFT,
                                                       vertical_space=1)
    player_status_stack_panel_row_1 = gui.StackPanelHorizontal((0, 0), alignment=gui.StackPanelHorizontal.ALIGN_TOP,
                                                               horizontal_space=1)
    player_status_stack_panel.append(player_status_stack_panel_row_1)
    player_status_stack_panel_row_1.append(gui.BigSymbolUIElement((0, 0), player.graphic_char))
    player_description_stack = gui.StackPanelVertical((0, 0), alignment=gui.StackPanelVertical.ALIGN_LEFT,
                                                      vertical_space=1)
    player_status_stack_panel_row_1.append(player_description_stack)
    player_description_stack.append(gui.TextBox(player.description.name, (2, 0), colors.WHITE))
    player_description_stack.append(gui.TextBox(player.race.value + "\n" + player.job.value, (2, 0), colors.WHITE))

    player_description_stack.append(gui.new_player_hp_bar(12, player.health.hp))
    player_description_stack.append(gui.new_player_sanity_bar(12, Counter(10, 10)))

    player_status_stack_panel_row_2 = gui.StackPanelHorizontal((0, 0), alignment=gui.StackPanelHorizontal.ALIGN_TOP,
                                                               horizontal_space=3)
    player_status_stack_panel.append(player_status_stack_panel_row_2)
    player_status_stack_panel_row_2.append(new_player_status_stack(player, 8))
    player_status_stack_panel_row_2.append(new_player_weapon_table(player, 8))

    description_card = gui.new_item_description_card()
    power_list = get_power_list(player, description_card)
    if len(power_list.menu_items) > 0:
        player_status_stack_panel.append(gui.VerticalSpace(1))
    player_status_stack_panel.append(power_list)

    bg_rect_height = (player_status_stack_panel.total_height + 4)
    bg_rect = rectfactory.center_of_screen_rect(split_width, bg_rect_height)

    player_status_stack_panel.offset = geo.add_2d(bg_rect.top_left, (2, 2))

    styled_bg_rect = get_menu_background(bg_rect, style.rogue_classic_theme.rect_style)

    dock = gui.UIDock(rectfactory.full_screen_rect())
    dock.bottom = description_card
    return state.UIState(gui.UIElementList([styled_bg_rect, player_status_stack_panel, dock]))
예제 #10
0
def equipment_menu(player, state_stack):
    menu_stack_panel = gui.StackPanelVertical((0, 0), margin=(0, 0))
    heading = gui.TextBox("Equipment", (2, 1), colors.INVENTORY_HEADING, (2, 2))
    menu_stack_panel.append(heading)

    equipment_menu_bg = gui.StyledRectangle(rectfactory.right_side_menu_rect(),
                                            style.rogue_classic_theme.rect_style)

    item_description_card = gui.new_item_description_card()
    resulting_menu = menu.EquipmentMenu((0, 0), player, state_stack, selected_payload_callback=(lambda item: item_description_card.set_item(item)), margin=(2, 1))
    menu_stack_panel.append(resulting_menu)

    equipment_gui = gui.UIElementList([equipment_menu_bg, menu_stack_panel])

    equipment_stack_panel = gui.StackPanelHorizontal((0, 0), alignment=gui.StackPanelHorizontal.ALIGN_BOTTOM)
    equipment_stack_panel.append(item_description_card)
    equipment_stack_panel.append(equipment_gui)

    dock = gui.UIDock(rectfactory.full_screen_rect())
    dock.bottom_right = equipment_stack_panel
    return state.UIState(dock)
예제 #11
0
def equipment_slot_menu(player, equipment_slot, state_stack):
    """
    Creates a menu which shows the possible actions
    that can be taken on a given equipment_slot.
    """
    menu_stack_panel = gui.StackPanelVertical((0, 0), margin=(0, 0))
    heading = gui.TextBox("Change " + equipment_slot.name, (2, 1), colors.INVENTORY_HEADING, (2, 2))
    menu_stack_panel.append(heading)

    item_description_card = gui.new_item_description_card()
    resulting_menu = menu.EquipSlotMenu((0, 0), player, equipment_slot, state_stack, (lambda item: item_description_card.set_item(item)), (2, 1))
    menu_stack_panel.append(resulting_menu)

    equipment_menu_bg = gui.StyledRectangle(rectfactory.right_side_menu_rect(),
                                            style.rogue_classic_theme.rect_style)
    equipment_slot_gui = gui.UIElementList([equipment_menu_bg, menu_stack_panel])

    equipment_slot_stack_panel = gui.StackPanelHorizontal((0, 0), alignment=gui.StackPanelHorizontal.ALIGN_BOTTOM)
    equipment_slot_stack_panel.append(item_description_card)
    equipment_slot_stack_panel.append(equipment_slot_gui)

    dock = gui.UIDock(rectfactory.full_screen_rect())
    dock.bottom_right = equipment_slot_stack_panel
    return state.UIState(dock)
예제 #12
0
def title_screen(state_stack, game_state_factory, test_game_state_factory):

    bg_color = colors.DARKNESS
    logo_fg = colors.RED

    _ = graphic.GraphicChar(bg_color, bg_color, " ")
    x = graphic.GraphicChar(logo_fg, logo_fg, " ")
    d = graphic.GraphicChar(bg_color, logo_fg, icon.DIAGONAL_SE)
    b = graphic.GraphicChar(bg_color, logo_fg, icon.DIAGONAL_SW)
    p = graphic.GraphicChar(logo_fg, bg_color, icon.DIAGONAL_SE)
    q = graphic.GraphicChar(logo_fg, bg_color, icon.DIAGONAL_SW)


    graphic_matrix = [
    [_,_,_,x,x,x,_,_,x,_,x,_,_,x,x,x,_,_,_,_,_,_,_,x,_,_,_,_,d,x,b,_,_,d,x,p,_,_,x,x,x,_,_],
    [_,_,_,_,x,_,_,_,x,_,x,_,_,x,_,_,_,_,_,_,_,_,_,x,_,_,_,_,x,_,x,_,_,x,_,_,_,_,_,x,_,_,_],
    [_,_,_,_,x,_,_,_,x,x,x,_,_,x,x,_,_,_,_,_,_,_,_,x,_,_,_,_,x,x,x,_,_,q,x,b,_,_,_,x,_,_,_],
    [_,_,_,_,x,_,_,_,x,_,x,_,_,x,_,_,_,_,_,_,_,_,_,x,_,_,_,_,x,_,x,_,_,_,_,x,_,_,_,x,_,_,_],
    [_,_,_,_,x,_,_,_,x,_,x,_,_,x,x,x,_,_,_,_,_,_,_,x,x,x,_,_,x,_,x,_,_,x,x,p,_,_,_,x,_,_,_],
    [_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_],
    [_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_],
    [_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_],
    [q,x,x,x,x,x,x,b,_,_,d,x,x,x,x,x,b,_,_,d,x,x,x,x,x,b,_,q,x,x,p,_,q,x,x,p,q,x,x,x,x,x,x],
    [_,x,x,_,_,q,x,x,_,_,x,x,p,_,q,x,x,_,_,x,x,p,_,q,x,x,_,_,x,x,_,_,_,x,x,_,_,x,x,_,_,_,q],
    [_,x,x,_,_,_,x,x,_,_,x,x,_,_,_,x,x,_,_,x,x,_,_,_,_,_,_,_,x,x,_,_,_,x,x,_,_,x,x,_,_,_,_],
    [_,x,x,_,_,d,x,x,_,_,x,x,_,_,_,x,x,_,_,x,x,_,_,_,_,_,_,_,x,x,_,_,_,x,x,_,_,x,x,_,_,_,_],
    [_,x,x,x,x,x,x,p,_,_,x,x,_,_,_,x,x,_,_,x,x,_,_,x,x,x,p,_,x,x,_,_,_,x,x,_,_,x,x,x,x,p,_],
    [_,x,x,q,x,b,_,_,_,_,x,x,_,_,_,x,x,_,_,x,x,_,_,_,x,x,_,_,x,x,_,_,_,x,x,_,_,x,x,_,_,_,_],
    [_,x,x,_,q,x,b,_,_,_,x,x,_,_,_,x,x,_,_,x,x,_,_,_,x,x,_,_,x,x,_,_,_,x,x,_,_,x,x,_,_,_,_],
    [_,x,x,_,_,q,x,b,_,_,x,x,b,_,d,x,x,_,_,x,x,b,_,d,x,x,_,_,x,x,b,_,d,x,x,_,_,x,x,_,_,_,d],
    [d,x,x,b,_,_,x,x,b,_,q,x,x,x,x,x,p,_,_,q,x,x,x,x,x,p,_,_,q,x,x,x,x,x,p,_,d,x,x,x,x,x,x]
    ]

    logo = gui.GraphicCharMatrix(graphic_matrix)
    line = gui.HorizontalLine(graphic.GraphicChar(bg_color, colors.RED, icon.H_LINE), settings.SCREEN_WIDTH + 1)
    title_stack_panel = gui.StackPanelVertical((0, 0), alignment=gui.StackPanelVertical.ALIGN_CENTER)
    title_stack_panel.append(gui.VerticalSpace(int(settings.SCREEN_HEIGHT * 0.2)))
    title_stack_panel.append(line)
    title_stack_panel.append(gui.VerticalSpace(1))
    title_stack_panel.append(logo)
    title_stack_panel.append(gui.VerticalSpace(1))
    title_stack_panel.append(line)
    title_stack_panel.append(gui.VerticalSpace(5))

    bg_rect = gui.FilledRectangle(rectfactory.full_screen_rect(), bg_color)

    ui_state = state.UIState(gui.UIElementList(None))
    hero_name_type_writer = gui.TypeWriter((0, 0), colors.WHITE, colors.GRAY_D, constants.LEFT_SIDE_BAR_WIDTH - 4,
                                           default_text=settings.DEFAULT_PLAYER_NAME)
    main_menu = _main_menu(ui_state, state_stack, lambda: hero_name_type_writer.text, game_state_factory, test_game_state_factory)

    name_heading = gui.TextBox("Name:", (0, 0), colors.CYAN_D, (0, 1))
    menu_stack_panel = gui.StackPanelVertical((0, 0), (0, 0), vertical_space=0,
                                              alignment=gui.StackPanelVertical.ALIGN_CENTER)
    menu_stack_panel.append(name_heading)
    menu_stack_panel.append(hero_name_type_writer)
    menu_stack_panel.append(main_menu)

    dock = gui.UIDock(rectfactory.full_screen_rect())
    dock.bottom = menu_stack_panel

    type_writer_highlight_update = \
        gui.UpdateCallOnlyElement(
            [lambda: type_writer_highlight_update_function(name_heading, hero_name_type_writer,
                                                           main_menu, colors.WHITE,
                                                           colors.GRAY_D, [1, 2])])

    ui_state.ui_element.elements = [bg_rect, title_stack_panel, dock, type_writer_highlight_update]
    return ui_state