diff --git a/Source/Editor/Gizmo/GizmoBase.cs b/Source/Editor/Gizmo/GizmoBase.cs
index 57cd62d79..80c3e5012 100644
--- a/Source/Editor/Gizmo/GizmoBase.cs
+++ b/Source/Editor/Gizmo/GizmoBase.cs
@@ -13,6 +13,7 @@ namespace FlaxEditor.Gizmo
public abstract class GizmoBase
{
private IGizmoOwner _owner;
+ private bool _visible = true;
///
/// Gets the gizmo owner.
@@ -34,6 +35,11 @@ namespace FlaxEditor.Gizmo
///
public virtual BoundingSphere FocusBounds => BoundingSphere.Empty;
+ ///
+ /// Gets or sets a value indicating whether this gizmo is visible.
+ ///
+ public bool Visible { get { return _visible; } set { _visible = value; } }
+
///
/// Initializes a new instance of the class.
///
diff --git a/Source/Editor/Options/InputOptions.cs b/Source/Editor/Options/InputOptions.cs
index a759b7247..9b15c0c09 100644
--- a/Source/Editor/Options/InputOptions.cs
+++ b/Source/Editor/Options/InputOptions.cs
@@ -387,6 +387,14 @@ namespace FlaxEditor.Options
[EditorDisplay("Viewport"), EditorOrder(1760)]
public InputBinding ToggleOrthographic = new InputBinding(KeyboardKeys.NumpadDecimal);
+ [DefaultValue(typeof(InputBinding), "G")]
+ [EditorDisplay("Viewport"), EditorOrder(1770)]
+ public InputBinding ToggleGameView = new InputBinding(KeyboardKeys.G);
+
+ [DefaultValue(typeof(InputBinding), "P")]
+ [EditorDisplay("Viewport"), EditorOrder(1770)]
+ public InputBinding ToggleNavMeshVisibility = new InputBinding(KeyboardKeys.P);
+
#endregion
#region Debug Views
diff --git a/Source/Editor/Viewport/EditorViewport.cs b/Source/Editor/Viewport/EditorViewport.cs
index 2af065c68..1e7d2295a 100644
--- a/Source/Editor/Viewport/EditorViewport.cs
+++ b/Source/Editor/Viewport/EditorViewport.cs
@@ -584,7 +584,7 @@ namespace FlaxEditor.Viewport
_cameraButton = new ViewportWidgetButton(string.Format(MovementSpeedTextFormat, _movementSpeed), _editor.Icons.Camera64, cameraCM, false, cameraSpeedTextWidth)
{
Tag = this,
- TooltipText = "Camera Settings",
+ TooltipText = "Camera Settings.",
Parent = _cameraWidget
};
_cameraWidget.Parent = this;
@@ -593,7 +593,7 @@ namespace FlaxEditor.Viewport
_orthographicModeButton = new ViewportWidgetButton(string.Empty, _editor.Icons.CamSpeed32, null, true)
{
Checked = !_isOrtho,
- TooltipText = "Toggle Orthographic/Perspective Mode",
+ TooltipText = "Toggle Orthographic/Perspective Mode.",
Parent = _cameraWidget
};
_orthographicModeButton.Toggled += OnOrthographicModeToggled;
@@ -832,7 +832,7 @@ namespace FlaxEditor.Viewport
ViewWidgetButtonMenu = new ContextMenu();
var viewModeButton = new ViewportWidgetButton("View", SpriteHandle.Invalid, ViewWidgetButtonMenu)
{
- TooltipText = "View properties",
+ TooltipText = "View properties.",
Parent = viewMode
};
viewMode.Parent = this;
@@ -863,8 +863,10 @@ namespace FlaxEditor.Viewport
{
}
});
- viewLayers.AddButton("Reset layers", () => Task.ViewLayersMask = LayersMask.Default).Icon = _editor.Icons.Rotate32;
- viewLayers.AddButton("Disable layers", () => Task.ViewLayersMask = new LayersMask(0));
+ viewLayers.AddButton("Reset layers", () => Task.ViewLayersMask = LayersMask.Default).Icon = Editor.Instance.Icons.Rotate32;
+ viewLayers.AddSeparator();
+ viewLayers.AddButton("Enable all", () => Task.ViewLayersMask = new LayersMask(-1)).Icon = Editor.Instance.Icons.CheckBoxTick12;
+ viewLayers.AddButton("Disable all", () => Task.ViewLayersMask = new LayersMask(0)).Icon = Editor.Instance.Icons.Cross12;
viewLayers.AddSeparator();
var layers = LayersAndTagsSettings.GetCurrentLayers();
if (layers != null && layers.Length > 0)
@@ -904,8 +906,10 @@ namespace FlaxEditor.Viewport
{
}
});
- viewFlags.AddButton("Reset flags", () => Task.ViewFlags = ViewFlags.DefaultEditor).Icon = _editor.Icons.Rotate32;
- viewFlags.AddButton("Disable flags", () => Task.ViewFlags = ViewFlags.None);
+ viewFlags.AddButton("Reset flags", () => Task.ViewFlags = ViewFlags.DefaultEditor).Icon = Editor.Instance.Icons.Rotate32;
+ viewFlags.AddSeparator();
+ viewFlags.AddButton("Enable all", () => Task.ViewFlags = ViewFlags.All).Icon = Editor.Instance.Icons.CheckBoxTick12;
+ viewFlags.AddButton("Disable all", () => Task.ViewFlags = ViewFlags.None).Icon = Editor.Instance.Icons.Cross12;
viewFlags.AddSeparator();
for (int i = 0; i < ViewFlagsValues.Length; i++)
{
diff --git a/Source/Editor/Viewport/MainEditorGizmoViewport.cs b/Source/Editor/Viewport/MainEditorGizmoViewport.cs
index d25a8ab80..3d366809c 100644
--- a/Source/Editor/Viewport/MainEditorGizmoViewport.cs
+++ b/Source/Editor/Viewport/MainEditorGizmoViewport.cs
@@ -25,6 +25,7 @@ namespace FlaxEditor.Viewport
private readonly Editor _editor;
private readonly ContextMenuButton _showGridButton;
private readonly ContextMenuButton _showNavigationButton;
+ private readonly ContextMenuButton _toggleGameViewButton;
private SelectionOutline _customSelectionOutline;
///
@@ -108,6 +109,13 @@ namespace FlaxEditor.Viewport
private EditorSpritesRenderer _editorSpritesRenderer;
private ViewportRubberBandSelector _rubberBandSelector;
+ private bool _gameViewActive;
+ private ViewFlags _preGameViewFlags;
+ private ViewMode _preGameViewViewMode;
+ private bool _gameViewWasGridShown;
+ private bool _gameViewWasFpsCounterShown;
+ private bool _gameViewWasNagivationShown;
+
///
/// Drag and drop handlers
///
@@ -185,6 +193,7 @@ namespace FlaxEditor.Viewport
: base(Object.New(), editor.Undo, editor.Scene.Root)
{
_editor = editor;
+ var inputOptions = _editor.Options.Options.Input;
DragHandlers = new ViewportDragHandlers(this, this, ValidateDragItem, ValidateDragActorType, ValidateDragScriptItem);
// Prepare rendering task
@@ -232,9 +241,14 @@ namespace FlaxEditor.Viewport
_showGridButton.CloseMenuOnClick = false;
// Show navigation widget
- _showNavigationButton = ViewWidgetShowMenu.AddButton("Navigation", () => ShowNavigation = !ShowNavigation);
+ _showNavigationButton = ViewWidgetShowMenu.AddButton("Navigation", inputOptions.ToggleNavMeshVisibility, () => ShowNavigation = !ShowNavigation);
_showNavigationButton.CloseMenuOnClick = false;
+ // Game View
+ ViewWidgetButtonMenu.AddSeparator();
+ _toggleGameViewButton = ViewWidgetButtonMenu.AddButton("Game View", inputOptions.ToggleGameView, ToggleGameView);
+ _toggleGameViewButton.CloseMenuOnClick = false;
+
// Create camera widget
ViewWidgetButtonMenu.AddSeparator();
ViewWidgetButtonMenu.AddButton("Create camera here", CreateCameraAtView);
@@ -259,6 +273,10 @@ namespace FlaxEditor.Viewport
InputActions.Add(options => options.FocusSelection, FocusSelection);
InputActions.Add(options => options.RotateSelection, RotateSelection);
InputActions.Add(options => options.Delete, _editor.SceneEditing.Delete);
+ InputActions.Add(options => options.ToggleNavMeshVisibility, () => ShowNavigation = !ShowNavigation);
+
+ // Game View
+ InputActions.Add(options => options.ToggleGameView, ToggleGameView);
}
///
@@ -373,9 +391,12 @@ namespace FlaxEditor.Viewport
public void DrawEditorPrimitives(GPUContext context, ref RenderContext renderContext, GPUTexture target, GPUTexture targetDepth)
{
// Draw gizmos
- for (int i = 0; i < Gizmos.Count; i++)
+ foreach (var gizmo in Gizmos)
{
- Gizmos[i].Draw(ref renderContext);
+ if (gizmo.Visible)
+ {
+ gizmo.Draw(ref renderContext);
+ }
}
// Draw selected objects debug shapes and visuals
@@ -481,6 +502,36 @@ namespace FlaxEditor.Viewport
TransformGizmo.EndTransforming();
}
+ ///
+ /// Toggles game view view mode on or off.
+ ///
+ public void ToggleGameView()
+ {
+ if (!_gameViewActive)
+ {
+ // Cache flags & values
+ _preGameViewFlags = Task.ViewFlags;
+ _preGameViewViewMode = Task.ViewMode;
+ _gameViewWasGridShown = Grid.Enabled;
+ _gameViewWasFpsCounterShown = ShowFpsCounter;
+ _gameViewWasNagivationShown = ShowNavigation;
+ }
+
+ // Set flags & values
+ Task.ViewFlags = _gameViewActive ? _preGameViewFlags : ViewFlags.DefaultGame;
+ Task.ViewMode = _gameViewActive ? _preGameViewViewMode : ViewMode.Default;
+ ShowFpsCounter = _gameViewActive ? _gameViewWasFpsCounterShown : false;
+ ShowNavigation = _gameViewActive ? _gameViewWasNagivationShown : false;
+ Grid.Enabled = _gameViewActive ? _gameViewWasGridShown : false;
+
+ _gameViewActive = !_gameViewActive;
+
+ TransformGizmo.Visible = !_gameViewActive;
+ SelectionOutline.ShowSelectionOutline = !_gameViewActive;
+
+ _toggleGameViewButton.Icon = _gameViewActive ? Style.Current.CheckBoxTick : SpriteHandle.Invalid;
+ }
+
///
public override void OnLostFocus()
{
diff --git a/Source/Editor/Viewport/PrefabWindowViewport.cs b/Source/Editor/Viewport/PrefabWindowViewport.cs
index a22b4042f..7f2b1a471 100644
--- a/Source/Editor/Viewport/PrefabWindowViewport.cs
+++ b/Source/Editor/Viewport/PrefabWindowViewport.cs
@@ -720,9 +720,12 @@ namespace FlaxEditor.Viewport
public override void DrawEditorPrimitives(GPUContext context, ref RenderContext renderContext, GPUTexture target, GPUTexture targetDepth)
{
// Draw gizmos
- for (int i = 0; i < Gizmos.Count; i++)
+ foreach (var gizmo in Gizmos)
{
- Gizmos[i].Draw(ref renderContext);
+ if (gizmo.Visible)
+ {
+ gizmo.Draw(ref renderContext);
+ }
}
base.DrawEditorPrimitives(context, ref renderContext, target, targetDepth);
diff --git a/Source/Engine/Graphics/Enums.h b/Source/Engine/Graphics/Enums.h
index 107fe3533..64e49e18c 100644
--- a/Source/Engine/Graphics/Enums.h
+++ b/Source/Engine/Graphics/Enums.h
@@ -1094,6 +1094,11 @@ API_ENUM(Attributes="Flags") enum class ViewFlags : uint64
/// Default flags for materials/models previews generating.
///
DefaultAssetPreview = Reflections | Decals | DirectionalLights | PointLights | SpotLights | SkyLights | SpecularLight | AntiAliasing | Bloom | ToneMapping | EyeAdaptation | CameraArtifacts | LensFlares | ContactShadows | Sky | Particles,
+
+ ///
+ /// All flags enabled.
+ ///
+ All = None | DebugDraw | EditorSprites | Reflections | SSR | AO | GI | DirectionalLights | PointLights | SpotLights | SkyLights | Shadows | SpecularLight | AntiAliasing | CustomPostProcess | Bloom | ToneMapping | EyeAdaptation | CameraArtifacts | LensFlares | Decals | DepthOfField | PhysicsDebug | Fog | MotionBlur | ContactShadows | GlobalSDF | Sky | LightsDebug | Particles,
};
DECLARE_ENUM_OPERATORS(ViewFlags);