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

sequencingTime.py (5518B)


      1 #Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\eve\client\script\ui\cosmetics\ship\controls\sequencingTime.py
      2 from carbonui.uiconst import PickState
      3 from carbonui.primitives.layoutGrid import LayoutGrid
      4 import eveicon
      5 import gametime
      6 import uthread2
      7 from carbonui import Align, TextColor, uiconst
      8 from carbonui.text.styles import TextHeader, TextBody
      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.sprite import Sprite
     13 from cosmetics.client.ships.skins.live_data import current_skin_design, current_skin_design_signals
     14 from cosmetics.client.shipSkinSequencingSvc import get_ship_skin_sequencing_svc
     15 import cosmetics.client.ships.ship_skin_signals as ship_skin_signals
     16 from eve.client.script.ui import eveColor
     17 from player_messaging.client.ui_message import message_player
     18 from eve.client.script.ui.cosmetics.ship.pages.sequence.tooltipInfoIcons import SequencingTimeSkillsInfoIcon
     19 from localization import GetByLabel, formatters
     20 from publicGateway.grpc.exceptions import GenericException
     21 from stackless_response_router.exceptions import TimeoutException
     22 
     23 class SequencingTime(Container):
     24     default_height = 32
     25 
     26     def __init__(self, *args, **kwargs):
     27         super(SequencingTime, self).__init__(*args, **kwargs)
     28         self._update_thread = None
     29         self.construct_layout()
     30         self.connect_signals()
     31         self.update()
     32 
     33     def Close(self):
     34         try:
     35             self.kill_update_thread()
     36             self.disconnect_signals()
     37         finally:
     38             super(SequencingTime, self).Close()
     39 
     40     def kill_update_thread(self):
     41         if self._update_thread:
     42             self._update_thread.kill()
     43             self._update_thread = None
     44 
     45     def connect_signals(self):
     46         current_skin_design_signals.on_design_reset.connect(self.on_design_reset)
     47         current_skin_design_signals.on_existing_design_loaded.connect(self.on_existing_design_loaded)
     48         current_skin_design_signals.on_ship_type_id_changed.connect(self.on_ship_type_id_changed)
     49         current_skin_design_signals.on_slot_fitting_changed.connect(self.on_slot_fitting_changed)
     50         ship_skin_signals.on_skin_sequencing_cache_invalidated.connect(self._on_skin_sequencing_cache_invalidated)
     51 
     52     def disconnect_signals(self):
     53         current_skin_design_signals.on_design_reset.disconnect(self.on_design_reset)
     54         current_skin_design_signals.on_existing_design_loaded.disconnect(self.on_existing_design_loaded)
     55         current_skin_design_signals.on_ship_type_id_changed.disconnect(self.on_ship_type_id_changed)
     56         current_skin_design_signals.on_slot_fitting_changed.disconnect(self.on_slot_fitting_changed)
     57         ship_skin_signals.on_skin_sequencing_cache_invalidated.disconnect(self._on_skin_sequencing_cache_invalidated)
     58 
     59     def construct_layout(self):
     60         self.Flush()
     61         left_container = Container(name='left_container', parent=self, align=Align.TOLEFT, pickState=PickState.ON, hint=GetByLabel('UI/Personalization/ShipSkins/SKINR/Studio/TimeToSequence'), width=40)
     62         Fill(bgParent=left_container, color=eveColor.WHITE, opacity=0.1)
     63         Sprite(name='icon', parent=left_container, align=Align.CENTER, texturePath=eveicon.hourglass, color=TextColor.NORMAL, pickState=PickState.OFF, pos=(0, 0, 16, 16))
     64         self.right_container = Container(name='right_container', parent=self, align=Align.TOALL, padLeft=4)
     65         self.layout_grid = LayoutGrid(parent=self.right_container, align=Align.TORIGHT, cellSpacing=(4, 0))
     66         self.layout_grid.columns = 3
     67         self.construct_info_icon()
     68         self.construct_time_label()
     69         self.construct_discount_label()
     70 
     71     def construct_info_icon(self):
     72         SequencingTimeSkillsInfoIcon(name='info_icon', parent=self.layout_grid, align=Align.CENTER)
     73 
     74     def construct_time_label(self):
     75         self.time_label = TextHeader(name='time_label', parent=self.layout_grid, color=TextColor.HIGHLIGHT, align=Align.CENTER, padLeft=8)
     76 
     77     def construct_discount_label(self):
     78         self.discount_label = TextBody(parent=self.layout_grid, align=Align.CENTERLEFT, color=eveColor.SUCCESS_GREEN)
     79 
     80     def update(self):
     81         self.kill_update_thread()
     82         self._update_thread = uthread2.start_tasklet(self._update_async)
     83 
     84     def _update_async(self):
     85         try:
     86             duration, discount = get_ship_skin_sequencing_svc().get_predicted_job_duration(current_skin_design.get())
     87             duration = duration * gametime.SEC
     88         except (GenericException, TimeoutException):
     89             message_player(GetByLabel('UI/Common/CannotConnectToServer'))
     90             duration = 0
     91             discount = 0
     92 
     93         self.construct_layout()
     94         show_to = 'minute' if duration < gametime.DAY else 'hour'
     95         self.time_label.text = formatters.FormatTimeIntervalShortWritten(duration, showTo=show_to)
     96         if discount:
     97             self.discount_label.text = GetByLabel('UI/Personalization/ShipSkins/SKINR/Studio/CostWithDiscount', discount_percentage=discount)
     98         else:
     99             self.discount_label.text = ''
    100 
    101     def on_design_reset(self, *args):
    102         self.update()
    103 
    104     def on_existing_design_loaded(self, *args):
    105         self.update()
    106 
    107     def on_ship_type_id_changed(self, *args):
    108         self.update()
    109 
    110     def on_slot_fitting_changed(self, *args):
    111         self.update()
    112 
    113     def _on_skin_sequencing_cache_invalidated(self, *args):
    114         self.update()