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

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