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

fighterSquadron.py (5827B)


      1 #Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\eve\client\script\environment\spaceObject\fighterSquadron.py
      2 from __future__ import absolute_import
      3 import trinity
      4 from . import Drone
      5 import evegraphics.settings as gfxsettings
      6 from evegraphics.explosions.spaceObjectExplosionManager import SpaceObjectExplosionManager
      7 from fighters.client import GetSquadronSizeFromSlimItem
      8 from fighters import GetTurretGraphicIDsForFighter
      9 import eve.client.script.environment.model.turretSet as turretSet
     10 from tacticalNavigation.ballparkFunctions import ConvertPositionToGlobalSpace
     11 
     12 class FighterSquadronError(Exception):
     13     pass
     14 
     15 
     16 class FighterSquadron(Drone.Drone):
     17 
     18     def __init__(self):
     19         Drone.Drone.__init__(self)
     20         self.squadronSize = 0
     21 
     22     def GetDNA(self):
     23         dna = super(FighterSquadron, self).GetDNA()
     24         return dna.replace(':class?ship', '')
     25 
     26     def Assemble(self):
     27         if not self._usingDroneModel:
     28             return
     29         self.FitBoosters(alwaysOn=False)
     30         self.SetupAmbientAudio()
     31         self.model.EnableSwarming(True)
     32         self.squadronSize = GetSquadronSizeFromSlimItem(self.typeData['slimItem'])
     33         if self.squadronSize is None:
     34             self.squadronSize = 1
     35         self.model.SetCount(self.squadronSize)
     36 
     37     def FitHardpoints(self, blocking = False):
     38         if self.fitted or self.squadronSize == 0:
     39             return
     40         if self.model is None:
     41             self.logger.warning('FitHardpoints - No model')
     42             return
     43         self.fitted = True
     44         if not gfxsettings.Get(gfxsettings.UI_TURRETS_ENABLED):
     45             return
     46         self._PopulateTurretSets()
     47 
     48     def _AddTurretModules(self, slotID, graphicID, count):
     49         index = len(self.modules[slotID])
     50         for i in range(count):
     51             ts = turretSet.TurretSet.AddTurretToModel(self.model, graphicID, swarmID=index + i)
     52             ts.turretIndex = index + i
     53             if ts is not None:
     54                 self.modules[slotID].append(ts)
     55 
     56     def _PopulateModuleSlot(self, slotID, graphicID):
     57         if self.modules is None:
     58             return
     59         if slotID not in self.modules:
     60             self.modules[slotID] = []
     61             self._AddTurretModules(slotID, graphicID, self.squadronSize)
     62         elif self.squadronSize > len(self.modules[slotID]):
     63             self._AddTurretModules(slotID, graphicID, self.squadronSize - len(self.modules[slotID]))
     64         else:
     65             removeTurrets = self.modules[slotID][self.squadronSize:]
     66             self.modules[slotID] = self.modules[slotID][:self.squadronSize]
     67             for turret in removeTurrets:
     68                 turret.RemoveTurretFromModel(self.model)
     69 
     70     def _PopulateTurretSets(self):
     71         slotIDtoGraphicID = GetTurretGraphicIDsForFighter(self.GetTypeID())
     72         for slotID, graphicID in slotIDtoGraphicID.iteritems():
     73             self._PopulateModuleSlot(slotID, graphicID)
     74 
     75     def DestroyClientBall(self, ball):
     76         bp = sm.GetService('michelle').GetBallpark()
     77         if bp is not None and ball.ballpark is not None:
     78             bp.RemoveBall(ball.id)
     79 
     80     def _ClearExplosion(self, model):
     81         if model is None:
     82             return
     83         if model.translationCurve is not None:
     84             self.DestroyClientBall(model.translationCurve)
     85             model.translationCurve = None
     86         scene = sm.StartService('sceneManager').GetRegisteredScene('default')
     87         scene.objects.fremove(model)
     88 
     89     def SpawnExplosion(self, position):
     90         if gfxsettings.Get(gfxsettings.UI_EXPLOSION_EFFECTS_ENABLED):
     91             scene = sm.StartService('sceneManager').GetRegisteredScene('default')
     92             SpaceObjectExplosionManager.PlayExplosionAtPosition(self.explosionBucketID, 'default', ConvertPositionToGlobalSpace(position), scene)
     93 
     94     def DestroyFighter(self):
     95         if self.model is None:
     96             return
     97         if not self._usingDroneModel:
     98             return
     99         try:
    100             position = self.model.RemoveSwarmer()
    101             self.SpawnExplosion(position)
    102         except:
    103             self._RaiseFighterException('DestroyFighter failed!')
    104 
    105     def OnSlimItemUpdated(self, slimItem):
    106         if self.model is None:
    107             return
    108         if not self._usingDroneModel:
    109             return
    110         oldSize = self.squadronSize
    111         self.squadronSize = GetSquadronSizeFromSlimItem(slimItem)
    112         if self.squadronSize > oldSize:
    113             self.model.SetCount(self.squadronSize)
    114             self._PopulateTurretSets()
    115         else:
    116             for i in range(oldSize - self.squadronSize):
    117                 self.DestroyFighter()
    118 
    119             self._PopulateTurretSets()
    120 
    121     def Explode(self):
    122         if not self._usingDroneModel or not gfxsettings.Get(gfxsettings.UI_EXPLOSION_EFFECTS_ENABLED):
    123             return False
    124         if self.exploded:
    125             return
    126         while self.squadronSize > 0:
    127             self.DestroyFighter()
    128             self.squadronSize -= 1
    129 
    130         self.exploded = True
    131         return False
    132 
    133     def _RaiseFighterException(self, header = ''):
    134         message = header + '\n'
    135         message += 'typeID: ' + str(self.typeData.get('typeID', 'None')) + '\n'
    136         message += 'bluetype: ' + getattr(self.model, '__bluetype__', 'None')
    137         raise FighterSquadronError(message)
    138 
    139     def PrepareForFiring(self):
    140         if self.model is None:
    141             return
    142         if not self._usingDroneModel:
    143             return
    144         try:
    145             self.model.PickFiringOrigin()
    146         except:
    147             self._RaiseFighterException('PickFiringOrigin failed!')
    148 
    149     def GetPositionCurve(self):
    150         if self.model is None:
    151             return self
    152         curve = trinity.EveLocalPositionCurve()
    153         curve.parent = self.model
    154         curve.behavior = trinity.EveLocalPositionBehavior.centerBounds
    155         return curve