Files
fnl/Assets/Extensions/Febucci/Text Animator/Scripts/Editor/TAnimGlobalDataScriptableDrawer.cs
2026-02-21 16:46:09 -08:00

129 lines
4.0 KiB
C#

using UnityEditor;
using UnityEngine;
namespace Febucci.UI.Core.Editors
{
#if UNITY_EDITOR
[CustomEditor(typeof(TAnimGlobalDataScriptable))]
class TAnimGlobalDataScriptableDrawer : Editor
{
TAnimGlobalDataScriptable script;
SerializedProperty behaviorPresets;
SerializedProperty appearancesPresets;
SerializedProperty customActionsArray;
SerializedProperty customTagsFormatting;
SerializedProperty tagInfo_behaviors;
SerializedProperty tagInfo_appearances;
TextAnimatorDrawer.UserPresetDrawer[] behaviorDrawers = new TextAnimatorDrawer.UserPresetDrawer[0];
TextAnimatorDrawer.UserPresetDrawer[] appearancesDrawers = new TextAnimatorDrawer.UserPresetDrawer[0];
protected virtual void OnEnable()
{
behaviorPresets = serializedObject.FindProperty("globalBehaviorPresets");
appearancesPresets = serializedObject.FindProperty("globalAppearancePresets");
customActionsArray = serializedObject.FindProperty("customActions");
tagInfo_behaviors = serializedObject.FindProperty("tagInfo_behaviors");
tagInfo_appearances = serializedObject.FindProperty("tagInfo_appearances");
customTagsFormatting = serializedObject.FindProperty("customTagsFormatting");
script = (TAnimGlobalDataScriptable)target;
Undo.undoRedoPerformed += Redo;
}
private void OnDisable()
{
Undo.undoRedoPerformed -= Redo;
}
void Redo()
{
serializedObject.UpdateIfRequiredOrScript(); //I have spent too much searching this method... :(
Repaint();
TryResettingTextAnimators();
}
bool showBehaviors = false;
bool showAppearances = false;
public override void OnInspectorGUI()
{
if (Application.isPlaying)
EditorGUILayout.LabelField($"[!!] Remember: Saves are applied in play mode.");
{
EditorGUI.indentLevel++;
EditorGUILayout.LabelField("Effects", EditorStyles.boldLabel);
TextAnimatorDrawer.ShowPresets(ref behaviorDrawers, ref showBehaviors, ref behaviorPresets, false, true);
TextAnimatorDrawer.ShowPresets(ref appearancesDrawers, ref showAppearances, ref appearancesPresets, true, true);
EditorGUI.indentLevel--;
}
EditorGUILayout.Space();
{
EditorGUI.indentLevel++;
EditorGUILayout.LabelField("Actions", EditorStyles.boldLabel);
EditorGUILayout.PropertyField(customActionsArray, true);
EditorGUI.indentLevel--;
}
EditorGUILayout.Space();
{
EditorGUI.indentLevel++;
EditorGUILayout.LabelField("Tags Info", EditorStyles.boldLabel);
EditorGUILayout.PropertyField(customTagsFormatting, true);
if (customTagsFormatting.boolValue)
{
EditorGUILayout.PropertyField(tagInfo_behaviors, true);
EditorGUILayout.PropertyField(tagInfo_appearances, true);
}
EditorGUI.indentLevel--;
}
if (serializedObject.hasModifiedProperties)
{
//Repaint();
//Undo.RecordObject(serializedObject.targetObject, "Changed TextAnimator Global Data Scriptable");
Undo.RecordObject(script, "Changed TextAnimator Global Data Scriptable");
EditorUtility.SetDirty(script);
//Undo.RegisterCompleteObjectUndo(script, "Changed TextAnimator Global Data Scriptable");
serializedObject.ApplyModifiedProperties();
Repaint();
TryResettingTextAnimators();
}
}
void TryResettingTextAnimators()
{
if (EditorApplication.isPlaying)
{
TAnim_EditorHelper.TriggerEvent();
}
}
}
#endif
}