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

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