Example #1
0
    /// <summary>
    /// Checks if a TriggerCall for a given Theme has already been stored in the map for this tick, and updates the map accordingly.
    /// </summary>
    /// <param name="triggerCall"></param>
    private void ProcessTriggerCall(TriggerMusicThemeCall triggerCall)
    {
        bool storeNewTriggerCall = false;

        if (mapThemeIdsToTriggerCalls.ContainsKey(triggerCall.themeId))
        {
            TriggerMusicThemeCall storedTriggerCall = mapThemeIdsToTriggerCalls[triggerCall.themeId];
            if (triggerCall.senderBehaviour.addUpIntensities)
            {
                triggerCall.intensity += storedTriggerCall.intensity;

                if (triggerCall.intensity > triggerCall.senderBehaviour.limitIntensitySum)
                {
                    triggerCall.intensity = triggerCall.senderBehaviour.limitIntensitySum;
                }
                storeNewTriggerCall = true;
            }
            else
            {
                if (storedTriggerCall.intensity < triggerCall.intensity)
                {
                    storeNewTriggerCall = true;
                }
            }
        }
        else
        {
            storeNewTriggerCall = true;
        }

        if (storeNewTriggerCall)
        {
            mapThemeIdsToTriggerCalls[triggerCall.themeId] = triggerCall;
        }
    }
    /// <summary>
    /// Checks if a TriggerCall for a given Theme has already been stored in the map for this tick, and updates the map accordingly.
    /// </summary>
    /// <param name="triggerCall"></param>
    private void ProcessTriggerCall(TriggerMusicThemeCall triggerCall)
    {
        bool storeNewTriggerCall = false;
        if (mapThemeIdsToTriggerCalls.ContainsKey(triggerCall.themeId))
        {
            TriggerMusicThemeCall storedTriggerCall = mapThemeIdsToTriggerCalls[triggerCall.themeId];
            if (triggerCall.senderBehaviour.addUpIntensities)
            {
                triggerCall.intensity += storedTriggerCall.intensity;

                if (triggerCall.intensity > triggerCall.senderBehaviour.limitIntensitySum)
                {
                    triggerCall.intensity = triggerCall.senderBehaviour.limitIntensitySum;
                }
                storeNewTriggerCall = true;
            }
            else
            {
                if (storedTriggerCall.intensity < triggerCall.intensity)
                {
                    storeNewTriggerCall = true;
                }
            }
        }
        else
        {
            storeNewTriggerCall = true;
        }

        if (storeNewTriggerCall)
        {
            mapThemeIdsToTriggerCalls[triggerCall.themeId] = triggerCall;
        }
    }
    void ProcessAllIncomingTriggerCallsForThisTick()
    {
        mapThemeIdsToTriggerCalls.Clear();
        foreach (PsaiSynchronizedTrigger triggerBehaviour in continuousTriggersInScene)
        {
            if (triggerBehaviour.EvaluateAllTriggerConditions() == true)
            {
                float calculatedIntensity = triggerBehaviour.CalculateTriggerIntensity();
                if (triggerBehaviour.TriggerType == PsaiTriggerBase.PsaiTriggerType.triggerMusicTheme)
                {
                    TriggerMusicThemeCall triggerCall = new TriggerMusicThemeCall(triggerBehaviour, triggerBehaviour.themeId, calculatedIntensity, triggerBehaviour.musicDurationInSeconds);
                    ProcessTriggerCall(triggerCall);
                }
                else
                {
                    CopyControlTriggerValuesToPlaybackCallFiringInThisTick(triggerBehaviour);
                }
            }
        }

        // Now we check for synchronized One-Shot Triggers
        foreach (TriggerMusicThemeCall triggerCall in _synchronizedOneShotTriggerCallsForNextTick)
        {
            if (triggerCall.intensity > 0)
            {
                ProcessTriggerCall(triggerCall);
            }
        }
        _synchronizedOneShotTriggerCallsForNextTick.Clear();

        // Execute explicit calls to GoToRest, StopMusic,...
        if (playbackControlCallFiringInThisTick.playbackControlType != PlaybackControlType.None)
        {
            bool executeControlCall = true;

            if (mapThemeIdsToTriggerCalls.Keys.Count > 0 && playbackControlCallFiringInThisTick.dontExecuteIfOtherTriggersAreFiring == true)
            {
                foreach(int themeId in mapThemeIdsToTriggerCalls.Keys)
                {
                    ThemeInfo themeInfo = PsaiCore.Instance.GetThemeInfo(themeId);
                    if (themeInfo.type == playbackControlCallFiringInThisTick.restrictBlockToThisThemeType)
                    {
                        #if !(PSAI_NOLOG)
                        if (this.logTriggerScripts)
                        {
                            Debug.LogWarning(string.Format("psai [{0}]: skipping {1} as there are other Triggers firing: {2}", (int)(Time.timeSinceLevelLoad * 1000), playbackControlCallFiringInThisTick.playbackControlType, themeInfo.type));
                        }
                        #endif

                        executeControlCall = false;
                        break;
                    }
                }
            }

            if (executeControlCall)
            {
                switch (playbackControlCallFiringInThisTick.playbackControlType)
                {
                    case PlaybackControlType.ReturnToBasicMood:
                        {
                            PsaiCore.Instance.ReturnToLastBasicMood(playbackControlCallFiringInThisTick.immediately);
                        }
                        break;

                    case PlaybackControlType.GoToRest:
                        {
                            if (playbackControlCallFiringInThisTick.overrideDefaultRestTime)
                            {
                                PsaiCore.Instance.GoToRest(playbackControlCallFiringInThisTick.immediately,
                                                            playbackControlCallFiringInThisTick.fadeOutSeconds,
                                                            playbackControlCallFiringInThisTick.overrideRestSecondsMin * 1000,
                                                            playbackControlCallFiringInThisTick.overrideRestSecondsMax * 1000);
                            }
                            else
                            {
                                PsaiCore.Instance.GoToRest(playbackControlCallFiringInThisTick.immediately, playbackControlCallFiringInThisTick.fadeOutSeconds);
                            }
                        }
                        break;

                    case PlaybackControlType.StopMusic:
                        {
                            PsaiCore.Instance.StopMusic(playbackControlCallFiringInThisTick.immediately, playbackControlCallFiringInThisTick.fadeOutSeconds);
                        }
                        break;

                }
                playbackControlCallFiringInThisTick.sendingBehaviour.hasFired = true;
            }
            playbackControlCallFiringInThisTick.Init();
        }

        foreach (TriggerMusicThemeCall triggerCall in mapThemeIdsToTriggerCalls.Values)
        {
            // adding up triggers may exceed the limit
            float triggerIntensity = Mathf.Min(1.0f, triggerCall.intensity);

            if (logTriggerScripts)
            {
                Debug.Log(string.Format("psai [{0}]: PsaiCoreManager executing TriggerCall {1}", (int)(Time.timeSinceLevelLoad * 1000), triggerCall.ToString()));
            }

            if (triggerCall.forceImmediateStopBeforeTriggering)
            {
                PsaiCore.Instance.StopMusic(true);
            }
            if (triggerCall.senderBehaviour.overrideMusicDurationInSeconds && triggerCall.musicDurationInSeconds > 0)
            {
                PsaiCore.Instance.TriggerMusicTheme(triggerCall.themeId, triggerIntensity, triggerCall.musicDurationInSeconds);
                triggerCall.senderBehaviour.hasFired = true;
            }
            else
            {
                PsaiCore.Instance.TriggerMusicTheme(triggerCall.themeId, triggerIntensity);
                triggerCall.senderBehaviour.hasFired = true;
            }
        }
    }
 public void RegisterOneShotTriggerCall(TriggerMusicThemeCall triggerCall)
 {
     _synchronizedOneShotTriggerCallsForNextTick.Add(triggerCall);
 }
