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

compact_card.py (6184B)


      1 #Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\packages\achievement_system\client\ui\window\card\compact_card.py
      2 import threadutils
      3 import uthread2
      4 from achievement_system.client.api.signal import on_achievement_progressed, on_achievement_completed, on_admin_achievement_reset, on_admin_achievement_reset_all
      5 from achievement_system.client.ui.controller.achievement_entry import AchievementEntryController
      6 from achievement_system.client.ui.window.card.components.icon import AchievementIcon
      7 from achievement_system.client.ui.window.card.components.labels import CompactAchievementLabels
      8 from achievement_system.client.ui.window.card.components.milestones import DotAchievementMilestones
      9 from achievement_system.client.ui.window.card.tooltip import CompactAchievementCardTooltip
     10 from achievement_system.client.ui.window.const import COMPACT_CARD_WIDTH, COMPACT_CARD_HEIGHT, TRANSITION_DURATION
     11 from carbonui import Align, uiconst
     12 from carbonui.primitives.container import Container
     13 from carbonui.primitives.containerAutoSize import ContainerAutoSize
     14 from carbonui.uianimations import animations
     15 from carbonui.uicore import uicore
     16 from eve.client.script.ui.control.eveLoadingWheel import LoadingWheel
     17 from eve.client.script.ui.control.gauge import Gauge
     18 
     19 class CompactAchievementCard(Container):
     20     default_width = COMPACT_CARD_WIDTH
     21     default_height = COMPACT_CARD_HEIGHT
     22 
     23     def __init__(self, controller, *args, **kwargs):
     24         super(CompactAchievementCard, self).__init__(*args, **kwargs)
     25         self.controller = controller
     26         self.is_hovered = False
     27         self.construct_layout()
     28         self.update(animate=False)
     29         self.connect_signals()
     30 
     31     def Close(self):
     32         try:
     33             self.disconnect_signals()
     34         finally:
     35             super(CompactAchievementCard, self).Close()
     36 
     37     def connect_signals(self):
     38         on_achievement_completed.connect(self.on_achievement_completed)
     39         on_achievement_progressed.connect(self.on_achievement_progressed)
     40         on_admin_achievement_reset.connect(self.on_achievement_reset)
     41         on_admin_achievement_reset_all.connect(self.on_achievement_reset_all)
     42 
     43     def disconnect_signals(self):
     44         on_achievement_completed.disconnect(self.on_achievement_completed)
     45         on_achievement_progressed.disconnect(self.on_achievement_progressed)
     46         on_admin_achievement_reset.disconnect(self.on_achievement_reset)
     47         on_admin_achievement_reset_all.disconnect(self.on_achievement_reset_all)
     48 
     49     def construct_layout(self):
     50         self.construct_containers()
     51         self.construct_icon()
     52         self.construct_labels()
     53         self.construct_milestone_container()
     54         self.construct_progress()
     55 
     56     def construct_containers(self):
     57         self.loading_wheel = LoadingWheel(name='loading_wheel', parent=self, align=Align.CENTER)
     58         self.hover_area = Container(name='hover_area', parent=self, align=Align.CENTER, state=uiconst.UI_NORMAL, width=COMPACT_CARD_WIDTH - 16, height=COMPACT_CARD_HEIGHT - 16)
     59         self.hover_area.OnMouseEnter = self.on_hover_area_mouse_enter
     60         self.hover_area.OnMouseExit = self.on_hover_area_mouse_exit
     61         self.content_container = Container(name='content_container', parent=self, opacity=0.0, padding=(0, 8, 0, 8))
     62 
     63     def construct_icon(self):
     64         icon_container = Container(name='icon_container', parent=self.content_container, align=Align.TOTOP, height=128, padBottom=8)
     65         self.icon = AchievementIcon(name='icon', parent=icon_container, align=Align.CENTER, state=uiconst.UI_NORMAL, controller=self.controller)
     66 
     67     @threadutils.highlander_threaded
     68     def on_hover_area_mouse_enter(self, *args):
     69         self.is_hovered = True
     70         uthread2.Sleep(0.25)
     71         if not self.is_hovered:
     72             return
     73         self.controller.set_selected_milestone_index(self.controller.current_milestone_index)
     74         CompactAchievementCardTooltip(parent=uicore.layer.modal, anchor=self.icon, controller=self.controller)
     75 
     76     def on_hover_area_mouse_exit(self, *args):
     77         self.is_hovered = False
     78 
     79     def construct_labels(self):
     80         self.labels = CompactAchievementLabels(name='labels', parent=self.content_container, align=Align.TOTOP, controller=self.controller)
     81 
     82     def construct_milestone_container(self):
     83         self.milestone_container = ContainerAutoSize(name='milestone_container', parent=self.content_container, align=Align.TOTOP, padTop=2)
     84 
     85     def construct_progress(self):
     86         self.progress_bar = Gauge(name='progress_bar', parent=self.content_container, align=Align.TOBOTTOM, gaugeHeight=4)
     87 
     88     def construct_milestone_markers(self):
     89         if not self.controller.has_multiple_milestones:
     90             return
     91         self.milestone_container.Flush()
     92         DotAchievementMilestones(name='milestones', parent=self.milestone_container, align=Align.TOTOP, controller=self.controller)
     93 
     94     @threadutils.highlander_threaded
     95     def update(self, animate = True):
     96         self.progress_bar.SetValue(self.controller.percent_progress_towards_current_milestone, animate=animate)
     97         self.update_color_theme()
     98         self.icon.update()
     99         if self.controller.has_multiple_milestones:
    100             self.construct_milestone_markers()
    101         animations.FadeOut(self.loading_wheel, duration=TRANSITION_DURATION)
    102         animations.FadeIn(self.content_container, duration=TRANSITION_DURATION)
    103 
    104     def update_color_theme(self):
    105         self.progress_bar.SetColor(self.controller.progress_bar_color)
    106 
    107     def OnColorThemeChanged(self):
    108         super(CompactAchievementCard, self).OnColorThemeChanged()
    109         self.update_color_theme()
    110 
    111     def on_achievement_completed(self, achievement_id):
    112         if achievement_id == self.controller.achievement_entry.identifier:
    113             self.update()
    114 
    115     def on_achievement_progressed(self, achievement_id, achievement_state):
    116         if achievement_id == self.controller.achievement_entry.identifier:
    117             self.update()
    118 
    119     def on_achievement_reset(self, achievement_id):
    120         if achievement_id == self.controller.achievement_entry.identifier:
    121             self.update()
    122 
    123     def on_achievement_reset_all(self):
    124         self.update()