public virtual void OnApplyPersistentData()
        {
            if (!enabled)
            {
                return;
            }
            var conversationID = DialogueLua.GetVariable("CurrentConversationID").AsInt;
            var entryID        = DialogueLua.GetVariable("CurrentEntryID").AsInt;

            if (conversationID >= 0 && entryID > 0)
            {
                var conversation   = DialogueManager.MasterDatabase.GetConversation(conversationID);
                var actorName      = DialogueLua.GetVariable("CurrentConversationActor").AsString;
                var conversantName = DialogueLua.GetVariable("CurrentConversationConversant").AsString;
                if (DialogueDebug.logInfo)
                {
                    Debug.Log("Dialogue System: ConversationStateSaver is resuming conversation " + conversation.Title + " with actor=" + actorName + " and conversant=" + conversantName + " at entry " + entryID + ".", this);
                }
                var actor               = GameObject.Find(actorName);
                var conversant          = GameObject.Find(conversantName);
                var actorTransform      = (actor != null) ? actor.transform : null;
                var conversantTransform = (conversant != null) ? conversant.transform : null;
                DialogueManager.StopConversation();
                DialogueManager.StartConversation(conversation.Title, actorTransform, conversantTransform, entryID);
            }
        }
        protected System.Collections.IEnumerator StartSavedConversation(Data data)
        {
            var dialogueUI = DialogueManager.dialogueUI as StandardDialogueUI;

            DialogueManager.StopConversation();
            if (dialogueUI != null)
            {
                float safeguardTimeout = Time.realtimeSinceStartup + 5f;
                while (dialogueUI.isOpen && Time.realtimeSinceStartup < safeguardTimeout)
                {
                    yield return(null);
                }
            }
            var conversationID = data.conversationID;
            var entryID        = data.entryID;
            var conversation   = DialogueManager.masterDatabase.GetConversation(conversationID);
            var actorName      = DialogueLua.GetVariable("CurrentConversationActor").AsString;
            var conversantName = DialogueLua.GetVariable("CurrentConversationConversant").AsString;

            if (DialogueDebug.logInfo)
            {
                Debug.Log("Dialogue System: ConversationStateSaver is resuming conversation " + conversation.Title + " with actor=" + actorName + " and conversant=" + conversantName + " at entry " + entryID + ".", this);
            }
            var actor               = string.IsNullOrEmpty(actorName) ? null : GameObject.Find(actorName);
            var conversant          = string.IsNullOrEmpty(conversantName) ? null : GameObject.Find(conversantName);
            var actorTransform      = (actor != null) ? actor.transform : null;
            var conversantTransform = (conversant != null) ? conversant.transform : null;
            var ui = DialogueManager.dialogueUI as StandardDialogueUI;

            if (ui != null)
            {
                ui.conversationUIElements.standardSubtitleControls.QueueSavedActorPanelCache(data.actorGOs, data.actorGOPanels, data.actorIDs, data.actorIDPanels);
            }
            DialogueManager.StartConversation(conversation.Title, actorTransform, conversantTransform, entryID);
        }
        public override void ApplyData(string s)
        {
            if (!enabled || string.IsNullOrEmpty(s))
            {
                return;
            }
            var data = SaveSystem.Deserialize <Data>(s);

            if (data == null)
            {
                return;
            }
            DialogueManager.StopConversation();
            var conversationID = data.conversationID;
            var entryID        = data.entryID;
            var conversation   = DialogueManager.masterDatabase.GetConversation(conversationID);
            var actorName      = DialogueLua.GetVariable("CurrentConversationActor").AsString;
            var conversantName = DialogueLua.GetVariable("CurrentConversationConversant").AsString;

            if (DialogueDebug.logInfo)
            {
                Debug.Log("Dialogue System: ConversationStateSaver is resuming conversation " + conversation.Title + " with actor=" + actorName + " and conversant=" + conversantName + " at entry " + entryID + ".", this);
            }
            var actor               = string.IsNullOrEmpty(actorName) ? null : GameObject.Find(actorName);
            var conversant          = string.IsNullOrEmpty(conversantName) ? null : GameObject.Find(conversantName);
            var actorTransform      = (actor != null) ? actor.transform : null;
            var conversantTransform = (conversant != null) ? conversant.transform : null;
            var ui = DialogueManager.dialogueUI as StandardDialogueUI;

            if (ui != null)
            {
                ui.conversationUIElements.standardSubtitleControls.QueueSavedActorPanelCache(data.actorGOs, data.actorGOPanels, data.actorIDs, data.actorIDPanels);
            }
            DialogueManager.StartConversation(conversation.Title, actorTransform, conversantTransform, entryID);
        }
