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