achievements.py (3989B)
1 #Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\eve\client\script\ui\shared\theatersOfWar\landingPage\achievements.py 2 import uthread2 3 from achievement_system.client.ui.controller.achievement_entry import AchievementEntryController 4 from achievement_system.client.ui.window.card.components.icon import AchievementIcon 5 from carbon.common.script.util.format import FmtAmt 6 from carbonui import Align, TextColor, PickState 7 from carbonui.primitives.container import Container 8 from carbonui.primitives.containerAutoSize import ContainerAutoSize 9 from carbonui.text.styles import TextHeader, TextBody 10 from eve.client.script.ui.shared.theatersOfWar.campaigns.placeholder_texts import TEXT_TOP_ACHIEVEMENT_PROGRESS, TEXT_MILESTONE_NUM 11 from eve.client.script.ui.shared.theatersOfWar.landingPage.landingPageWidgets import WidgetContWithContent 12 13 class AchievementsCont(WidgetContWithContent): 14 15 def ApplyAttributes(self, attributes): 16 self.window_controller = attributes.window_controller 17 super(AchievementsCont, self).ApplyAttributes(attributes) 18 self.set_header(TEXT_TOP_ACHIEVEMENT_PROGRESS) 19 20 def construct_ui(self): 21 super(AchievementsCont, self).construct_ui() 22 self.icon_cont = Container(name='icon_cont', parent=self.content_cont, align=Align.TOLEFT, width=128) 23 text_cont = ContainerAutoSize(name='text_cont', parent=self.content_cont, align=Align.TOTOP, padLeft=16) 24 self.content_cont.minHeight = self.icon_cont.height 25 self.achievement_name_label = TextHeader(name='achievement_name', parent=text_cont, align=Align.TOTOP) 26 self.progress_label = TextBody(name='progress_label', parent=text_cont, align=Align.TOTOP) 27 self.achievement_desc_label = TextBody(parent=text_cont, align=Align.TOTOP, color=TextColor.SECONDARY) 28 29 def load_ui(self): 30 uthread2.StartTasklet(self._load_ui) 31 32 def _load_ui(self): 33 top_achievement = self._get_top_achievement_for_campaigns() 34 if not top_achievement: 35 return 36 self.achievement_name_label.SetText(top_achievement.name) 37 progress_text = '%s / %s' % (FmtAmt(top_achievement.progress), FmtAmt(top_achievement.selected_milestone_target)) 38 self.progress_label.SetText(progress_text) 39 self.achievement_desc_label.SetText(top_achievement.description) 40 AchievementIcon(name='achievementIcon', parent=self.icon_cont, align=Align.CENTER, pickState=PickState.OFF, controller=top_achievement) 41 milestone_idx = top_achievement.current_milestone_index 42 text = TEXT_MILESTONE_NUM % (milestone_idx + 1) 43 self.set_footer_left(text) 44 self.pickState = PickState.ON 45 self.OnClick = lambda *args: self.open_achievement(top_achievement.id) 46 47 def open_achievement(self, achievement_uuid): 48 from achievement_system.client.model.definition.achievement.identifier import AchievementDefinitionIdentifier 49 from achievement_system.client.ui.window.window import AchievementsWindow 50 achievement_id = AchievementDefinitionIdentifier(achievement_uuid) 51 AchievementsWindow.open_achievement(achievement_id) 52 53 def _get_top_achievement_for_campaigns(self): 54 all_achievement_entry_controllers = [] 55 campaign_panel_controller = self.window_controller.campaign_panel_controller 56 all_campaigns_in_set = campaign_panel_controller.get_campaigns() 57 for campaign_controller in all_campaigns_in_set: 58 achievement = campaign_controller.achievement 59 if not achievement: 60 continue 61 achievement_entry_controller = AchievementEntryController(achievement) 62 all_achievement_entry_controllers.append(achievement_entry_controller) 63 64 if not all_achievement_entry_controllers: 65 return None 66 sorted_controllers = sorted(all_achievement_entry_controllers, key=lambda x: (x.completed_milestones, x.progress), reverse=True) 67 return sorted_controllers[0]