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

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')