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. 21
      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. 36
      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:

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

@ -11,23 +11,21 @@ namespace Fungus.Script
{ {
static public Dialog dialog; static public Dialog dialog;
public Character character;
public string storyText;
public bool displayOnce;
[Serializable]
public class SayOption public class SayOption
{ {
public string optionText; public string optionText;
public Sequence targetSequence; public Sequence targetSequence;
} }
public List<SayOption> options = new List<SayOption>(); static public List<SayOption> options = new List<SayOption>();
public float timeoutDuration;
public Character character;
public string storyText;
public bool displayOnce;
int executionCount; int executionCount;
public float continueTime;
public override void OnEnter() public override void OnEnter()
{ {
if (dialog == null) if (dialog == null)
@ -74,7 +72,12 @@ namespace Fungus.Script
dialogOptions.Add(dialogOption); dialogOptions.Add(dialogOption);
} }
dialog.Say(storyText, dialogOptions); options.Clear();
dialog.Say(storyText, dialogOptions, 0, delegate {
dialog.ShowDialog(false);
Continue();
});
} }
else 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() public override void DrawCommandGUI()
{ {
serializedObject.Update();
SerializedProperty optionListProperty = serializedObject.FindProperty("options");
Say t = target as Say; Say t = target as Say;
EditorGUI.BeginChangeCheck(); 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); 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()) if (EditorGUI.EndChangeCheck())
{ {
Undo.RecordObject(t, "Set Say"); Undo.RecordObject(t, "Set Say");
t.character = character; t.character = character;
t.storyText = text; t.storyText = text;
t.displayOnce = displayOnce; 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();
} }
} }

36
Assets/Fungus/Dialog/Scripts/Dialog.cs

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

BIN
Assets/Shuttle/ShuttleGame.unity

Binary file not shown.
Loading…
Cancel
Save