// Copyright (c) 2012-2023 Wojciech Figat. All rights reserved.
using FlaxEditor.GUI;
using FlaxEngine;
namespace FlaxEditor.CustomEditors.Dedicated
{
///
/// Custom editor for .
///
class BezierCurveObjectEditor : CustomEditor where T : struct
{
private bool _isSetting;
private BezierCurveEditor _curve;
///
public override void Initialize(LayoutElementsContainer layout)
{
var item = layout.CustomContainer>();
_curve = item.CustomControl;
_curve.Height = 120.0f;
_curve.Edited += OnCurveEdited;
}
private void OnCurveEdited()
{
if (_isSetting)
return;
_isSetting = true;
SetValue(new BezierCurve(_curve.Keyframes));
_isSetting = false;
}
///
public override void Refresh()
{
base.Refresh();
var value = (BezierCurve)Values[0];
if (value != null && !_curve.IsUserEditing && !Utils.ArraysEqual(value.Keyframes, _curve.Keyframes))
{
_isSetting = true;
_curve.SetKeyframes(value.Keyframes);
_isSetting = false;
}
}
///
protected override void Deinitialize()
{
_curve = null;
base.Deinitialize();
}
}
[CustomEditor(typeof(BezierCurve)), DefaultEditor]
sealed class IntBezierCurveObjectEditor : BezierCurveObjectEditor
{
}
[CustomEditor(typeof(BezierCurve)), DefaultEditor]
sealed class FloatBezierCurveObjectEditor : BezierCurveObjectEditor
{
}
[CustomEditor(typeof(BezierCurve)), DefaultEditor]
sealed class Vector2BezierCurveObjectEditor : BezierCurveObjectEditor
{
}
[CustomEditor(typeof(BezierCurve)), DefaultEditor]
sealed class Vector3BezierCurveObjectEditor : BezierCurveObjectEditor
{
}
[CustomEditor(typeof(BezierCurve)), DefaultEditor]
sealed class Vector4BezierCurveObjectEditor : BezierCurveObjectEditor
{
}
[CustomEditor(typeof(BezierCurve)), DefaultEditor]
sealed class Float2BezierCurveObjectEditor : BezierCurveObjectEditor
{
}
[CustomEditor(typeof(BezierCurve)), DefaultEditor]
sealed class Float3BezierCurveObjectEditor : BezierCurveObjectEditor
{
}
[CustomEditor(typeof(BezierCurve)), DefaultEditor]
sealed class Float4BezierCurveObjectEditor : BezierCurveObjectEditor
{
}
[CustomEditor(typeof(BezierCurve)), DefaultEditor]
sealed class QuaternionBezierCurveObjectEditor : BezierCurveObjectEditor
{
}
[CustomEditor(typeof(BezierCurve)), DefaultEditor]
sealed class ColorBezierCurveObjectEditor : BezierCurveObjectEditor
{
}
///
/// Custom editor for .
///
class LinearCurveObjectEditor : CustomEditor where T : struct
{
private bool _isSetting;
private LinearCurveEditor _curve;
///
public override void Initialize(LayoutElementsContainer layout)
{
var item = layout.CustomContainer>();
_curve = item.CustomControl;
_curve.Height = 120.0f;
_curve.Edited += OnCurveEdited;
}
private void OnCurveEdited()
{
if (_isSetting)
return;
_isSetting = true;
SetValue(new LinearCurve(_curve.Keyframes));
_isSetting = false;
}
///
public override void Refresh()
{
base.Refresh();
var value = (LinearCurve)Values[0];
if (value != null && !_curve.IsUserEditing && !Utils.ArraysEqual(value.Keyframes, _curve.Keyframes))
{
_isSetting = true;
_curve.SetKeyframes(value.Keyframes);
_isSetting = false;
}
}
///
protected override void Deinitialize()
{
_curve = null;
base.Deinitialize();
}
}
[CustomEditor(typeof(LinearCurve)), DefaultEditor]
sealed class IntLinearCurveObjectEditor : LinearCurveObjectEditor
{
}
[CustomEditor(typeof(LinearCurve)), DefaultEditor]
sealed class FloatLinearCurveObjectEditor : LinearCurveObjectEditor
{
}
[CustomEditor(typeof(LinearCurve)), DefaultEditor]
sealed class Vector2LinearCurveObjectEditor : LinearCurveObjectEditor
{
}
[CustomEditor(typeof(LinearCurve)), DefaultEditor]
sealed class Vector3LinearCurveObjectEditor : LinearCurveObjectEditor
{
}
[CustomEditor(typeof(LinearCurve)), DefaultEditor]
sealed class Vector4LinearCurveObjectEditor : LinearCurveObjectEditor
{
}
[CustomEditor(typeof(LinearCurve)), DefaultEditor]
sealed class Float2LinearCurveObjectEditor : LinearCurveObjectEditor
{
}
[CustomEditor(typeof(LinearCurve)), DefaultEditor]
sealed class Float3LinearCurveObjectEditor : LinearCurveObjectEditor
{
}
[CustomEditor(typeof(LinearCurve)), DefaultEditor]
sealed class Float4LinearCurveObjectEditor : LinearCurveObjectEditor
{
}
[CustomEditor(typeof(LinearCurve)), DefaultEditor]
sealed class QuaternionLinearCurveObjectEditor : LinearCurveObjectEditor
{
}
[CustomEditor(typeof(LinearCurve)), DefaultEditor]
sealed class ColorLinearCurveObjectEditor : LinearCurveObjectEditor
{
}
}