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

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)