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

ChildEffect.py (2778B)


      1 #Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\eve\client\script\environment\effects\ChildEffect.py
      2 from eve.client.script.environment.effects.GenericEffect import GenericEffect, STOP_REASON_DEFAULT, STOP_REASON_BALL_REMOVED
      3 import trinity
      4 import os.path as path
      5 from eve.common.lib import appConst as const
      6 from uthread2 import call_after_simtime_delay
      7 
      8 class ChildEffect(GenericEffect):
      9     __guid__ = 'effects.ChildEffect'
     10 
     11     def __init__(self, trigger, effect = None, graphicFile = None):
     12         super(ChildEffect, self).__init__(trigger, effect, graphicFile)
     13         self.ball = self.GetEffectShipBall()
     14         fileName = path.basename(self.graphicFile)
     15         self.fxName = path.splitext(fileName)[0].lower()
     16         self.effect = trinity.Load(self.graphicFile)
     17         self.timeFromStart = trigger.timeFromStart
     18         self.lingerOnDeathTimer = 0.0
     19         if self.graphicInfo is not None and hasattr(self.graphicInfo, 'get'):
     20             self.lingerOnDeathTimer = self.graphicInfo.get('lingerOnDeathTimer') or 0.0
     21 
     22     def Start(self, duration):
     23         self._AddEffectToTarget()
     24         curveSets = self.effect.curveSets
     25         secondsFromStart = self.timeFromStart / float(const.SEC)
     26         if len(curveSets) > 0:
     27             if self.scaleTime:
     28                 length = self.effect.curveSets[0].GetMaxCurveDuration()
     29                 if length > 0.0:
     30                     scaleValue = length / (duration / 1000.0)
     31                     self.effect.curveSets[0].scale = scaleValue
     32             curveSets[0].PlayFrom(secondsFromStart)
     33         if hasattr(self.effect, 'controllers'):
     34             self.effect.SetControllerVariable('elapsedTime', secondsFromStart)
     35             self.effect.StartControllers()
     36 
     37     def _CleanUp(self):
     38         self._RemoveEffectFromTarget()
     39         self.effect = None
     40         self.ball = None
     41 
     42     def Stop(self, reason = STOP_REASON_DEFAULT):
     43         if self.lingerOnDeathTimer > 0.0 and reason != STOP_REASON_BALL_REMOVED:
     44             call_after_simtime_delay(self._CleanUp, self.lingerOnDeathTimer)
     45         else:
     46             self._CleanUp()
     47 
     48     def Repeat(self, duration):
     49         self._RemoveEffectFromTarget()
     50         self._AddEffectToTarget()
     51 
     52     def _AddEffectToTarget(self):
     53         if not hasattr(self.ball, 'model') or self.ball.model is None:
     54             return False
     55         if len(self.ball.model.effectChildren) > 0:
     56             for child in self.ball.model.effectChildren:
     57                 if child.name.lower() == self.fxName:
     58                     return False
     59 
     60         try:
     61             self.ball.AddChildEffect(self.effect)
     62             return True
     63         except AttributeError:
     64             return False
     65 
     66     def _RemoveEffectFromTarget(self):
     67         self.ball.RemoveChildEffect(self.effect)