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

spaceObjectIcon.py (12140B)


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