effectsCont.py (5689B)
1 #Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\eve\client\script\ui\inflight\squadrons\effectsCont.py 2 import carbonui.const as uiconst 3 from carbonui.primitives.containerAutoSize import ContainerAutoSize 4 from eve.client.script.ui.control.eveIcon import Icon 5 from eve.common.script.mgt.buffBarConst import BUFF_SLOT_HINTS 6 from eve.client.script.ui.inflight.squadrons.shipFighterState import GetShipFighterState 7 import evetypes 8 from localization import GetByLabel 9 from localization.util import Sort 10 from eveservices.menu import GetMenuService 11 12 class EffectsCont(ContainerAutoSize): 13 default_width = 20 14 default_align = uiconst.TOPLEFT 15 default_state = uiconst.UI_PICKCHILDREN 16 MAXNUMBERINHINT = 6 17 18 def ApplyAttributes(self, attributes): 19 ContainerAutoSize.ApplyAttributes(self, attributes) 20 self.fighterID = attributes.fighterID 21 self.tubeFlagID = attributes.tubeFlagID 22 self.effectsOnFighter = None 23 self.shipFighterState = GetShipFighterState() 24 self.ewarIcons = {} 25 self.controller = attributes.controller 26 self.BuildEffectsData() 27 28 def BuildEffectsData(self): 29 effectsOnFighter = self.controller.GetIncomingEwarEffects(self.fighterID) 30 graphicIDs = [] 31 stateSvc = sm.GetService('stateSvc') 32 for effect in effectsOnFighter: 33 sourceModuleID, sourceShipID, jammingType = effect 34 graphicID = stateSvc.GetEwarGraphicID(jammingType) 35 graphicIDs.append((graphicID, jammingType)) 36 37 self.AddEffects(graphicIDs) 38 39 def AddEffects(self, graphicIDs): 40 for graphicID, icon in self.ewarIcons.iteritems(): 41 if not graphicIDs or graphicID not in graphicIDs: 42 icon.display = False 43 44 if graphicIDs: 45 for graphicID, jammingType in graphicIDs: 46 if graphicID in self.ewarIcons: 47 icon = self.ewarIcons[graphicID] 48 icon.display = True 49 else: 50 icon = self.MakeIcon(graphicID) 51 self.ewarIcons[graphicID] = icon 52 icon.hint = self.GetIconHint(jammingType) 53 icon.GetMenu = (self.GetIconMenu, jammingType) 54 55 def MakeIcon(self, graphicID): 56 return Icon(parent=self, align=uiconst.TOBOTTOM, state=uiconst.UI_NORMAL, width=20, height=20, graphicID=graphicID, ignoreSize=True) 57 58 def GetIconMenu(self, jammingType, *args): 59 attackers = self.FindWhoIsJammingMe(jammingType) 60 m = [] 61 svc = sm.GetService('michelle') 62 menuSvc = GetMenuService() 63 for shipID, num in attackers.iteritems(): 64 invItem = svc.GetBallpark().GetInvItem(shipID) 65 if invItem: 66 if invItem.charID: 67 attackerName = cfg.eveowners.Get(invItem.charID).name 68 else: 69 attackerName = evetypes.GetName(invItem.typeID) 70 m += [[attackerName, ('isDynamic', menuSvc.CelestialMenu, (invItem.itemID, 71 None, 72 invItem, 73 invItem.typeID))]] 74 75 m = Sort(m, key=lambda x: x[0]) 76 return m 77 78 def HideEffects(self): 79 self.display = False 80 81 def ShowEffects(self): 82 self.display = True 83 84 def UpdateFighterID(self, fighterID): 85 self.fighterID = fighterID 86 self.BuildEffectsData() 87 88 def GetIconHint(self, jammingType): 89 hintList = self.GetEwarHintList(jammingType) 90 hint = '<br>'.join(hintList) 91 return hint 92 93 def GetEwarHintList(self, jammingType): 94 attackers = self.FindWhoIsJammingMe(jammingType) 95 hintList = [] 96 extraAttackers = 0 97 for shipID, num in attackers.iteritems(): 98 if len(hintList) >= self.MAXNUMBERINHINT: 99 extraAttackers = len(attackers) - len(hintList) 100 break 101 self.AddEwarAttackerText(hintList, shipID, num) 102 103 hintList = Sort(hintList) 104 self.AddExtraAttackers(hintList, extraAttackers) 105 ewarHint = self.GetEwarHintCaption(jammingType) 106 hintList.insert(0, ewarHint) 107 return hintList 108 109 def GetEwarHintCaption(self, jammingType): 110 ewarHintPath = BUFF_SLOT_HINTS.get(jammingType, None) 111 if ewarHintPath is not None: 112 ewarHint = GetByLabel(ewarHintPath) 113 else: 114 ewarHint = '' 115 return ewarHint 116 117 def AddEwarAttackerText(self, hintList, sourceID, numModules): 118 invItem = sm.GetService('michelle').GetBallpark().GetInvItem(sourceID) 119 if invItem: 120 attackerShipTypeID = invItem.typeID 121 if invItem.charID: 122 attackerID = invItem.charID 123 hintList.append(GetByLabel('UI/Inflight/EwarAttacker', attackerID=attackerID, attackerShipID=attackerShipTypeID, num=numModules)) 124 else: 125 hintList.append(GetByLabel('UI/Inflight/EwarAttackerNPC', attackerShipID=attackerShipTypeID, num=numModules)) 126 127 def AddExtraAttackers(self, hintList, extraAttackers): 128 if extraAttackers > 0: 129 hintList.append(GetByLabel('UI/Inflight/AndMorewarAttackers', num=extraAttackers)) 130 131 def FindWhoIsJammingMe(self, jammingType): 132 effectsOnFighter = self.controller.GetIncomingEwarEffects(self.fighterID) 133 attackers = {} 134 for effect in effectsOnFighter: 135 sourceModuleID, sourceShipID, _jammingType = effect 136 if jammingType != _jammingType: 137 continue 138 numberOfTimes = attackers.get(sourceShipID, 0) 139 numberOfTimes += 1 140 attackers[sourceShipID] = numberOfTimes 141 142 return attackers