diff options
author | jfons <joan.fonssanchez@gmail.com> | 2019-10-23 11:46:26 +0200 |
---|---|---|
committer | JFonS <joan.fonssanchez@gmail.com> | 2020-03-08 23:38:29 +0100 |
commit | 7055a926ff809776ce99930ce650908eeeb0d076 (patch) | |
tree | e7bb47dfe4ee247170eac168cf1f08e7fa896415 /editor/plugins/spatial_editor_plugin.h | |
parent | 78adce833bce49ef1bf1503956a6162a1c6dd8b2 (diff) | |
download | redot-engine-7055a926ff809776ce99930ce650908eeeb0d076.tar.gz |
Add rotation widget to 3D viewport
Diffstat (limited to 'editor/plugins/spatial_editor_plugin.h')
-rw-r--r-- | editor/plugins/spatial_editor_plugin.h | 48 |
1 files changed, 47 insertions, 1 deletions
diff --git a/editor/plugins/spatial_editor_plugin.h b/editor/plugins/spatial_editor_plugin.h index a4d6b13389..8a10ef935c 100644 --- a/editor/plugins/spatial_editor_plugin.h +++ b/editor/plugins/spatial_editor_plugin.h @@ -33,6 +33,7 @@ #include "editor/editor_node.h" #include "editor/editor_plugin.h" +#include "editor/editor_scale.h" #include "scene/3d/immediate_geometry.h" #include "scene/3d/light.h" #include "scene/3d/visual_instance.h" @@ -41,6 +42,7 @@ class Camera; class SpatialEditor; class EditorSpatialGizmoPlugin; +class SpatialEditorViewport; class ViewportContainer; class EditorSpatialGizmo : public SpatialGizmo { @@ -138,10 +140,48 @@ public: ~EditorSpatialGizmo(); }; +class ViewportRotationControl : public Control { + GDCLASS(ViewportRotationControl, Control); + + struct Axis2D { + Vector2i screen_point; + float z_axis = -99.0; + int axis = -1; + }; + + struct Axis2DCompare { + _FORCE_INLINE_ bool operator()(const Axis2D &l, const Axis2D &r) const { + return l.z_axis < r.z_axis; + } + }; + + SpatialEditorViewport *viewport = nullptr; + Vector<Color> axis_colors; + Vector<int> axis_menu_options; + bool orbiting = false; + int focused_axis = -2; + + const float AXIS_CIRCLE_RADIUS = 8.0f * EDSCALE; + +protected: + static void _bind_methods(); + void _notification(int p_what); + void _gui_input(Ref<InputEvent> p_event); + void _draw(); + void _draw_axis(const Axis2D &p_axis); + void _get_sorted_axis(Vector<Axis2D> &r_axis); + void _update_focus(); + void _on_mouse_exited(); + +public: + void set_viewport(SpatialEditorViewport *p_viewport); +}; + class SpatialEditorViewport : public Control { GDCLASS(SpatialEditorViewport, Control); friend class SpatialEditor; + friend class ViewportRotationControl; enum { VIEW_TOP, @@ -179,6 +219,7 @@ class SpatialEditorViewport : public Control { VIEW_DISPLAY_DEBUG_ROUGHNESS_LIMITER, VIEW_LOCK_ROTATION, VIEW_CINEMATIC_PREVIEW, + VIEW_AUTO_ORTHOGONAL, VIEW_MAX }; @@ -199,6 +240,7 @@ private: int index; String name; void _menu_option(int p_option); + void _set_auto_orthogonal(); Spatial *preview_node; AABB *preview_bounds; Vector<String> selected_files; @@ -223,6 +265,7 @@ private: Camera *camera; bool transforming; bool orthogonal; + bool auto_orthogonal; bool lock_rotation; float gizmo_scale; @@ -231,10 +274,13 @@ private: TextureRect *crosshair; Label *info_label; - Label *fps_label; Label *cinema_label; Label *locked_label; + VBoxContainer *top_right_vbox; + ViewportRotationControl *rotation_control; + Label *fps_label; + struct _RayResult { Spatial *item; |