SceneViewHandler.cs 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Runtime.CompilerServices;
  5. using System.Text;
  6. using System.Threading.Tasks;
  7. using BansheeEngine;
  8. namespace BansheeEditor
  9. {
  10. /// <summary>
  11. /// Handles scene view handle interactions, object picking and gizmos.
  12. /// </summary>
  13. internal sealed class SceneViewHandler : ScriptObject
  14. {
  15. /// <summary>
  16. /// Creates a new scene view handler.
  17. /// </summary>
  18. /// <param name="parent">Editor window in which the scene view is displayed.</param>
  19. /// <param name="sceneCamera">Camera through which the scene view is displayed.</param>
  20. internal SceneViewHandler(EditorWindow parent, Camera sceneCamera)
  21. {
  22. Internal_Create(this, parent.GetCachedPtr(), sceneCamera.Native.GetCachedPtr());
  23. }
  24. /// <summary>
  25. /// Called every frame. Updates gizmos and scene grid.
  26. /// </summary>
  27. internal void Update()
  28. {
  29. Internal_Update(mCachedPtr);
  30. }
  31. /// <summary>
  32. /// Updates currently active handles.
  33. /// </summary>
  34. /// <param name="pointerPos">Position of the pointer relative to the scene camera viewport.</param>
  35. /// <param name="inputDelta">Movement of the pointer since last frame.</param>
  36. internal void UpdateHandle(Vector2I pointerPos, Vector2I inputDelta)
  37. {
  38. Internal_UpdateHandle(mCachedPtr, pointerPos, inputDelta);
  39. }
  40. /// <summary>
  41. /// Updates the selection overlay for currently selected object(s).
  42. /// </summary>
  43. internal void UpdateSelection()
  44. {
  45. Internal_UpdateSelection(mCachedPtr);
  46. }
  47. /// <summary>
  48. /// Selects a handle under the pointer position.
  49. /// </summary>
  50. /// <param name="pointerPos">Position of the pointer relative to the scene camera viewport.</param>
  51. internal void TrySelectHandle(Vector2I pointerPos)
  52. {
  53. Internal_TrySelectHandle(mCachedPtr, pointerPos);
  54. }
  55. /// <summary>
  56. /// Checks is any handle currently active.
  57. /// </summary>
  58. /// <returns>True if a handle is active.</returns>
  59. internal bool IsHandleActive()
  60. {
  61. return Internal_IsHandleActive(mCachedPtr);
  62. }
  63. /// <summary>
  64. /// Deselects any currently active handles.
  65. /// </summary>
  66. internal void ClearHandleSelection()
  67. {
  68. Internal_ClearHandleSelection(mCachedPtr);
  69. }
  70. /// <summary>
  71. /// Attempts to select a scene object under the pointer position.
  72. /// </summary>
  73. /// <param name="pointerPos">Position of the pointer relative to the scene camera viewport.</param>
  74. /// <param name="controlHeld">Should this selection add to the existing selection, or replace it.</param>
  75. internal void PickObject(Vector2I pointerPos, bool controlHeld)
  76. {
  77. Internal_PickObject(mCachedPtr, pointerPos, controlHeld);
  78. }
  79. [MethodImpl(MethodImplOptions.InternalCall)]
  80. private static extern void Internal_Create(SceneViewHandler managedInstance, IntPtr parentWindow, IntPtr camera);
  81. [MethodImpl(MethodImplOptions.InternalCall)]
  82. private static extern void Internal_Update(IntPtr thisPtr);
  83. [MethodImpl(MethodImplOptions.InternalCall)]
  84. private static extern void Internal_UpdateHandle(IntPtr thisPtr, Vector2I pointerPos, Vector2I inputDelta);
  85. [MethodImpl(MethodImplOptions.InternalCall)]
  86. private static extern void Internal_UpdateSelection(IntPtr thisPtr);
  87. [MethodImpl(MethodImplOptions.InternalCall)]
  88. private static extern void Internal_TrySelectHandle(IntPtr thisPtr, Vector2I pointerPos);
  89. [MethodImpl(MethodImplOptions.InternalCall)]
  90. private static extern bool Internal_IsHandleActive(IntPtr thisPtr);
  91. [MethodImpl(MethodImplOptions.InternalCall)]
  92. private static extern void Internal_ClearHandleSelection(IntPtr thisPtr);
  93. [MethodImpl(MethodImplOptions.InternalCall)]
  94. private static extern void Internal_PickObject(IntPtr thisPtr, Vector2I pointerPos, bool controlHeld);
  95. }
  96. }