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

wreck.py (3800B)


      1 #Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\eve\client\script\environment\spaceObject\wreck.py
      2 import random
      3 import blue
      4 import math
      5 import uthread
      6 import trinity
      7 import geo2
      8 from eve.client.script.environment.spaceObject.spaceObject import SpaceObject
      9 from eve.client.script.environment.spaceObject.ExplosionManager import ExplosionManager
     10 from evegraphics.explosions.spaceObjectExplosionManager import SpaceObjectExplosionManager
     11 import evegraphics.settings as gfxsettings
     12 
     13 class Wreck(SpaceObject):
     14 
     15     def Assemble(self):
     16         self.UnSync()
     17         if self.model is None:
     18             return
     19         if not hasattr(self.model, 'locatorSets'):
     20             return
     21         SpaceObjectExplosionManager.SetUpWreckFires(self.model)
     22         self.SetupAmbientAudio()
     23 
     24     def SetRotation(self, yaw, pitch, roll):
     25         if hasattr(self.model, 'modelRotationCurve'):
     26             self.model.modelRotationCurve = trinity.Tr2RotationAdapter()
     27             quat = geo2.QuaternionRotationSetYawPitchRoll(yaw, pitch, roll)
     28             self.model.modelRotationCurve.value = quat
     29         elif self.model is not None:
     30             self.model.rotationCurve = None
     31             self.model.rotation.SetYawPitchRoll(yaw, pitch, roll)
     32 
     33     def SetRandomRotation(self):
     34         yaw, pitch, roll = random.random() * 6.28, random.random() * 6.28, random.random() * 6.28
     35         self.SetRotation(yaw, pitch, roll)
     36         self.model.display = 1
     37 
     38     def SetDungeonRotation(self, dunRotation):
     39         yaw, pitch, roll = map(math.radians, dunRotation)
     40         self.SetRotation(yaw, pitch, roll)
     41         self.model.display = 1
     42 
     43     def SetBallRotation(self, ball):
     44         self.model.rotationCurve = None
     45         slimItem = getattr(ball, 'typeData', {}).get('slimItem', None)
     46         if getattr(ball.model, 'modelRotationCurve', None) is not None:
     47             self.model.modelRotationCurve = ball.model.modelRotationCurve
     48         elif getattr(slimItem, 'dunRotation', None) is not None:
     49             self.SetDungeonRotation(slimItem.dunRotation)
     50         else:
     51             self.SetRotation(ball.yaw, ball.pitch, ball.roll)
     52         ball.wreckID = self.id
     53         self.model.display = 0
     54         if gfxsettings.Get(gfxsettings.UI_EXPLOSION_EFFECTS_ENABLED):
     55             SpaceObjectExplosionManager.GetExplosionTimesWhenAvailable(ball.id, self.StartDisplayWreckThread)
     56         else:
     57             self.DisplayWreck()
     58 
     59     def StartDisplayWreckThread(self, globalExplosionTime, wreckSwitchTimeInBlueTime):
     60         uthread.pool('Wreck::DisplayWreck', self._DisplayWreckAtTime, wreckSwitchTimeInBlueTime)
     61 
     62     def _DisplayWreckAtTime(self, timeInBlueTime):
     63         blue.synchro.SleepUntilSim(timeInBlueTime)
     64         self.DisplayWreck()
     65 
     66     def Prepare(self):
     67         SpaceObject.Prepare(self)
     68         michelle = self.sm.GetService('michelle')
     69         slimItem = self.typeData.get('slimItem')
     70         explodedShipBall = michelle.GetBall(slimItem.launcherID)
     71         if explodedShipBall is not None and getattr(explodedShipBall, 'model', None) is not None:
     72             self.SetBallRotation(explodedShipBall)
     73         elif getattr(slimItem, 'dunRotation', None) is not None:
     74             self.SetDungeonRotation(slimItem.dunRotation)
     75         else:
     76             self.SetRandomRotation()
     77 
     78     def Display(self, display = 1, canYield = True):
     79         if display and getattr(self, 'delayedDisplay', 0):
     80             return
     81         SpaceObject.Display(self, display, canYield)
     82 
     83     def DisplayWreck(self, duration = None):
     84         if duration:
     85             blue.pyos.synchro.SleepSim(duration)
     86         if self.model is not None and self.model.display == 0:
     87             self.model.display = 1
     88 
     89     def Explode(self):
     90         if self.exploded:
     91             return False
     92         self.exploded = True
     93         return 0.0