Files
RPGBook/Assets/Okitoki Games/EasyTalk/Editor/Scripts/settings/DialogueRegistryEditor.cs

130 lines
5.1 KiB
C#
Raw Normal View History

2025-07-21 17:10:16 +01:00
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;
}
}
}
}