Files
HauntedBloodlines/Assets/Editor/RuntimeEventToolEditor.cs
2025-05-29 22:31:40 +03:00

124 lines
4.2 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

using UnityEditor;
using UnityEngine;
[CustomEditor(typeof(RuntimeEventTool))]
public class RuntimeEventToolEditor : Editor
{
private RuntimeEventTool tool;
private string newSetName = "";
public override void OnInspectorGUI()
{
tool = (RuntimeEventTool)target;
serializedObject.Update();
EditorGUILayout.Space();
EditorGUILayout.LabelField("Runtime Event Tool", EditorStyles.boldLabel);
// Dropdown για Active Set
var sets = tool.GetEventSets();
if (sets.Count > 0)
{
string[] options = sets.ConvertAll(s => s.setName).ToArray();
int currentIndex = Mathf.Max(0, System.Array.IndexOf(options, tool.ActiveSetName));
int newIndex = EditorGUILayout.Popup("Active Set", currentIndex, options);
if (newIndex != currentIndex)
{
Undo.RecordObject(tool, "Change Active Set");
tool.ActiveSetName = options[newIndex];
EditorUtility.SetDirty(tool);
}
}
else
{
EditorGUILayout.HelpBox("No event sets defined.", MessageType.Info);
}
// Button για Invoke
if (GUILayout.Button("Invoke Active Set"))
{
tool.InvokeActiveSet();
}
EditorGUILayout.Space();
EditorGUILayout.LabelField("Add New Event Set", EditorStyles.boldLabel);
newSetName = EditorGUILayout.TextField("Set Name", newSetName);
GUI.enabled = !string.IsNullOrEmpty(newSetName.Trim());
if (GUILayout.Button("Add Set"))
{
Undo.RecordObject(tool, "Add New Event Set");
tool.AddNewSet(newSetName.Trim());
newSetName = "";
EditorUtility.SetDirty(tool);
}
GUI.enabled = true;
EditorGUILayout.Space();
EditorGUILayout.LabelField("Quick Tools", EditorStyles.boldLabel);
// Single selector για active set
GUI.enabled = !string.IsNullOrEmpty(tool.ActiveSetName);
if (GUILayout.Button("Generate RuntimeEventSelector for Active Set"))
{
GameObject child = new GameObject($"RuntimeEventSelector: {tool.ActiveSetName}");
Undo.RegisterCreatedObjectUndo(child, "Create RuntimeEventSelector");
child.transform.SetParent(tool.transform);
child.transform.localPosition = Vector3.zero;
var selector = child.AddComponent<RuntimeEventSelector>();
selector.targetTool = tool;
selector.setToActivate = tool.ActiveSetName;
Selection.activeGameObject = child;
}
GUI.enabled = true;
// Multiple selectors για όλα τα sets (χωρίς duplicates)
if (GUILayout.Button("Generate RuntimeEventSelectors for All Sets"))
{
foreach (var set in tool.GetEventSets())
{
string name = set.setName;
if (string.IsNullOrEmpty(name)) continue;
bool exists = false;
foreach (Transform child in tool.transform)
{
var selector = child.GetComponent<RuntimeEventSelector>();
if (selector != null && selector.setToActivate == name)
{
exists = true;
break;
}
}
if (exists) continue;
GameObject childObj = new GameObject($"RuntimeEventSelector: {name}");
Undo.RegisterCreatedObjectUndo(childObj, "Create RuntimeEventSelector");
childObj.transform.SetParent(tool.transform);
childObj.transform.localPosition = Vector3.zero;
var selectorComp = childObj.AddComponent<RuntimeEventSelector>();
selectorComp.targetTool = tool;
selectorComp.setToActivate = name;
}
Selection.activeGameObject = tool.gameObject;
}
EditorGUILayout.Space();
EditorGUILayout.LabelField("Event Sets (UnityEvents)", EditorStyles.boldLabel);
// Εμφάνιση event sets
DrawDefaultInspector();
serializedObject.ApplyModifiedProperties();
}
}