CurveEditorWindow.cs 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150
  1. //********************************** Banshee Engine (www.banshee5d.com) **************************************************//
  2. //**************** Copyright (c) 2016 Marko Pintera ([email protected]). All rights reserved. **********************//
  3. using BansheeEngine;
  4. namespace BansheeEditor
  5. {
  6. /// <summary>
  7. /// Opens a window that allows the user to edit a single animation curve or two curves representing a range.
  8. /// </summary>
  9. [DefaultSize(600, 400)]
  10. public class CurveEditorWindow : EditorWindow
  11. {
  12. private GUICurveEditor curveEditor;
  13. #region Overrides
  14. // DEBUG ONLY
  15. [MenuItem("Windows/Dbg", 5000)]
  16. public static void Open()
  17. {
  18. OpenWindow<CurveEditorWindow>();
  19. }
  20. /// <inheritdoc/>
  21. protected override LocString GetDisplayName()
  22. {
  23. return new LocEdString("Curve editor");
  24. }
  25. private void OnInitialize()
  26. {
  27. // TODO - Add methods to allow the window to be open with user-defined curve(s)
  28. // TODO - Add callbacks that trigger when user finishes editing
  29. // TODO - Add OK/Cancel buttons? Make the window modal?
  30. // TODO - Add a CurveField GUI element that can be used for curve preview, clicking on which opens this window
  31. curveEditor = new GUICurveEditor(this, this.GUI, 600, 400, false);
  32. curveEditor.Redraw();
  33. EdAnimationCurve[] edAnimCurve =
  34. {
  35. new EdAnimationCurve(),
  36. new EdAnimationCurve()
  37. };
  38. edAnimCurve[0].AddKeyframe(0.0f, 1.0f);
  39. edAnimCurve[0].AddKeyframe(5.0f, 3.0f);
  40. edAnimCurve[0].AddKeyframe(8.0f, -3.0f);
  41. edAnimCurve[0].AddKeyframe(15.0f, 2.0f);
  42. edAnimCurve[0].Apply();
  43. edAnimCurve[1].AddKeyframe(0.0f, -3.0f);
  44. edAnimCurve[1].AddKeyframe(3.0f, 0.0f);
  45. edAnimCurve[1].AddKeyframe(10.0f, -1.0f);
  46. edAnimCurve[1].AddKeyframe(13.0f, -5.0f);
  47. edAnimCurve[1].Apply();
  48. CurveDrawInfo[] drawinfo =
  49. {
  50. new CurveDrawInfo(edAnimCurve[0], Color.Green),
  51. new CurveDrawInfo(edAnimCurve[1], Color.Red),
  52. };
  53. curveEditor.SetCurves(drawinfo);
  54. curveEditor.CenterAndResize(true);
  55. curveEditor.SetDrawRange(true);
  56. EditorInput.OnPointerPressed += OnPointerPressed;
  57. EditorInput.OnPointerDoubleClick += OnPointerDoubleClicked;
  58. EditorInput.OnPointerMoved += OnPointerMoved;
  59. EditorInput.OnPointerReleased += OnPointerReleased;
  60. EditorInput.OnButtonUp += OnButtonUp;
  61. }
  62. private void OnEditorUpdate()
  63. {
  64. curveEditor.HandleDragAndZoomInput();
  65. }
  66. private void OnDestroy()
  67. {
  68. EditorInput.OnPointerPressed -= OnPointerPressed;
  69. EditorInput.OnPointerDoubleClick -= OnPointerDoubleClicked;
  70. EditorInput.OnPointerMoved -= OnPointerMoved;
  71. EditorInput.OnPointerReleased -= OnPointerReleased;
  72. EditorInput.OnButtonUp -= OnButtonUp;
  73. }
  74. /// <inheritdoc/>
  75. protected override void WindowResized(int width, int height)
  76. {
  77. Vector2I curveEditorSize = new Vector2I(width, height);
  78. curveEditor.SetSize(curveEditorSize.x, curveEditorSize.y);
  79. curveEditor.Redraw();
  80. }
  81. #endregion
  82. #region Input callbacks
  83. /// <summary>
  84. /// Triggered when the user presses a mouse button.
  85. /// </summary>
  86. /// <param name="ev">Information about the mouse press event.</param>
  87. private void OnPointerPressed(PointerEvent ev)
  88. {
  89. curveEditor.OnPointerPressed(ev);
  90. }
  91. /// <summary>
  92. /// Triggered when the user double clicks the left mouse button.
  93. /// </summary>
  94. /// <param name="ev">Information about the mouse event.</param>
  95. private void OnPointerDoubleClicked(PointerEvent ev)
  96. {
  97. curveEditor.OnPointerDoubleClicked(ev);
  98. }
  99. /// <summary>
  100. /// Triggered when the user moves the mouse.
  101. /// </summary>
  102. /// <param name="ev">Information about the mouse move event.</param>
  103. private void OnPointerMoved(PointerEvent ev)
  104. {
  105. curveEditor.OnPointerMoved(ev);
  106. }
  107. /// <summary>
  108. /// Triggered when the user releases a mouse button.
  109. /// </summary>
  110. /// <param name="ev">Information about the mouse release event.</param>
  111. private void OnPointerReleased(PointerEvent ev)
  112. {
  113. curveEditor.OnPointerReleased(ev);
  114. }
  115. /// <summary>
  116. /// Triggered when the user releases a keyboard button.
  117. /// </summary>
  118. /// <param name="ev">Information about the keyboard release event.</param>
  119. private void OnButtonUp(ButtonEvent ev)
  120. {
  121. curveEditor.OnButtonUp(ev);
  122. }
  123. #endregion
  124. }
  125. /** @} */
  126. }