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

structureBracket.py (5094B)


      1 #Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\eve\client\script\ui\inflight\bracketsAndTargets\structureBracket.py
      2 import blue
      3 import structures
      4 import localization
      5 from eve.client.script.ui.inflight.bracketsAndTargets.inSpaceBracket import InSpaceBracket
      6 from eve.client.script.ui.control.countdownTimer import CountdownTimer, TIMER_RUNNING_OUT_NO_ANIMATION
      7 from eve.client.script.ui.control.damageRing import DamageRing
      8 
      9 class StructureBracket(InSpaceBracket):
     10 
     11     def __init__(self, **kwargs):
     12         super(StructureBracket, self).__init__(**kwargs)
     13         self.damage = DamageRing(name='DamageRing', parent=self)
     14         self.timer = CountdownTimer(name='StructureCounter', parent=self, countsDown=True, timerFunc=blue.os.GetWallclockTime, timerRunningOutAnimation=TIMER_RUNNING_OUT_NO_ANIMATION)
     15         self.timer.Hide()
     16         self.Update()
     17 
     18     def Showing(self):
     19         return self.selection_sprite is not None and self.selection_sprite.display
     20 
     21     def Select(self, status):
     22         if bool(status) != self.Showing():
     23             InSpaceBracket.Select(self, status)
     24             self.Update()
     25 
     26     def GetDocked(self):
     27         if self.IsVisible():
     28             return self.slimItem.docked or 0
     29 
     30     def OnSlimItemChange(self, oldSlim, newSlim):
     31         self.slimItem = newSlim
     32         self.Update()
     33 
     34     def Update(self):
     35         self.SetSubLabelCallback(self.UpdateLabel)
     36         self.UpdateTimer()
     37 
     38     def UpdateLabel(self):
     39         if not self.slimItem or not self.slimItem.state or not self.IsVisible():
     40             return
     41         label = self.GetStateLabel()
     42         if self.slimItem.timer:
     43             start, end, paused = self.slimItem.timer
     44             remaining = max(end - (paused or blue.os.GetWallclockTime()), 0)
     45             label = u'{state}: {time} {paused} {unanchoring}'.format(state=self.GetStateLabel(), time=localization.formatters.FormatTimeIntervalShortWritten(remaining, showFrom='day', showTo='second'), paused=localization.GetByLabel('UI/Structures/States/Paused') if paused else '', unanchoring=localization.GetByLabel('UI/Structures/States/Unanchoring') if self.slimItem.unanchoring else '')
     46         elif self.slimItem.unanchoring:
     47             label = u'{state}: {unanchoring}'.format(state=self.GetStateLabel(), unanchoring=localization.GetByLabel('UI/Structures/States/Unanchoring'))
     48         if self.slimItem.upkeepState == structures.UPKEEP_STATE_LOW_POWER:
     49             if self.slimItem.state not in structures.OFFLINE_STATES:
     50                 label += ' %s' % localization.GetByLabel('UI/Structures/States/LowPower')
     51         elif self.slimItem.upkeepState == structures.UPKEEP_STATE_ABANDONED:
     52             label += ' %s' % localization.GetByLabel('UI/Structures/States/Abandoned')
     53         if 'deedState' in self.slimItem.__dict__ and not self.slimItem.deedState:
     54             label += ' %s' % localization.GetByLabel('UI/Structures/States/DeedAbsent')
     55         return label
     56 
     57     def GetStateLabel(self):
     58         label = ''
     59         if self.slimItem.state == structures.STATE_DEPLOY_VULNERABLE:
     60             label = localization.GetByLabel('UI/Structures/States/Deploying')
     61             if self.slimItem.deployTimes is not None:
     62                 start, end = self.slimItem.deployTimes
     63                 if start and end:
     64                     remaining = max(end - blue.os.GetWallclockTime(), 0)
     65                     if remaining > 0:
     66                         label = localization.GetByLabel('UI/Structures/States/TimeUntilDeployed', time=localization.formatters.FormatTimeIntervalShortWritten(remaining, showFrom='day', showTo='second'))
     67             if self.slimItem.repairing is not None:
     68                 label += ' - %s' % localization.GetByLabel('UI/Structures/States/Repairing')
     69         elif self.slimItem.repairing is not None:
     70             if self.slimItem.state == structures.STATE_ANCHOR_VULNERABLE:
     71                 label = localization.GetByLabel('UI/Structures/States/AnchorPreparing')
     72             else:
     73                 label = localization.GetByLabel('UI/Structures/States/Repairing')
     74         elif self.slimItem.state:
     75             label = localization.GetByLabel(structures.STATE_LABELS[self.slimItem.state])
     76         return label
     77 
     78     def UpdateTimer(self):
     79         if self.destroyed:
     80             return None
     81         visible = self.IsVisible()
     82         start, end, paused = self.slimItem.timer or (0, 0, None)
     83         validTime = start and end and bool(int(end - start))
     84         if validTime:
     85             self.timer.SetExpiryTime(end, end - start, paused)
     86         if self.slimItem.state:
     87             self.timer.SetTimerColor(structures.STATE_COLOR.get(self.slimItem.state, (1, 1, 1, 1)))
     88         if validTime and (self.IsSelectedOrHilted() or self.slimItem.damage) and visible:
     89             self.timer.Show()
     90         else:
     91             self.timer.Hide()
     92         if self.slimItem.damage and visible:
     93             self.damage.Show()
     94             self.damage.SetDamage(self.slimItem.damage)
     95         else:
     96             self.damage.Hide()
     97 
     98     def IsVisible(self):
     99         return sm.GetService('michelle').IsBallVisible(self.itemID)