//********************************** Banshee Engine (www.banshee5d.com) **************************************************//
//**************** Copyright (c) 2016 Marko Pintera (marko.pintera@gmail.com). All rights reserved. **********************//
using BansheeEngine;
namespace BansheeEditor
{
///
/// Opens a window that allows the user to edit a single animation curve or two curves representing a range.
///
[DefaultSize(600, 400)]
public class CurveEditorWindow : EditorWindow
{
private GUICurveEditor curveEditor;
#region Overrides
// DEBUG ONLY
[MenuItem("Windows/Dbg", 5000)]
public static void Open()
{
OpenWindow();
}
///
protected override LocString GetDisplayName()
{
return new LocEdString("Curve editor");
}
private void OnInitialize()
{
// TODO - Add methods to allow the window to be open with user-defined curve(s)
// TODO - Add callbacks that trigger when user finishes editing
// TODO - Add OK/Cancel buttons? Make the window modal?
// TODO - Add a CurveField GUI element that can be used for curve preview, clicking on which opens this window
curveEditor = new GUICurveEditor(this, this.GUI, 600, 400, false);
curveEditor.Redraw();
EdAnimationCurve[] edAnimCurve =
{
new EdAnimationCurve(),
new EdAnimationCurve()
};
edAnimCurve[0].AddKeyframe(0.0f, 1.0f);
edAnimCurve[0].AddKeyframe(5.0f, 3.0f);
edAnimCurve[0].AddKeyframe(8.0f, -3.0f);
edAnimCurve[0].AddKeyframe(15.0f, 2.0f);
edAnimCurve[0].Apply();
edAnimCurve[1].AddKeyframe(0.0f, -3.0f);
edAnimCurve[1].AddKeyframe(3.0f, 0.0f);
edAnimCurve[1].AddKeyframe(10.0f, -1.0f);
edAnimCurve[1].AddKeyframe(13.0f, -5.0f);
edAnimCurve[1].Apply();
CurveDrawInfo[] drawinfo =
{
new CurveDrawInfo(edAnimCurve[0], Color.Green),
new CurveDrawInfo(edAnimCurve[1], Color.Red),
};
curveEditor.SetCurves(drawinfo);
curveEditor.CenterAndResize(true);
curveEditor.SetDrawRange(true);
EditorInput.OnPointerPressed += OnPointerPressed;
EditorInput.OnPointerDoubleClick += OnPointerDoubleClicked;
EditorInput.OnPointerMoved += OnPointerMoved;
EditorInput.OnPointerReleased += OnPointerReleased;
EditorInput.OnButtonUp += OnButtonUp;
}
private void OnEditorUpdate()
{
curveEditor.HandleDragAndZoomInput();
}
private void OnDestroy()
{
EditorInput.OnPointerPressed -= OnPointerPressed;
EditorInput.OnPointerDoubleClick -= OnPointerDoubleClicked;
EditorInput.OnPointerMoved -= OnPointerMoved;
EditorInput.OnPointerReleased -= OnPointerReleased;
EditorInput.OnButtonUp -= OnButtonUp;
}
///
protected override void WindowResized(int width, int height)
{
Vector2I curveEditorSize = new Vector2I(width, height);
curveEditor.SetSize(curveEditorSize.x, curveEditorSize.y);
curveEditor.Redraw();
}
#endregion
#region Input callbacks
///
/// Triggered when the user presses a mouse button.
///
/// Information about the mouse press event.
private void OnPointerPressed(PointerEvent ev)
{
curveEditor.OnPointerPressed(ev);
}
///
/// Triggered when the user double clicks the left mouse button.
///
/// Information about the mouse event.
private void OnPointerDoubleClicked(PointerEvent ev)
{
curveEditor.OnPointerDoubleClicked(ev);
}
///
/// Triggered when the user moves the mouse.
///
/// Information about the mouse move event.
private void OnPointerMoved(PointerEvent ev)
{
curveEditor.OnPointerMoved(ev);
}
///
/// Triggered when the user releases a mouse button.
///
/// Information about the mouse release event.
private void OnPointerReleased(PointerEvent ev)
{
curveEditor.OnPointerReleased(ev);
}
///
/// Triggered when the user releases a keyboard button.
///
/// Information about the keyboard release event.
private void OnButtonUp(ButtonEvent ev)
{
curveEditor.OnButtonUp(ev);
}
#endregion
}
/** @} */
}