コード例 #1
0
 def AddSoundToEffect(self):
     shipID = self.GetEffectShipID()
     shipBall = self.GetEffectShipBall()
     targetID = self.GetEffectTargetID()
     targetBall = self.GetEffectTargetBall()
     if shipBall is None or targetBall is None:
         return
     srcAudio = audio2.AudEmitter('effect_source_' + str(shipID))
     destAudio = audio2.AudEmitter('effect_dest_' + str(targetID))
     srcRadius = shipBall.radius
     destRadius = targetBall.radius
     srcAttenuation = pow(srcRadius, 0.95) * 33
     destAttenuation = pow(destRadius, 0.95) * 33
     srcAudio.SetAttenuationScalingFactor(srcAttenuation)
     destAudio.SetAttenuationScalingFactor(destAttenuation)
     if self.gfx.sourceObject:
         obs = trinity.TriObserverLocal()
         obs.front = (0.0, -1.0, 0.0)
         obs.observer = srcAudio
         self.gfx.sourceObject.observers.append(obs)
     if self.gfx.destObject:
         obs = trinity.TriObserverLocal()
         obs.front = (0.0, -1.0, 0.0)
         obs.observer = destAudio
         self.gfx.destObject.observers.append(obs)
     for eachSet in self.gfx.curveSets:
         for eachCurve in eachSet.curves:
             if eachCurve.__typename__ == 'TriEventCurve':
                 if eachCurve.name == 'audioEventsSource':
                     eachCurve.eventListener = srcAudio
                 elif eachCurve.name == 'audioEventsDest':
                     eachCurve.eventListener = destAudio
コード例 #2
0
 def AddSoundToEffect(self, effect, turretSet):
     if len(effect.stretch) < 1:
         return
     srcAudio = audio2.AudEmitter('effect_source_%s' % str(id(self)))
     destAudio = audio2.AudEmitter('effect_dest_%s' % str(id(self)))
     if turretSet.hasCyclingFiringPos:
         sndStretchList = effect.stretch
     else:
         sndStretchList = effect.stretch[:1]
     for sndStretch in sndStretchList:
         if sndStretch.stretchObject:
             sourceAudioLocation = sndStretch.stretchObject
         else:
             sourceAudioLocation = sndStretch.sourceObject
         if sourceAudioLocation:
             obs = trinity.TriObserverLocal()
             obs.front = (0.0, -1.0, 0.0)
             obs.observer = srcAudio
             del sourceAudioLocation.observers[:]
             sourceAudioLocation.observers.append(obs)
         if sndStretch.destObject:
             obs = trinity.TriObserverLocal()
             obs.front = (0.0, -1.0, 0.0)
             obs.observer = destAudio
             del sndStretch.destObject.observers[:]
             sndStretch.destObject.observers.append(obs)
         for eachSet in sndStretch.curveSets:
             for eachCurve in eachSet.curves:
                 if eachCurve.__typename__ == 'TriEventCurve':
                     if eachCurve.name == 'audioEventsSource':
                         eachCurve.eventListener = srcAudio
                     elif eachCurve.name == 'audioEventsDest':
                         eachCurve.eventListener = destAudio
コード例 #3
0
ファイル: spaceobjaudio.py プロジェクト: connoryang/1v1dec
def CreateEmitterForBooster(
        model,
        boosterSize,
        isAudioBoosterLocator=lambda n: n.name == BOOSTER_AUDIO_LOCATOR_NAME):
    locs = filter(isAudioBoosterLocator, model.locators)
    if not locs:
        return None
    if len(locs) > 1:
        L.error(
            'Found %s locs, needed 1. Content should be validated against this!',
            len(locs))
    audLocator = locs[0]
    observer = trinity.TriObserverLocal()
    transform = audLocator.transform
    observer.front = (-transform[2][0], -transform[2][1], -transform[2][2])
    observer.position = (transform[3][0], transform[3][1], transform[3][2])
    audioService = sm.GetService('audio')
    if audioService.GetDopplerEmittersUsage() and boosterSize in ('f', 'c',
                                                                  'bs'):
        rtpcChangeDuration = 17
        emitterName = 'ship_%s_booster' % id(model)
        rtpcName = 'doppler_shift_booster_' + boosterSize
        emitter = audio2.AudEmitterDoppler(emitterName, rtpcName,
                                           rtpcChangeDuration)
    else:
        emitter = audio2.AudEmitter('ship_%s_booster' % id(model))
    audparam = audio2.AudParameter()
    audparam.name = u'ship_speed'
    emitter.parameters.append(audparam)
    observer.observer = emitter
    model.observers.append(observer)
    model.audioSpeedParameter = audparam
    return emitter
