From 240bf9667b6875f7bcc2dfd68cda3468cc628a24 Mon Sep 17 00:00:00 2001 From: chrisgregan Date: Wed, 3 Sep 2014 16:54:33 +0100 Subject: [PATCH] Initial If, Else & EndIf commands with indenting --- Assets/Fungus/FungusScript/Commands/Else.cs | 29 ++++++++++++++++++ .../Fungus/FungusScript/Commands/Else.cs.meta | 8 +++++ Assets/Fungus/FungusScript/Commands/EndIf.cs | 24 +++++++++++++++ .../FungusScript/Commands/EndIf.cs.meta | 8 +++++ Assets/Fungus/FungusScript/Commands/If.cs | 5 +++ .../Editor/FungusCommandListAdaptor.cs | 17 ++++++++-- .../FungusScript/Editor/SequenceEditor.cs | 14 ++++++++- .../FungusScript/Scripts/FungusCommand.cs | 20 ++++++++++++ Assets/Shuttle/ShuttleGame.unity | Bin 129180 -> 129876 bytes 9 files changed, 122 insertions(+), 3 deletions(-) create mode 100644 Assets/Fungus/FungusScript/Commands/Else.cs create mode 100644 Assets/Fungus/FungusScript/Commands/Else.cs.meta create mode 100644 Assets/Fungus/FungusScript/Commands/EndIf.cs create mode 100644 Assets/Fungus/FungusScript/Commands/EndIf.cs.meta diff --git a/Assets/Fungus/FungusScript/Commands/Else.cs b/Assets/Fungus/FungusScript/Commands/Else.cs new file mode 100644 index 00000000..1f10e185 --- /dev/null +++ b/Assets/Fungus/FungusScript/Commands/Else.cs @@ -0,0 +1,29 @@ +using UnityEngine; +using System.Collections; +using System.Collections.Generic; + +namespace Fungus.Script +{ + [CommandInfo("Scripting", + "Else", + "Marks the start of a sequence block to be executed when the preceding If statement is false.", + 253, 253, 150)] + public class Else : FungusCommand + { + public override void OnEnter() + { + Continue(); + } + + public override int GetPreIndent() + { + return -1; + } + + public override int GetPostIndent() + { + return 1; + } + } + +} \ No newline at end of file diff --git a/Assets/Fungus/FungusScript/Commands/Else.cs.meta b/Assets/Fungus/FungusScript/Commands/Else.cs.meta new file mode 100644 index 00000000..ec7a31f3 --- /dev/null +++ b/Assets/Fungus/FungusScript/Commands/Else.cs.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 3fa968f01a7f9496bb50e13dfe16760d +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: diff --git a/Assets/Fungus/FungusScript/Commands/EndIf.cs b/Assets/Fungus/FungusScript/Commands/EndIf.cs new file mode 100644 index 00000000..c86c804d --- /dev/null +++ b/Assets/Fungus/FungusScript/Commands/EndIf.cs @@ -0,0 +1,24 @@ +using UnityEngine; +using System.Collections; +using System.Collections.Generic; + +namespace Fungus.Script +{ + [CommandInfo("Scripting", + "EndIf", + "Marks the end of an If statement block.", + 253, 253, 150)] + public class EndIf : FungusCommand + { + public override void OnEnter() + { + Continue(); + } + + public override int GetPreIndent() + { + return -1; + } + } + +} \ No newline at end of file diff --git a/Assets/Fungus/FungusScript/Commands/EndIf.cs.meta b/Assets/Fungus/FungusScript/Commands/EndIf.cs.meta new file mode 100644 index 00000000..41cfa6b2 --- /dev/null +++ b/Assets/Fungus/FungusScript/Commands/EndIf.cs.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 00d52e9e9dcf4493c87045f633aefa2e +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: diff --git a/Assets/Fungus/FungusScript/Commands/If.cs b/Assets/Fungus/FungusScript/Commands/If.cs index 224444ec..7eb1bd64 100644 --- a/Assets/Fungus/FungusScript/Commands/If.cs +++ b/Assets/Fungus/FungusScript/Commands/If.cs @@ -239,6 +239,11 @@ namespace Fungus.Script { return (variable == this.variable); } + + public override int GetPostIndent() + { + return 1; + } } } \ No newline at end of file diff --git a/Assets/Fungus/FungusScript/Editor/FungusCommandListAdaptor.cs b/Assets/Fungus/FungusScript/Editor/FungusCommandListAdaptor.cs index 6765c646..9da25f4f 100644 --- a/Assets/Fungus/FungusScript/Editor/FungusCommandListAdaptor.cs +++ b/Assets/Fungus/FungusScript/Editor/FungusCommandListAdaptor.cs @@ -146,6 +146,18 @@ namespace Fungus.Script error = true; } + float indentWidth = 20; + for (int i = 0; i < command.indentLevel; ++i) + { + Rect indentRect = position; + indentRect.x += i * indentWidth; + indentRect.width = indentWidth + 1; + indentRect.y -= 2; + indentRect.height += 5; + GUI.backgroundColor = new Color(0.8f, 0.8f, 0.8f, 0.1f); + GUI.Box(indentRect, ""); + } + if (!command.enabled) { GUI.backgroundColor = Color.grey; @@ -164,6 +176,7 @@ namespace Fungus.Script float buttonWidth = Mathf.Max(commandStyle.CalcSize(new GUIContent(commandName)).x, 80f); Rect buttonRect = position; + buttonRect.x += command.indentLevel * indentWidth; buttonRect.width = buttonWidth; buttonRect.y -= 2; buttonRect.height += 5; @@ -171,8 +184,8 @@ namespace Fungus.Script GUI.Box(buttonRect, commandName, commandStyle); Rect summaryRect = position; - summaryRect.x += buttonWidth + 5; - summaryRect.width -= (buttonWidth + 5); + summaryRect.x = buttonRect.x + buttonWidth + 5; + summaryRect.width = position.width - buttonWidth - 5; if (!Application.isPlaying && Event.current.type == EventType.MouseDown && diff --git a/Assets/Fungus/FungusScript/Editor/SequenceEditor.cs b/Assets/Fungus/FungusScript/Editor/SequenceEditor.cs index a3e44720..24a95e1e 100644 --- a/Assets/Fungus/FungusScript/Editor/SequenceEditor.cs +++ b/Assets/Fungus/FungusScript/Editor/SequenceEditor.cs @@ -43,8 +43,9 @@ namespace Fungus.Script sequence.description = desc; } - ReorderableListGUI.Title("Command Sequence"); + UpdateIndentLevels(sequence); + ReorderableListGUI.Title("Command Sequence"); SerializedProperty commandListProperty = serializedObject.FindProperty("commandList"); FungusCommandListAdaptor adaptor = new FungusCommandListAdaptor(commandListProperty, 0); ReorderableListControl.DrawControlFromState(adaptor, null, 0); @@ -156,6 +157,17 @@ namespace Fungus.Script serializedObject.ApplyModifiedProperties(); } + void UpdateIndentLevels(Sequence sequence) + { + int indentLevel = 0; + foreach(FungusCommand command in sequence.commandList) + { + indentLevel += command.GetPreIndent(); + command.indentLevel = Math.Max(indentLevel, 0); + indentLevel += command.GetPostIndent(); + } + } + static public Sequence SequenceField(GUIContent label, GUIContent nullLabel, FungusScript fungusScript, Sequence sequence) { if (fungusScript == null) diff --git a/Assets/Fungus/FungusScript/Scripts/FungusCommand.cs b/Assets/Fungus/FungusScript/Scripts/FungusCommand.cs index 1422083a..99de459e 100644 --- a/Assets/Fungus/FungusScript/Scripts/FungusCommand.cs +++ b/Assets/Fungus/FungusScript/Scripts/FungusCommand.cs @@ -23,6 +23,7 @@ namespace Fungus.Script public string CommandName { get; set; } public string HelpText { get; set; } public Color ButtonColor { get; set; } + public Color IndentOffset { get; set; } } [RequireComponent(typeof(Sequence))] @@ -37,6 +38,9 @@ namespace Fungus.Script [HideInInspector] public Sequence parentSequence; + [HideInInspector] + public int indentLevel; + public virtual void Start() { parentSequence = GetComponent(); @@ -117,6 +121,22 @@ namespace Fungus.Script { return ""; } + + /** + * Indent offset for this command. + */ + public virtual int GetPreIndent() + { + return 0; + } + + /** + * Indent offset for subsequent commands. + */ + public virtual int GetPostIndent() + { + return 0; + } } } \ No newline at end of file diff --git a/Assets/Shuttle/ShuttleGame.unity b/Assets/Shuttle/ShuttleGame.unity index 71783e35fa56b9be4427d6abe33971cf8b567e4c..ab1321076ba0b3bcdf0346442942f4418984c82a 100644 GIT binary patch delta 8288 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 L_U*euLWBPgYf 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