def LoadScene(self, sceneContainer): sceneContainer.PrepareSpaceScene(scenePath=self.scenePath) typeInfo = cfg.invtypes.Get(self.typeID) resFile = typeInfo.GraphicFile() if typeInfo.categoryID == invconst.categoryStation and self.itemID: stations = cfg.mapSolarSystemContentCache.npcStations npcStation = stations.get(self.itemID, None) if npcStation: graphicID = npcStation.graphicID resFile = cfg.graphics.Get(graphicID).graphicFile modelDNA = gfxutils.BuildSOFDNAFromTypeID(self.typeID) if modelDNA is not None: spaceObjectFactory = sm.GetService('sofService').spaceObjectFactory model = spaceObjectFactory.BuildFromDNA(modelDNA) else: model = trinity.Load(resFile) if model is None: raise InvalidPreviewType( '{0.name} ({0.typeID}) failed to load associated model'.format( typeInfo)) if getattr(model, 'boosters', None) is not None: model.boosters = None if getattr(model, 'modelRotationCurve', None) is not None: model.modelRotationCurve = None if getattr(model, 'modelTranslationCurve', None) is not None: model.modelTranslationCurve = None SetupAnimations(model, self.typeID) sceneContainer.AddToScene(model) SetupSpaceCamera(sceneContainer, model)
def LoadScene(self, sceneContainer): sceneContainer.PrepareSpaceScene(scenePath=self.scenePath) resFile = inventorycommon.typeHelpers.GetGraphicFile(self.typeID) modelDNA = None if evetypes.GetCategoryID( self.typeID) == invconst.categoryStation and self.itemID: stations = cfg.mapSolarSystemContentCache.npcStations npcStation = stations.get(self.itemID, None) if npcStation: graphicID = npcStation.graphicID modelDNA = gfxutils.BuildSOFDNAFromGraphicID(graphicID) if modelDNA is None: modelDNA = gfxutils.BuildSOFDNAFromTypeID( self.typeID, materialSetID=self.materialSetID) if modelDNA is not None: spaceObjectFactory = sm.GetService('sofService').spaceObjectFactory model = spaceObjectFactory.BuildFromDNA(modelDNA) else: model = trinity.Load(resFile) if model is None: raise InvalidPreviewType( '%s (%s) failed to load associated model' % (evetypes.GetName(self.typeID), self.typeID)) if getattr(model, 'boosters', None) is not None: model.boosters = None if getattr(model, 'modelRotationCurve', None) is not None: model.modelRotationCurve = None if getattr(model, 'modelTranslationCurve', None) is not None: model.modelTranslationCurve = None SetupAnimations(model, self.typeID) model.FreezeHighDetailMesh() trinity.WaitForResourceLoads() sceneContainer.AddToScene(model) SetupSpaceCamera(sceneContainer, model)
def PreviewType(self, typeID, subsystems=None): typeOb = cfg.invtypes.Get(typeID) groupID = typeOb.groupID groupOb = cfg.invgroups.Get(groupID) categoryID = groupOb.categoryID godma = sm.GetService('godma') if IsModularShip(typeID): if subsystems is None: subsystems = {} subSystemsForType = {} for group in cfg.groupsByCategories.get( const.categorySubSystem, []): if group.groupID not in subSystemsForType: subSystemsForType[group.groupID] = [] for t in cfg.typesByGroups.get(group.groupID, []): if t.published and godma.GetTypeAttribute( t.typeID, const.attributeFitsToShipType) == typeID: subSystemsForType[group.groupID].append(t.typeID) for k, v in subSystemsForType.iteritems(): subsystems[k] = random.choice(v) model = sm.StartService('t3ShipSvc').GetTech3ShipFromDict( typeID, subsystems) else: dna = gfxutils.BuildSOFDNAFromTypeID(typeID) if dna is not None: spaceObjectFactory = sm.GetService( 'sofService').spaceObjectFactory model = spaceObjectFactory.BuildFromDNA(dna) else: fileName = typeOb.GraphicFile() if fileName == '': log.LogWarn('type', typeID, 'has no graphicFile') return model = trinity.Load(fileName) if model is None: self.sceneContainer.ClearScene() raise UserError('PreviewNoModel') if getattr(model, 'boosters', None) is not None: model.boosters = None if getattr(model, 'modelRotationCurve', None) is not None: model.modelRotationCurve = None if getattr(model, 'modelTranslationCurve', None) is not None: model.modelTranslationCurve = None if hasattr(model, 'ChainAnimationEx'): model.ChainAnimationEx('NormalLoop', 0, 0, 1.0) self._CreateRotationCurve(model) self.sceneContainer.AddToScene(model) camera = self.sceneContainer.camera if camera is not None: rad = model.GetBoundingSphereRadius() minZoom = rad + camera.frontClip camera.translationFromParent = minZoom * 2 self.sceneContainer.UpdateViewPort()
def _LoadSOFShipModel(self, itemID, typeID): self._activeSkinID = self.GetShipSkin(itemID, typeID) self._activeMaterialSetID = self._activeSkinID.materialSetID if self._activeSkinID is not None else None shipDna = gfxutils.BuildSOFDNAFromTypeID( typeID, materialSetID=self._activeMaterialSetID) if shipDna is None: self.log.error( '%s._LoadSOFShip(itemID = %s, typeID = %s): Trying to show a SOF ship that is not in the SOF' % (self, itemID, typeID)) return return sm.GetService('sofService').spaceObjectFactory.BuildFromDNA( shipDna)
def _LoadModelResource(self, fileName): self.LogInfo('LoadModel', fileName) model = None sofDNA = gfxutils.BuildSOFDNAFromTypeID(self.typeData['typeID']) if sofDNA is not None: model = self.spaceObjectFactory.BuildFromDNA(sofDNA) elif fileName is not None and len(fileName): model = blue.resMan.LoadObject(fileName) if model is None: self.LogError( 'Error: Object type %s has invalid graphicFile, using graphicID: %s' % (self.typeData['typeID'], self.typeData['graphicID'])) return model
def ShowActiveShip(self, *args): if self.__alreadyShowingActiveShip: log.LogWarn( "We're already in the process of showing the active ship") return self.__alreadyShowingActiveShip = True try: scene = getattr(self, 'hangarScene', None) if scene: for each in scene.objects: if getattr(each, 'name', None) == str(self.activeShip): scene.objects.remove(each) try: if IsModularShip(self.activeShipItem.typeID): try: dogmaItem = self.clientDogmaIM.GetDogmaLocation( ).dogmaItems.get(self.activeShipItem.itemID, None) if dogmaItem is None: log.LogTraceback( 'Trying to show t3 ship which is not in dogma') return subSystemIds = {} for fittedItem in dogmaItem.GetFittedItems( ).itervalues(): if fittedItem.categoryID == const.categorySubSystem: subSystemIds[ fittedItem.groupID] = fittedItem.typeID newModel = self.t3ShipSvc.GetTech3ShipFromDict( dogmaItem.typeID, subSystemIds) except: log.LogException('failed bulding modular ship') sys.exc_clear() return else: materialSetID = sm.GetService( 'skinSvc').GetAppliedSkinMaterialSetID( session.charid, self.activeShipItem.itemID, self.activeShipItem.typeID) shipDna = gfxutils.BuildSOFDNAFromTypeID( self.activeShipItem.typeID, materialSetID=materialSetID) if shipDna is not None: sof = sm.GetService('sofService').spaceObjectFactory newModel = sof.BuildFromDNA(shipDna) self.SetupFakeAudioEntity() self.SetupGeneralAudioEntity(self.fakeAudioTransform) self.SetupAnimationUpdaterAudio(newModel) self.generalAudioEntity.eventPrefix = 'cq_' self.SetupShipModel(newModel) except Exception as e: log.LogException(str(e)) sys.exc_clear() return newModel.FreezeHighDetailMesh() self.PositionShipModel(newModel) self.activeShip = self.activeShipItem.itemID self.SetupAnimation(newModel, self.activeShipItem) self.activeshipmodel = newModel newModel.display = 1 newModel.name = str(self.activeShipItem.itemID) if self.clientDogmaIM.GetDogmaLocation().dogmaItems[ util.GetActiveShip()].groupID != const.groupCapsule: scene.objects.append(newModel) scene.objects.append(self.fakeAudioTransform) self.generalAudioEntity.SendEvent( unicode('hangar_spin_switch_ship_play')) sm.ScatterEvent('OnActiveShipModelChange', newModel, self.activeShipItem) finally: self.__alreadyShowingActiveShip = False
def GetDNA(self): materialSetID = self.typeData.get('slimItem').skinMaterialSetID return gfxutils.BuildSOFDNAFromTypeID(self.typeData['typeID'], materialSetID=materialSetID)
def ShowActiveShip(self): if getattr(self, '__alreadyShowingActiveShip', False): log.LogTraceback( "We're already in the process of showing the active ship") return self.__alreadyShowingActiveShip = True try: scene = getattr(self, 'hangarScene', None) if scene: for each in scene.objects: if getattr(each, 'name', None) == str(self.activeShip): scene.objects.remove(each) try: if IsModularShip(self.activeShipItem.typeID): try: dogmaItem = self.clientDogmaIM.GetDogmaLocation( ).dogmaItems.get(self.activeShipItem.itemID, None) if dogmaItem is None: log.LogTraceback( 'Trying to show t3 ship which is not in dogma') return subSystemIds = {} for fittedItem in dogmaItem.GetFittedItems( ).itervalues(): if fittedItem.categoryID == const.categorySubSystem: subSystemIds[ fittedItem.groupID] = fittedItem.typeID newModel = self.t3ShipSvc.GetTech3ShipFromDict( dogmaItem.typeID, subSystemIds) except: log.LogException('failed bulding modular ship') sys.exc_clear() return else: shipDna = gfxutils.BuildSOFDNAFromTypeID( self.activeShipItem.typeID) if shipDna is not None: sof = sm.GetService('sofService').spaceObjectFactory newModel = sof.BuildFromDNA(shipDna) self.generalAudioEntity = None if newModel is not None and hasattr(newModel, 'observers'): triObserver = trinity.TriObserverLocal() self.generalAudioEntity = audio2.AudEmitter( 'spaceObject_' + str(self.activeShipItem.itemID) + '_general') triObserver.observer = self.generalAudioEntity newModel.observers.append(triObserver) except Exception as e: log.LogException(str(e)) sys.exc_clear() return newModel.FreezeHighDetailMesh() self.PositionShipModel(newModel) self.activeShip = self.activeShipItem.itemID self.SetupAnimation(newModel, self.activeShipItem) self.activeshipmodel = newModel newModel.display = 1 newModel.name = str(self.activeShipItem.itemID) if self.clientDogmaIM.GetDogmaLocation().dogmaItems[ util.GetActiveShip()].groupID != const.groupCapsule: scene.objects.append(newModel) self.generalAudioEntity.SendEvent( unicode('hangar_spin_switch_ship_play')) sm.ScatterEvent('OnActiveShipModelChange', newModel, self.activeShipItem.itemID) finally: self.__alreadyShowingActiveShip = False