Esempio n. 4
0
 private void CheckOnTriggerExit(Transform otherTransform)
 {
     if (enabled &&
         stopConversationOnTriggerExit &&
         DialogueManager.IsConversationActive &&
         (Time.time > earliestTimeToAllowTriggerExit) &&
         ((DialogueManager.CurrentActor == otherTransform) || (DialogueManager.CurrentConversant == otherTransform)))
     {
         if (DialogueDebug.LogInfo)
         {
             Debug.Log(string.Format("{0}: Stopping conversation because {1} exited trigger area.", new System.Object[] { DialogueDebug.Prefix, otherTransform.name }));
         }
         DialogueManager.StopConversation();
     }
 }
Esempio n. 5
0
        private IEnumerator MonitorDistance(Transform actor)
        {
            if (actor != null)
            {
                Transform myTransform = transform;
                while (true)
                {
                    yield return(StartCoroutine(DialogueTime.WaitForSeconds(monitorFrequency))); // new WaitForSeconds(monitorFrequency);

                    if (Vector3.Distance(myTransform.position, actor.position) > maxDistance)
                    {
                        if (DialogueDebug.logInfo)
                        {
                            Debug.Log(string.Format("{0}: Stopping conversation. Exceeded max distance {1} between {2} and {3}", new System.Object[] { DialogueDebug.Prefix, maxDistance, name, actor.name }));
                        }
                        DialogueManager.StopConversation();
                        yield break;
                    }
                }
            }
        }
