speedGauge.py (5979B)
1 #Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\eve\client\script\ui\inflight\shipHud\speedGauge.py 2 import math 3 import sys 4 import trinity 5 from carbon.client.script.environment.AudioUtil import PlaySound 6 from carbon.common.script.util.format import FmtDist 7 from carbon.common.script.util.timerstuff import AutoTimer 8 from carbonui.loggers.buttonLogger import log_button_clicked 9 from carbonui import TextColor, uiconst 10 from carbonui.primitives.container import Container 11 from carbonui.primitives.sprite import Sprite 12 from carbonui.primitives.transform import Transform 13 from eve.client.script.ui import eveColor 14 from eve.client.script.ui.control.eveLabel import EveLabelSmall 15 from localization import GetByLabel 16 import uthread 17 import telemetry 18 import blue 19 import log 20 from carbonui.uicore import uicore 21 22 class SpeedGauge(Container): 23 default_name = 'SpeedGauge' 24 default_width = 124 25 default_height = 36 26 default_state = uiconst.UI_NORMAL 27 28 def ApplyAttributes(self, attributes): 29 Container.ApplyAttributes(self, attributes) 30 self.analyticID = 'ship_hud.speed_gauge' 31 self.controller = attributes.controller 32 self.wantedspeed = None 33 self.speedTimer = None 34 self.speedInited = 0 35 self.speedCircularPickParent = Container(name='speedCircularPickParent', parent=self, align=uiconst.CENTERBOTTOM, pos=(0, 0, 144, 144), pickRadius=72) 36 self.speedGaugeParent = Container(parent=self.speedCircularPickParent, name='speedGaugeParent', pos=(0, 0, 124, 42), align=uiconst.CENTERBOTTOM, state=uiconst.UI_DISABLED, clipChildren=True) 37 self.speedLabel = EveLabelSmall(name='speedLabel', parent=self.speedGaugeParent, align=uiconst.CENTER, top=2, color=TextColor.HIGHLIGHT) 38 Sprite(parent=self.speedCircularPickParent, name='speedoUnderlay', pos=(0, 48, 104, 44), align=uiconst.CENTER, state=uiconst.UI_DISABLED, texturePath='res:/UI/Texture/classes/ShipUI/speedoUnderlay.png', color=eveColor.BLACK, opacity=0.8, spriteEffect=trinity.TR2_SFX_COLOROVERLAY) 39 self.speedNeedle = Transform(parent=self.speedGaugeParent, name='speedNeedle', pos=(-5, -34, 134, 12), align=uiconst.TOPLEFT, state=uiconst.UI_PICKCHILDREN, rotationCenter=(0.5, 0.5)) 40 Sprite(name='needle', parent=self.speedNeedle, align=uiconst.TOPLEFT, pos=(0, 0, 24, 12), state=uiconst.UI_DISABLED, texturePath='res:/UI/Texture/classes/ShipUI/heatGaugeNeedle.png', color=eveColor.SILVER_GREY) 41 Sprite(name='speedGaugeSprite', parent=self.speedNeedle, pos=(-8, -84, 153, 89), state=uiconst.UI_DISABLED, texturePath='res:/UI/Texture/classes/ShipUI/speedoOverlay_v2.png', color=eveColor.SMOKE_BLUE, opacity=0.8) 42 self.speedTimer = uthread.new(self.UpdateSpeedThread) 43 44 def OnClick(self, *args): 45 log_button_clicked(self) 46 PlaySound(uiconst.SOUND_BUTTON_CLICK) 47 uthread.new(self.controller.SetSpeed, self.GetCurrMouseSpeedPortion()) 48 49 def LoadTooltipPanel(self, tooltipPanel, *args): 50 tooltipPanel.LoadGeneric3ColumnTemplate() 51 iconObj, labelObj, valueObj = tooltipPanel.AddIconLabelValue('ui_22_32_13', GetByLabel('Tooltips/Hud/CurrentSpeed'), '', iconSize=24) 52 setattr(tooltipPanel, '_valueLabelSpeed', valueObj) 53 tooltipPanel.AddSpacer(width=2, height=2) 54 tooltipPanel._setSpeedValue = tooltipPanel.AddLabelMedium(colSpan=tooltipPanel.columns - 1, width=180) 55 self._UpdateSpeedTooltip(tooltipPanel) 56 self._speedTooltipUpdate = AutoTimer(10, self._UpdateSpeedTooltip, tooltipPanel) 57 58 def _UpdateSpeedTooltip(self, tooltipPanel): 59 if tooltipPanel.destroyed: 60 self._speedTooltipUpdate = None 61 return 62 if not self.controller.IsLoaded(): 63 self._speedTooltipUpdate = None 64 return 65 if self.controller.IsInWarp(): 66 fmtSpeed = FmtDist(self.controller.GetSpeed(), 2) 67 tooltipPanel._valueLabelSpeed.text = '%s/s' % fmtSpeed 68 tooltipPanel._setSpeedValue.text = GetByLabel('UI/Inflight/CanNotChangeSpeedWhileWarping') 69 else: 70 fmtSpeed = self.controller.GetSpeedFormatted() 71 tooltipPanel._valueLabelSpeed.text = fmtSpeed 72 portion = self.GetCurrMouseSpeedPortion() 73 speed = self.controller.GetSpeedAtFormatted(portion) 74 tooltipPanel._setSpeedValue.text = GetByLabel('UI/Inflight/ClickToSetSpeedTo', speed=speed) 75 76 def StopShip(self): 77 self.controller.StopShip() 78 79 @telemetry.ZONE_FUNCTION 80 def UpdateSpeedThread(self): 81 while not self.destroyed: 82 try: 83 blue.synchro.Sleep(20) 84 if not self.controller.IsLoaded(): 85 continue 86 if not (self.controller.GetBall() and self.controller.GetBall().ballpark): 87 continue 88 speedPortion = self.controller.GetSpeedPortion() 89 self.speedNeedle.SetRotation(math.radians(45.0 + 90.0 * speedPortion)) 90 if self.controller.IsInWarp(): 91 fmtSpeed = GetByLabel('UI/Inflight/WarpSpeedNotification', warpingMessage=GetByLabel('UI/Inflight/Scanner/Warping')) 92 else: 93 fmtSpeed = self.controller.GetSpeedFormatted() 94 self.speedLabel.text = fmtSpeed 95 except Exception as e: 96 log.LogException(e) 97 sys.exc_clear() 98 99 def GetCurrMouseSpeedPortion(self): 100 l, t, w, h = self.speedCircularPickParent.GetAbsolute() 101 centerX = l + w / 2 102 centerY = t + h / 2 103 y = float(uicore.uilib.y - centerY) 104 x = float(uicore.uilib.x - centerX) 105 if x and y: 106 angle = math.atan(x / y) 107 deg = angle / math.pi * 180.0 108 factor = (45.0 + deg) / 90.0 109 if factor < 0.05: 110 return 0.0 111 elif factor > 0.95: 112 return 1.0 113 else: 114 return factor 115 return 0.5