moonDrillComponent.py (4537B)
1 #Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\packages\eveSpaceObject\moonDrillComponent.py 2 from __future__ import print_function 3 from eve.client.script.environment.model.turretSet import TurretSet 4 import blue 5 import inventorycommon.const as const 6 import geo2 7 import trinity 8 import tacticalNavigation.ballparkFunctions as ballparkFunctions 9 import decometaclass 10 import uthread2 11 12 class BallWrapper(decometaclass.WrapBlueClass('destiny.ClientBall')): 13 __persistdeco__ = 0 14 __update_on_reload__ = 1 15 16 17 class MoonDrillComponent: 18 19 def __init__(self, michelle, ballid, moduleID, moduleTypeID): 20 self.michelle = michelle 21 self.ballID = ballid 22 structure = michelle.GetBall(ballid) 23 self.ball = structure 24 self.model = structure.model 25 self.faction = structure.typeData.get('sofFactionName', None) 26 self.turretSet = None 27 self.turretSetModel = None 28 self.moon = None 29 self.moonID = None 30 self.chunkID = None 31 self._chunkBall = None 32 self.moonDirection = None 33 self.targetBall = None 34 self.targetModel = trinity.EveEffectRoot2() 35 self.moduleID = moduleID 36 self.moduleTypeID = moduleTypeID 37 self._FitTurret() 38 self._SetupMoonConnection() 39 self._SetupTargetPoint() 40 41 def FitHardpoints(self, michelle, moonID, structureID, itemID): 42 self.moonID = moonID 43 self.structureID = structureID 44 targetMoonBall = michelle.GetBall(moonID) 45 structureBall = michelle.GetBall(structureID) 46 eveTurretSet = None 47 ts = structureBall.modules.get(itemID, None) 48 if ts is not None: 49 if len(ts.turretSets) > 0: 50 eveTurretSet = ts.turretSets[0] 51 if eveTurretSet is not None: 52 eveTurretSet.targetObject = targetMoonBall.model 53 eveTurretSet.EnterStateTargeting() 54 print('MoonDrillComponent::FitHardpoints -> ' + str(targetMoonBall.model) + ' : ' + str(eveTurretSet.name)) 55 56 def Teardown(self): 57 if self.targetBall is not None: 58 ballparkFunctions.RemoveClientBall(self.targetBall) 59 self.targetBall = None 60 if self.targetModel is not None: 61 self.targetModel.translationCurve = None 62 scene = sm.GetService('space').GetScene() 63 scene.objects.fremove(self.targetModel) 64 65 def GetTarget(self, targetID): 66 if self.moduleID is None: 67 return 68 if targetID != self.moonID: 69 return 70 return self.targetBall 71 72 def _FitTurret(self): 73 pass 74 75 def _SetupMoonConnection(self): 76 bp = self.michelle.GetBallpark() 77 dist = 1e+100 78 closestID = None 79 for ballID, slimItem in bp.slimItems.iteritems(): 80 if slimItem.groupID == const.groupMoon: 81 test = bp.DistanceBetween(self.ballID, ballID) 82 if test < dist: 83 dist = test 84 closestID = ballID 85 86 if closestID is None: 87 return 88 self.moonID = closestID 89 self.moon = self.michelle.GetBall(closestID) 90 self.moonDirection = geo2.Vec3NormalizeD(geo2.Vec3SubtractD((self.ball.x, self.ball.y, self.ball.z), (self.moon.x, self.moon.y, self.moon.z))) 91 92 def _SetupTargetPoint(self): 93 moonDirScaled = geo2.Vec3ScaleD(self.moonDirection, self.moon.radius) 94 position = geo2.Vec3AddD((self.moon.x, self.moon.y, self.moon.z), moonDirScaled) 95 self.targetBall = BallWrapper(ballparkFunctions.AddClientBall(position)) 96 self.targetModel.translationCurve = self.targetBall 97 self.targetBall.model = self.targetModel 98 scene = sm.GetService('space').GetScene() 99 scene.objects.append(self.targetModel) 100 if self.chunkID is None: 101 self.SetMoonChunk(None) 102 103 def PlaceSurfaceImpact(self): 104 surfaceObject = trinity.Load('res:/fisfx/structure/moonmining/moonmining_surfaceeffect_01a.red') 105 surfaceObject.translationCurve = self.moon 106 surfaceObject.scaling = (self.moon.radius, self.moon.radius, self.moon.radius) 107 surfaceObject.rotation = geo2.QuaternionRotationArc((0, 1, 0), self.moonDirection) 108 scene = sm.GetService('space').GetScene() 109 scene.objects.append(surfaceObject) 110 111 def _delayed_remove(): 112 blue.synchro.SleepSim(40000.0) 113 scene.objects.fremove(surfaceObject) 114 115 uthread2.start_tasklet(_delayed_remove) 116 117 def SetMoonChunk(self, chunk): 118 pass