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

buildableStructure.py (4868B)


      1 #Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\eve\client\script\environment\spaceObject\buildableStructure.py
      2 from eve.client.script.environment.spaceObject.LargeCollidableStructure import LargeCollidableStructure
      3 from fsdBuiltData.common.graphicIDs import GetExplosionBucketID
      4 from evegraphics.utils import BuildSOFDNAFromGraphicID
      5 import locks
      6 NANO_CONTAINER_GRAPHIC_ID = 20930
      7 
      8 class BuildableStructure(LargeCollidableStructure):
      9 
     10     def __init__(self):
     11         LargeCollidableStructure.__init__(self)
     12         self.overlayEffects = {}
     13         self.nanoContainerModel = None
     14         self.nanoContainerModelLoadedEvent = locks.Event()
     15         self.structureModel = None
     16         self.structureModelLoadedEvent = locks.Event()
     17         self.isConstructing = False
     18         self.oldClipSphereCenter = (0.0, 0.0, 0.0)
     19 
     20     def Prepare(self):
     21         self.logger.debug('BuildableStructure: Preparing')
     22         self.LoadStructureModel()
     23         LargeCollidableStructure.Prepare(self)
     24 
     25     def LoadNanoContainerModel(self):
     26         self.logger.debug('BuildableStructure: Loading nano container model')
     27         self.nanoContainerModel = self.LoadAdditionalModel(sofDna=BuildSOFDNAFromGraphicID(NANO_CONTAINER_GRAPHIC_ID))
     28         self.nanoContainerModel.name += '_nanocontainer'
     29         self.nanoContainerModelLoadedEvent.set()
     30 
     31     def LoadStructureModel(self):
     32         self.logger.debug('BuildableStructure: Loading structure model')
     33         structureModel = self.LoadAdditionalModel()
     34         self.SetupAnimationInformation(structureModel)
     35         self.structureModel = structureModel
     36         self.structureModelLoadedEvent.set()
     37 
     38     def SetModelDisplay(self, model, display):
     39         if model is not None:
     40             model.display = display
     41 
     42     def LoadUnLoadedModels(self):
     43         if self.structureModel is None:
     44             self.LoadStructureModel()
     45 
     46     def SetupModel(self, unanchored):
     47         sendOutModelLoadedEvent = self.model is None
     48         self.explosionBucketID = GetExplosionBucketID(self.typeData.get('graphicID', None))
     49         showStructureModel = True
     50         if self.isConstructing:
     51             self.model = self.GetStructureModel()
     52             self.GetNanoContainerModel()
     53             self.model.display = True
     54             self.Assemble()
     55         elif unanchored:
     56             showStructureModel = False
     57             self.model = self.GetNanoContainerModel()
     58             self.explosionBucketID = GetExplosionBucketID(NANO_CONTAINER_GRAPHIC_ID)
     59         else:
     60             self.model = self.GetStructureModel()
     61         if sendOutModelLoadedEvent:
     62             self.NotifyModelLoaded()
     63         if self.structureModel is not None:
     64             self.structureModel.display = showStructureModel
     65 
     66     def GetNanoContainerModel(self):
     67         if self.nanoContainerModel is None:
     68             self.LoadNanoContainerModel()
     69         return self.nanoContainerModel
     70 
     71     def GetStructureModel(self):
     72         if self.structureModel is None:
     73             self.logger.debug('BuildableStructure: waiting for structure model')
     74             self.structureModelLoadedEvent.wait()
     75             self.logger.debug('BuildableStructure: done waiting for structure model')
     76         if self.structureModel is None:
     77             self.logger.warning('BuildableStructure: Failed to get a valid structure model')
     78             return
     79         return self.structureModel
     80 
     81     def HasModels(self):
     82         return self.nanoContainerModel is not None or self.structureModel is not None
     83 
     84     def ClearAndRemoveAllModels(self, scene):
     85         LargeCollidableStructure.ClearAndRemoveAllModels(self, scene)
     86         self.RemoveAndClearModel(self.nanoContainerModel, scene)
     87         self.RemoveAndClearModel(self.structureModel, scene)
     88         self.nanoContainerModel = None
     89         self.structureModel = None
     90         self.model = None
     91 
     92     def RemoveAllModelsFromScene(self, scene):
     93         LargeCollidableStructure.RemoveAllModelsFromScene(self, scene)
     94         scene.objects.fremove(self.nanoContainerModel)
     95         scene.objects.fremove(self.structureModel)
     96 
     97     def PreBuildingSteps(self):
     98         self.isConstructing = True
     99         self.SetupModel(False)
    100         self.StartNanoContainerAnimation()
    101 
    102     def PostBuildingSteps(self, built):
    103         self.isConstructing = False
    104         if built:
    105             self.RemoveAndClearModel(self.nanoContainerModel)
    106             self.nanoContainerModel = None
    107         else:
    108             self.EndNanoContainerAnimation()
    109 
    110     def StartNanoContainerAnimation(self, deployScale = 1):
    111         if self.nanoContainerModel is not None:
    112             self.nanoContainerModel.PlayAnimationEx('Deploy', 1, 0, deployScale)
    113             self.nanoContainerModel.ChainAnimationEx('OpenLoop', 0, 0, 1)
    114 
    115     def EndNanoContainerAnimation(self):
    116         if self.nanoContainerModel is not None:
    117             self.nanoContainerModel.PlayAnimation('Pack')