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

LargeCollidableStructure.py (6312B)


      1 #Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\eve\client\script\environment\spaceObject\LargeCollidableStructure.py
      2 import evetypes
      3 import uthread
      4 from eve.client.script.environment.model.turretSet import TurretSet
      5 from eve.client.script.environment.spaceObject.spaceObject import SpaceObject
      6 from cosmetics.common.structures.fitting import StructurePaintwork
      7 from cosmetics.common.structures.const import StructurePaintSlot
      8 import paints.data.dataLoader as dl
      9 from cosmetics.client.structures.fittingSignals import on_structure_cosmetic_state_changed
     10 from evegraphics.graphicEffects.skinChange import RemoveAllTemporaryModels, ChangeStructureSkin
     11 from uthread2 import StartTasklet
     12 import blue
     13 from eve.client.script.environment.spaceObject.spaceObject import modify_dna
     14 from cosmetics.common.structures.const import PAINT_ELIGIBLE_STRUCTURE_TYPE_IDS
     15 
     16 class LargeCollidableStructure(SpaceObject):
     17 
     18     def __init__(self):
     19         super(LargeCollidableStructure, self).__init__()
     20         self.fitted = False
     21         self.turrets = []
     22         self.modules = {}
     23         self.paintwork = None
     24         on_structure_cosmetic_state_changed.connect(self._on_cosmetic_state_changed)
     25 
     26     def _on_cosmetic_state_changed(self, structure_id, paintwork):
     27         if structure_id == self.id:
     28             self.paintwork = paintwork
     29             newDna = self.GetDNA()
     30             self._skinChangeTasklets.append(StartTasklet(self.ChangeSkin, newDna))
     31 
     32     def _get_material_name(self, slot):
     33         if slot is not None:
     34             return dl.get_paint_material_name(slot)
     35 
     36     def set_cosmetic_state(self, state):
     37         for slot_name, paint_id in state.items():
     38             self.paintwork.set_slot(slot_name, paint_id)
     39 
     40     def ChangeSkin(self, newDna = None):
     41         if self.model is None:
     42             return
     43         oldModel = self.nextModel or self.model
     44         nextModel = self._LoadModelResource(None)
     45         blue.resMan.Wait()
     46         handled = False
     47         if sm.GetService('subway').InJump():
     48             handled = sm.GetService('subway').HandleSkinChange(nextModel)
     49         if not handled:
     50             self.fitted = False
     51             self.nextModel = self._SetupModelAndAddToScene(loadedModel=nextModel, addToScene=False)
     52             if self.nextModel is None:
     53                 return
     54             self.SetupAnimationInformation(self.nextModel)
     55             self._SetupModelAttributes(self.nextModel, '%d' % self.id)
     56             self.ChangingSkin(self.nextModel)
     57             ChangeStructureSkin(oldModel, self.nextModel, self.spaceMgr.GetScene(), newDna=newDna, paintwork=self.paintwork, postSkinChangeCallback=self.PostSkinChangeCallback)
     58 
     59     def OnSlimItemUpdated(self, slimItem):
     60         super(LargeCollidableStructure, self).OnSlimItemUpdated(slimItem)
     61         if not slimItem.state and set([ i[0] for i in slimItem.modules or [] if evetypes.GetGraphicID(i[1]) is not None ]) != set(self.modules.keys()):
     62             uthread.new(self.ReloadHardpoints)
     63 
     64     def ReloadHardpoints(self):
     65         self.UnfitHardpoints()
     66         self.FitHardpoints()
     67 
     68     def UnfitHardpoints(self):
     69         if not self.fitted:
     70             return
     71         self.logger.debug('Unfitting hardpoints')
     72         newModules = {}
     73         for key, val in self.modules.iteritems():
     74             if val not in self.turrets:
     75                 newModules[key] = val
     76 
     77         self.modules = newModules
     78         del self.turrets[:]
     79         self.fitted = False
     80 
     81     def FitHardpoints(self, blocking = False):
     82         if self.fitted:
     83             return
     84         if self.model is None:
     85             self.logger.warning('FitHardpoints - No model')
     86             return
     87         self.logger.debug('Fitting hardpoints')
     88         self.fitted = True
     89         newTurretSetDict = TurretSet.FitTurrets(self.id, self.model, self.typeData.get('sofFactionName', None))
     90         self.turrets = []
     91         for key, val in newTurretSetDict.iteritems():
     92             self.modules[key] = val
     93             self.turrets.append(val)
     94 
     95     def LookAtMe(self):
     96         if not self.model:
     97             return
     98         if not self.fitted:
     99             self.FitHardpoints()
    100 
    101     def Assemble(self):
    102         if self.model is not None:
    103             self.model.rotationCurve = None
    104         self.SetStaticRotation()
    105         if hasattr(self.model, 'ChainAnimationEx'):
    106             self.model.ChainAnimationEx('NormalLoop', 0, 0, 1.0)
    107         self.SetupSharedAmbientAudio()
    108         self.SetStaticRotation()
    109         self.ReloadHardpoints()
    110 
    111         def _load_cosmetics():
    112             state = sm.GetService('cosmeticsSvc').get_cached_structure_cosmetic_state(self.id)
    113             if state is not None:
    114                 self.set_cosmetic_state(state.get_slots())
    115 
    116         uthread.new(_load_cosmetics)
    117 
    118     def OnDamageState(self, damageState):
    119         self._OnDamageState(damageState)
    120 
    121     def LoadModel(self, fileName = None, loadedModel = None, notify = True, addToScene = True):
    122 
    123         def _load_cosmetics():
    124             state = sm.GetService('cosmeticsSvc').get_cached_structure_cosmetic_state(self.id)
    125             if state is not None:
    126                 self.set_cosmetic_state(state.get_slots())
    127 
    128         uthread.new(_load_cosmetics)
    129         self.model = self._SetupModelAndAddToScene(fileName, loadedModel, addToScene)
    130         if self.model is None:
    131             return
    132         self.SetupAnimationInformation(self.model)
    133         if notify:
    134             self.NotifyModelLoaded()
    135 
    136     def GetDNA(self):
    137         sofDNA = super(LargeCollidableStructure, self).GetDNA()
    138         if self.typeID not in PAINT_ELIGIBLE_STRUCTURE_TYPE_IDS:
    139             return sofDNA
    140         if not self.paintwork:
    141             state = sm.GetService('cosmeticsSvc').get_cached_structure_cosmetic_state(self.id)
    142             self.paintwork = StructurePaintwork()
    143             if state is not None:
    144                 self.set_cosmetic_state(state.get_slots())
    145         if sofDNA is not None:
    146             mat1 = self._get_material_name(self.paintwork.get_slot(StructurePaintSlot.PRIMARY))
    147             mat2 = self._get_material_name(self.paintwork.get_slot(StructurePaintSlot.SECONDARY))
    148             mat3 = self._get_material_name(self.paintwork.get_slot(StructurePaintSlot.DETAILING))
    149             sofDNA = modify_dna(base_dna=sofDNA, mat1=mat1, mat2=mat2, mat3=mat3, isStructure=True)
    150         return sofDNA