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