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

spaceToSpaceTransition.py (4971B)


      1 #Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\eve\client\script\ui\view\spaceToSpaceTransition.py
      2 import logging
      3 import geo2
      4 import uthread
      5 from eve.client.script.ui.services.viewStateSvc import Transition
      6 from fsdBuiltData.common.graphicIDs import GetGraphicFile
      7 logger = logging.getLogger(__name__)
      8 
      9 class SpaceToSpaceTransition(Transition):
     10     __guid__ = 'viewstate.SpaceToSpaceTransition'
     11 
     12     def __init__(self, sceneManager = None):
     13         self.sceneManager = sceneManager
     14         if self.sceneManager is None:
     15             self.sceneManager = sm.GetService('sceneManager')
     16         self.scene = None
     17         self.effect = None
     18         self.active = False
     19         Transition.__init__(self)
     20 
     21     def _GetInflightCamera(self):
     22         return sm.GetService('sceneManager').GetActiveSpaceCamera()
     23 
     24     def _GetSolarSystemScene(self, destSolarSystemID):
     25         sceneRes = self.sceneManager.GetSceneForSystem(destSolarSystemID)
     26         return self.sceneManager.LoadScene(sceneRes, registerKey='default', applyScene=False)[0]
     27 
     28     def _GetClosest(self, position, rowSet, maxDist):
     29         closestDist = float('inf')
     30         closestPlanet = None
     31         for each in rowSet:
     32             pos = (each.x, each.y, each.z)
     33             dist = geo2.Vec3DistanceSq(position, pos)
     34             if dist < maxDist * maxDist and dist < closestDist:
     35                 closestPlanet = each.itemID
     36                 closestDist = dist
     37 
     38         return closestPlanet
     39 
     40     def _PrioritizeStargateLoads(self, stargateID, systemId):
     41         items = [stargateID]
     42         systemItems = sm.GetService('map').GetSolarsystemItems(systemId, False)
     43         stargateRow = systemItems.Filter('itemID')[stargateID][0]
     44         planet = self._GetClosest((stargateRow.x, stargateRow.y, stargateRow.z), systemItems.Filter('groupID')[const.groupPlanet], maxDist=const.AU * 0.5)
     45         if planet is not None:
     46             items.append(planet)
     47         sm.GetService('space').PrioritizeLoadingForIDs(items)
     48 
     49     def _GetSceneFromPath(self, path):
     50         return self.sceneManager.LoadScene(path, registerKey='default', applyScene=False)[0]
     51 
     52     def _ApplySceneInflightAttribs(self, scene):
     53         self.sceneManager.ApplyScene(scene, 'default')
     54         self.sceneManager.ApplySolarsystemAttributes(scene)
     55         self.sceneManager.ApplySceneInflightAttributes(scene)
     56         self.sceneManager.AddPersistentUIObjects(scene)
     57 
     58     def _SetScene(self, scene):
     59         self.sceneManager.SetActiveScene(scene, 'default')
     60 
     61     def SetTransitionEffect(self, effect):
     62         self.effect = effect
     63 
     64     def InitializeGateTransition(self, destSolarSystemID, destObjectID = None):
     65         self.active = True
     66         self.destObjectID = destObjectID
     67         self.destSolarSystemID = destSolarSystemID
     68         self.camera = self._GetInflightCamera()
     69         self.scene = self._GetSolarSystemScene(destSolarSystemID)
     70         uthread.new(self._PrioritizeStargateLoads, destObjectID, destSolarSystemID)
     71 
     72     def InitializeCynoTransition(self, destSolarSystemID):
     73         self.active = True
     74         self.destSolarSystemID = destSolarSystemID
     75         self.camera = self._GetInflightCamera()
     76         self.scene = self._GetSolarSystemScene(destSolarSystemID)
     77 
     78     def InitializeWormholeTransition(self, scenePath):
     79         self.active = True
     80         self.camera = self._GetInflightCamera()
     81         self.scene = self._GetSceneFromPath(scenePath)
     82 
     83     def InitializeAbyssalTransition(self, destSolarSystemID, nebulaGraphicID):
     84         self.active = True
     85         self.camera = self._GetInflightCamera()
     86         self.nebulaGraphicID = nebulaGraphicID
     87         if nebulaGraphicID:
     88             logging.debug('initializing abyssal transition with nebula %s', nebulaGraphicID)
     89             nebulaResPath = GetGraphicFile(nebulaGraphicID)
     90             self.scene = self.sceneManager.LoadScene(nebulaResPath, registerKey='default', applyScene=False)[0]
     91         else:
     92             logging.debug('initializing abyssal transition with nebula from solar system %s', destSolarSystemID)
     93             self.scene = self._GetSolarSystemScene(destSolarSystemID)
     94 
     95     def Finalize(self):
     96         logging.debug('finalizing transition')
     97         self._ApplySceneInflightAttribs(self.scene)
     98         self.effect.Stop()
     99         self.scene = None
    100         self.camera = None
    101         self.effect = None
    102         self.active = False
    103 
    104     def Abort(self):
    105         self._ApplySceneInflightAttribs(self.sceneManager.GetRegisteredScene('default'))
    106         self.sceneManager.SetRegisteredScenes('default')
    107         self.scene = None
    108         self.camera = None
    109         self.effect = None
    110         self.active = False
    111 
    112     def ApplyDestinationScene(self):
    113         if self.effect is None or self.scene is None:
    114             return
    115         self.effect.SetScene(self.scene)
    116         self._SetScene(self.scene)
    117 
    118     def StartTransition(self, fromView, toView):
    119         self.ApplyDestinationScene()
    120 
    121     def EndTransition(self, fromView, toView):
    122         pass