fighterInvCont.py (6180B)
1 #Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\eve\client\script\ui\inflight\squadrons\fighterInvCont.py 2 from carbonui.primitives.container import Container 3 from carbonui.primitives.containerAutoSize import ContainerAutoSize 4 from carbonui.primitives.sprite import Sprite 5 from eve.client.script.ui.control.eveLabel import EveLabelSmall 6 from eve.client.script.ui.inflight.squadrons.shipFighterState import GetShipFighterState 7 from eve.client.script.ui.inflight.squadrons.squadronManagementCont import FighterLaunchControlCont 8 from eve.client.script.ui.shared.container import _InvContBase 9 from fighters import SquadronIsLight, SquadronIsSupport, SquadronIsHeavy 10 from fighters.client import GetFighterTubesForShip, GetLightSupportHeavySlotsForShip 11 import carbonui.const as uiconst 12 from localization import GetByLabel 13 USED_SLOT = 'res:/UI/Texture/classes/CarrierBay/typeSlotFilled.png' 14 UNUSED_SLOT = 'res:/UI/Texture/classes/CarrierBay/typeSlotEmpty.png' 15 16 class FighterInvCont(_InvContBase): 17 __guid__ = 'invCont.FighterInvCont' 18 __invControllerClass__ = None 19 __notifyevents__ = _InvContBase.__notifyevents__ + ['ProcessActiveShipChanged'] 20 21 def ApplyAttributes(self, attributes): 22 self.squadrons = [] 23 _InvContBase.ApplyAttributes(self, attributes) 24 25 def ConstructUI(self): 26 if self.IsCurrentShip(): 27 self.ConstructFighterManagementUI() 28 _InvContBase.ConstructUI(self) 29 30 def ConstructFighterManagementUI(self): 31 self.shipFighterState = GetShipFighterState() 32 topCont = Container(name='topCont', parent=self, align=uiconst.TOTOP, height=216, clipChildren=True) 33 inSpace = Container(parent=topCont, align=uiconst.TOTOP, height=20) 34 self.lightSquadrons = SquadronLightContainer(parent=inSpace) 35 self.supportSquadrons = SquadronSupportContainer(parent=inSpace) 36 self.heavySquadrons = SquadronHeavyContainer(parent=inSpace) 37 self.squadronsCont = Container(parent=topCont, align=uiconst.TOALL) 38 self.numOfTubes = GetFighterTubesForShip() 39 self.ConstructSquadrons() 40 self.ConstructSquadronTypes() 41 self.UpdateSquadronTypes() 42 self.GetTypeIDs() 43 self.shipFighterState.signalOnFighterTubeStateUpdate.connect(self.OnFighterTubeStateUpdate) 44 45 def _OnClose(self, *args): 46 if self.IsCurrentShip(): 47 self.shipFighterState.signalOnFighterTubeStateUpdate.disconnect(self.OnFighterTubeStateUpdate) 48 _InvContBase._OnClose(self, args) 49 50 def IsCurrentShip(self): 51 return self.itemID == session.shipid 52 53 def ConstructSquadrons(self): 54 for i, tubeFlagID in enumerate(const.fighterTubeFlags): 55 if i < self.numOfTubes: 56 squadron = FighterLaunchControlCont(parent=self.squadronsCont, tubeFlagID=tubeFlagID, left=2) 57 self.squadrons.append(squadron) 58 59 def ConstructSquadronTypes(self): 60 light, support, heavy = GetLightSupportHeavySlotsForShip() 61 if heavy: 62 self.heavySquadrons.SetTotalSlots(heavy) 63 else: 64 self.heavySquadrons.display = False 65 if support: 66 self.supportSquadrons.SetTotalSlots(support) 67 else: 68 self.supportSquadrons.display = False 69 if light: 70 self.lightSquadrons.SetTotalSlots(light) 71 else: 72 self.lightSquadrons.display = False 73 74 def OnFighterTubeStateUpdate(self, *args): 75 self.UpdateSquadronTypes() 76 77 def UpdateSquadronTypes(self): 78 heavy, support, light = self.GetSquadronTypes() 79 self.heavySquadrons.SetUsedSlots(heavy) 80 self.supportSquadrons.SetUsedSlots(support) 81 self.lightSquadrons.SetUsedSlots(light) 82 83 def GetSquadronTypes(self): 84 heavy = 0 85 support = 0 86 light = 0 87 typeIDs = self.GetTypeIDs() 88 for typeID in typeIDs: 89 if SquadronIsHeavy(typeID): 90 heavy += 1 91 elif SquadronIsSupport(typeID): 92 support += 1 93 elif SquadronIsLight(typeID): 94 light += 1 95 96 return (heavy, support, light) 97 98 def GetTypeIDs(self): 99 squadronTypeIDs = [] 100 for i, tubeFlagID in enumerate(const.fighterTubeFlags): 101 if i < self.numOfTubes: 102 fighterInTube = self.shipFighterState.GetFightersInTube(tubeFlagID) 103 if fighterInTube is not None: 104 squadronTypeIDs.append(fighterInTube.typeID) 105 fighterInSpace = self.shipFighterState.GetFightersInSpace(tubeFlagID) 106 if fighterInSpace is not None: 107 squadronTypeIDs.append(fighterInSpace.typeID) 108 109 return squadronTypeIDs 110 111 def ProcessActiveShipChanged(self, shipID, oldShipID): 112 self.Flush() 113 self.ConstructUI() 114 115 116 class SquadronTypeContainer(ContainerAutoSize): 117 default_texturePath = None 118 default_padTop = 2 119 default_padBottom = 2 120 default_padRight = 6 121 default_align = uiconst.TOLEFT 122 default_state = uiconst.UI_NORMAL 123 124 def ApplyAttributes(self, attributes): 125 ContainerAutoSize.ApplyAttributes(self, attributes) 126 self.totalSlots = 0 127 Sprite(parent=self, width=16, height=16, texturePath=self.default_texturePath, align=uiconst.TOLEFT, state=uiconst.UI_DISABLED) 128 self.slotsUsedText = EveLabelSmall(parent=self, align=uiconst.TOLEFT) 129 130 def SetTotalSlots(self, numSlots): 131 self.totalSlots = numSlots 132 133 def SetUsedSlots(self, numUsed): 134 self.slotsUsedText.text = ':%i/%i' % (int(numUsed), int(self.totalSlots)) 135 136 137 class SquadronHeavyContainer(SquadronTypeContainer): 138 default_texturePath = 'res:/UI/Texture/classes/CarrierBay/iconFighterHeavy.png' 139 default_hint = GetByLabel('UI/Fighters/Class/Heavy') 140 141 142 class SquadronSupportContainer(SquadronTypeContainer): 143 default_texturePath = 'res:/UI/Texture/classes/CarrierBay/iconFighterMedium.png' 144 default_hint = GetByLabel('UI/Fighters/Class/Support') 145 146 147 class SquadronLightContainer(SquadronTypeContainer): 148 default_texturePath = 'res:/UI/Texture/classes/CarrierBay/iconFighterLight.png' 149 default_hint = GetByLabel('UI/Fighters/Class/Light')