def _show_change_player_details_popup(self, game): """Shows a dialog where the player can change its name and/or color""" assigned = [ p["color"] for p in NetworkInterface().get_game().get_player_list() if p["name"] != NetworkInterface().get_client_name() ] unused_colors = set(Color.get_defaults()) - set(assigned) playerdata = PlayerDataSelection(color_palette=unused_colors) playerdata.set_player_name(NetworkInterface().get_client_name()) playerdata.set_color(NetworkInterface().get_client_color()) dialog = load_uh_widget('set_player_details.xml') dialog.findChild(name="playerdataselectioncontainer").addChild( playerdata.get_widget()) def _change_playerdata(): NetworkInterface().change_name(playerdata.get_player_name()) NetworkInterface().change_color(playerdata.get_player_color().id) dialog.hide() self._update_game_details() def _cancel(): dialog.hide() dialog.mapEvents({ OkButton.DEFAULT_NAME: _change_playerdata, CancelButton.DEFAULT_NAME: _cancel }) dialog.show()
def _show_change_player_details_popup(self, game): """Shows a dialog where the player can change its name and/or color""" assigned = [p["color"] for p in NetworkInterface().get_game().get_player_list() if p["name"] != NetworkInterface().get_client_name()] unused_colors = set(Color.get_defaults()) - set(assigned) playerdata = PlayerDataSelection(color_palette=unused_colors) playerdata.set_player_name(NetworkInterface().get_client_name()) playerdata.set_color(NetworkInterface().get_client_color()) dialog = load_uh_widget('set_player_details.xml') dialog.findChild(name="playerdataselectioncontainer").addChild(playerdata.get_widget()) def _change_playerdata(): NetworkInterface().change_name(playerdata.get_player_name()) NetworkInterface().change_color(playerdata.get_player_color().id) dialog.hide() self._update_game_details() def _cancel(): dialog.hide() dialog.mapEvents({ OkButton.DEFAULT_NAME: _change_playerdata, CancelButton.DEFAULT_NAME: _cancel }) dialog.show()
def _get_player_list(self): if self._player_list is not None: return self._player_list # for now just make it a bit easier for the AI difficulty_level = { False: DifficultySettings.DEFAULT_LEVEL, True: DifficultySettings.EASY_LEVEL } players = [] players.append({ 'id': 1, 'name': self.player_name, 'color': Color.get(1) if self.player_color is None else self.player_color, 'local': True, 'ai': self.human_ai, 'difficulty': difficulty_level[bool(self.human_ai)], }) cur_locale = horizons.globals.fife.get_locale() # add AI players with a distinct color; if none can be found then use black for num in range(self.ai_players): color = Color.get( COLORS.BLACK) # if none can be found then be black for possible_color in Color.get_defaults(): if possible_color == Color.get(COLORS.BLACK): continue # black is used by the trader and the pirate used = any(possible_color == player['color'] for player in players) if not used: color = possible_color break name = horizons.globals.db.get_random_ai_name( cur_locale, [p['name'] for p in players]) # out of pre-defined names? if name is None: name = 'AI' + str(num + 1) players.append({ 'id': num + 2, 'name': name, 'color': color, 'local': False, 'ai': True, 'difficulty': difficulty_level[True], }) return players
def _get_player_list(self): if self._player_list is not None: return self._player_list # for now just make it a bit easier for the AI difficulty_level = {False: DifficultySettings.DEFAULT_LEVEL, True: DifficultySettings.EASY_LEVEL} players = [] players.append( { "id": 1, "name": self.player_name, "color": Color.get(1) if self.player_color is None else self.player_color, "local": True, "ai": self.human_ai, "difficulty": difficulty_level[bool(self.human_ai)], } ) cur_locale = horizons.globals.fife.get_locale() # add AI players with a distinct color; if none can be found then use black for num in xrange(self.ai_players): color = Color.get(COLORS.BLACK) # if none can be found then be black for possible_color in Color.get_defaults(): if possible_color == Color.get(COLORS.BLACK): continue # black is used by the trader and the pirate used = any(possible_color == player["color"] for player in players) if not used: color = possible_color break name = horizons.globals.db.get_random_ai_name(cur_locale, [p["name"] for p in players]) # out of pre-defined names? if name is None: name = "AI" + str(num + 1) players.append( { "id": num + 2, "name": name, "color": color, "local": False, "ai": True, "difficulty": difficulty_level[True], } ) return players
def change_color(self, new_color, save=True): new_color %= len(set(Color.get_defaults())) if save: horizons.globals.fife.set_uh_setting("ColorID", new_color) horizons.globals.fife.save_settings() try: if self._client_data.color == new_color: return self.log.debug("[CHANGECOLOR] %s", new_color) if self._mode is None or self._game is None: self._client_data.color = new_color return self.send_packet(packets.client.cmd_changecolor(new_color)) except NetworkException as e: self._handle_exception(e)
def change_color(self, new_color, save=True): new_color %= len(set(Color.get_defaults())) if save: horizons.globals.fife.set_uh_setting("ColorID", new_color) horizons.globals.fife.save_settings() try: if self._client_data.color == new_color: return self.log.debug("[CHANGECOLOR] %s" % (new_color)) if self._mode is None or self._game is None: self._client_data.color = new_color return self.send_packet(packets.client.cmd_changecolor(new_color)) except NetworkException as e: self._handle_exception(e)
def __init__(self, color_palette=None): """ @param widgets: WidgetsDict """ self.gui = load_uh_widget('playerdataselection.xml') self.colors = self.gui.findChild(name='playercolor') colorlabels = [] events = {} # need the id to save it as int in settings file. for color in (Color.get_defaults() if color_palette is None else color_palette): label = Label(name='{color}'.format(color=color.name), text=" ", max_size=(20, 20), min_size=(20, 20), background_color=color) events['{label}/mouseClicked'.format(label=color.name)] = \ Callback(self.set_color, color.id) colorlabels.append(label) # split into three rows with at max 5 entries in each row # right now there are 14 different colors to choose from. for i in range(0, len(colorlabels), 5): hbox = HBox(name='line_{index}'.format(index=i)) hbox.addChildren(colorlabels[i:i + 5]) self.colors.addChild(hbox) playertextfield = self.gui.findChild(name='playername') def playertextfield_clicked(): if playertextfield.text == 'Unnamed Traveler': playertextfield.text = "" playertextfield.capture(playertextfield_clicked, event_name='mouseClicked') self.gui.mapEvents(events) self.update_data()
def __init__(self, color_palette=None): """ @param widgets: WidgetsDict """ self.gui = load_uh_widget('playerdataselection.xml') self.colors = self.gui.findChild(name='playercolor') colorlabels = [] events = {} # need the id to save it as int in settings file. for color in (Color.get_defaults() if color_palette is None else color_palette): label = Label(name = u'{color}'.format(color=color.name), text = u" ", max_size = (20, 20), min_size = (20, 20), background_color = color) events['{label}/mouseClicked'.format(label=color.name)] = \ Callback(self.set_color, color.id) colorlabels.append(label) # split into three rows with at max 5 entries in each row # right now there are 14 different colors to choose from. for i in xrange(0, len(colorlabels), 5): hbox = HBox(name='line_{index}'.format(index=i)) hbox.addChildren(colorlabels[i:i+5]) self.colors.addChild(hbox) playertextfield = self.gui.findChild(name='playername') def playertextfield_clicked(): if playertextfield.text == 'Unnamed Traveler': playertextfield.text = "" playertextfield.capture(playertextfield_clicked, event_name='mouseClicked') self.gui.mapEvents(events) self.update_data()
def test_iter(): colors = list(Color.get_defaults()) assert len(colors) == 2 assert all(c.is_default_color for c in colors) assert colors[0] == Color(0, 0, 0, 255) assert colors[1] == Color(255, 0, 0, 255)
def test_iter(self): colors = list(Color.get_defaults()) self.assertEqual(len(colors), 2) self.assertTrue(all(c.is_default_color for c in colors)) self.assertEqual(colors[0], Color(0, 0, 0, 255)) self.assertEqual(colors[1], Color(255, 0, 0, 255))