def _format_header(self, player_index, page, slots): """Prepares the header for the menu.""" # Create the page info string info = '' if self.display_page_info: info = ' [{0}/{1}]'.format(page.index + 1, self.page_count) if self.title: buffer = '{0}{1}\n'.format( _translate_text(self.title, player_index), info ) elif info: buffer = '{0}\n'.format(info) else: buffer = '' # Set description if present if self.description is not None: buffer += _translate_text(self.description, player_index) + '\n' # Set the top seperator if present if self.top_seperator is not None: buffer += self.top_seperator + '\n' return buffer
def _current_hero_build_callback(menu, player_index): """Current Hero menu's build_callback function.""" # Get player and hero player = get_player(player_index, key='index') hero = player.hero # Set menu's base attributes menu.title = hero.name menu.description = _TR['Description'].get_string( level=hero.level, skill_points=hero.skill_points ) # Clear the menu menu.clear() # Loop through hero's skills for skill in hero.skills: # Set the default arguments for the PagedOption info = '{0}/{1}'.format(skill.level, skill.max_level) selectable = True # If skill is already maxed out if skill.level >= skill.max_level: info = ' ({0})'.format(_translate_text( _TR['Maxed'], player_index )) selectable = False # If the hero hasn't reached skill's required level elif skill.required_level > hero.level: info += ' ({0})'.format(_translate_text( _TR['Required'].get_string( required=skill.required_level ), player_index )) selectable = False # If skill costs more than one, show the cost elif skill.cost > 1: info += ' ({0})'.format(_translate_text( _TR['Cost'].get_string(cost=skill.cost), player_index )) # And if hero doesn't have enough skill points, disable skill if skill.cost > hero.skill_points: selectable = False # Add the PagedOption to the menu menu.append(PagedOption( '{0} {1}'.format(skill.name, info), skill, selectable=selectable, highlight=selectable ))
def _format_header(self, player_index, page, slots): """Prepare the header for the menu. @param <player_index>: A player index. @param <page>: A _PlayerPage instance. @param <slots>: A set to which slots can be added. """ # Create the page info string info = "[{0}/{1}]\n".format(page.index + 1, self.page_count) buffer = "{0} {1}".format(_translate_text(self.title, player_index), info) if self.title else info # Set description if present if self.description is not None: buffer += _translate_text(self.description, player_index) + "\n" # Set the top seperator if present if self.top_seperator is not None: buffer += self.top_seperator + "\n" return buffer
def _format_header(self, player_index, page, slots): buffer = '{0}\n'.format( _translate_text(self.title, player_index) if self.title else '') if self.description is not None: buffer += _translate_text(self.description, player_index) + '\n' if self.top_separator is not None: buffer += self.top_separator + '\n' return buffer
def _render(self, player_index, choice_index): """See :meth:`menus.base._MenuData._render`.""" return '{0}{1}. {2}\n'.format( self._get_highlight_prefix(), choice_index, _translate_text(self.text, player_index) )
def _render(self, player_index, choice_index): """See :meth:`menus.base._MenuData._render`.""" if self.enumerated: return super()._render(player_index, choice_index) return '{}{}\n'.format(self._get_highlight_prefix(), _translate_text(self.text, player_index))
def _render(self, player_index, choice_index=None): """Return the rendered string for the option.""" return '{prefix}{choice}. {text}\n'.format( prefix=self._get_highlight_prefix(), choice=self.choice_index, text=_translate_text(self.text, player_index), )
def _format_footer(self, player_index, page, data): button = data.find_key('6', True) button.set_string( 'msg', _translate_text(menu_strings['back'], player_index) if page.index > 0 or self.parent_menu is not None else '') button.set_string('command', '{0} 6'.format(ESC_SELECTION_CMD)) button = data.find_key('7', True) button.set_string( 'msg', _translate_text(menu_strings['next'], player_index) if page.index < self.last_page_index else '') button.set_string('command', '{0} 7'.format(ESC_SELECTION_CMD)) button = data.find_key('0', True) button.set_string( 'msg', _translate_text(menu_strings['close'], player_index)) button.set_string('command', '{0} 0'.format(ESC_SELECTION_CMD))
def _format_header(self, player_index, page, data): info = '[{0}/{1}]'.format(page.index + 1, self.page_count) if self.title is not None: data.set_string( 'title', '{0} {1}'.format(_translate_text(self.title, player_index), info)) else: data.set_string('title', info) data.set_color('color', self.title_color)
def _render(self, player_index, choice_index=None): """Render the data. @param <player_index>: A player index. @param <choice_index>: The number should be required to select this item. It depends on the menu type if this parameter gets passed. """ return '{0}. {1}'.format( choice_index, _translate_text(self.text, player_index))
def _render(self, player_index, choice_index): """Render the data. @param <player_index>: A player index. @param <choice_index>: The number should be required to select this item. It depends on the menu type if this parameter gets passed. """ return "{0}{1}. {2}\n".format( self._get_highlight_prefix(), choice_index, _translate_text(self.text, player_index) )
def _buy_heroes_build_callback(menu, player_index): """Buy Heroes menu's build_callback function.""" player = Player(player_index) menu.clear() for hero_cls in menu.entities: option = PagedOption( '{0} ({1})'.format( hero_cls.name, _translate_text(_TR['Cost'].get_string(cost=hero_cls.cost), player_index)), hero_cls) if hero_cls.cost > player.gold: option.selectable = option.highlight = False menu.append(option)
def _format_header(self, player_index, page, slots): """Prepare the header for the menu. :param int player_index: A player index. :param _PlayerPage page: The player's current page. :param slots: A set to which slots can be added. :type slots: :class:`set` """ # Create the page info string info = '[{0}/{1}]\n'.format(page.index + 1, self.page_count) buffer = '{0} {1}'.format(_translate_text( self.title, player_index), info) if self.title else info # Set description if present if self.description is not None: buffer += _translate_text(self.description, player_index) + '\n' # Set the top separator if present if self.top_separator is not None: buffer += self.top_separator + '\n' return buffer
def _get_menu_data(self, player_index): data = KeyValues('menu') data.set_string( 'msg', _translate_text(self.description or '', player_index)) if self.title is not None: data.set_string('title', _translate_text(self.title, player_index)) data.set_color('color', self.title_color) page = self._player_pages[player_index] page.options = {} for raw_data in self: if isinstance(raw_data, SimpleOption): page.options[raw_data.choice_index] = raw_data button = data.find_key(str(raw_data.choice_index), True) button.set_string('msg', raw_data._render(player_index)) button.set_string( 'command', '{0} {1}'.format(ESC_SELECTION_CMD, raw_data.choice_index)) return data
def _get_menu_data(self, player_index): """Return all relevant menu data as a KeyValues instance. @param <player_index>: A player index. """ data = KeyValues('menu') data.set_string( 'msg', _translate_text(self.description or '', player_index)) if self.title is not None: data.set_string( 'title', _translate_text(self.title, player_index)) data.set_color('color', self.title_color) page = self._player_pages[player_index] page.options = {} # Loop through all options of the current page for raw_data in self: if isinstance(raw_data, SimpleESCOption): page.options[raw_data.choice_index] = raw_data button = data.find_key(str(raw_data.choice_index), True) button.set_string('msg', raw_data._render(player_index)) button.set_string('command', '{0} {1}'.format( ESC_SELECTION_CMD, raw_data.choice_index)) close = SimpleESCOption(0, 'Close') button = data.find_key(str(close.choice_index), True) button.set_string('msg', close._render(player_index)) button.set_string('command', '{0} {1}'.format( ESC_SELECTION_CMD, close.choice_index)) # Return the menu data return data
def _get_menu_data(self, player_index): """Return all menu data as a :class:`keyvalues.KeyValues` object. :param int player_index: See :meth:`menus.base._BaseMenu._get_menu_data`. """ data = KeyValues('menu') data.set_string( 'msg', _translate_text(self.description or '', player_index)) if self.title is not None: data.set_string( 'title', _translate_text(self.title, player_index)) data.set_color('color', self.title_color) page = self._player_pages[player_index] page.options = {} # Loop through all options of the current page for raw_data in self: if isinstance(raw_data, SimpleESCOption): page.options[raw_data.choice_index] = raw_data button = data.find_key(str(raw_data.choice_index), True) button.set_string('msg', raw_data._render(player_index)) button.set_string('command', '{0} {1}'.format( ESC_SELECTION_CMD, raw_data.choice_index)) close = SimpleESCOption(0, 'Close') button = data.find_key(str(close.choice_index), True) button.set_string('msg', close._render(player_index)) button.set_string('command', '{0} {1}'.format( ESC_SELECTION_CMD, close.choice_index)) # Return the menu data return data
def _buy_items_build_callback(menu, player_index): """Buy Items menu's build_callback function.""" player = Player(player_index) menu.clear() for item in menu.entities: option = PagedOption( '{name} ({cost})'.format( name=item.name, cost=_translate_text(_TR['Cost'].get_string( cost=item.cost), player_index) if not item in player.hero.restricted_items else 'RESTRICTED'), item) if item.cost > player.gold or item in player.hero.restricted_items: option.selectable = option.highlight = False menu.append(option)
def _format_header(self, player_index, page, data): """Prepare the header for the menu. :param int player_index: A player index. :param _PlayerPage page: The player's current page. :param KeyValues data: The current menu data. """ # Create the page info string info = '[{0}/{1}]'.format(page.index + 1, self.page_count) if self.title is not None: data.set_string('title', '{0} {1}'.format( _translate_text(self.title, player_index), info)) else: data.set_string('title', info) data.set_color('color', self.title_color)
def _get_menu_data(self, player_index): """See :meth:`menus.base._BaseMenu._get_menu_data`.""" data = KeyValues('menu') data.set_string( 'msg', _translate_text(self.description or '', player_index)) # Get the player's current page page = self._player_pages[player_index] page.options = {} # Format the menu self._format_header(player_index, page, data) self._format_body(player_index, page, data) self._format_footer(player_index, page, data) # Return the menu data return data
def _buy_heroes_build_callback(menu, player_index): """Buy Heroes menu's build_callback function.""" player = Player(player_index) menu.clear() for hero_cls in menu.entities: option = PagedOption( '{0} ({1})'.format( hero_cls.name, _translate_text( _TR['Cost'].get_string(cost=hero_cls.cost), player_index ) ), hero_cls ) if hero_cls.cost > player.gold: option.selectable = option.highlight = False menu.append(option)
def _buy_items_build_callback(menu, player_index): """Buy Items menu's build_callback function.""" player = Player(player_index) menu.clear() for item in menu.entities: option = PagedOption( '{name} ({cost})'.format( name=item.name, cost=_translate_text( _TR['Cost'].get_string(cost=item.cost), player_index ) if not item in player.hero.restricted_items else 'RESTRICTED' ), item ) if item.cost > player.gold or item in player.hero.restricted_items: option.selectable = option.highlight = False menu.append(option)
def _buy_items_build_callback(menu, player_index): """Buy Items menu's build_callback function.""" player = get_player(player_index, key='index') menu.clear() for item in menu.entities: option = PagedOption( '{name} (${cost})\n{description}'.format( name=item.name, cost=_translate_text( _TR['Cost'].get_string(cost=item.cost), player_index ), description=item.description ), item ) if item.cost > player.gold: option.selectable = option.highlight = False menu.append(option)
def _get_menu_data(self, player_index): """Return all relevant menu data as a KeyValues instance. @param <player_index>: A player index. """ data = KeyValues('menu') data.set_string( 'msg', _translate_text(self.description or '', player_index)) # Get the player's current page page = self._player_pages[player_index] page.options = {} # Format the menu self._format_header(player_index, page, data) self._format_body(player_index, page, data) self._format_footer(player_index, page, data) # Return the menu data return data
def _buy_items_build_callback(menu, player_index): """Buy Items menu's build_callback function.""" player = Player(player_index) menu.clear() for item in menu.entities: option = PagedOption( '{name} (${cost})\n{description}'.format( name=item.name, cost=_translate_text( _TR['Cost'].get_string(cost=item.cost), player_index ), description='\n'.join( split_string(item.description, _description_width) ) ), item ) if item.cost > player.gold: option.selectable = option.highlight = False menu.append(option)
def _format_header(self, player_index, page, data): """Prepare the header for the menu. @param <player_index>: A player index. @param <page>: A _PlayerPage instance. @param <data>: The current menu data. """ # Create the page info string info = '[{0}/{1}]'.format(page.index + 1, self.page_count) if self.title is not None: data.set_string('title', '{0} {1}'.format( _translate_text(self.title, player_index), info)) else: data.set_string('title', info) data.set_color('color', self.title_color)
def _current_hero_build_callback(menu, player_index): """Current Hero menu's build_callback function.""" # Get player and hero player = Player(player_index) hero = player.hero # Set menu's base attributes menu.title = hero.name menu.description = _TR['Description'].get_string( level=hero.level, skill_points=hero.skill_points ) # Clear the menu menu.clear() # Loop through hero's skills for skill in hero.skills: # Set the default arguments for the PagedOption info = '{0}{1}'.format( skill.level, '/' + str(skill.max_level) if skill.max_level is not None else '' ) selectable = True # If skill is already maxed out if skill.max_level is not None and skill.level >= skill.max_level: info = ' ({0})'.format(_translate_text( _TR['Maxed'], player_index )) selectable = False # If the hero hasn't reached skill's required level elif skill.required_level > hero.level: info += ' ({0})'.format(_translate_text( _TR['Required'].get_string( req=skill.required_level ), player_index )) selectable = False # If skill costs more than one, show the cost elif skill.cost > 1: info += ' ({0})'.format(_translate_text( _TR['Cost'].get_string(cost=skill.cost), player_index )) # And if hero doesn't have enough skill points, disable skill if skill.cost > hero.skill_points: selectable = False # Add the PagedOption to the menu menu.append(PagedOption( '{0} {1}'.format(skill.name, info), skill, selectable=selectable, highlight=selectable ))
def _render(self, player_index, choice_index=None): """See :meth:`menus.base._MenuData._render`.""" if self.enumerated: return super()._render(player_index, choice_index) return _translate_text(self.text, player_index)
def _render(self, player_index, choice_index): return '{0}{1}'.format( '{}. '.format(choice_index) if self.show_index else '', _translate_text(self.text, player_index))
def _render(self, player_index, choice_index=None): """See :meth:`menus.base._MenuData._render`.""" return '{0}. {1}'.format( choice_index, _translate_text(self.text, player_index))
def _render(self, player_index, choice_index): return '{0}{1}{2}\n'.format( self._get_highlight_prefix(), '{}. '.format(choice_index) if self.show_index else '', _translate_text(self.text, player_index))
def _format_header(self, player_index, page, data): if self.title is not None: data.set_string('title', _translate_text(self.title, player_index)) data.set_color('color', self.title_color)
def _render(self, player_index, choice_index=None): """Return the rendered string for the option.""" return '* {text}\n'.format( text=_translate_text(self.text, player_index), )
def _render(self, player_index, choice_index=None): return _translate_text(self.text, player_index)