Browse Source

Reverted to AddOption approach

master
chrisgregan 11 years ago
parent
commit
56ad13dac5
  1. 51
      Assets/Fungus/Dialog/Commands/AddOption.cs
  2. 8
      Assets/Fungus/Dialog/Commands/AddOption.cs.meta
  3. 23
      Assets/Fungus/Dialog/Commands/Say.cs
  4. 37
      Assets/Fungus/Dialog/Editor/AddOptionEditor.cs
  5. 8
      Assets/Fungus/Dialog/Editor/AddOptionEditor.cs.meta
  6. 23
      Assets/Fungus/Dialog/Editor/SayEditor.cs
  7. 38
      Assets/Fungus/Dialog/Scripts/Dialog.cs
  8. BIN
      Assets/Shuttle/ShuttleGame.unity

51
Assets/Fungus/Dialog/Commands/AddOption.cs

@ -0,0 +1,51 @@
using UnityEngine;
using System;
using System.Collections;
using System.Collections.Generic;
namespace Fungus.Script
{
[CommandName("Add Option")]
[CommandCategory("Dialog")]
[HelpText("Adds an option for the player to select, displayed by the next Say command.")]
public class AddOption : FungusCommand
{
public string optionText;
public Sequence targetSequence;
public override void OnEnter()
{
Say.SayOption option = new Say.SayOption();
option.optionText = optionText;
option.targetSequence = targetSequence;
Say.options.Add(option);
Continue();
}
public override string GetSummary()
{
string summaryText = optionText;
if (targetSequence == null)
{
summaryText += " ( <Continue> )";
}
else
{
summaryText += " (" + targetSequence.name + ")";
}
return summaryText;
}
public override void GetConnectedSequences(ref List<Sequence> connectedSequences)
{
if (targetSequence != null)
{
connectedSequences.Add (targetSequence);
}
}
}
}

8
Assets/Fungus/Dialog/Commands/AddOption.cs.meta

@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: 9a61ea20fbb744ca2a363c33ad65cd89
MonoImporter:
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:

23
Assets/Fungus/Dialog/Commands/Say.cs

@ -10,24 +10,22 @@ namespace Fungus.Script
public class Say : FungusCommand
{
static public Dialog dialog;
public Character character;
public string storyText;
public bool displayOnce;
[Serializable]
public class SayOption
{
public string optionText;
public Sequence targetSequence;
}
public List<SayOption> options = new List<SayOption>();
public float timeoutDuration;
static public List<SayOption> options = new List<SayOption>();
public Character character;
public string storyText;
public bool displayOnce;
int executionCount;
public float continueTime;
public override void OnEnter()
{
if (dialog == null)
@ -73,8 +71,13 @@ namespace Fungus.Script
dialogOptions.Add(dialogOption);
}
options.Clear();
dialog.Say(storyText, dialogOptions);
dialog.Say(storyText, dialogOptions, 0, delegate {
dialog.ShowDialog(false);
Continue();
});
}
else
{

37
Assets/Fungus/Dialog/Editor/AddOptionEditor.cs

@ -0,0 +1,37 @@
using UnityEditor;
using UnityEditorInternal;
using UnityEngine;
using System.Collections;
using System.Collections.Generic;
using Rotorz.ReorderableList;
namespace Fungus.Script
{
[CustomEditor (typeof(AddOption))]
public class AddOptionEditor : FungusCommandEditor
{
public override void DrawCommandGUI()
{
AddOption t = target as AddOption;
EditorGUI.BeginChangeCheck();
string optionText = EditorGUILayout.TextField(new GUIContent("Option Text", "Text display on the option button."),
t.optionText);
Sequence targetSequence = SequenceEditor.SequenceField(new GUIContent("Target Sequence", "Sequence to execute when this option is selected by the player."),
new GUIContent("<Continue>"),
t.GetFungusScript(),
t.targetSequence);
if (EditorGUI.EndChangeCheck())
{
Undo.RecordObject(t, "Set Add Option");
t.optionText = optionText;
t.targetSequence = targetSequence;
}
}
}
}

8
Assets/Fungus/Dialog/Editor/AddOptionEditor.cs.meta

@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: 40a93fe42338b42e7a0215379d219400
MonoImporter:
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:

23
Assets/Fungus/Dialog/Editor/SayEditor.cs

@ -13,10 +13,6 @@ namespace Fungus.Script
{
public override void DrawCommandGUI()
{
serializedObject.Update();
SerializedProperty optionListProperty = serializedObject.FindProperty("options");
Say t = target as Say;
EditorGUI.BeginChangeCheck();
@ -32,29 +28,16 @@ namespace Fungus.Script
bool displayOnce = EditorGUILayout.Toggle(new GUIContent("Display Once", "Display this text once and never show it again."), t.displayOnce);
float continueTime = EditorGUILayout.FloatField(new GUIContent("Continue Time", "Time to wait before executing next command in the sequence. Useful for time limited player choices."), t.continueTime);
if (EditorGUI.EndChangeCheck())
{
Undo.RecordObject(t, "Set Say");
t.character = character;
t.storyText = text;
t.displayOnce = displayOnce;
t.continueTime = continueTime;
}
if (t.options.Count > 0)
{
float timeout = EditorGUILayout.FloatField(new GUIContent("Option Timeout", "Time limit for player to choose an option."),
t.timeoutDuration);
if (timeout != t.timeoutDuration)
{
Undo.RecordObject(t, "Set Timeout");
t.timeoutDuration = timeout;
}
}
ReorderableListGUI.Title("Options");
ReorderableListGUI.ListField(optionListProperty);
serializedObject.ApplyModifiedProperties();
}
}

38
Assets/Fungus/Dialog/Scripts/Dialog.cs

@ -113,11 +113,20 @@ namespace Fungus.Script
StartCoroutine(WriteText(text, delegate {
ShowContinueIcon(true);
StartCoroutine(WaitForInput(onComplete));
StartCoroutine(WaitForInput(delegate {
Clear();
if (onComplete != null)
{
onComplete();
}
}));
}));
}
public void Say(string text, List<Option> options)
public void Say(string text, List<Option> options, float timeoutDuration, Action onTimeout)
{
Clear();
@ -128,6 +137,11 @@ namespace Fungus.Script
{
AddOption(option.text, option.onSelect);
}
if (timeoutDuration > 0)
{
StartCoroutine(WaitForTimeout(timeoutDuration, onTimeout));
}
}));
}
@ -201,7 +215,7 @@ namespace Fungus.Script
yield break;
}
IEnumerator WaitForInput(Action onComplete)
IEnumerator WaitForInput(Action onInput)
{
// TODO: Handle touch input
while (!Input.GetMouseButtonDown(0))
@ -209,11 +223,21 @@ namespace Fungus.Script
yield return null;
}
Clear();
if (onInput != null)
{
onInput();
}
}
if (onComplete != null)
IEnumerator WaitForTimeout(float timeoutDuration, Action onTimeout)
{
yield return new WaitForSeconds(timeoutDuration);
Clear();
if (onTimeout != null)
{
onComplete();
onTimeout();
}
}
@ -229,6 +253,7 @@ namespace Fungus.Script
{
ClearStoryText();
ClearOptions();
ShowContinueIcon(false);
}
void ClearStoryText()
@ -294,6 +319,7 @@ namespace Fungus.Script
Action optionAction = optionActions[index];
if (optionAction != null)
{
StopCoroutine("WaitForTimeout");
Clear();
optionAction();
}

BIN
Assets/Shuttle/ShuttleGame.unity

Binary file not shown.
Loading…
Cancel
Save