Switch between conversations using UI buttons

Announcements, support questions, and discussion for the Dialogue System.
Post Reply
skuwid
Posts: 6
Joined: Thu Jun 22, 2023 4:40 pm

Switch between conversations using UI buttons

Post by skuwid »

I am designing a game using the SMS UI template and would like to support a list of buttons that allows the player to toggle between ongoing conversations with different NPCs. In other words, a list of portrait images that the player can click on to decide which conversation gets displayed on the main panel.

Currently, I have two buttons on screen that allow the player to trigger one of two different conversations from the same database using the 'OnUse()' function:
Image

However, once one conversation is started, and the button for the other conversation is pressed, I get the following error message: "Dialogue System: Another conversation is already active. Not starting 'Kennedy Test 2'".

It appears that this approach attempts to replace the ongoing conversation with another one, as opposed to switching out which one gets displayed in the message panel.

How can I revise this system so that the player can toggle freely between what conversation gets displayed on the message panel, without starting/stopping the progress in any conversation while switching between them?

Thanks :)
User avatar
Tony Li
Posts: 21681
Joined: Thu Jul 18, 2013 1:27 pm

Re: Switch between conversations using UI buttons

Post by Tony Li »

Hi,

Tick the SMS Dialogue UI's Use Conversation Variable checkbox.

Configure your NPC conversation buttons to run this method, passing it the conversation title:

Code: Select all

public void StartConversation(string conversationTitle)
{
    var smsDialogueUI = DialogueManager.standardDialogueUI as SMSDialogueUI;
    
    // In case a conversation is already active, save its history and stop it:
    smsDialogueUI.OnRecordPersistentData();
    DialogueManager.StopConversation();
    
    // Start the NPC conversation:
    DialogueLua.SetVariable("Conversation", conversationTitle);
    // Try to resume conversation from saved history:
    smsDialogueUI.OnApplyPersistentData();
    // If it's not active, start it fresh:
    if (!DialogueManager.isConversationActive) DialogueManager.StartConversation(conversationTitle);
}
}
skuwid
Posts: 6
Joined: Thu Jun 22, 2023 4:40 pm

Re: Switch between conversations using UI buttons

Post by skuwid »

Thank you, this method is working for me so far, but I've noticed that when the button of a conversant is pressed while its corresponding conversation is displayed on screen, it continues to call the function each time - one result of this is that when the button is repeatedly pressed for the conversant whose conversation is currently being displayed, the pause time between each new message repeatedly gets retriggered. So the longer the button is repeatedly pressed, the longer it will take for a new message to load.

This also results in the Player Character's responses reloading each time the button is pressed.

Is there a way to expand this function to prevent the player from attempting to display a conversation that is already displayed?

Thank you :D
User avatar
Tony Li
Posts: 21681
Joined: Thu Jul 18, 2013 1:27 pm

Re: Switch between conversations using UI buttons

Post by Tony Li »

Hi,

Yes, you could change the first bit of the method to something like:

Code: Select all

public void StartConversation(string conversationTitle)
{
    if (conversationTitle == DialogueManager.lastConversationStarted) return;
    //... (the rest here)...
skuwid
Posts: 6
Joined: Thu Jun 22, 2023 4:40 pm

Re: Switch between conversations using UI buttons

Post by skuwid »

This fix appears to have resolved the issue for me so far, thank you!
User avatar
Tony Li
Posts: 21681
Joined: Thu Jul 18, 2013 1:27 pm

Re: Switch between conversations using UI buttons

Post by Tony Li »

Glad to help!
skuwid
Posts: 6
Joined: Thu Jun 22, 2023 4:40 pm

Re: Switch between conversations using UI buttons

Post by skuwid »

Hello, I'm following up because since adding this script, I've added the Unity UI Typewriter Effect component to the NPC Subtitle Text object. One thing I've noticed since adding this component, is that now when I switch between which conversation gets displayed in the Messages Panel, as previous messages get displayed again, the typewriter effect plays on each message at once, meaning each message from the conversation you're returning to gets typed out in tandem, and the effect is a bit jarring.

Is there a way to keep the typewriter effect as new messages appear on screen, but disable it when toggling the display of earlier messages from another conversation when the button gets pressed?

Thank you for your help.
User avatar
Tony Li
Posts: 21681
Joined: Thu Jul 18, 2013 1:27 pm

Re: Switch between conversations using UI buttons

Post by Tony Li »

Hi,

When resuming a conversation, it shouldn't replay the typewriter effect on old lines. Make sure your typewriter effect's Play On Enable is UNticked.
Post Reply