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)