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')