Esempio n. 6
0
 protected void CheckOnTriggerExit(Transform otherTransform)
 {
     if (!enabled)
     {
         return;
     }
     if (stopConversationOnTriggerExit &&
         DialogueManager.isConversationActive &&
         (Time.time > earliestTimeToAllowTriggerExit) &&
         ((DialogueManager.currentActor == otherTransform) || (DialogueManager.currentConversant == otherTransform)))
     {
         if (DialogueDebug.logInfo)
         {
             Debug.Log("Dialogue System: Stopping conversation because " + otherTransform + " exited trigger area.", this);
         }
         DialogueManager.StopConversation();
     }
     else if (trigger == DialogueSystemTriggerEvent.OnTriggerExit)
     {
         TryStart(otherTransform.transform);
     }
 }
 private void CheckOnTriggerExit(Transform otherTransform)
 {
     if (!enabled)
     {
         return;
     }
     if (stopConversationOnTriggerExit &&
         DialogueManager.isConversationActive &&
         (Time.time > earliestTimeToAllowTriggerExit) &&
         ((DialogueManager.currentActor == otherTransform) || (DialogueManager.currentConversant == otherTransform)))
     {
         if (DialogueDebug.logInfo)
         {
             Debug.Log(string.Format("{0}: Stopping conversation because {1} exited trigger area.", new System.Object[] { DialogueDebug.Prefix, otherTransform.name }));
         }
         DialogueManager.StopConversation();
     }
     else if (trigger == DialogueTriggerEvent.OnTriggerExit)
     {
         TryStartConversationOnTriggerEnter(otherTransform);
     }
 }
        /// <summary>
        /// When loading a game, load the dialogue entry records and resume the conversation.
        /// </summary>
        public virtual void OnApplyPersistentData()
        {
            if (DontLoadInThisScene())
            {
                Debug.Log("OnApplyPersistentData Dont Load in this scene: " + SceneManager.GetActiveScene().buildIndex);
            }
            if (DontLoadInThisScene())
            {
                return;
            }
            records.Clear();
            if (!DialogueLua.DoesVariableExist(currentDialogueEntryRecords))
            {
                return;
            }
            StopAllCoroutines();

            // Load dialogue entry records:
            var s = DialogueLua.GetVariable(currentDialogueEntryRecords).AsString;

            if (Debug.isDebugBuild)
            {
                Debug.Log("TextlineDialogueUI.OnApplyPersistentData: Restoring current conversation from " + currentDialogueEntryRecords + ": " + s);
            }
            var ints       = s.Split(';');
            var numRecords = Tools.StringToInt(ints[0]);

            for (int i = 0; i < numRecords; i++)
            {
                var conversationID = Tools.StringToInt(ints[1 + i * 2]);
                var entryID        = Tools.StringToInt(ints[2 + i * 2]);
                records.Add(new DialogueEntryRecord(conversationID, entryID));
            }

            // If we have records, resume the conversation:
            if (records.Count == 0)
            {
                return;
            }
            var lastRecord = records[records.Count - 1];

            if (lastRecord.conversationID >= 0 && lastRecord.entryID > 0)
            {
                UnityEngine.UI.Button lastContinueButton = null;
                try
                {
                    // Resume conversation:
                    //if (dontRepeatLastSequence) isLoadingGame = true;
                    isLoadingGame = true;
                    var conversation        = DialogueManager.MasterDatabase.GetConversation(lastRecord.conversationID);
                    var actorName           = DialogueLua.GetVariable(currentConversationActor).AsString;
                    var conversantName      = DialogueLua.GetVariable(currentConversationConversant).AsString;
                    var actor               = GameObject.Find(actorName);
                    var conversant          = GameObject.Find(conversantName);
                    var actorTransform      = (actor != null) ? actor.transform : null;
                    var conversantTransform = (conversant != null) ? conversant.transform : null;
                    if (Debug.isDebugBuild)
                    {
                        Debug.Log("Resuming '" + conversation.Title + "' at entry " + lastRecord.entryID);
                    }
                    DialogueManager.StopConversation();
                    var lastEntry        = DialogueManager.MasterDatabase.GetDialogueEntry(lastRecord.conversationID, lastRecord.entryID);
                    var originalSequence = lastEntry.Sequence; // Handle last entry's sequence differently if end entry.
                    npcPreDelaySettings.CopyTo(npcPreDelaySettingsCopy);
                    pcPreDelaySettings.CopyTo(pcPreDelaySettingsCopy);
                    npcPreDelaySettings.basedOnTextLength = false;
                    npcPreDelaySettings.additionalSeconds = 0;
                    pcPreDelaySettings.basedOnTextLength  = false;
                    pcPreDelaySettings.additionalSeconds  = 0;
                    var isEndEntry = lastEntry.Sequence.Contains("WaitForMessage(Forever)") || lastEntry.outgoingLinks.Count == 0;
                    if (isEndEntry)
                    {
                        if (!lastEntry.Sequence.Contains("WaitForMessage(Forever)"))
                        {
                            lastEntry.Sequence = "WaitForMessage(Forever); " + lastEntry.Sequence;
                        }
                    }
                    else if (dontRepeatLastSequence)
                    {
                        lastEntry.Sequence = "None()";
                    }
                    else
                    {
                        lastEntry.Sequence = "Delay(0.1)";
                    }
                    skipNextRecord = true;
                    isInPreDelay   = false;
                    DialogueManager.StartConversation(conversation.Title, actorTransform, conversantTransform, lastRecord.entryID);
                    lastContinueButton = continueButton;
                    lastEntry.Sequence = originalSequence;
                    npcPreDelaySettingsCopy.CopyTo(npcPreDelaySettings);
                    pcPreDelaySettingsCopy.CopyTo(pcPreDelaySettings);

                    // Populate UI with previous records:
                    var lastInstance = (instantiatedMessages.Count > 0) ? instantiatedMessages[instantiatedMessages.Count - 1] : null;
                    instantiatedMessages.Remove(lastInstance);
                    DestroyInstantiatedMessages();
                    for (int i = 0; i < records.Count - 1; i++)
                    {
                        var entry         = DialogueManager.MasterDatabase.GetDialogueEntry(records[i].conversationID, records[i].entryID);
                        var speakerInfo   = DialogueManager.ConversationModel.GetCharacterInfo(entry.ActorID);
                        var listenerInfo  = DialogueManager.ConversationModel.GetCharacterInfo(entry.ConversantID);
                        var formattedText = FormattedText.Parse(entry.currentDialogueText, DialogueManager.MasterDatabase.emphasisSettings);
                        var subtitle      = new Subtitle(speakerInfo, listenerInfo, null, formattedText, "None()", entry.ResponseMenuSequence, entry);
                        AddMessage(subtitle);
                    }
                    if (lastInstance != null)
                    {
                        instantiatedMessages.Add(lastInstance);
                        lastInstance.transform.SetAsLastSibling();
                    }
                }
                finally
                {
                    isLoadingGame = false;
                    scrollRect.verticalNormalizedPosition = 0;
                    continueButton = lastContinueButton;
                    if (shouldShowContinueButton && lastContinueButton != null)
                    {
                        lastContinueButton.gameObject.SetActive(true);
                    }
                }
            }
            ScrollToBottom();
        }