You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
139 lines
3.6 KiB
139 lines
3.6 KiB
10 years ago
|
using UnityEngine;
|
||
|
using System;
|
||
|
using System.Collections;
|
||
|
using System.Collections.Generic;
|
||
|
|
||
|
namespace Fungus
|
||
|
{
|
||
|
[CommandInfo("Dialog",
|
||
|
"Choose",
|
||
|
"Presents a list of options for the player to choose from using a Choose Dialog. " +
|
||
|
"Place Option commands after the Choose Option command to specify the player options, and terminate with an End command.")]
|
||
|
[AddComponentMenu("")]
|
||
|
public class ChooseOption : Command
|
||
|
{
|
||
|
[Tooltip("Story text to display to prompt player to choose an option")]
|
||
|
[TextArea(5,10)]
|
||
10 years ago
|
public string chooseText = "";
|
||
10 years ago
|
|
||
|
[Tooltip("Speaking character to use when prompting the player to choose an option")]
|
||
|
public Character character;
|
||
|
|
||
|
[Tooltip("Choose Dialog object to use to display the player options")]
|
||
|
public ChooseDialog chooseDialog;
|
||
|
|
||
|
[Tooltip("Portrait that represents speaking character")]
|
||
|
public Sprite portrait;
|
||
|
|
||
|
[Tooltip("Voiceover audio to play when prompting the player to choose an option")]
|
||
|
public AudioClip voiceOverClip;
|
||
|
|
||
|
[Tooltip("Time limit for player to choose an option. Set to 0 for no time limit.")]
|
||
|
public float timeoutDuration;
|
||
|
|
||
|
public override void OnEnter()
|
||
|
{
|
||
|
if (chooseDialog == null)
|
||
|
{
|
||
|
if (chooseDialog == null)
|
||
|
{
|
||
|
// Try to get any ChooseDialog in the scene
|
||
|
chooseDialog = GameObject.FindObjectOfType<ChooseDialog>();
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// Build list of Option commands
|
||
|
End endCommand = null;
|
||
|
List<Option> options = new List<Option>();
|
||
|
for (int i = commandIndex + 1; i < parentSequence.commandList.Count; ++i)
|
||
|
{
|
||
|
Command command = parentSequence.commandList[i];
|
||
|
|
||
|
// Check for closing End command
|
||
|
if (command.GetType() == typeof(End) &&
|
||
|
command.indentLevel == indentLevel)
|
||
|
{
|
||
|
endCommand = command as End;
|
||
|
|
||
|
// Jump to End if no dialog is set
|
||
|
if (chooseDialog == null)
|
||
|
{
|
||
|
Continue (endCommand.commandIndex + 1);
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
break;
|
||
|
}
|
||
|
|
||
|
Option option = command as Option;
|
||
|
if (option != null &&
|
||
|
option.indentLevel == indentLevel &&
|
||
|
!option.IsHidden())
|
||
|
{
|
||
|
options.Add(command as Option);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
if (options.Count == 0)
|
||
|
{
|
||
|
Continue();
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
FungusScript fungusScript = GetFungusScript();
|
||
|
|
||
|
chooseDialog.ShowDialog(true);
|
||
|
chooseDialog.SetCharacter(character, fungusScript);
|
||
|
chooseDialog.SetCharacterImage(portrait);
|
||
|
|
||
|
List<ChooseDialog.Option> dialogOptions = new List<ChooseDialog.Option>();
|
||
|
foreach (Option option in options)
|
||
|
{
|
||
|
ChooseDialog.Option dialogOption = new ChooseDialog.Option();
|
||
|
dialogOption.text = fungusScript.SubstituteVariables(option.optionText);
|
||
|
|
||
|
Option theOption = option; // Needed to close over the option object in the delegate
|
||
|
|
||
|
dialogOption.onSelect = delegate {
|
||
|
chooseDialog.ShowDialog(false);
|
||
10 years ago
|
theOption.wasSelected = true;
|
||
10 years ago
|
Continue(theOption.commandIndex + 1);
|
||
|
};
|
||
|
|
||
|
dialogOptions.Add(dialogOption);
|
||
|
}
|
||
|
|
||
|
options.Clear();
|
||
|
|
||
|
if (voiceOverClip != null)
|
||
|
{
|
||
|
chooseDialog.PlayVoiceOver(voiceOverClip);
|
||
|
}
|
||
|
|
||
|
string subbedText = fungusScript.SubstituteVariables(chooseText);
|
||
|
|
||
|
chooseDialog.Choose(subbedText, dialogOptions, timeoutDuration, delegate {
|
||
|
// Timeout will execute the commands listed immediately after the Choose Option command
|
||
|
chooseDialog.ShowDialog(false);
|
||
|
Continue();
|
||
|
});
|
||
|
}
|
||
|
}
|
||
|
|
||
|
public override bool OpenBlock()
|
||
|
{
|
||
|
return true;
|
||
|
}
|
||
|
|
||
|
public override string GetSummary()
|
||
|
{
|
||
|
return "\"" + chooseText + "\"";
|
||
|
}
|
||
|
|
||
|
public override Color GetButtonColor()
|
||
|
{
|
||
|
return new Color32(253, 253, 150, 255);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
}
|