Example #5
0
    void ProcessAllIncomingTriggerCallsForThisTick()
    {
        mapThemeIdsToTriggerCalls.Clear();
        foreach (PsaiSynchronizedTrigger triggerBehaviour in continuousTriggersInScene)
        {
            if (triggerBehaviour.EvaluateAllTriggerConditions() == true)
            {
                float calculatedIntensity = triggerBehaviour.CalculateTriggerIntensity();
                if (triggerBehaviour.TriggerType == PsaiTriggerBase.PsaiTriggerType.triggerMusicTheme)
                {
                    TriggerMusicThemeCall triggerCall = new TriggerMusicThemeCall(triggerBehaviour, triggerBehaviour.themeId, calculatedIntensity, triggerBehaviour.musicDurationInSeconds);
                    ProcessTriggerCall(triggerCall);
                }
                else
                {
                    CopyControlTriggerValuesToPlaybackCallFiringInThisTick(triggerBehaviour);
                }
            }
        }

        // Now we check for synchronized One-Shot Triggers
        foreach (TriggerMusicThemeCall triggerCall in _synchronizedOneShotTriggerCallsForNextTick)
        {
            if (triggerCall.intensity > 0)
            {
                ProcessTriggerCall(triggerCall);
            }
        }
        _synchronizedOneShotTriggerCallsForNextTick.Clear();



        // Execute explicit calls to GoToRest, StopMusic,...
        if (playbackControlCallFiringInThisTick.playbackControlType != PlaybackControlType.None)
        {
            bool executeControlCall = true;

            if (mapThemeIdsToTriggerCalls.Keys.Count > 0 && playbackControlCallFiringInThisTick.dontExecuteIfOtherTriggersAreFiring == true)
            {
                foreach (int themeId in mapThemeIdsToTriggerCalls.Keys)
                {
                    ThemeInfo themeInfo = PsaiCore.Instance.GetThemeInfo(themeId);
                    if (themeInfo.type == playbackControlCallFiringInThisTick.restrictBlockToThisThemeType)
                    {
                        #if !(PSAI_NOLOG)
                        if (this.logTriggerScripts)
                        {
                            Debug.LogWarning(string.Format("psai [{0}]: skipping {1} as there are other Triggers firing: {2}", (int)(Time.timeSinceLevelLoad * 1000), playbackControlCallFiringInThisTick.playbackControlType, themeInfo.type));
                        }
                        #endif

                        executeControlCall = false;
                        break;
                    }
                }
            }

            if (executeControlCall)
            {
                switch (playbackControlCallFiringInThisTick.playbackControlType)
                {
                case PlaybackControlType.ReturnToBasicMood:
                {
                    PsaiCore.Instance.ReturnToLastBasicMood(playbackControlCallFiringInThisTick.immediately);
                }
                break;

                case PlaybackControlType.GoToRest:
                {
                    if (playbackControlCallFiringInThisTick.overrideDefaultRestTime)
                    {
                        PsaiCore.Instance.GoToRest(playbackControlCallFiringInThisTick.immediately,
                                                   playbackControlCallFiringInThisTick.fadeOutSeconds,
                                                   playbackControlCallFiringInThisTick.overrideRestSecondsMin * 1000,
                                                   playbackControlCallFiringInThisTick.overrideRestSecondsMax * 1000);
                    }
                    else
                    {
                        PsaiCore.Instance.GoToRest(playbackControlCallFiringInThisTick.immediately, playbackControlCallFiringInThisTick.fadeOutSeconds);
                    }
                }
                break;


                case PlaybackControlType.StopMusic:
                {
                    PsaiCore.Instance.StopMusic(playbackControlCallFiringInThisTick.immediately, playbackControlCallFiringInThisTick.fadeOutSeconds);
                }
                break;
                }
                playbackControlCallFiringInThisTick.sendingBehaviour.hasFired = true;
            }
            playbackControlCallFiringInThisTick.Init();
        }

        foreach (TriggerMusicThemeCall triggerCall in mapThemeIdsToTriggerCalls.Values)
        {
            // adding up triggers may exceed the limit
            float triggerIntensity = Mathf.Min(1.0f, triggerCall.intensity);

            if (logTriggerScripts)
            {
                Debug.Log(string.Format("psai [{0}]: PsaiCoreManager executing TriggerCall {1}", (int)(Time.timeSinceLevelLoad * 1000), triggerCall.ToString()));
            }

            if (triggerCall.forceImmediateStopBeforeTriggering)
            {
                PsaiCore.Instance.StopMusic(true);
            }
            if (triggerCall.senderBehaviour.overrideMusicDurationInSeconds && triggerCall.musicDurationInSeconds > 0)
            {
                PsaiCore.Instance.TriggerMusicTheme(triggerCall.themeId, triggerIntensity, triggerCall.musicDurationInSeconds);
                triggerCall.senderBehaviour.hasFired = true;
            }
            else
            {
                PsaiCore.Instance.TriggerMusicTheme(triggerCall.themeId, triggerIntensity);
                triggerCall.senderBehaviour.hasFired = true;
            }
        }
    }
Example #6
0
 public void RegisterOneShotTriggerCall(TriggerMusicThemeCall triggerCall)
 {
     _synchronizedOneShotTriggerCallsForNextTick.Add(triggerCall);
 }