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)
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
def _init_gui(self): self.entity_stack_panel = gui.StackPanelVertical((0, 0)) self.entity_stack_panel.append( gui.EntityStatusList(self.player, constants.LEFT_SIDE_BAR_WIDTH, vertical_space=0)) self.entity_stack_panel.append( gui.PlayerStatusBox(rectfactory.player_status_rect(), self.player)) self.gui_dock = gui.UIDock(rectfactory.full_screen_rect()) self.gui_dock.bottom_left = self.entity_stack_panel self.command_list_bar = gui.CommandListPanel( rectfactory.right_side_menu_rect()) self.gui_dock.bottom_right = self.command_list_bar self._message_display = gui.MessageDisplay( rectfactory.message_display_rect(), vertical_space=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
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]))
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)
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)
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