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

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