コード例 #4
0
    def Prepare(self):
        shipID = self.ballIDs[0]
        shipBall = self.fxSequencer.GetBall(shipID)
        if shipBall is None:
            raise RuntimeError('EMPWave: no ball found')
        if self.moduleTypeID == 0:
            self.moduleTypeID = 15957
        graphicID = cfg.invtypes.Get(self.moduleTypeID).graphicID
        if graphicID is None:
            raise RuntimeError('EMPWave: no graphic ID')
        gfxString = util.GraphicFile(graphicID)
        self.gfx = trinity.Load(gfxString)
        if self.gfx is None:
            raise RuntimeError('EMPWave: no effect found')
        entity = audio2.AudEmitter('effect_' + str(shipID))
        obs = trinity.TriObserverLocal()
        obs.observer = entity
        if self.gfx.__bluetype__ in ('trinity.EveTransform', ):
            self.gfx.observers.append(obs)
        for curveSet in self.gfx.curveSets:
            for curve in curveSet.curves:
                if curve.__typename__ == 'TriEventCurve' and curve.name == 'audioEvents':
                    curve.eventListener = entity

        self.gfxModel = trinity.EveRootTransform()
        radius = self.fxSequencer.GetTypeAttribute(
            self.moduleTypeID, const.attributeEmpFieldRange)
        self.gfxModel.scaling = (radius / 1000, radius / 1000, radius / 1000)
        self.radius = radius
        self.gfxModel.name = self.__guid__
        self.gfxModel.children.append(self.gfx)
        self.gfxModel.translationCurve = shipBall
        scene = self.fxSequencer.GetScene()
        scene.objects.append(self.gfxModel)
コード例 #5
0
ファイル: GenericEffect.py プロジェクト: R4M80MrX/eve-1
 def AddSoundToEffect(self, scaler):
     import effects
     if effects.FX_TF_POSITION_TARGET & self.transformFlags:
         effectBall = self.GetEffectTargetBall()
     else:
         effectBall = self.GetEffectShipBall()
     shipID = self.GetEffectShipID()
     entity = audio2.AudEmitter('effect_' + str(shipID) + '_' +
                                self.__guid__)
     if self.gfx:
         srcRadius = effectBall.radius
     else:
         srcRadius = self.sourceObject.boundingSphereRadius
     attenuation = pow(srcRadius, 0.95) * 33 * scaler
     entity.SetAttenuationScalingFactor(attenuation)
     self.observer = trinity.TriObserverLocal()
     self.observer.observer = entity
     if self.gfx.__bluetype__ in ('trinity.EveTransform',
                                  'trinity.EveStation2'):
         self.gfx.observers.append(self.observer)
     else:
         self.sourceObject.observers.append(self.observer)
     for curve in self.gfx.Find('trinity.TriEventCurve'):
         if curve.name == 'audioEvents':
             curve.eventListener = entity
