NovaBryan/EVE_Dump
Log | Files | 📦 下载最新源码 (.zip) | Refs | README

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]