Ejemplo n.º 1
0
 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)
Ejemplo n.º 2
0
 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()
Ejemplo n.º 4
0
 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)
Ejemplo n.º 5
0
 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
Ejemplo n.º 6
0
    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
Ejemplo n.º 7
0
 def GetDNA(self):
     materialSetID = self.typeData.get('slimItem').skinMaterialSetID
     return gfxutils.BuildSOFDNAFromTypeID(self.typeData['typeID'],
                                           materialSetID=materialSetID)
Ejemplo n.º 8
0
    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