コード例 #6
0
ファイル: incursionSvc.py プロジェクト: R4M80MrX/eve-1
    def AddIncursionStationSoundIfApplicableThread(self):
        count = 0
        success = False
        while success == False and count < 60:
            blue.synchro.SleepWallclock(1000)
            count += 1
            if session.stationid is None:
                success = True
                break
            try:
                if not self.stationAudioPlaying:
                    scene = sm.GetService('sceneManager').GetRegisteredScene(
                        'default')
                    stationModel = scene.objects[0]
                    addedSound = self.GetSoundUrlByKey('hangar')
                    if addedSound is not None:
                        triObserver = trinity.TriObserverLocal()
                        generalAudioEntity = audio2.AudEmitter('Story_general')
                        triObserver.observer = generalAudioEntity
                        stationModel.observers.append(triObserver)
                        generalAudioEntity.SendEvent(unicode(addedSound[6:]))
                        self.stationAudioPlaying = True
                        success = True
            except:
                self.LogInfo(
                    'Could not add incursion station sound trying again in 1 second'
                )

        if success == False:
            self.LogError(
                'Incursion station audio could not be added after 60 tries')
        self.addStationSoundThreadRunning = False
コード例 #7
0
 def ShowSiteDuringSweep(self, locatorData, scene, siteData, sleepTimeSec,
                         soundLocators, vectorCurve):
     ball = locatorData.ballRef()
     if ball is None:
         return
     audio = audio2.AudEmitter('sensor_overlay_site_%s' %
                               str(siteData.siteID))
     obs = trinity.TriObserverLocal()
     obs.front = (0.0, -1.0, 0.0)
     obs.observer = audio
     vectorSequencer = trinity.TriVectorSequencer()
     vectorSequencer.operator = trinity.TRIOP_MULTIPLY
     vectorSequencer.functions.append(ball)
     vectorSequencer.functions.append(vectorCurve)
     tr = trinity.EveRootTransform()
     tr.name = 'sensorSuiteSoundLocator_%s' % str(siteData.siteID)
     tr.translationCurve = vectorSequencer
     tr.observers.append(obs)
     scene.objects.append(tr)
     soundLocators.append(tr)
     uthread2.SleepSim(sleepTimeSec)
     if siteData.GetSiteType() == ANOMALY:
         audio.SendEvent('ui_scanner_result_anomaly')
     elif siteData.GetSiteType() == SIGNATURE:
         audio.SendEvent('ui_scanner_result_signature')
     locatorData.bracket.DoEntryAnimation(enable=False)
     locatorData.bracket.state = uiconst.UI_DISABLED
コード例 #8
0
    def _SpawnExplosion(self, warheadIdx):
        if not self.model:
            self.LogWarn('Missile::_SpawnExplosion no model')
            return
        explosionPosition = self._GetExplosionPosition(warheadIdx)
        self.warheadsReleased += 1
        if self.exploded:
            return
        if self.warheadsReleased == self.totalWarheadCount:
            if self.model:
                self.model.target = None
                self.model.explosionCallback = None
                self.RemoveAndClearModel(self.model,
                                         self.globalsGlob.GetScene())
                self.model = None
            if self.delayedBall:
                self.globalsGlob.DestroyClientBall(self.delayedBall)
                self.delayedBall = None
            self.exploded = True
        actualModel = self.explosionManager.GetExplosion(
            self.explosionPath, preloaded=True, callback=self.CleanupExplosion)
        if actualModel is None:
            self.LogError('missile::LoadModel failed to get explosion ' +
                          str(self.explosionPath))
            self.explosionManager.Cancel(self.explosionPath, 1)
            return
        explosionBall = None
        if self.enabled:
            explosionBall = self.globalsGlob.SpawnClientBall(explosionPosition)
            actualModel.translationCurve = explosionBall
            rndRotation = geo2.QuaternionRotationSetYawPitchRoll(
                random.random() * 2.0 * math.pi,
                random.random() * 2.0 * math.pi,
                random.random() * 2.0 * math.pi)
            actualModel.rotation = rndRotation
            scene = self.globalsGlob.GetScene()
            if scene is not None:
                scene.objects.append(actualModel)
                audio = audio2.AudEmitter('effect_source_%s' % str(id(self)))
                obs = trinity.TriObserverLocal()
                obs.front = (0.0, -1.0, 0.0)
                obs.observer = audio
                del actualModel.observers[:]
                actualModel.observers.append(obs)

                def AudioSetup(*args):
                    for eachSet in actualModel.active.curveSets:
                        for eachCurve in eachSet.curves:
                            if eachCurve.__typename__ == 'TriEventCurve':
                                audio.SendEvent(eachCurve.GetKeyValue(0))
                                break

                loadedEventHandler = blue.BlueEventToPython()
                loadedEventHandler.handler = AudioSetup
                actualModel.loadedCallback = loadedEventHandler
            shakeMagnitude = min(actualModel.boundingSphereRadius, 250)
            shakeMagnitude = max(shakeMagnitude, 50)
            self.globalsGlob.ShakeCamera(shakeMagnitude, explosionPosition)
