You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
CrowdControl/Assets/3rd/D2D_Scripts/Animations/Editor/DAnimationEditor.cs

226 lines
6.8 KiB
C#

2 months ago
using AV.Inspector.Runtime;
using D2D.Core;
using D2D.Utilities;
using D2D.Utils;
using DG.DOTweenEditor;
using DG.Tweening;
using DG.Tweening.Plugins.Options;
using UnityEditor;
using UnityEngine;
using UnityEngine.UIElements;
using static D2D.Utilities.SettingsFacade;
using static D2D.Utilities.CommonLazyFacade;
using static D2D.Utilities.CommonGameplayFacade;
namespace D2D.Animations
{
[CustomEditor(typeof(DAnimation))]
[CanEditMultipleObjects]
public class DAnimationEditor : SuperEditor
{
protected virtual bool IsFromSupported => true;
protected DAnimation _target;
protected DAnimation CalculatedTarget => (DAnimation) target;
public override void OnInspectorGUI()
{
BeginSerialization();
_target = (DAnimation) target;
ShowButtons();
if (_target.isRandomnessSupported)
ShowRandomFields();
else
ShowDefaultFields();
ShowProperty("_ease");
if (_target.isOnCompleteVisible && !_target.isAdvancedInfoVisible)
ShowProperty("_onComplete", "On Complete");
if (_target.isAdvancedInfoVisible)
ShowAdvancedInfo();
EndSerialization();
}
private void ShowButtons()
{
GUILayout.BeginHorizontal();
if (Button(_coreData.tools.icons.effects))
{
FlipBool("_isPlayingInEditor");
var t = (DAnimation) target;
var isPlaying = GetBool("_isPlayingInEditor");
// Avoid bag with isFrom
if (!isPlaying)
SaveInitialValues();
t.InitAnimation();
DOTweenEditorPreview.PrepareTweenForPreview(t.CurrentTween);
if (isPlaying)
{
t.Target.DOKill();
DOTweenEditorPreview.Stop();
RestoreInitialValues();
}
else
{
DOTweenEditorPreview.Start();
}
}
var text = $"Loops {_target._loops}";
if (Button(text))
InvertInt("_loops");
text = _target._playMode == AnimationPlayMode.PlayOnEnable ? "On Enable" : "On Script";
if (Button(text))
PlusEnum("_playMode", 2);
if (Button(_coreData.tools.icons.dice))
FlipBool("isRandomnessSupported");
if (Button(_coreData.tools.icons.advanced))
FlipBool("isAdvancedInfoVisible");
GUILayout.EndHorizontal();
GUILayout.BeginHorizontal();
if (StateButton("Local", "_isLocal"))
FlipBool("_isLocal");
if (StateButton("Relative", "_isRelative"))
FlipBool("_isRelative");
if (IsFromSupported)
{
if (StateButton("From", "_isFrom"))
FlipBool("_isFrom");
}
if (StateButton("Auto Kill", "_destroyOnFinish"))
FlipBool("_destroyOnFinish");
GUILayout.EndHorizontal();
}
protected virtual void SaveInitialValues()
{
SetVector("beforePlayPosition", _target.Target.localPosition);
SetVector("beforePlayRotation", _target.Target.localEulerAngles);
SetVector("beforePlayScale", _target.Target.localScale);
}
protected virtual void RestoreInitialValues()
{
if (GetVector("beforePlayPosition").magnitude == 0 && GetVector("beforePlayScale").magnitude == 0)
return;
_target.Target.localPosition = GetVector("beforePlayPosition");
_target.Target.localEulerAngles = GetVector("beforePlayRotation");
_target.Target.localScale = GetVector("beforePlayScale");
}
protected virtual void ShowAdvancedInfo()
{
ShowLoopsProperty();
ShowIsRelativeProperty();
Space();
var loops = _target._loops;
if (_target.isRandomnessSupported)
{
ShowProperty("_startDelay", "Start Delay");
if (_target.isAdvancedInfoVisible)
{
if (loops > 1 || loops == -1)
ShowProperty("_delayBetweenYoyo", "Delay Between Yoyo");
if (loops > 2 || loops == -1)
ShowProperty("_delayBetweenCycles", "Delay Between Cycles");
}
}
else
{
if (_target.isTargetVisibleInEditor)
ShowProperty("_target");
ShowProperty("startDelay", "Start Delay");
if (_target.isAdvancedInfoVisible)
{
if (loops > 1 || loops == -1)
ShowProperty("delayBetweenYoyo", "Delay Between Yoyo");
if (loops > 2 || loops == -1)
ShowProperty("delayBetweenCycles", "Delay Between Cycles");
}
}
if (_target.isOnCompleteVisible)
ShowProperty("_onComplete", "On Complete");
}
protected void ShowIsRelativeProperty()
{
if (CalculatedTarget.isIncremental)
{
serializedObject.FindProperty("_isRelative").boolValue = false;
serializedObject.FindProperty("_loops").intValue = 1;
}
else
{
// ShowProperty("_isRelative", "Relative");
}
}
protected void ShowLoopsProperty()
{
if (CalculatedTarget.isIncremental)
{
serializedObject.FindProperty("_isRelative").boolValue = false;
serializedObject.FindProperty("_loops").intValue = 1;
}
else
{
ShowProperty("_loops", "Loops");
}
}
protected virtual void ShowRandomFields()
{
ShowProperty("_to");
ShowDurationProperty();
}
public void ShowDurationProperty()
{
if (_target.isDurationDataMode)
ShowProperty("_durationData", "Duration");
else
ShowProperty(_target.isRandomnessSupported ? "_duration" : "duration");
}
protected virtual void ShowDefaultFields()
{
ShowProperty("to");
ShowDurationProperty();
}
private static Tween _previewTween;
}
}