diff --git a/Source/Editor/GUI/CurveEditor.cs b/Source/Editor/GUI/CurveEditor.cs
index ac3d38353..4fb727ea1 100644
--- a/Source/Editor/GUI/CurveEditor.cs
+++ b/Source/Editor/GUI/CurveEditor.cs
@@ -19,6 +19,48 @@ namespace FlaxEditor.GUI
///
public abstract partial class CurveEditor : CurveEditorBase where T : new()
{
+ ///
+ /// Represents a single point in a .
+ ///
+ protected struct CurvePresetPoint
+ {
+ ///
+ /// The time.
+ ///
+ public float Time;
+
+ ///
+ /// The value.
+ ///
+ public float Value;
+
+ ///
+ /// The in tangent. Will be ignored in
+ ///
+ public float TangentIn;
+
+ ///
+ /// The out tangent. Will be ignored in
+ ///
+ public float TangentOut;
+ }
+
+ ///
+ /// A curve preset.
+ ///
+ protected struct CurveEditorPreset()
+ {
+ ///
+ /// If the tangents will be linear or smooth.
+ ///
+ public bool LinearTangents;
+
+ ///
+ /// The points of the preset.
+ ///
+ public List Points;
+ }
+
private class Popup : ContextMenuBase
{
private CustomEditorPresenter _presenter;
@@ -330,23 +372,58 @@ namespace FlaxEditor.GUI
///
/// Preset values for to be applied to a .
///
- public Dictionary PresetValues = new Dictionary
+ protected Dictionary Presets = new Dictionary
{
- { CurvePreset.Constant, new object[] { true, // LinearTangent
- 0f, 0.5f, 0f, 0f, // Time, value, tangent in, tangent out
- 1f, 0.5f, 0f, 0f } },
- { CurvePreset.EaseIn, new object[] { false,
- 0f, 0f, 0f, 0f,
- 1f, 1f, -1.4f, 0f } },
- { CurvePreset.EaseOut, new object[] { false,
- 1f, 1f, 0f, 0f,
- 0f, 0f, 0f, 1.4f } },
- { CurvePreset.Linear, new object[] { true,
- 0f, 0f, 0f, 0f,
- 1f, 1f, 0f, 0f } },
- { CurvePreset.Smoothstep, new object[] { false,
- 0f, 0f, 0f, 0f,
- 1f, 1f, 0f, 0f } },
+ { CurvePreset.Constant, new CurveEditorPreset
+ {
+ LinearTangents = true,
+ Points = new List
+ {
+ new CurvePresetPoint { Time = 0f, Value = 0.5f, TangentIn = 0f, TangentOut = 0f },
+ new CurvePresetPoint { Time = 1f, Value = 0.5f, TangentIn = 0f, TangentOut = 0f },
+ }
+ }
+ },
+ { CurvePreset.EaseIn, new CurveEditorPreset
+ {
+ LinearTangents = false,
+ Points = new List
+ {
+ new CurvePresetPoint { Time = 0f, Value = 0f, TangentIn = 0f, TangentOut = 0f },
+ new CurvePresetPoint { Time = 1f, Value = 1f, TangentIn = -1.4f, TangentOut = 0f },
+ }
+ }
+ },
+ { CurvePreset.EaseOut, new CurveEditorPreset
+ {
+ LinearTangents = false,
+ Points = new List
+ {
+ new CurvePresetPoint { Time = 1f, Value = 1f, TangentIn = 0f, TangentOut = 0f },
+ new CurvePresetPoint { Time = 0f, Value = 0f, TangentIn = 0f, TangentOut = 1.4f },
+ }
+ }
+ },
+ { CurvePreset.Linear, new CurveEditorPreset
+ {
+ LinearTangents = true,
+ Points = new List
+ {
+ new CurvePresetPoint { Time = 0f, Value = 0f, TangentIn = 0f, TangentOut = 0f },
+ new CurvePresetPoint { Time = 1f, Value = 1f, TangentIn = 0f, TangentOut = 0f },
+ }
+ }
+ },
+ { CurvePreset.Smoothstep, new CurveEditorPreset
+ {
+ LinearTangents = false,
+ Points = new List
+ {
+ new CurvePresetPoint { Time = 0f, Value = 0f, TangentIn = 0f, TangentOut = 0f },
+ new CurvePresetPoint { Time = 1f, Value = 1f, TangentIn = 0f, TangentOut = 0f },
+ }
+ }
+ },
};
///
@@ -1612,11 +1689,11 @@ namespace FlaxEditor.GUI
{
base.ApplyPreset(preset);
- object[] data = PresetValues[preset];
- for (int i = 1; i < data.Length; i += 4)
+ CurveEditorPreset data = Presets[preset];
+ foreach (var point in data.Points)
{
- float time = (float)data[i];
- object value = ConvertCurvePresetValueToCurveEditorType((float)data[i + 1]);
+ float time = point.Time;
+ object value = ConvertCurvePresetValueToCurveEditorType((float)point.Value);
AddKeyframe(time, value);
}
@@ -2414,19 +2491,20 @@ namespace FlaxEditor.GUI
{
base.ApplyPreset(preset);
- object[] data = PresetValues[preset];
- for (int i = 1; i < data.Length; i += 4)
+ CurveEditorPreset data = Presets[preset];
+
+ foreach (var point in data.Points)
{
- float time = (float)data[i];
- object value = ConvertCurvePresetValueToCurveEditorType((float)data[i + 1]);
- object tangentIn = ConvertCurvePresetValueToCurveEditorType((float)data[i + 2]);
- object tangentOut = ConvertCurvePresetValueToCurveEditorType((float)data[i + 3]);
+ float time = point.Time;
+ object value = ConvertCurvePresetValueToCurveEditorType((float)point.Value);
+ object tangentIn = ConvertCurvePresetValueToCurveEditorType((float)point.TangentIn);
+ object tangentOut = ConvertCurvePresetValueToCurveEditorType((float)point.TangentOut);
AddKeyframe(time, value, tangentIn, tangentOut);
}
SelectAll();
- if ((bool)data[0])
+ if (data.LinearTangents)
SetTangentsLinear();
ShowWholeCurve();