コード例 #9
0
 def _SetupMissileBoosterAudio(self, wh, useDopplerEmitter):
     del wh.observers[:]
     observer = trinity.TriObserverLocal()
     if useDopplerEmitter:
         emitter = audio2.AudEmitterDoppler('ship_%s_warhead' % id(wh), 'doppler_shift_d', 100)
     else:
         emitter = audio2.AudEmitter('ship_%s_booster' % id(wh))
     observer.observer = emitter
     emitter.SendEvent(u'ship_booster_angel_d_play')
     wh.observers.append(observer)
コード例 #10
0
def SetupAudioEntity(model):
    """
    Creates a generalized audio emitter that objects can use to play random
    audio events on a space object.
    
    :return: AudEmitter
    :raises: AttributeError if model does not support observers.
    """
    triObserver = trinity.TriObserverLocal()
    result = audio2.AudEmitter('spaceObject_%s_general' % id(model))
    triObserver.observer = result
    model.observers.append(triObserver)
    return result
コード例 #11
0
 def AddSoundToEffect(self, scaler=1.0, model=None):
     shipID = self.GetEffectShipID()
     emitter_name = 'effect_' + str(shipID) + '_' + self.__guid__
     self.CheckForExistingObserver(model, emitter_name)
     if self.observer is None:
         self.observer = trinity.TriObserverLocal()
         entity = audio2.AudEmitter(emitter_name)
         self.observer.observer = entity
         if model is None:
             model = self.gfx
         self.AttachObserverToModel(model)
         self.AttachObserverToTriEventCurve()
         if hasattr(self.observer,
                    'observer') and self.observer.observer is not None:
             self.ScaleEffectAudioEmitter(self.observer.observer, scaler)
コード例 #12
0
 def GetGeneralAudioEntity(self):
     if self.generalAudioEntity is None:
         if self.model is not None and hasattr(self.model, 'observers'):
             triObserver = trinity.TriObserverLocal()
             self.generalAudioEntity = audio2.AudEmitter('spaceObject_' +
                                                         str(self.id) +
                                                         '_general')
             triObserver.observer = self.generalAudioEntity
             self.audioEntities.append(self.generalAudioEntity)
             self.model.observers.append(triObserver)
         else:
             self.LogWarn(
                 self.id,
                 'unable to construct generalized audio entity - model has no observers property'
             )
     return self.generalAudioEntity
コード例 #13
0
def SetupSharedEmitterForAudioEvent(model, eventName):
    """
    Takes a model and an event and looks into the MultiEvent list of the AudManager to see if the multi emitter
    already exists.
    
    If it exists then it gets the emitter and attaches it to a TriObserverLocal and adds it to the
    observer list of the model.
    
    If there is no emitter found it will create a new emitter and attach that to the TriObserverLocal and add that
    to the observer list.
    :param model: A SpaceObject that has to have an observers list
    :param eventName: A string containing the name of the event that will be sent to the emitter upon creation.
    """
    triObserver = trinity.TriObserverLocal()
    emitter = GetSharedAudioEmitter(eventName)
    triObserver.observer = emitter
    model.observers.append(triObserver)
