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

achievement_score.py (4201B)


      1 #Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\packages\achievement_system\client\ui\chip\achievement_score.py
      2 import threadutils
      3 from achievement_system.client.api.error import GenericInternalServerError, ServiceUnavailableError
      4 from achievement_system.client.api.repository import get_repository
      5 from achievement_system.client.api.signal import on_achievement_progressed, on_achievement_completed
      6 from achievement_system.client.ui.window.window import AchievementsWindow
      7 from carbon.common.script.util.format import FmtAmt
      8 from carbonui import Align, uiconst
      9 from carbonui.primitives.container import Container
     10 from carbonui.primitives.containerAutoSize import ContainerAutoSize
     11 from carbonui.primitives.fill import Fill
     12 from carbonui.primitives.frame import Frame
     13 from carbonui.text.styles import TextDetail
     14 from carbonui.uianimations import animations
     15 from character.client.identifier import CharacterIdentifier
     16 from eve.client.script.ui import eveColor
     17 from localization import GetByLabel
     18 from signals import Signal
     19 
     20 class AchievementScoreChip(ContainerAutoSize):
     21     default_height = 18
     22     default_opacity = 0.0
     23     default_display = False
     24 
     25     def __init__(self, character_id, animate = True, *args, **kwargs):
     26         super(AchievementScoreChip, self).__init__(*args, **kwargs)
     27         self.character_id = character_id
     28         self.animate = animate
     29         self.on_update = Signal('on_update')
     30         self.construct_layout()
     31         self.connect_signals()
     32         self.update()
     33 
     34     def Close(self):
     35         try:
     36             self.disconnect_signals()
     37         finally:
     38             super(AchievementScoreChip, self).Close()
     39 
     40     def connect_signals(self):
     41         on_achievement_completed.connect(self.on_achievement_completed)
     42         on_achievement_progressed.connect(self.on_achievement_progressed)
     43 
     44     def disconnect_signals(self):
     45         on_achievement_completed.disconnect(self.on_achievement_completed)
     46         on_achievement_progressed.disconnect(self.on_achievement_progressed)
     47 
     48     def construct_layout(self):
     49         self.content_container = Container(name='content_container', parent=self, align=Align.TOLEFT, clipChildren=True, width=0, height=self.default_height)
     50         Fill(parent=self.content_container, color=eveColor.WHITE, opacity=0.15)
     51         Frame(parent=self.content_container, frameConst=uiconst.FRAME_BORDER1_CORNER8, color=eveColor.WHITE, opacity=0.2)
     52         self.label = TextDetail(name='label', parent=self.content_container, align=Align.CENTER)
     53 
     54     @threadutils.highlander_threaded
     55     def update(self):
     56         self.display = False
     57         try:
     58             achievement_score = get_repository().get_achievement_score(CharacterIdentifier(self.character_id))
     59         except ServiceUnavailableError or GenericInternalServerError:
     60             self.on_update()
     61             return
     62 
     63         if achievement_score == 0:
     64             self.on_update()
     65             return
     66         self.display = True
     67         label_text = FmtAmt(achievement_score)
     68         text_width, _ = TextDetail.MeasureTextSize(label_text)
     69         target_width = text_width + 8
     70         self.label.text = label_text
     71         self.content_container.state = uiconst.UI_NORMAL
     72         self.content_container.hint = '%s %s' % (GetByLabel('UI/Achievements/Window/AchievementScore'), label_text)
     73         self.content_container.OnClick = self.on_achievement_score_click
     74         if self.animate:
     75             animations.FadeIn(self, duration=0.25)
     76             animations.MorphScalar(obj=self.content_container, attrName='width', startVal=self.content_container.width, endVal=target_width, duration=0.25)
     77         else:
     78             self.opacity = 1.0
     79             self.content_container.width = target_width
     80         self.on_update()
     81 
     82     def on_achievement_score_click(self, *args):
     83         wnd = AchievementsWindow.GetIfOpen()
     84         if wnd and not wnd.destroyed:
     85             wnd.Maximize()
     86         else:
     87             AchievementsWindow.Open()
     88 
     89     def on_achievement_completed(self, achievement_id):
     90         self.update()
     91 
     92     def on_achievement_progressed(self, achievement_id, achievement_state):
     93         self.update()
     94 
     95     def OnGlobalFontSizeChanged(self):
     96         self.update()