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

MicroJumpDrive.py (4936B)


      1 #Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\eve\client\script\environment\effects\MicroJumpDrive.py
      2 from eve.client.script.environment.effects.GenericEffect import GenericEffect, ShipEffect, STOP_REASON_BALL_REMOVED, STOP_REASON_DEFAULT
      3 import trinity
      4 import blue
      5 import uthread
      6 SECOND = 1000
      7 CAMERA_RESET_TIME = 1500
      8 MICRO_JUMP_DRIVE_GRAPHIC_ID = 21232
      9 MICRO_JUMP_FIELD_GRAPHIC_ID = 21235
     10 MICROJUMPDRIVE_SOUND_EVENTS = {MICRO_JUMP_DRIVE_GRAPHIC_ID: 'microjumpdrive_jump_play',
     11  MICRO_JUMP_FIELD_GRAPHIC_ID: 'ship_effect_microjump_fieldgenerator_jump_play'}
     12 
     13 class MicroJumpDriveEngage(ShipEffect):
     14     __guid__ = 'effects.MicroJumpDriveEngage'
     15 
     16     def __init__(self, trigger, *args):
     17         ShipEffect.__init__(self, trigger, *args)
     18         self.playerEffect = None
     19         self.graphicID = None if args[0] is None else getattr(args[0], 'graphicID', None)
     20 
     21     def Prepare(self):
     22         ShipEffect.Prepare(self, False)
     23         if session.shipid == self.GetEffectShipID():
     24             self.playerEffect = self.RecycleOrLoad(self.secondaryGraphicFile)
     25             self.AddSoundToEffect(2)
     26 
     27     def Stop(self, reason = STOP_REASON_DEFAULT):
     28         if reason == STOP_REASON_BALL_REMOVED:
     29             ShipEffect.Stop(self, reason)
     30 
     31     def _DelayedStop(self, delay):
     32         blue.synchro.SleepSim(delay)
     33         if self.playerEffect is not None:
     34             self.RemoveFromScene(self.playerEffect)
     35             self.playerEffect = None
     36         if self.gfx is not None:
     37             ShipEffect.Stop(self)
     38 
     39     def Start(self, duration):
     40         if self.gfx is None:
     41             raise RuntimeError('MicroJumpDriveEngage: no effect defined:' + self.__guid__)
     42         self.curveSets = self.gfx.curveSets
     43         self.controllerCurve = None
     44         length = 0
     45         for each in self.gfx.curveSets:
     46             length = max(each.GetMaxCurveDuration() * 1000, length)
     47             each.Play()
     48             if each.name == 'PLAY_START':
     49                 self.controllerCurve = each.curves[0]
     50 
     51         self.AddToScene(self.gfxModel)
     52         if self.playerEffect is None:
     53             self._SetCurveTime(duration * 0.001)
     54         else:
     55             self._SetCurveTime(duration * 0.001 - 0.25)
     56             length = 0
     57             for each in self.playerEffect.curveSets:
     58                 length = max(each.GetMaxCurveDuration() * 1000, length)
     59                 each.Stop()
     60 
     61             triggerDelayPlayer = duration - length
     62             uthread.new(self._TriggerPlaybackPlayer, triggerDelayPlayer)
     63         uthread.new(self._DelayedStop, duration + 2 * SECOND)
     64 
     65     def _SetCurveTime(self, duration):
     66         k1 = list(self.controllerCurve.keys[-1])
     67         k2 = list(self.controllerCurve.keys[-2])
     68         timeDelta = k1[0] - k2[0]
     69         k1[0] = duration
     70         k2[0] = duration - timeDelta
     71         self.controllerCurve.keys[-1] = tuple(k1)
     72         self.controllerCurve.keys[-2] = tuple(k2)
     73         self.controllerCurve.OnKeysChanged()
     74 
     75     def _TriggerPlaybackPlayer(self, delay):
     76         blue.synchro.SleepSim(delay - CAMERA_RESET_TIME)
     77         cam = sm.GetService('sceneManager').GetActiveSpaceCamera()
     78         if cam.GetLookAtItemID() != session.shipid:
     79             cam.LookAt(session.shipid)
     80         blue.synchro.SleepSim(CAMERA_RESET_TIME)
     81         self.AddToScene(self.playerEffect)
     82         for each in self.playerEffect.curveSets:
     83             each.Play()
     84 
     85         soundEvent = MICROJUMPDRIVE_SOUND_EVENTS.get(self.graphicID, None)
     86         if soundEvent is not None:
     87             sm.GetService('audio').SendUIEvent(soundEvent)
     88 
     89 
     90 class MicroJumpDriveJump(GenericEffect):
     91     __guid__ = 'effects.MicroJumpDriveJump'
     92 
     93     def __init__(self, trigger, *args):
     94         GenericEffect.__init__(self, trigger, *args)
     95         self.position = trigger.graphicInfo
     96         self.gfxModel = None
     97 
     98     def Prepare(self):
     99         self.ball = self._SpawnClientBall(self.position)
    100         gfx = self.RecycleOrLoad(self.graphicFile)
    101         if gfx is None:
    102             return
    103         model = getattr(self.GetEffectShipBall(), 'model', None)
    104         if model is None:
    105             return
    106         radius = model.GetBoundingSphereRadius()
    107         gfx.scaling = (radius, radius, radius)
    108         self.gfxModel = trinity.EveRootTransform()
    109         self.gfxModel.children.append(gfx)
    110         self.gfxModel.boundingSphereRadius = radius
    111         self.gfxModel.translationCurve = self.ball
    112         self.sourceObject = self.gfxModel
    113         self.gfx = gfx
    114         self.AddSoundToEffect(2)
    115 
    116     def Start(self, duration):
    117         if self.gfxModel is not None:
    118             self.AddToScene(self.gfxModel)
    119 
    120     def Stop(self, reason = STOP_REASON_DEFAULT):
    121         self._DestroyClientBall(self.ball)
    122         self.ball = None
    123         self.sourceObject = None
    124         self.gfx = None
    125         if self.gfxModel is not None:
    126             self.RemoveFromScene(self.gfxModel)
    127             self.gfxModel.translationCurve = None
    128             self.gfxModel = None