130 lines
5.1 KiB
C#
130 lines
5.1 KiB
C#
using EasyTalk.Settings;
|
|
using EasyTalk.Nodes.Variable;
|
|
using UnityEditor;
|
|
using UnityEngine;
|
|
using EasyTalk.Editor.Utils;
|
|
using Microsoft.Win32;
|
|
using EasyTalk.Character;
|
|
using EasyTalk.Nodes;
|
|
|
|
namespace EasyTalk.Editor.Settings
|
|
{
|
|
[CustomEditor(typeof(DialogueRegistry))]
|
|
public class DialogueRegistryEditor : UnityEditor.Editor
|
|
{
|
|
private static bool expandGlobalVariables = true;
|
|
|
|
public override void OnInspectorGUI()
|
|
{
|
|
DialogueRegistry registry = target as DialogueRegistry;
|
|
|
|
expandGlobalVariables = EditorGUILayout.BeginFoldoutHeaderGroup(expandGlobalVariables, "Global Variables");
|
|
|
|
if (expandGlobalVariables)
|
|
{
|
|
CreateGlobalVariableSettings(registry);
|
|
}
|
|
|
|
EditorGUI.EndFoldoutHeaderGroup();
|
|
|
|
ETGUI.DrawLineSeparator();
|
|
EditorGUILayout.LabelField(new GUIContent("Characters"), EditorStyles.boldLabel);
|
|
registry.CharacterLibrary = EditorGUILayout.ObjectField(new GUIContent("Character Library"), registry.CharacterLibrary, typeof(CharacterLibrary), false) as CharacterLibrary;
|
|
ETGUI.DrawLineSeparator();
|
|
|
|
if (GUI.changed)
|
|
{
|
|
EditorUtility.SetDirty(registry);
|
|
}
|
|
}
|
|
|
|
private void CreateGlobalVariableSettings(DialogueRegistry registry)
|
|
{
|
|
EditorGUI.indentLevel++;
|
|
|
|
int numVariables = EditorGUILayout.IntField(new GUIContent("Variable Count"), registry.GlobalVariables.Count);
|
|
if (numVariables < registry.GlobalVariables.Count)
|
|
{
|
|
//Remove variables from the end until the number is the same
|
|
for (int i = numVariables; i < registry.GlobalVariables.Count; i++)
|
|
{
|
|
registry.GlobalVariables.RemoveAt(i);
|
|
i--;
|
|
}
|
|
}
|
|
else if (numVariables > registry.GlobalVariables.Count)
|
|
{
|
|
for (int i = registry.GlobalVariables.Count; i < numVariables; i++)
|
|
{
|
|
GlobalNodeVariable var = new GlobalNodeVariable();
|
|
var.VariableName = "variable_" + i;
|
|
var.VariableType = GlobalVariableType.STRING;
|
|
var.InitialValue = "";
|
|
|
|
registry.GlobalVariables.Add(var);
|
|
}
|
|
}
|
|
|
|
for (int i = 0; i < registry.GlobalVariables.Count; i++)
|
|
{
|
|
ETGUI.DrawLineSeparator();
|
|
GlobalNodeVariable var = registry.GlobalVariables[i];
|
|
EditorGUILayout.LabelField(new GUIContent(var.VariableName), EditorStyles.boldLabel);
|
|
|
|
EditorGUI.indentLevel++;
|
|
var.VariableName = EditorGUILayout.TextField(new GUIContent("Variable Name"), var.VariableName);
|
|
|
|
if (var.VariableName.Length == 0)
|
|
{
|
|
var.VariableName = "variable_" + i;
|
|
}
|
|
|
|
GlobalVariableType oldVarType = var.VariableType;
|
|
var.VariableType = (GlobalVariableType)EditorGUILayout.EnumPopup(new GUIContent("Variable Type"), var.VariableType);
|
|
|
|
if (oldVarType != var.VariableType)
|
|
{
|
|
switch (var.VariableType)
|
|
{
|
|
case GlobalVariableType.STRING: var.InitialValue = ""; break;
|
|
case GlobalVariableType.INT: var.InitialValue = "0"; break;
|
|
case GlobalVariableType.FLOAT: var.InitialValue = "0.0"; break;
|
|
case GlobalVariableType.BOOL: var.InitialValue = "true"; break;
|
|
}
|
|
}
|
|
|
|
CreateVariableValueField(var);
|
|
|
|
EditorGUI.indentLevel--;
|
|
}
|
|
|
|
EditorGUI.indentLevel--;
|
|
}
|
|
|
|
private static void CreateVariableValueField(GlobalNodeVariable var)
|
|
{
|
|
switch (var.VariableType)
|
|
{
|
|
case GlobalVariableType.STRING:
|
|
var.InitialValue = EditorGUILayout.TextField(new GUIContent("Initial Value"), (string)var.InitialValue);
|
|
break;
|
|
case GlobalVariableType.INT:
|
|
int intValue = 0;
|
|
int.TryParse(var.InitialValue, out intValue);
|
|
var.InitialValue = EditorGUILayout.IntField(new GUIContent("Initial Value"), intValue).ToString();
|
|
break;
|
|
case GlobalVariableType.FLOAT:
|
|
float floatValue = 0.0f;
|
|
float.TryParse(var.InitialValue,out floatValue);
|
|
var.InitialValue = EditorGUILayout.FloatField(new GUIContent("Initial Value"), floatValue).ToString();
|
|
break;
|
|
case GlobalVariableType.BOOL:
|
|
bool boolValue = true;
|
|
bool.TryParse(var.InitialValue, out boolValue);
|
|
var.InitialValue = EditorGUILayout.Toggle(new GUIContent("Initial Value"), boolValue).ToString();
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
}
|