コード例 #14
0
def CreateEmitterForBooster(
        model,
        isAudioBoosterLocator=lambda n: n.name == BOOSTER_AUDIO_LOCATOR_NAME):
    locs = filter(isAudioBoosterLocator, model.locators)
    if not locs:
        return None
    if len(locs) > 1:
        L.error(
            'Found %s locs, needed 1. Content should be validated against this!',
            len(locs))
    audLocator = locs[0]
    observer = trinity.TriObserverLocal()
    transform = audLocator.transform
    observer.front = (-transform[2][0], -transform[2][1], -transform[2][2])
    observer.position = (transform[3][0], transform[3][1], transform[3][2])
    emitter = audio2.AudEmitter('ship_%s_booster' % id(model))
    audparam = audio2.AudParameter()
    audparam.name = u'ship_speed'
    emitter.parameters.append(audparam)
    observer.observer = emitter
    model.observers.append(observer)
    model.audioSpeedParameter = audparam
    return emitter
コード例 #15
0
    def ShowActiveShip(self):
        if sm.GetService('viewState').IsCurrentViewSecondary():
            return
        if getattr(self, '__alreadyShowingActiveShip', False):
            return
        setattr(self, '__alreadyShowingActiveShip', True)
        try:
            modelToRemove = None
            if self.hangarScene:
                for each in self.hangarScene.objects:
                    if getattr(each, 'name', None) == str(self.activeShip):
                        modelToRemove = each

            techLevel = self.godma.GetTypeAttribute(self.activeShipItem.typeID,
                                                    const.attributeTechLevel)
            if techLevel == 3.0:
                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:
                modelPath = cfg.invtypes.Get(
                    self.activeShipItem.typeID).GraphicFile()
                newFilename = modelPath.lower().replace(
                    ':/model', ':/dx9/model')
                newFilename = newFilename.replace('.blue', '.red')
                newModel = trinity.Load(newFilename)
            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)
            sm.ScatterEvent('OnActiveShipModelChange', newModel,
                            self.activeShipItem.itemID)
            newModel.FreezeHighDetailMesh()
            zoomTo = self.GetZoomValues(newModel, 0)
            if not self.staticEnv and hasattr(newModel, 'ChainAnimationEx'):
                newModel.ChainAnimationEx('NormalLoop', 0, 0, 1.0)
            self.activeShip = self.activeShipItem.itemID
            self.activeshipmodel = newModel
            self.AdjustHangarScale()
            newModel.name = str(self.activeShipItem.itemID)
            if not self.staticEnv and zoomTo > self.lastShipzoomTo and self.hangarScene is not None and modelToRemove is not None:
                uthread.new(self.DelayedSwap, self.hangarScene, modelToRemove,
                            newModel)
            else:
                newModel.display = 1
                if modelToRemove is not None:
                    self.hangarScene.objects.remove(modelToRemove)
                self.hangarScene.objects.append(newModel)
            self.generalAudioEntity.SendEvent(
                unicode('hangar_spin_switch_ship_play'))
            self.lastShipzoomTo = zoomTo
            self.Zoom(zoomTo)
            if self.staticEnv:
                self.RenderStaticEnvironment()
            else:
                self.RenderDynamicEnvironment()
        except Exception as e:
            log.LogException(str(e))
            sys.exc_clear()
        finally:
            delattr(self, '__alreadyShowingActiveShip')
コード例 #16
0
ファイル: worldspaceView.py プロジェクト: R4M80MrX/eve-1
    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:
                techLevel = self.godma.GetTypeAttribute(
                    self.activeShipItem.typeID, const.attributeTechLevel)
                if techLevel == 3.0:
                    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:
                    modelPath = cfg.invtypes.Get(
                        self.activeShipItem.typeID).GraphicFile()
                    newFilename = modelPath.lower().replace(
                        ':/model', ':/dx9/model')
                    newFilename = newFilename.replace('.blue', '.red')
                    newModel = trinity.Load(newFilename)
                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)
            if hasattr(newModel, 'ChainAnimationEx'):
                newModel.ChainAnimationEx('NormalLoop', 0, 0, 1.0)
            self.activeShip = self.activeShipItem.itemID
            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
