CelestialBeam.py (3428B)
1 #Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\eve\client\script\environment\effects\CelestialBeam.py 2 import trinity 3 from eve.client.script.environment.effects.GenericEffect import GenericEffect, STOP_REASON_DEFAULT 4 5 class CelestialBeam(GenericEffect): 6 __guid__ = 'effects.CelestialBeam' 7 8 def __init__(self, trigger, effect = None, graphicFile = None): 9 super(CelestialBeam, self).__init__(trigger, effect, graphicFile) 10 self.celestialID = trigger.targetID 11 self.graphicFile = graphicFile 12 13 def Stop(self, reason = STOP_REASON_DEFAULT): 14 if self.gfx is None: 15 raise RuntimeError('CelestialBeam: no effect defined: ' + str(getattr(self, 'graphicFile', 'None'))) 16 if hasattr(self, 'gfx'): 17 self.RemoveFromScene(self.gfx) 18 self.gfx.source = None 19 self.gfx.dest = None 20 self.gfx.sourceObject = None 21 self.gfx = None 22 self.gfxModel = None 23 24 def UpdateGraphicInfo(self, newGraphicInfo): 25 if self.gfx: 26 self.gfx.SetControllerVariable('isFiring', newGraphicInfo['isFiring']) 27 if newGraphicInfo['isFiring'] > 0.0: 28 self.gfx.StartFiring(0.0) 29 30 def Prepare(self, addToScene = True): 31 self.DoPrepare() 32 33 def CheckEndPoints(self): 34 hasParentChanged = self.GetEffectShipBall().GetModel() != self.gfx.source.parent 35 if hasParentChanged: 36 sourceBall = self.GetEffectShipBall() 37 targetBall = self.GetEffectTargetBall() 38 if sourceBall is not None and targetBall is not None: 39 self._SetUpBeamEndpoints(sourceBall, targetBall) 40 41 def _SetUpBeamEndpoints(self, sourceBall, targetBall): 42 sourcePositionCurve = trinity.EveLocalPositionCurve() 43 sourcePositionCurve.parent = sourceBall.GetModel() 44 sourcePositionCurve.locatorSetName = 'beam_source' 45 sourcePositionCurve.behavior = trinity.EveLocalPositionBehavior.nearestFiringLocator 46 sourcePositionCurve.locatorIndex = 0 47 self.gfx.source = sourcePositionCurve 48 targetPositionCurve = trinity.EveLocalPositionCurve() 49 self.gfx.dest = targetPositionCurve 50 targetPositionCurve.parent = targetBall.GetModel() 51 targetPositionCurve.behavior = trinity.EveLocalPositionBehavior.nearestBounds 52 self.gfx.dest.parentPositionCurve = targetBall 53 self.gfx.dest.parentRotationCurve = targetBall 54 self.gfx.dest.alignPositionCurve = self.GetBallPositionCurve(sourceBall) 55 self.gfx.dest.offset = targetBall.radius 56 57 def DoPrepare(self): 58 sourceBall = self.GetEffectShipBall() 59 targetBall = self.GetEffectTargetBall() 60 if sourceBall is not None and targetBall is not None: 61 try: 62 self.gfx = self.RecycleOrLoad(self.graphicFile) 63 except Exception as e: 64 raise RuntimeError('CelestialBeam: no effect found:' + self.__guid__) 65 66 self.AddToScene(self.gfx) 67 self._SetUpBeamEndpoints(sourceBall, targetBall) 68 69 def Start(self, duration): 70 if self.gfx is None: 71 raise RuntimeError('CelestialBeam: no effect defined:' + self.__guid__) 72 elif 'isFiring' in self.graphicInfo: 73 self.gfx.SetControllerVariable('isFiring', self.graphicInfo['isFiring']) 74 if self.graphicInfo['isFiring'] > 0.0: 75 self.gfx.StartFiring(0.0)