private void ShowLocateButton(int languageIndex, bool forLipSync = false)
        {
            if (GUILayout.Button("Ping file"))
            {
                string language = (languageIndex == 0) ? string.Empty : AdvGame.GetReferences().speechManager.languages[languageIndex];
                string fullName = string.Empty;

                Object foundClp = null;

                if (KickStarter.settingsManager != null && SeparatePlayerAudio())
                {
                    foreach (PlayerPrefab player in KickStarter.settingsManager.players)
                    {
                        if (player != null && player.playerOb != null)
                        {
                            fullName = GetAutoAssetPathAndName(language, forLipSync, player.playerOb.name);

                            if (forLipSync)
                            {
                                if (KickStarter.speechManager.lipSyncMode == LipSyncMode.RogoLipSync)
                                {
                                    Object lipSyncFile = RogoLipSyncIntegration.GetObjectToPing(fullName);
                                    if (lipSyncFile != null)
                                    {
                                        foundClp = lipSyncFile;
                                    }
                                }
                                else
                                {
                                    TextAsset textFile = Resources.Load(fullName) as TextAsset;
                                    if (textFile != null)
                                    {
                                        foundClp = textFile;
                                    }
                                }
                            }
                            else
                            {
                                AudioClip clipObj = Resources.Load(fullName) as AudioClip;
                                if (clipObj != null)
                                {
                                    foundClp = clipObj;
                                    break;
                                }
                            }
                        }
                    }
                }
                else
                {
                    fullName = GetAutoAssetPathAndName(language, forLipSync);

                    if (forLipSync)
                    {
                        if (KickStarter.speechManager.lipSyncMode == LipSyncMode.RogoLipSync)
                        {
                            foundClp = RogoLipSyncIntegration.GetObjectToPing(fullName);
                        }
                        else
                        {
                            TextAsset textFile = Resources.Load(fullName) as TextAsset;
                            foundClp = textFile;
                        }
                    }
                    else
                    {
                        AudioClip clipObj = Resources.Load(fullName) as AudioClip;
                        foundClp = clipObj;
                    }
                }

                if (foundClp != null)
                {
                    EditorGUIUtility.PingObject(foundClp);
                }
                else
                {
                    ACDebug.Log(((forLipSync) ? "Text" : "Audio") + " file '/Resources/" + fullName + "' was found.");
                }
            }
        }
