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.
226 lines
6.8 KiB
C#
226 lines
6.8 KiB
C#
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;
|
|
}
|
|
} |