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.
106 lines
5.3 KiB
106 lines
5.3 KiB
// This code is part of the Fungus library (http://fungusgames.com) maintained by Chris Gregan (http://twitter.com/gofungus). |
|
// It is released for free under the MIT open source license (https://github.com/snozbot/fungus/blob/master/LICENSE) |
|
|
|
// Adapted from the Unity Test Tools project (MIT license) |
|
// https://bitbucket.org/Unity-Technologies/unitytesttools/src/a30d562427e9/Assets/UnityTestTools/ |
|
|
|
using System; |
|
using System.Reflection; |
|
using UnityEditor; |
|
using UnityEngine; |
|
|
|
namespace Fungus |
|
{ |
|
[CustomEditor(typeof(ExecuteHandler))] |
|
public class ExecuteHandlerEditor : Editor |
|
{ |
|
private readonly DropDownControl<Type> m_ComparerDropDown = new DropDownControl<Type>(); |
|
|
|
#region GUI Contents |
|
private readonly GUIContent m_GUIExecuteAfterTimeGuiContent = new GUIContent("Execute after (seconds)", "After how many seconds the script should be executed"); |
|
private readonly GUIContent m_GUIRepeatExecuteTimeGuiContent = new GUIContent("Repeat execute", "Should the execution be repeated."); |
|
private readonly GUIContent m_GUIRepeatEveryTimeGuiContent = new GUIContent("Frequency of repetitions", "How often should the execution be done"); |
|
private readonly GUIContent m_GUIExecuteAfterFramesGuiContent = new GUIContent("Execute after (frames)", "After how many frames the script should be executed"); |
|
private readonly GUIContent m_GUIRepeatExecuteFrameGuiContent = new GUIContent("Repeat execution", "Should the execution be repeated."); |
|
#endregion |
|
|
|
public ExecuteHandlerEditor() |
|
{ |
|
m_ComparerDropDown.convertForButtonLabel = type => type.Name; |
|
m_ComparerDropDown.convertForGUIContent = type => type.Name; |
|
m_ComparerDropDown.ignoreConvertForGUIContent = types => false; |
|
m_ComparerDropDown.tooltip = "Comparer that will be used to compare values and determine the result of assertion."; |
|
} |
|
|
|
public override void OnInspectorGUI() |
|
{ |
|
var executeHandler = (ExecuteHandler)target; |
|
EditorGUILayout.BeginHorizontal(); |
|
EditorGUILayout.PrefixLabel(new GUIContent("On Event")); |
|
executeHandler.ExecuteMethods = (ExecuteMethod)EditorGUILayout.EnumMaskField(executeHandler.ExecuteMethods, |
|
EditorStyles.popup, |
|
GUILayout.ExpandWidth(false)); |
|
EditorGUILayout.EndHorizontal(); |
|
|
|
if (executeHandler.IsExecuteMethodSelected(ExecuteMethod.AfterPeriodOfTime)) |
|
{ |
|
DrawOptionsForAfterPeriodOfTime(executeHandler); |
|
} |
|
|
|
if (executeHandler.IsExecuteMethodSelected(ExecuteMethod.Update)) |
|
{ |
|
DrawOptionsForOnUpdate(executeHandler); |
|
} |
|
|
|
if (Application.isPlaying) |
|
{ |
|
EditorGUILayout.BeginHorizontal(); |
|
GUILayout.FlexibleSpace(); |
|
|
|
if (GUILayout.Button(new GUIContent("Execute Now", "Execute the script immediately."))) |
|
{ |
|
executeHandler.Execute(); |
|
} |
|
|
|
GUILayout.FlexibleSpace(); |
|
EditorGUILayout.EndHorizontal(); |
|
} |
|
} |
|
|
|
private void DrawOptionsForAfterPeriodOfTime(ExecuteHandler executeHandler) |
|
{ |
|
EditorGUILayout.Space(); |
|
executeHandler.ExecuteAfterTime = EditorGUILayout.FloatField(m_GUIExecuteAfterTimeGuiContent, |
|
executeHandler.ExecuteAfterTime); |
|
if (executeHandler.ExecuteAfterTime < 0) |
|
executeHandler.ExecuteAfterTime = 0; |
|
executeHandler.RepeatExecuteTime = EditorGUILayout.Toggle(m_GUIRepeatExecuteTimeGuiContent, |
|
executeHandler.RepeatExecuteTime); |
|
if (executeHandler.RepeatExecuteTime) |
|
{ |
|
executeHandler.RepeatEveryTime = EditorGUILayout.FloatField(m_GUIRepeatEveryTimeGuiContent, |
|
executeHandler.RepeatEveryTime); |
|
if (executeHandler.RepeatEveryTime < 0) |
|
executeHandler.RepeatEveryTime = 0; |
|
} |
|
} |
|
|
|
private void DrawOptionsForOnUpdate(ExecuteHandler executeHandler) |
|
{ |
|
EditorGUILayout.Space(); |
|
executeHandler.ExecuteAfterFrames = EditorGUILayout.IntField(m_GUIExecuteAfterFramesGuiContent, |
|
executeHandler.ExecuteAfterFrames); |
|
if (executeHandler.ExecuteAfterFrames < 1) |
|
executeHandler.ExecuteAfterFrames = 1; |
|
executeHandler.RepeatExecuteFrame = EditorGUILayout.Toggle(m_GUIRepeatExecuteFrameGuiContent, |
|
executeHandler.RepeatExecuteFrame); |
|
if (executeHandler.RepeatExecuteFrame) |
|
{ |
|
executeHandler.RepeatEveryFrame = EditorGUILayout.IntField(m_GUIRepeatEveryTimeGuiContent, |
|
executeHandler.RepeatEveryFrame); |
|
if (executeHandler.RepeatEveryFrame < 1) |
|
executeHandler.RepeatEveryFrame = 1; |
|
} |
|
} |
|
} |
|
}
|
|
|