About Dialogue Actor component
Re: About Dialogue Actor component
Hi,
If my understanding is right, "OverrideDisplaySettings" component it self is used during the conversation as the settings. If the Actor that has the component is in 2 conversations(Like a talking and a Phone Textline), We can't set their DisplaySetting respectively. The Conversant side could be in 2 conversations, too. How about adding a new DisplaySettings when start the conversation?
it will be better if the "OverrideDisplaySettings" is able to set which part to override, Like the "Override Display Settings" in conversation. This is mainly because I don't want to override the global timeout duration.
By the way, How to properly set a specified overrided timeout duration, If I want to write a custom Sequencer command?
And similar question about ConversationID, if 2 active conversations are come from the same conversation in the Database, the ConversationID will be same, right? If so, how to find the specified active conversation that I want to deal with?
About the second example in this post, the "Response Menu Panel" dosen't get active at NPC line 4. Although I opened a new project, and it works properly. When I open another scene(for example the SampleScene that new project has), then go back to "Another Telltale Style Example" scene, It broke again.
If my understanding is right, "OverrideDisplaySettings" component it self is used during the conversation as the settings. If the Actor that has the component is in 2 conversations(Like a talking and a Phone Textline), We can't set their DisplaySetting respectively. The Conversant side could be in 2 conversations, too. How about adding a new DisplaySettings when start the conversation?
it will be better if the "OverrideDisplaySettings" is able to set which part to override, Like the "Override Display Settings" in conversation. This is mainly because I don't want to override the global timeout duration.
By the way, How to properly set a specified overrided timeout duration, If I want to write a custom Sequencer command?
And similar question about ConversationID, if 2 active conversations are come from the same conversation in the Database, the ConversationID will be same, right? If so, how to find the specified active conversation that I want to deal with?
About the second example in this post, the "Response Menu Panel" dosen't get active at NPC line 4. Although I opened a new project, and it works properly. When I open another scene(for example the SampleScene that new project has), then go back to "Another Telltale Style Example" scene, It broke again.
Re: About Dialogue Actor component
Hi
In a future update, I can make the ConversationView.displaySettings property assignable so you can change it.
I'll look into that for a future update.
Set DialogueManager.displaySettings.inputSettings.responseTimeout or DialogueManager.conversationView.displaySettings.inputSettings.responseTimeout.
If they involve different actors, you can check the active conversation record's actor and conversant transforms, or the conversationModel's actorInfo and conversantInfo.
I just tested going back and forth between scenes, and it works. There's nothing in the example that should depend on scene changes. What do you mean by line 4? The conversation has many different branches:CHOPJZL wrote: ↑Mon Mar 15, 2021 5:02 amAbout the second example in this post, the "Response Menu Panel" dosen't get active at NPC line 4. Although I opened a new project, and it works properly. When I open another scene(for example the SampleScene that new project has), then go back to "Another Telltale Style Example" scene, It broke again.
Re: About Dialogue Actor component
But this is the global timeout,right? I mean a timeout that is overrided by "Override Display Settings" component or Conversation's Override Display Settings. I think the answer again lies in finding the target active conversation.Set DialogueManager.displaySettings.inputSettings.responseTimeout or DialogueManager.conversationView.displaySettings.inputSettings.responseTimeout.
I mean entry7, "This is NPC line 4". Perhaps the reason is my unity version? I am downloading the 2020.3.0LTS, I will try it later.What do you mean by line 4?
----------------------
I tried 2020.3.0LTS, Create a new project, Import DS, Import Another Telltale, Open it and works well, Open SampleScene, Open Another Telltale, Now entry7, "This is NPC line 4" doesn't show the Response Panel
Could you add a public field of the ActiveRecord to the Entry, it is set when start conversation. Then it is much easier to track in the event methods.If they involve different actors, you can check the active conversation record's actor and conversant transforms, or the conversationModel's actorInfo and conversantInfo.
But an entry couldn't have 2 ActiveRecords if the same conversation started twice, So it will be great to have a instance option for a conversation, Like the Quest machine. And by this way we can keep the original entry Fields and modify instance's entry Fields like a temp Variable during the conversation.
Re: About Dialogue Actor component
Let's put this off for now unless you need to get it working. I think it may distract us from what you actually want to do.
In that case, find the active conversation record. It has a conversationView property. Set its displaySettings.CHOPJZL wrote: ↑Mon Mar 15, 2021 10:53 amBut this is the global timeout,right? I mean a timeout that is overrided by "Override Display Settings" component or Conversation's Override Display Settings. I think the answer again lies in finding the target active conversation.Set DialogueManager.displaySettings.inputSettings.responseTimeout or DialogueManager.conversationView.displaySettings.inputSettings.responseTimeout.
If I understand you correctly, that info is already there. It's in ActiveConversationRecord.conversationMode.firstState.subtitle.dialogueEntry.conversationID.
In this case, you can keep track of each conversation yourself. As soon as the conversation has started, record its info. Example:CHOPJZL wrote: ↑Mon Mar 15, 2021 10:53 amBut an entry couldn't have 2 ActiveRecords if the same conversation started twice, So it will be great to have a instance option for a conversation, Like the Quest machine. And by this way we can keep the original entry Fields and modify instance's entry Fields like a temp Variable during the conversation.
Code: Select all
Dictionary<int, ActiveConversationRecord> activeConversations;
void OnConversationStart(Transform actor)
{
var conversationID = DialogueManager.lastConversationID;
var numActiveConversations = DialogueManager.instance.activeConversations.Count;
var record = DialogueManager.instance.activeConversations[numActiveConversations - 1];
activeConversations[conversationID] = record;
}
Re: About Dialogue Actor component
If using conversationID, everytime I need to get a target record, I will need to loop to compare the entry's conversationID to the record's. It's much easier to just get it by entryX.record.
In your example it is impossible to track 2 conversations of the same conversationID
Instance is actually another case. I think it's a great feature to have for reusable conversations
In your example it is impossible to track 2 conversations of the same conversationID
Instance is actually another case. I think it's a great feature to have for reusable conversations
Re: About Dialogue Actor component
What exactly do you need to track? The info is probably already there, and it's just a matter of tracking it.
Re: About Dialogue Actor component
In general I just want to track the ActiveConversationRecord. Mostly this will happen in Conversation Messages Events and the Paremeter is Subtitle or Responses, from which we can get Entry they belong to. So add a field to it is much more convenient than run a foreach loop to find it. My main purpose of this is to lower the matter to track ActiveConversationRecord.
Instance is actually another case. I think it's a great feature to have for reusable conversations
Instance is actually another case. I think it's a great feature to have for reusable conversations
Re: About Dialogue Actor component
Each ActiveConversationRecord is already an instance. You don't have to use the example code with the Dictionary<> that I posted above.
Each ActiveConversationRecord already has the current entry. It's in ActiveConversationRecord.conversationController.currentState.
Each ActiveConversationRecord already has the current entry. It's in ActiveConversationRecord.conversationController.currentState.
Re: About Dialogue Actor component
You mistunderstood me.
It's not the current entry that I want to Track. It's the opposite. Use the entry to get Record. It is to find the DialogueUI, CurrentActor, or conversationController as the global ones are not accurate as we talked about before
As in OnConversationResponseMenu(Response[] responses), I need to use responses[0].destinationEntry
As in OnConversationLine(Subtitle subtitle), I need to use subtitle.dialogueEntry
Instance is actually another case. It's not instance of ActiveConversationRecord, but instance of a conversation in the database. Like the Quest Machine. If my understanding is right, it is different from "Instantiate Database"
It's not the current entry that I want to Track. It's the opposite. Use the entry to get Record. It is to find the DialogueUI, CurrentActor, or conversationController as the global ones are not accurate as we talked about before
As in OnConversationResponseMenu(Response[] responses), I need to use responses[0].destinationEntry
As in OnConversationLine(Subtitle subtitle), I need to use subtitle.dialogueEntry
Instance is actually another case. It's not instance of ActiveConversationRecord, but instance of a conversation in the database. Like the Quest Machine. If my understanding is right, it is different from "Instantiate Database"
Re: About Dialogue Actor component
Hi,
Would it help if the Subtitle object had a reference to its ActiveConversationRecord?
If not, here's an alternative:
Each active conversation has its model, view, and controller. It also points to actor and conversant GameObjects.
OnConversationLine() and OnConversationResponseMenu() are called on the actor and conversant GameObjects.
If you can assign a unique conversant GameObject to each conversation (even an empty GameObject), you can put your script on the conversant GameObject. This way you will know which one it is.
I have finished work for the day. I will check back in the morning.
Thanks. I understand now. The Dialogue System doesn't work that way.CHOPJZL wrote: ↑Mon Mar 15, 2021 8:34 pmIt's not the current entry that I want to Track. It's the opposite. Use the entry to get Record. It is to find the DialogueUI, CurrentActor, or conversationController as the global ones are not accurate as we talked about before
As in OnConversationResponseMenu(Response[] responses), I need to use responses[0].destinationEntry
As in OnConversationLine(Subtitle subtitle), I need to use subtitle.dialogueEntry
Would it help if the Subtitle object had a reference to its ActiveConversationRecord?
If not, here's an alternative:
Each active conversation has its model, view, and controller. It also points to actor and conversant GameObjects.
OnConversationLine() and OnConversationResponseMenu() are called on the actor and conversant GameObjects.
If you can assign a unique conversant GameObject to each conversation (even an empty GameObject), you can put your script on the conversant GameObject. This way you will know which one it is.
Quest Machine creates instances of quests, but the Dialogue System works differently. All conversations in the Dialogue System share the same dialogue database.
I have finished work for the day. I will check back in the morning.