From d85ccea865090f1b05fbcdfc7f9b806bd5f1636f Mon Sep 17 00:00:00 2001 From: Jennifer Taylor Date: Sun, 13 Nov 2022 00:21:26 +0000 Subject: [PATCH] Make frontend smart enough to only show emblem items that you have earned. --- bemani/frontend/jubeat/jubeat.py | 25 +++++++++++-------- .../controllers/jubeat/settings.react.js | 12 ++++++--- 2 files changed, 24 insertions(+), 13 deletions(-) diff --git a/bemani/frontend/jubeat/jubeat.py b/bemani/frontend/jubeat/jubeat.py index 0420f45..5ee6ec0 100644 --- a/bemani/frontend/jubeat/jubeat.py +++ b/bemani/frontend/jubeat/jubeat.py @@ -143,11 +143,26 @@ class JubeatFrontend(FrontendBase): def format_profile( self, profile: Profile, playstats: ValidatedDict ) -> Dict[str, Any]: + # Grab achievements for both jubility in festo, as well as emblem parts in + # prop onward. + userid = self.data.local.user.from_refid( + profile.game, profile.version, profile.refid + ) + if userid is not None: + achievements = self.data.local.user.get_achievements( + profile.game, profile.version, userid + ) + else: + achievements = [] + formatted_profile = super().format_profile(profile, playstats) formatted_profile["plays"] = playstats.get_int("total_plays") formatted_profile["emblem"] = self.format_emblem( profile.get_dict("last").get_int_array("emblem", 5) ) + formatted_profile["owned_emblems"] = [ + ach.id for ach in achievements if ach.type == "emblem" + ] formatted_profile["jubility"] = ( profile.get_int("jubility") if profile.version @@ -181,16 +196,6 @@ class JubeatFrontend(FrontendBase): # Look up achievements which is where jubility was stored. This is a bit of a hack # due to the fact that this could be formatting remote profiles, but then they should # have no achievements. - userid = self.data.local.user.from_refid( - profile.game, profile.version, profile.refid - ) - if userid is not None: - achievements = self.data.local.user.get_achievements( - profile.game, profile.version, userid - ) - else: - achievements = [] - jubeat_entries: List[ValidatedDict] = [] for achievement in achievements: if achievement.type != "jubility": diff --git a/bemani/frontend/static/controllers/jubeat/settings.react.js b/bemani/frontend/static/controllers/jubeat/settings.react.js index 2b10607..4189581 100644 --- a/bemani/frontend/static/controllers/jubeat/settings.react.js +++ b/bemani/frontend/static/controllers/jubeat/settings.react.js @@ -163,8 +163,14 @@ var settings_view = createReactClass({ var player = this.state.player[this.state.version] var layer = valid_emblem_options.indexOf(emblem_option) + 1 var items = window.emblems[this.state.version].filter(function (emblem) { - return emblem.layer == layer - }); + return ( + emblem.layer == layer && + ( + this.state.player[this.state.version].owned_emblems.indexOf(emblem.index) >= 0 || + emblem.rarity == 1 && emblem.layer == 2 + ) + ); + }.bind(this)); var results = {}; items .map(function(item) { return { 'index': item.index, 'name': `${item.name} (★${item.rarity})` } }) @@ -244,7 +250,7 @@ var settings_view = createReactClass({ {this.renderName(player)} { - this.state.version > 9 ? this.renderEmblem(player) : null + (this.state.version > 9 && window.emblems[this.state.version].length > 0) ? this.renderEmblem(player) : null } );