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)