ContinueButtonResumeTimeline.cs
Code: Select all
using UnityEngine;
using UnityEngine.Playables;
using PixelCrushers.DialogueSystem;
public class ContinueButtonResumeTimeline : StandardUIContinueButtonFastForward
{
public override void OnFastForward()
{
if ((typewriterEffect != null) && typewriterEffect.isPlaying)
{
typewriterEffect.Stop();
}
else
{
ResumeTimeline();
}
}
private void ResumeTimeline()
{
// Assumes current line's Sequence start with "Timeline(speed, TIMELINENAME, 0)"
// where "TIMELINENAME" is the name of a PlayableDirector GameObject.
var sequence = DialogueManager.currentConversationState.subtitle.sequence;
if (sequence.Contains("Timeline(speed"))
{
// Get the timeline name:
var pos = sequence.IndexOf(',');
var s = sequence.Substring(pos + 1);
pos = s.IndexOf(',');
s = s.Substring(0, pos).Trim();
// Resume the timeline:
var subject = SequencerTools.FindSpecifier(s);
var playableDirector = (subject != null) ? subject.GetComponent<PlayableDirector>() : null;
if (playableDirector != null)
{
if (DialogueDebug.logInfo) Debug.Log($"Dialogue System: Resuming timeline {playableDirector}", playableDirector);
playableDirector.playableGraph.GetRootPlayable(0).SetSpeed(1);
//---DialogueManager.standardDialogueUI.HideSubtitle(DialogueManager.currentConversationState.subtitle);
return;
}
}
// If we don't resume the timeline, just advance the conversation:
base.OnFastForward();
}
}
This subclass checks the current dialogue entry's Sequence for a command "Timeline(speed, TIMELINENAME..." where TIMELINENAME is the name of the timeline/playable director. It then resumes the timeline instead of continuing the conversation immediately.
You can leave your dialogue entries' Sequence fields blank. Instead, inspect the conversation's properties (Menu > Conversation Properties) and tick Override Display Settings > Camera Settings. Set Sequence to:
Code: Select all
Timeline(speed, TIMELINENAME 0)
Add Continue Conversation clips when you'd like the conversation to continue.
If you also want to hide the current subtitle text when the player clicks continue, you can uncomment the line in the script that's commented out with "//---".