An easy to use Unity 3D library for creating illustrated Interactive Fiction games and more.
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.

95 lines
2.0 KiB

using UnityEngine;
using System.Collections;
using System.Collections.Generic;
namespace Fungus.Script
{
[CommandName("Add Option")]
[HelpText("Adds an option button to be displayed by the next Say command. The target sequence is run when the player selects the option. A condition can be specified for when the option should be shown.")]
public class AddOption : FungusCommand
{
public enum ShowCondition
{
Always,
NotVisited,
BooleanIsTrue,
BooleanIsFalse
}
public string optionText;
public Sequence targetSequence;
public ShowCondition showCondition;
public BooleanVariable booleanVariable;
public override void OnEnter()
{
Dialog dialog = Game.GetInstance().dialog;
bool showOption = (dialog != null && targetSequence != null);
if (showCondition == ShowCondition.Always)
{
// Always show option
}
else if (showCondition == ShowCondition.NotVisited)
{
if (targetSequence == null ||
targetSequence.GetExecutionCount () > 0)
{
showOption = false;
}
}
else
{
if (booleanVariable == null)
{
showOption = false;
}
else
{
if (showCondition == ShowCondition.BooleanIsTrue &&
booleanVariable.Value != true)
{
showOption = false;
}
else if (showCondition == ShowCondition.BooleanIsFalse &&
booleanVariable.Value != false)
{
showOption = false;
}
}
}
if (showOption)
{
dialog.AddOption(optionText, () => {
Stop();
parentFungusScript.ExecuteSequence(targetSequence);
});
}
Continue();
}
public override void GetConnectedSequences(ref List<Sequence> connectedSequences)
{
if (targetSequence != null)
{
connectedSequences.Add(targetSequence);
}
}
public override string GetSummary()
{
string description = "\"" + optionText + "\"";
if (targetSequence == null)
{
description += " <Continue>";
}
else
{
description += " (" + targetSequence.name + ")";
}
return description;
}
}
}