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)