squadronMenu.py (2997B)
1 #Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\eve\client\script\ui\inflight\squadrons\squadronMenu.py 2 from collections import defaultdict 3 from eve.common.script.mgt.fighterConst import TUBE_STATE_EMPTY 4 from eve.common.script.sys.eveCfg import IsDocked 5 from eveservices.menu import GetMenuService 6 from fighters import SquadronIsSupport, SquadronIsLight, SquadronIsHeavy 7 from localization import GetByLabel 8 from menu import MenuLabel 9 from carbonui.control.contextMenu.menuData import MenuData 10 11 def GetSquadronMenu(cont): 12 ship = sm.GetService('godma').GetItem(session.shipid) 13 if ship is None: 14 return [] 15 tubeStatus = cont.shipFighterState.GetTubeStatus(cont.tubeFlagID) 16 if tubeStatus.statusID == TUBE_STATE_EMPTY: 17 return GetSquadronMenuForEmptyTube(cont) 18 m = MenuData() 19 fighterInTube = cont.shipFighterState.GetFightersInTube(cont.tubeFlagID) 20 if fighterInTube is not None: 21 if not IsDocked(): 22 m.AddEntry(MenuLabel('UI/Inventory/Fighters/LaunchToSpace'), cont.LaunchFightersFromTube) 23 m.AddEntry(MenuLabel('UI/Inventory/Fighters/UnloadFromLaunchTube'), cont.UnloadTubeToFighterBay) 24 m += GetMenuService().CelestialMenu(fighterInTube.itemID, typeID=fighterInTube.typeID) 25 fighterInSpace = cont.shipFighterState.GetFightersInSpace(cont.tubeFlagID) 26 if fighterInSpace is not None: 27 m.AddEntry(MenuLabel('UI/Inventory/Fighters/RecallToLaunchTube'), cont.RecallFighterToTube) 28 m.AddEntry(MenuLabel('UI/Drones/ReturnDroneAndOrbit'), cont.ReturnAndOrbit) 29 m.AddEntry(MenuLabel('UI/Fighters/AbandonFighter'), cont.AbandonFighter) 30 m += GetMenuService().CelestialMenu(fighterInSpace.itemID, typeID=fighterInSpace.typeID) 31 return m 32 33 34 def GetSquadronMenuForEmptyTube(cont): 35 HEAVY = 0 36 LIGHT = 1 37 SUPPORT = 2 38 OTHER = 3 39 fightersInBay = sm.GetService('invCache').GetInventoryFromId(session.shipid).ListFighterBay() 40 optionsByClass = defaultdict(list) 41 for fighter in fightersInBay: 42 typeID = fighter.typeID 43 if SquadronIsHeavy(typeID): 44 fighterClass = HEAVY 45 elif SquadronIsLight(typeID): 46 fighterClass = LIGHT 47 elif SquadronIsSupport(typeID): 48 fighterClass = SUPPORT 49 else: 50 fighterClass = OTHER 51 fighterLabel = GetByLabel('UI/Inflight/Drone/DroneBayEntryWithStacksize', drone=fighter.typeID, stacksize=fighter.stacksize) 52 optionsByClass[fighterClass].append((fighterLabel, fighter.itemID)) 53 54 m = MenuData() 55 for fighterClass in (HEAVY, 56 LIGHT, 57 SUPPORT, 58 OTHER): 59 options = optionsByClass.get(fighterClass, []) 60 if not options: 61 continue 62 sortedOptions = sorted(options, key=lambda x: x[0]) 63 for fighter in sortedOptions: 64 fighterName, fighterID = fighter 65 m.AddEntry(fighterName, lambda fID = fighterID: cont.LoadFighterToTube(fID)) 66 67 m.AddSeparator() 68 69 return m