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

spaceObjectIcon.py (12237B)


      1 #Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\eve\client\script\ui\inflight\spaceObjectIcon.py
      2 import blue
      3 import localization
      4 import telemetry
      5 import uthread
      6 from carbonui import uiconst
      7 from carbonui.primitives.container import Container
      8 from carbonui.primitives.fill import Fill
      9 from carbonui.primitives.sprite import Sprite
     10 from carbonui.uicore import uicore
     11 from carbonui.util.color import Color
     12 from eve.client.script.parklife import states as state
     13 from eve.client.script.ui.inflight.bracketsAndTargets.blinkingSpriteOnSharedCurve import BlinkingSpriteOnSharedCurve
     14 from eve.client.script.ui.inflight.bracketsAndTargets.bracketVarious import GetIconColor
     15 from eve.client.script.ui.shared.stateFlag import FlagIconWithState, GetIconFlagAndBackgroundFlag, GetExtraInfoForSlimItem, HasDockingRights
     16 from eve.common.lib import appConst as const
     17 from hackingcommon import hacking_util
     18 from overviewPresets import overviewSettingsConst as osConst
     19 from structures import STATE_UNANCHORED
     20 from structures.types import IsFlexStructure
     21 
     22 def _IsFleetMember(slimItem):
     23     if not session.fleetid or not slimItem or not slimItem.ownerID:
     24         return False
     25     return sm.GetService('fleet').IsMember(slimItem.ownerID)
     26 
     27 
     28 class SpaceObjectIcon(Container):
     29     iconSprite = None
     30     hostileIndicator = None
     31     attackingMeIndicator = None
     32     targetingIndicator = None
     33     targetedByMeIndicator = None
     34     myActiveTargetIndicator = None
     35     flagIcon = None
     36     flagIconBackground = None
     37     flagBackgroundColor = None
     38     default_width = 18
     39     default_height = 16
     40     default_align = uiconst.TOPLEFT
     41     iconHint = None
     42     iconColorHint = None
     43     flagStateHint = None
     44     flagStateOwnerHint = None
     45 
     46     def ApplyAttributes(self, attributes):
     47         Container.ApplyAttributes(self, attributes)
     48         self.typeID = attributes.get('typeID', None)
     49         self.iconSprite = Sprite(parent=self, name='iconSprite', state=uiconst.UI_DISABLED, pos=(0, 0, 16, 16))
     50 
     51     def SetHostileState(self, state, isFleetMember, *args, **kwds):
     52         if state:
     53             if self.hostileIndicator:
     54                 if getattr(self.hostileIndicator, 'isFleetMember', False) == isFleetMember:
     55                     return
     56                 self.SetHostileIndicatorColor(isFleetMember)
     57             else:
     58                 color = self.GetColorForHostileState(isFleetMember)
     59                 self.hostileIndicator = BlinkingSpriteOnSharedCurve(parent=self, name='hostile', pos=(-1, -1, 18, 18), state=uiconst.UI_DISABLED, texturePath='res:/UI/Texture/classes/Bracket/hostileBracket.png', align=uiconst.TOPLEFT, color=color, curveSetName='sharedHostileCurveSet')
     60                 self.hostileIndicator.isFleetMember = isFleetMember
     61         elif self.hostileIndicator:
     62             self._RemoveHostileUI()
     63 
     64     def SetHostileIndicatorColor(self, isFleetMember):
     65         if self.hostileIndicator:
     66             color = self.GetColorForHostileState(isFleetMember)
     67             self.hostileIndicator.SetRGBA(*color)
     68             self.hostileIndicator.isFleetMember = isFleetMember
     69 
     70     def GetColorForHostileState(self, isFleetMember):
     71         if isFleetMember:
     72             color = sm.GetService('bracket').GetFleetBracketColor()
     73         else:
     74             color = (1.0, 0.8, 0.0, 0.3)
     75         return color
     76 
     77     def _RemoveHostileUI(self):
     78         self.hostileIndicator.Close()
     79         self.hostileIndicator = None
     80 
     81     def SetAttackingState(self, state):
     82         if state:
     83             if not self.attackingMeIndicator:
     84                 self.attackingMeIndicator = BlinkingSpriteOnSharedCurve(parent=self, name='attackingMe', pos=(-1, -1, 18, 18), state=uiconst.UI_DISABLED, texturePath='res:/UI/Texture/classes/Bracket/hostileBracket.png', align=uiconst.TOPLEFT, color=(0.8, 0.0, 0.0, 0.3), curveSetName='sharedHostileCurveSet')
     85             if self.hostileIndicator:
     86                 self._RemoveHostileUI()
     87         elif self.attackingMeIndicator:
     88             self.attackingMeIndicator.Close()
     89             self.attackingMeIndicator = None
     90 
     91     def SetTargetedByMeState(self, state):
     92         if state:
     93             if not self.targetedByMeIndicator:
     94                 self.targetedByMeIndicator = Sprite(parent=self, name='targetedByMeIndicator', pos=(-1, -1, 18, 18), state=uiconst.UI_DISABLED, texturePath='res:/UI/Texture/classes/Bracket/activeTarget.png', align=uiconst.TOPLEFT, color=(1.0, 1.0, 1.0, 0.5), idx=0)
     95         elif self.targetedByMeIndicator:
     96             self.targetedByMeIndicator.Close()
     97             self.targetedByMeIndicator = None
     98 
     99     def SetActiveTargetState(self, state):
    100         if state:
    101             if not self.myActiveTargetIndicator:
    102                 self.myActiveTargetIndicator = Sprite(parent=self, name='myActiveTargetIndicator', pos=(-1, -1, 18, 18), state=uiconst.UI_DISABLED, texturePath='res:/UI/Texture/classes/Bracket/activeTarget.png', align=uiconst.TOPLEFT, idx=0)
    103         elif self.myActiveTargetIndicator:
    104             self.myActiveTargetIndicator.Close()
    105             self.myActiveTargetIndicator = None
    106 
    107     def SetIconFlag(self, iconFlag, extraInfo = None):
    108         if iconFlag and iconFlag != -1:
    109             stateSvc = sm.GetService('stateSvc')
    110             if self.flagIcon is None:
    111                 self.flagIcon = FlagIconWithState(parent=self, left=-1, top=-2, state=uiconst.UI_DISABLED, align=uiconst.BOTTOMRIGHT, extraInfo=extraInfo)
    112             flagInfo = stateSvc.GetStatePropsColorAndBlink(iconFlag)
    113             self.flagIcon.ModifyIcon(flagInfo=flagInfo, showHint=False, extraInfo=extraInfo)
    114             self.flagStateHint = flagInfo.flagProperties.text
    115             self.flagStateOwnerHint = flagInfo.flagProperties.ownerText
    116             if settings.user.overview.Get(osConst.SETTING_NAME_SMALL_TAGS, 0):
    117                 iconSize = 6
    118             else:
    119                 iconSize = 10
    120             self.flagIcon.ChangeFlagPos(self.flagIcon.left, self.flagIcon.top, iconSize, iconSize)
    121             hideIcon = settings.user.overview.Get(osConst.SETTING_NAME_SMALL_TAGS, 0)
    122             self.flagIcon.ChangeIconVisibility(display=not hideIcon)
    123         elif self.flagIcon:
    124             self.flagIcon.Close()
    125             self.flagIcon = None
    126             self.flagStateHint = None
    127 
    128     def SetBackgroundColorFlag(self, backgroundFlag):
    129         if backgroundFlag and backgroundFlag != -1:
    130             stateSvc = sm.GetService('stateSvc')
    131             r, g, b, a = stateSvc.GetStateBackgroundColor(backgroundFlag)
    132             a = a * 0.5
    133             if not self.flagBackgroundColor:
    134                 self.flagBackgroundColor = Sprite(bgParent=self, name='bgColor', texturePath='res:/UI/Texture/classes/Bracket/bracketBackground.png', color=(r,
    135                  g,
    136                  b,
    137                  a), padRight=2)
    138             else:
    139                 self.flagBackgroundColor.SetRGBA(r, g, b, a)
    140             blink = stateSvc.GetStateBackgroundBlink(backgroundFlag)
    141             if blink:
    142                 if not self.flagBackgroundColor.HasAnimation('color'):
    143                     uicore.animations.FadeTo(self.flagBackgroundColor, startVal=0.0, endVal=a, duration=0.75, loops=uiconst.ANIM_REPEAT, curveType=uiconst.ANIM_WAVE)
    144             else:
    145                 self.flagBackgroundColor.StopAnimations()
    146         elif self.flagBackgroundColor:
    147             self.flagBackgroundColor.Close()
    148             self.flagBackgroundColor = None
    149 
    150     def SetTargetingState(self, state):
    151         if state:
    152             if not self.targetingIndicator:
    153                 par = Container(name='targeting', align=uiconst.CENTER, width=28, height=28, left=-1, parent=self)
    154                 self.targetingIndicator = par
    155                 Fill(parent=par, align=uiconst.TOPLEFT, left=0, top=3, width=5, height=2, color=(1.0, 1.0, 1.0, 0.5))
    156                 Fill(parent=par, align=uiconst.TOPRIGHT, left=0, top=3, width=5, height=2, color=(1.0, 1.0, 1.0, 0.5))
    157                 Fill(parent=par, align=uiconst.BOTTOMLEFT, left=0, top=3, width=5, height=2, color=(1.0, 1.0, 1.0, 0.5))
    158                 Fill(parent=par, align=uiconst.BOTTOMRIGHT, left=0, top=3, width=5, height=2, color=(1.0, 1.0, 1.0, 0.5))
    159                 Fill(parent=par, align=uiconst.TOPLEFT, left=3, top=0, width=2, height=3, color=(1.0, 1.0, 1.0, 0.5))
    160                 Fill(parent=par, align=uiconst.TOPRIGHT, left=3, top=0, width=2, height=3, color=(1.0, 1.0, 1.0, 0.5))
    161                 Fill(parent=par, align=uiconst.BOTTOMLEFT, left=3, top=0, width=2, height=3, color=(1.0, 1.0, 1.0, 0.5))
    162                 Fill(parent=par, align=uiconst.BOTTOMRIGHT, left=3, top=0, width=2, height=3, color=(1.0, 1.0, 1.0, 0.5))
    163                 uthread.pool('Tactical::Targeting', self.AnimateTargeting, par)
    164         elif self.targetingIndicator:
    165             self.targetingIndicator.Close()
    166             self.targetingIndicator = None
    167 
    168     def AnimateTargeting(self, par):
    169         while par and not par.destroyed:
    170             p = par.children[0]
    171             for i in xrange(1, 8):
    172                 par.width = par.height = 28 - i * 2
    173                 blue.pyos.synchro.SleepSim(50)
    174 
    175     @telemetry.ZONE_METHOD
    176     def UpdateSpaceObjectIcon(self, slimItem, ball):
    177         if self.destroyed:
    178             return
    179         iconHint = None
    180         if slimItem.hackingSecurityState is not None:
    181             iconNo, iconHint = hacking_util.GetHackingIcon(slimItem.hackingSecurityState)
    182         else:
    183             iconNo, _dockType, _minDist, _maxDist, _iconOffset, _logflag = sm.GetService('bracket').GetBracketProps(slimItem, ball)
    184         if slimItem.groupID == const.groupWreck:
    185             if slimItem.isEmpty:
    186                 iconHint = localization.GetByLabel('Tooltips/Overview/EmptyWreck')
    187             else:
    188                 iconHint = localization.GetByLabel('Tooltips/Overview/ContainsLoot')
    189         elif slimItem.categoryID == const.categoryStructure and slimItem.state != STATE_UNANCHORED and not IsFlexStructure(slimItem.typeID):
    190             structureProximityTracker = sm.GetService('structureProximityTracker')
    191             if structureProximityTracker.HasDockingAccessChanged():
    192                 iconHint = localization.GetByLabel('UI/Overview/FetchingDockingAccess')
    193             elif HasDockingRights(slimItem, structureProximityTracker):
    194                 iconHint = localization.GetByLabel('UI/Overview/YouCanDock')
    195             else:
    196                 iconHint = localization.GetByLabel('UI/Overview/YouCannotDock')
    197         self.iconSprite.LoadIcon(iconNo)
    198         self.iconHint = iconHint
    199 
    200     @telemetry.ZONE_METHOD
    201     def UpdateSpaceObjectIconColor(self, slimItem):
    202         if self.destroyed:
    203             return
    204         iconColor, colorHint = GetIconColor(slimItem, getColorHint=True)
    205         if slimItem.groupID in (const.groupWreck, const.groupSpawnContainer) and sm.GetService('wreck').IsViewedWreck(slimItem.itemID):
    206             iconColor = Color(*iconColor).SetBrightness(0.55).GetRGBA()
    207         self.iconColorHint = colorHint
    208         self.SetIconColor(iconColor)
    209 
    210     def SetIconColor(self, color):
    211         self.iconSprite.SetRGBA(*color)
    212 
    213     def UpdateSpaceObjectFlagAndBackgroundColor(self, slimItem, ball):
    214         stateService = sm.GetService('stateSvc')
    215         updateItem = stateService.CheckIfUpdateItem(slimItem)
    216         if updateItem:
    217             iconFlag, backgroundFlag = GetIconFlagAndBackgroundFlag(slimItem)
    218             self.SetIconFlag(iconFlag, GetExtraInfoForSlimItem(slimItem))
    219             self.SetBackgroundColorFlag(backgroundFlag)
    220             self.SetHostileIndicatorColor(_IsFleetMember(slimItem))
    221 
    222     def UpdateSpaceObjectState(self, slimItem, ball):
    223         if self.destroyed:
    224             return
    225         stateService = sm.GetService('stateSvc')
    226         attacking, hostile, targeting, targeted, activeTarget = stateService.GetStates(slimItem.itemID, [state.threatAttackingMe,
    227          state.threatTargetsMe,
    228          state.targeting,
    229          state.targeted,
    230          state.activeTarget])
    231         self.SetActiveTargetState(activeTarget)
    232         self.SetTargetedByMeState(targeted)
    233         self.SetTargetingState(targeting)
    234         updateItem = stateService.CheckIfUpdateItem(slimItem)
    235         if updateItem:
    236             fleetMember = _IsFleetMember(slimItem)
    237             self.SetHostileState(hostile, fleetMember)
    238             self.SetAttackingState(attacking)