My solution was actually quite easy, and requires just a tidbit of code and a slight change to the way we set up or starting node…
First, head into PlayerConversant.cs and we’re going to borrow a little code from Next()
public void StartDialogue(AIConversant newConversant, Dialogue newDialogue)
{
currentConversant = newConversant;
currentDialogue = newDialogue;
currentNode = currentDialogue.GetRootNode();
TriggerEnterAction();
if (currentNode.IsPlayerSpeaking())
{
int numPlayerResponses = FilterOnCondition(currentDialogue.GetPlayerChildren(currentNode)).Count();
if (numPlayerResponses > 0)
{
isChoosing = true;
TriggerExitAction();
}
}
onConversationUpdated?.Invoke();
}
Now… go into your Dialogue… Set it up as normal, but don’t worry about the root node’s text. Get those player choices in there, and then you can change the root node’s dialogue to be Is Player Speaking.
So here’s how this works… when we enter a conversation, we check to see if that root node is a player node. If it is, then we check to see if there are valid player nodes as children (much like we do in Next). If there are, then set IsChoosing to true and the system will display the player choices (the three in the above illustration) and compltely ignore displaying the root node.
It’s important to have at least on valid player choice, or that root node will end up being displayed as the speaker.