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