コード例 #17
0
ファイル: spaceobjaudio.py プロジェクト: connoryang/1v1dec
def SetupAudioEntity(model):
    triObserver = trinity.TriObserverLocal()
    result = audio2.AudEmitter('spaceObject_%s_general' % id(model))
    triObserver.observer = result
    model.observers.append(triObserver)
    return result
コード例 #18
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
コード例 #19
0
ファイル: spaceobjaudio.py プロジェクト: connoryang/1v1dec
def SetupSharedEmitterForAudioEvent(model, eventName):
    triObserver = trinity.TriObserverLocal()
    emitter = GetSharedAudioEmitter(eventName)
    triObserver.observer = emitter
    model.observers.append(triObserver)
コード例 #20
0
    def FitBoosters(self, alwaysOn=False, enableTrails=True):
        if self.typeID is None:
            return
        if self.raceID is None:
            self.LogError(
                'SpaceObject type %s has invaldi raceID (not set!) ' %
                self.typeID)
            self.raceID = gfxRaceGeneric
        boosterResPath = BOOSTER_GFX_SND_RESPATHS[self.raceID][0]
        boosterSoundName = BOOSTER_GFX_SND_RESPATHS[self.raceID][1]
        boosterFxObj = trinity.Load(boosterResPath)
        if boosterFxObj is None:
            return
        if self.model is None:
            log.LogWarn(
                'No model to fit boosters to on spaceobject with id = ' +
                str(self.id))
            return
        if not hasattr(self.model, 'boosters'):
            log.LogWarn(
                'Model has no attribute boosters on spaceobject with id = ' +
                str(self.id))
            return
        self.model.boosters = boosterFxObj
        self.model.boosters.maxVel = self.maxVelocity
        self.model.RebuildBoosterSet()
        self.model.boosters.alwaysOn = alwaysOn
        if not enableTrails:
            self.model.boosters.trails = None
        boosterAudioLocators = filter(
            lambda node: node.name.startswith('locator_audio_booster'),
            self.model.locators)
        tmpEntity = None
        tmpParameter = None
        for audLocator in boosterAudioLocators:
            tlpo = trinity.TriObserverLocal()
            transform = audLocator.transform
            tlpo.front = (-transform[2][0], -transform[2][1], -transform[2][2])
            tlpo.position = (transform[3][0], transform[3][1], transform[3][2])
            if tmpEntity is None:
                tmpEntity = audio2.AudEmitter('ship_' + str(self.id) +
                                              '_booster')
                tmpParameter = audio2.AudParameter()
                tmpParameter.name = u'ship_speed'
                tmpEntity.parameters.append(tmpParameter)
                self.shipSpeedParameter = tmpParameter
            tlpo.observer = tmpEntity
            self.audioEntities.append(tmpEntity)
            self.model.observers.append(tlpo)

        boosterSize = 'f'
        if self.radius > 99:
            boosterSize = 'c'
            if self.radius > 309:
                boosterSize = 'bs'
                if self.radius > 1500:
                    boosterSize = 'dr'
                    if self.radius > 5000:
                        boosterSize = 't'
        self.boosterAudioEvent = '_'.join(
            [boosterSoundName, boosterSize, 'play'])
        if tmpEntity is not None:
            self.model.audioSpeedParameter = self.shipSpeedParameter
            baseVelocity = 1
            if util.IsNPC(self.id):
                baseVelocity = sm.StartService('godma').GetTypeAttribte(
                    self.typeID, const.attributeEntityCruiseSpeed)
            else:
                baseVelocity = sm.StartService('godma').GetTypeAttribute(
                    self.typeID, const.attributeMaxVelocity)
            if baseVelocity is None:
                baseVelocity = 1.0
            self.model.maxSpeed = baseVelocity
            tmpEntity.SendEvent(unicode(self.boosterAudioEvent))