From be4de98e7c1fe888c8c0c7859e55d707d747c860 Mon Sep 17 00:00:00 2001 From: Roman Trapeznikov Date: Thu, 9 Apr 2020 16:04:06 +0300 Subject: [PATCH 1/7] fix scores sorting in scorescreen activity --- assets/src/ba_data/python/bastd/activity/coopscorescreen.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/assets/src/ba_data/python/bastd/activity/coopscorescreen.py b/assets/src/ba_data/python/bastd/activity/coopscorescreen.py index d97ad1e7..d29ba4cd 100644 --- a/assets/src/ba_data/python/bastd/activity/coopscorescreen.py +++ b/assets/src/ba_data/python/bastd/activity/coopscorescreen.py @@ -676,7 +676,8 @@ class CoopScoreScreen(ba.Activity): our_score = None try: - our_high_scores.sort(reverse=self._score_order == 'increasing') + our_high_scores.sort(reverse=self._score_order == 'increasing', + key=lambda x: x[0]) except Exception: ba.print_exception('Error sorting scores') print('our_high_scores:', our_high_scores) From bb39357a70aaca1d77a81fc66eba5e4199ff4542 Mon Sep 17 00:00:00 2001 From: Roman Trapeznikov Date: Thu, 9 Apr 2020 16:07:07 +0300 Subject: [PATCH 2/7] fix friends results sorting --- assets/src/ba_data/python/bastd/activity/coopscorescreen.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/assets/src/ba_data/python/bastd/activity/coopscorescreen.py b/assets/src/ba_data/python/bastd/activity/coopscorescreen.py index d29ba4cd..f139d251 100644 --- a/assets/src/ba_data/python/bastd/activity/coopscorescreen.py +++ b/assets/src/ba_data/python/bastd/activity/coopscorescreen.py @@ -928,7 +928,8 @@ class CoopScoreScreen(ba.Activity): results.remove(score) break results.append(our_score_entry) - results.sort(reverse=self._score_order == 'increasing') + results.sort(reverse=self._score_order == 'increasing', + key=lambda x: x[0]) # If we're not submitting our own score, we still want to change the # name of our own score to 'Me'. From b13df592748c26b9f0431191069873a941b135b3 Mon Sep 17 00:00:00 2001 From: Roman Trapeznikov Date: Fri, 10 Apr 2020 12:37:45 +0300 Subject: [PATCH 3/7] specify a sorting key for sorting nested lists in ba module sorting with objects that Python cannot compare --- assets/src/ba_data/python/ba/_gameresults.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/assets/src/ba_data/python/ba/_gameresults.py b/assets/src/ba_data/python/ba/_gameresults.py index 47146043..76513f16 100644 --- a/assets/src/ba_data/python/ba/_gameresults.py +++ b/assets/src/ba_data/python/ba/_gameresults.py @@ -189,7 +189,7 @@ class TeamGameResults: sval.append(team) results: List[Tuple[Optional[int], List[ba.Team]]] = list(winners.items()) - results.sort(reverse=not self._lower_is_better) + results.sort(reverse=not self._lower_is_better, key=lambda x: x[0]) # Also group the 'None' scores. none_teams: List[ba.Team] = [] From 93c407cccc25cb1ec9cddc4b5fa1717019969674 Mon Sep 17 00:00:00 2001 From: Roman Trapeznikov Date: Fri, 10 Apr 2020 12:48:21 +0300 Subject: [PATCH 4/7] specify sorting key for sorting nested lists in elimination game --- assets/src/ba_data/python/bastd/game/elimination.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/assets/src/ba_data/python/bastd/game/elimination.py b/assets/src/ba_data/python/bastd/game/elimination.py index f17a116c..6843a453 100644 --- a/assets/src/ba_data/python/bastd/game/elimination.py +++ b/assets/src/ba_data/python/bastd/game/elimination.py @@ -400,7 +400,8 @@ class EliminationGame(ba.TeamGameActivity): self.map.get_start_position(team.get_id())) points.append( ((start_pos - player_pos).length(), start_pos)) - points.sort() + # Hmm.. we need to sorting vectors too? + points.sort(key=lambda x: x[0]) return points[-1][1] return None From 56d5b5f17565cf47c818e658a99ae66ed9d8fbbc Mon Sep 17 00:00:00 2001 From: Roman Trapeznikov Date: Fri, 10 Apr 2020 12:52:10 +0300 Subject: [PATCH 5/7] specify sorting key for sorting nested lists in race game --- assets/src/ba_data/python/bastd/game/race.py | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/assets/src/ba_data/python/bastd/game/race.py b/assets/src/ba_data/python/bastd/game/race.py index 5640e9b7..2190231a 100644 --- a/assets/src/ba_data/python/bastd/game/race.py +++ b/assets/src/ba_data/python/bastd/game/race.py @@ -550,9 +550,7 @@ class RaceGame(ba.TeamGameActivity): p_list = [[player.gamedata['distance'], player] for player in self.players] - p_list.sort(reverse=True) - # FIXME - need another way to sort p_list. - # It tries to compare ba.Player objects. + p_list.sort(reverse=True, key=lambda x: x[0]) for i, plr in enumerate(p_list): try: plr[1].gamedata['rank'] = i From 78e70e002c32251e61491405f2825f73d3603083 Mon Sep 17 00:00:00 2001 From: Roman Trapeznikov Date: Fri, 10 Apr 2020 13:02:08 +0300 Subject: [PATCH 6/7] specify sorting key for sorting nested lists in multiteamjoinscreen --- .../src/ba_data/python/bastd/activity/multiteamendscreen.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/assets/src/ba_data/python/bastd/activity/multiteamendscreen.py b/assets/src/ba_data/python/bastd/activity/multiteamendscreen.py index 4abff20b..f3f399c9 100644 --- a/assets/src/ba_data/python/bastd/activity/multiteamendscreen.py +++ b/assets/src/ba_data/python/bastd/activity/multiteamendscreen.py @@ -80,11 +80,11 @@ class TeamSeriesVictoryScoreScreenActivity(TeamsScoreScreenActivity): player_entries.append( (prec.player.team.sessiondata['score'], prec.get_name(full=True), prec)) - player_entries.sort(reverse=True) + player_entries.sort(reverse=True, key=lambda x: x[0]) else: for _pkey, prec in self.stats.get_records().items(): player_entries.append((prec.score, prec.name_full, prec)) - player_entries.sort(reverse=True) + player_entries.sort(reverse=True, key=lambda x: x[0]) ts_height = 300.0 ts_h_offs = -390.0 From ea9910820299d5f15b720b699989da9755effe21 Mon Sep 17 00:00:00 2001 From: Roman Trapeznikov Date: Fri, 10 Apr 2020 13:58:28 +0300 Subject: [PATCH 7/7] add sorting key for some sorted functions for sorting nested lists --- assets/src/ba_data/python/bastd/ui/gather.py | 3 +-- assets/src/ba_data/python/efro/util.py | 2 ++ 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/assets/src/ba_data/python/bastd/ui/gather.py b/assets/src/ba_data/python/bastd/ui/gather.py index fc63e4f4..7611aee2 100644 --- a/assets/src/ba_data/python/bastd/ui/gather.py +++ b/assets/src/ba_data/python/bastd/ui/gather.py @@ -1451,8 +1451,7 @@ class GatherWindow(ba.Window): key=lambda p: ( p['queue'] is None, # Show non-queued last. p['ping'] if p['ping'] is not None else 999999, - p['index'], - p)) + p['index'])) existing_selection = self._public_party_list_selection first = True diff --git a/assets/src/ba_data/python/efro/util.py b/assets/src/ba_data/python/efro/util.py index 8f607758..aa777d4d 100644 --- a/assets/src/ba_data/python/efro/util.py +++ b/assets/src/ba_data/python/efro/util.py @@ -303,4 +303,6 @@ def make_hash(obj: Any) -> int: for k, v in new_obj.items(): new_obj[k] = make_hash(v) + # NOTE: there is sorted works correctly because it compares only + # unique first values (i.e. dict keys) return hash(tuple(frozenset(sorted(new_obj.items()))))