Esempio n. 2
0
        /**
         * <summary>The default Constructor.</summary>
         * <param name = "_speaker">The speaking character. If null, the line is considered a narration</param>
         * <param name = "_message">The subtitle text to display</param>
         * <param name = "lineID">The unique ID number of the line, as generated by the Speech Manager</param>
         * <param name = "_language">The currently-selected language</param>
         * <param name = "_isBackground">True if the line should play in the background, and not interrupt Actions or gameplay</param>
         * <param name = "_noAnimation">True if the speaking character should not play a talking animation</param>
         * <param name = "_runActionListInBackground">True if the ActionList that contains the call is set to Run In Background</param>
         */
        public Speech(Char _speaker, string _message, int lineID, string _language, bool _isBackground, bool _noAnimation, bool _runActionListInBackground = false)
        {
            // Clear rich text
            boldTagIndex = italicTagIndex = sizeTagIndex = colorTagIndex = -1;
            closingTags  = "";

            log.Clear();
            isBackground = _isBackground;
            runActionListInBackground = _runActionListInBackground;

            if (_speaker)
            {
                speaker           = _speaker;
                speaker.isTalking = !_noAnimation;
                log.speakerName   = _speaker.name;

                if (_speaker.GetComponent <Player>())
                {
                    if (KickStarter.settingsManager.playerSwitching == PlayerSwitching.Allow || !KickStarter.speechManager.usePlayerRealName)
                    {
                        log.speakerName = "Player";
                    }
                }

                if (_speaker.GetComponent <Hotspot>())
                {
                    if (_speaker.GetComponent <Hotspot>().hotspotName != "")
                    {
                        log.speakerName = _speaker.GetComponent <Hotspot>().hotspotName;
                    }
                }

                _speaker.ClearExpression();

                if (!_noAnimation)
                {
                    if (KickStarter.speechManager.lipSyncMode == LipSyncMode.Off)
                    {
                        speaker.isLipSyncing = false;
                    }
                    else if (KickStarter.speechManager.lipSyncMode == LipSyncMode.Salsa2D || KickStarter.speechManager.lipSyncMode == LipSyncMode.FromSpeechText || KickStarter.speechManager.lipSyncMode == LipSyncMode.ReadPamelaFile || KickStarter.speechManager.lipSyncMode == LipSyncMode.ReadSapiFile || KickStarter.speechManager.lipSyncMode == LipSyncMode.ReadPapagayoFile)
                    {
                        speaker.StartLipSync(KickStarter.dialog.GenerateLipSyncShapes(KickStarter.speechManager.lipSyncMode, lineID, speaker.name, _language, _message));
                    }
                    else if (KickStarter.speechManager.lipSyncMode == LipSyncMode.RogoLipSync)
                    {
                        RogoLipSyncIntegration.Play(_speaker, speaker.name, lineID, _language);
                    }
                }
            }
            else
            {
                if (speaker)
                {
                    speaker.isTalking = false;
                }
                speaker         = null;
                log.speakerName = "Narrator";
            }

            _message = DetermineGaps(_message);
            if (speechGaps.Count > 0)
            {
                gapIndex = 0;

                /*foreach (SpeechGap gap in speechGaps)
                 * {
                 *      if (gap.expressionID < 0)
                 *      {
                 *              displayDuration += (float) gap.waitTime;
                 *      }
                 * }*/
            }
            else
            {
                gapIndex = -1;
            }

            if (lineID > -1)
            {
                log.lineID = lineID;
            }

            // Play sound and time displayDuration to it
            if (lineID > -1 && log.speakerName != "" && KickStarter.speechManager.searchAudioFiles)
            {
                AudioClip clipObj = null;

                if (KickStarter.speechManager.autoNameSpeechFiles)
                {
                    string fullFilename = "Speech/";
                    string filename     = KickStarter.speechManager.GetLineFilename(lineID);
                    if (_language != "" && KickStarter.speechManager.translateAudio)
                    {
                        // Not in original language
                        fullFilename += _language + "/";
                    }
                    if (KickStarter.speechManager.placeAudioInSubfolders)
                    {
                        fullFilename += filename + "/";
                    }
                    fullFilename += filename + lineID;

                    clipObj = Resources.Load(fullFilename) as AudioClip;

                    if (clipObj == null && KickStarter.speechManager.fallbackAudio && Options.GetLanguage() > 0)
                    {
                        fullFilename = "Speech/";
                        if (KickStarter.speechManager.placeAudioInSubfolders)
                        {
                            fullFilename += filename + "/";
                        }
                        fullFilename += filename + lineID;
                        clipObj       = Resources.Load(fullFilename) as AudioClip;
                    }

                    if (clipObj == null)
                    {
                        ACDebug.Log("Cannot find audio file: " + fullFilename);
                    }
                }
                else
                {
                    clipObj = KickStarter.speechManager.GetLineCustomAudioClip(lineID, Options.GetLanguage());

                    if (clipObj == null && KickStarter.speechManager.fallbackAudio && Options.GetLanguage() > 0)
                    {
                        clipObj = KickStarter.speechManager.GetLineCustomAudioClip(lineID, 0);
                    }
                }

                if (clipObj)
                {
                    AudioSource audioSource = null;

                    if (_speaker != null)
                    {
                        if (!_noAnimation)
                        {
                            if (KickStarter.speechManager.lipSyncMode == LipSyncMode.FaceFX)
                            {
                                FaceFXIntegration.Play(speaker, log.speakerName + lineID, clipObj);
                            }
                        }

                        if (_speaker.speechAudioSource)
                        {
                            audioSource = _speaker.speechAudioSource;

                            if (_speaker.speechAudioSource.GetComponent <Sound>())
                            {
                                _speaker.speechAudioSource.GetComponent <Sound>().SetVolume(Options.optionsData.speechVolume);
                            }
                            else
                            {
                                _speaker.speechAudioSource.volume = Options.optionsData.speechVolume;
                            }
                        }
                        else
                        {
                            ACDebug.LogWarning(_speaker.name + " has no audio source component!");
                        }
                    }
                    else if (KickStarter.player && KickStarter.player.speechAudioSource)
                    {
                        KickStarter.player.speechAudioSource.volume = Options.optionsData.speechVolume;
                        audioSource = KickStarter.player.speechAudioSource;
                    }
                    else
                    {
                        audioSource = KickStarter.dialog.GetDefaultAudioSource();
                    }

                    if (audioSource != null)
                    {
                        audioSource.clip = clipObj;
                        audioSource.loop = false;
                        audioSource.Play();
                        hasAudio = true;
                    }

                    displayDuration = clipObj.length;
                }
                else
                {
                    displayDuration += KickStarter.speechManager.screenTimeFactor * GetLengthWithoutRichText(_message);
                    displayDuration  = Mathf.Max(displayDuration, KickStarter.speechManager.minimumDisplayTime);
                }
            }
            else
            {
                displayDuration += KickStarter.speechManager.screenTimeFactor * GetLengthWithoutRichText(_message);
                displayDuration  = Mathf.Max(displayDuration, KickStarter.speechManager.minimumDisplayTime);
            }

            log.fullText = _message;
            KickStarter.eventManager.Call_OnStartSpeech(_speaker, log.fullText, lineID);

            if (!CanScroll())
            {
                if (continueIndex > 0)
                {
                    continueTime = (continueIndex / KickStarter.speechManager.textScrollSpeed);
                }

                if (speechGaps.Count > 0)
                {
                    displayText = log.fullText.Substring(0, speechGaps[0].characterIndex);
                }
                else
                {
                    displayText = log.fullText;
                }
            }
            else
            {
                displayText = "";
                KickStarter.eventManager.Call_OnStartSpeechScroll(_speaker, log.fullText, lineID);
            }

            isAlive     = true;
            isSkippable = true;
            pauseGap    = false;
            endTime     = displayDuration;
            minSkipTime = KickStarter.speechManager.skipThresholdTime;
        }