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

shipRenderEffect.py (5834B)


      1 #Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\eve\client\script\environment\effects\shipRenderEffect.py
      2 from eve.client.script.environment.effects.GenericEffect import ShipEffect, STOP_REASON_DEFAULT
      3 from evegraphics.utils import GetCorrectEffectPath
      4 from uthread2 import call_after_simtime_delay
      5 import eveSpaceObject.spaceobjaudio as spaceobjaudio
      6 
      7 class ShipRenderEffect(ShipEffect):
      8     __guid__ = 'effects.ShipRenderEffect'
      9 
     10     def Prepare(self):
     11         shipBall = self.GetEffectShipBall()
     12         self.sourceObject = shipBall.model
     13         path = GetCorrectEffectPath(self.graphicFile, self.sourceObject)
     14         self.gfx = self.RecycleOrLoad(path)
     15         if self.gfx is None:
     16             raise RuntimeError('ShipRenderEffect: effect does not exist %s' % path)
     17         self.sourceObject.overlayEffects.append(self.gfx)
     18         self.AddSoundToEffect(scaler=1.0, model=self.sourceObject)
     19 
     20     def Start(self, duration):
     21         shipBall = self.GetEffectShipBall()
     22         if hasattr(shipBall, 'RegisterModelChangeNotification'):
     23             shipBall.RegisterModelChangeNotification(self.ChangeModel)
     24         if self.gfx is None:
     25             raise RuntimeError('ShipEffect: no effect defined')
     26         if self.gfx.curveSet is not None:
     27             if self.scaleTime:
     28                 length = self.gfx.curveSet.GetMaxCurveDuration()
     29                 if length > 0.0:
     30                     scaleValue = length / (duration / 1000.0)
     31                     self.gfx.curveSet.scale = scaleValue
     32             self.gfx.curveSet.Play()
     33         if hasattr(self.sourceObject, 'controllers'):
     34             secondsFromStart = self.timeFromStart / float(const.SEC)
     35             self.sourceObject.SetControllerVariable('elapsedTime', secondsFromStart)
     36             self.sourceObject.SetControllerVariable('isOn', 1.0)
     37             self.sourceObject.StartControllers()
     38 
     39     def _CleanUp(self, model):
     40         if hasattr(model, 'overlayEffects') and self.gfx in model.overlayEffects:
     41             model.overlayEffects.remove(self.gfx)
     42         if hasattr(model, 'observers') and self.observer in model.observers:
     43             model.observers.remove(self.observer)
     44         self.gfx = None
     45         self.gfxModel = None
     46         self.sourceObject = None
     47         self.observer = None
     48 
     49     def Stop(self, reason = STOP_REASON_DEFAULT):
     50         if self.lingerOnDeathTimer > 0.0:
     51             if hasattr(self.sourceObject, 'controllers'):
     52                 self.sourceObject.SetControllerVariable('isOn', 0.0)
     53             call_after_simtime_delay(self._CleanUp, self.lingerOnDeathTimer, self.sourceObject)
     54         else:
     55             self._CleanUp(self.sourceObject)
     56 
     57     def Repeat(self, duration):
     58         if self.gfx is None:
     59             return
     60         if self.gfx.curveSet:
     61             self.gfx.curveSet.Play()
     62 
     63     def ChangeModel(self, model):
     64         if self.sourceObject and self.gfx:
     65             if self.gfx in self.sourceObject.overlayEffects:
     66                 self.sourceObject.overlayEffects.remove(self.gfx)
     67         self.sourceObject = model
     68         if self.gfx:
     69             self.sourceObject.overlayEffects.append(self.gfx)
     70 
     71     def AttachObserverToModel(self, model):
     72         model.observers.append(self.observer)
     73 
     74     def GetEffectRadius(self):
     75         srcRadius = 35
     76         if self.sourceObject:
     77             srcRadius = self.sourceObject.boundingSphereRadius
     78         return srcRadius
     79 
     80 
     81 class ShipRenderTargetedEffect(ShipEffect):
     82     __guid__ = 'effects.ShipRenderTargetedEffect'
     83 
     84     def Prepare(self):
     85         shipBall = self.GetEffectShipBall()
     86         self.sourceObject = shipBall.model
     87         targetBall = self.GetEffectTargetBall()
     88         self.targetObject = targetBall
     89         self.gfx = self.RecycleOrLoad(self.graphicFile)
     90         self.gfx.target = targetBall
     91         for gfxParameter, val in self.graphicInfo.iteritems():
     92             if hasattr(self.gfx, gfxParameter):
     93                 setattr(self.gfx, gfxParameter, val)
     94 
     95         self.sourceObject.effectChildren.append(self.gfx)
     96         self.AddSoundToEffect(4.0, model=self.sourceObject)
     97         self.SetupLinkAudio(self.gfx)
     98 
     99     def Start(self, duration):
    100         shipBall = self.GetEffectShipBall()
    101         if hasattr(shipBall, 'RegisterModelChangeNotification'):
    102             shipBall.RegisterModelChangeNotification(self.ChangeModel)
    103 
    104     def Stop(self, reason = STOP_REASON_DEFAULT):
    105         if self.gfx in self.sourceObject.effectChildren:
    106             self.sourceObject.effectChildren.remove(self.gfx)
    107         if self.observer in self.sourceObject.observers:
    108             self.sourceObject.observers.remove(self.observer)
    109         self.gfx = None
    110         self.gfxModel = None
    111         self.sourceObject = None
    112         self.targetObject = None
    113         self.RemoveLinkAudio()
    114 
    115     def ChangeModel(self, model):
    116         if self.sourceObject and self.gfx:
    117             if self.gfx in self.sourceObject.effectChildren:
    118                 self.sourceObject.effectChildren.remove(self.gfx)
    119         self.sourceObject = model
    120         if self.gfx:
    121             if self.gfx not in self.sourceObject.effectChildren:
    122                 self.sourceObject.effectChildren.append(self.gfx)
    123 
    124     def AttachObserverToModel(self, model):
    125         model.observers.append(self.observer)
    126 
    127     def GetEffectRadius(self):
    128         srcRadius = 35
    129         if self.sourceObject:
    130             srcRadius = self.sourceObject.boundingSphereRadius
    131         return srcRadius
    132 
    133     def SetupLinkAudio(self, linkFX):
    134         linkAudioEmitter = self.observer.observer
    135         audparam = spaceobjaudio.bindAudioParameterToAttribute(linkFX, 'linkStrength', linkFX.linkStrengthBindings)
    136         linkAudioEmitter.parameters.append(audparam)
    137         self.SendAudioEvent('structure_invulnerability_link_play')
    138 
    139     def RemoveLinkAudio(self):
    140         self.SendAudioEvent('fade_out')
    141         self.observer = None