diff --git a/Code/Editor/EditorViewportSettings.cpp b/Code/Editor/EditorViewportSettings.cpp index 2354c6d63a..0fb061d102 100644 --- a/Code/Editor/EditorViewportSettings.cpp +++ b/Code/Editor/EditorViewportSettings.cpp @@ -51,6 +51,9 @@ namespace SandboxEditor constexpr AZStd::string_view CameraOrbitDollyIdSetting = "/Amazon/Preferences/Editor/Camera/OrbitDollyId"; constexpr AZStd::string_view CameraOrbitPanIdSetting = "/Amazon/Preferences/Editor/Camera/OrbitPanId"; constexpr AZStd::string_view CameraFocusIdSetting = "/Amazon/Preferences/Editor/Camera/FocusId"; + constexpr AZStd::string_view CameraDefaultStartingPositionX = "/Amazon/Preferences/Editor/Camera/DefaultStartingPosition/x"; + constexpr AZStd::string_view CameraDefaultStartingPositionY = "/Amazon/Preferences/Editor/Camera/DefaultStartingPosition/y"; + constexpr AZStd::string_view CameraDefaultStartingPositionZ = "/Amazon/Preferences/Editor/Camera/DefaultStartingPosition/z"; template void SetRegistry(const AZStd::string_view setting, T&& value) @@ -110,6 +113,14 @@ namespace SandboxEditor return AZStd::make_unique(); } + AZ::Vector3 DefaultEditorCameraPosition() + { + float xPosition = aznumeric_cast(GetRegistry(CameraDefaultStartingPositionX, 0.0)); + float yPosition = aznumeric_cast(GetRegistry(CameraDefaultStartingPositionY, -10.0)); + float zPosition = aznumeric_cast(GetRegistry(CameraDefaultStartingPositionZ, 4.0)); + return AZ::Vector3(xPosition, yPosition, zPosition); + } + bool GridSnappingEnabled() { return GetRegistry(GridSnappingSetting, false); diff --git a/Code/Editor/EditorViewportSettings.h b/Code/Editor/EditorViewportSettings.h index c1394f7404..5410ed0765 100644 --- a/Code/Editor/EditorViewportSettings.h +++ b/Code/Editor/EditorViewportSettings.h @@ -12,6 +12,7 @@ #include #include +#include #include namespace SandboxEditor @@ -32,6 +33,8 @@ namespace SandboxEditor //! event will fire when a value in the settings registry (editorpreferences.setreg) is modified. SANDBOX_API AZStd::unique_ptr CreateEditorViewportSettingsCallbacks(); + SANDBOX_API AZ::Vector3 DefaultEditorCameraPosition(); + SANDBOX_API bool GridSnappingEnabled(); SANDBOX_API void SetGridSnapping(bool enabled); diff --git a/Code/Editor/EditorViewportWidget.cpp b/Code/Editor/EditorViewportWidget.cpp index e546386462..ea1cd4e9cb 100644 --- a/Code/Editor/EditorViewportWidget.cpp +++ b/Code/Editor/EditorViewportWidget.cpp @@ -166,9 +166,6 @@ EditorViewportWidget::EditorViewportWidget(const QString& name, QWidget* parent) m_defaultViewTM.SetIdentity(); - //Set the camera position to a more sensible default. - m_defaultViewTM.SetTranslation(Vec3(0.f, -10.f, 4.f)); - if (GetIEditor()->GetViewManager()->GetSelectedViewport() == nullptr) { GetIEditor()->GetViewManager()->SelectViewport(this); @@ -626,16 +623,10 @@ void EditorViewportWidget::OnEditorNotifyEvent(EEditorNotifyEvent event) PopDisableRendering(); { - AZ::Aabb terrainAabb = AZ::Aabb::CreateFromPoint(AZ::Vector3::CreateZero()); - AzFramework::Terrain::TerrainDataRequestBus::BroadcastResult(terrainAabb, &AzFramework::Terrain::TerrainDataRequests::GetTerrainAabb); - float sx = terrainAabb.GetXExtent(); - float sy = terrainAabb.GetYExtent(); - Matrix34 viewTM; viewTM.SetIdentity(); - // Initial camera will be at middle of the map at the height of 2 - // meters above the terrain (default terrain height is 32) - viewTM.SetTranslation(Vec3(sx * 0.5f, sy * 0.5f, 34.0f)); + + viewTM.SetTranslation(Vec3(m_editorViewportSettings.DefaultEditorCameraPosition())); SetViewTM(viewTM); UpdateScene(); @@ -650,16 +641,10 @@ void EditorViewportWidget::OnEditorNotifyEvent(EEditorNotifyEvent event) PopDisableRendering(); { - AZ::Aabb terrainAabb = AZ::Aabb::CreateFromPoint(AZ::Vector3::CreateZero()); - AzFramework::Terrain::TerrainDataRequestBus::BroadcastResult(terrainAabb, &AzFramework::Terrain::TerrainDataRequests::GetTerrainAabb); - float sx = terrainAabb.GetXExtent(); - float sy = terrainAabb.GetYExtent(); - Matrix34 viewTM; viewTM.SetIdentity(); - // Initial camera will be at middle of the map at the height of 2 - // meters above the terrain (default terrain height is 32) - viewTM.SetTranslation(Vec3(sx * 0.5f, sy * 0.5f, 34.0f)); + + viewTM.SetTranslation(Vec3(m_editorViewportSettings.DefaultEditorCameraPosition())); SetViewTM(viewTM); } break; @@ -2035,6 +2020,9 @@ void EditorViewportWidget::SetDefaultCamera() m_viewSourceType = ViewSourceType::None; GetViewManager()->SetCameraObjectId(GUID_NULL); SetName(m_defaultViewName); + + // Set the default Editor Camera position. + m_defaultViewTM.SetTranslation(Vec3(m_editorViewportSettings.DefaultEditorCameraPosition())); SetViewTM(m_defaultViewTM); // Synchronize the configured editor viewport FOV to the default camera @@ -2537,6 +2525,11 @@ bool EditorViewportSettings::StickySelectEnabled() const return SandboxEditor::StickySelectEnabled(); } +AZ::Vector3 EditorViewportSettings::DefaultEditorCameraPosition() const +{ + return SandboxEditor::DefaultEditorCameraPosition(); +} + AZ_CVAR_EXTERNED(bool, ed_previewGameInFullscreen_once); bool EditorViewportWidget::ShouldPreviewFullscreen() const diff --git a/Code/Editor/EditorViewportWidget.h b/Code/Editor/EditorViewportWidget.h index 49930a2a13..68ea48c7f5 100644 --- a/Code/Editor/EditorViewportWidget.h +++ b/Code/Editor/EditorViewportWidget.h @@ -78,6 +78,7 @@ struct EditorViewportSettings : public AzToolsFramework::ViewportInteraction::Vi float ManipulatorLineBoundWidth() const override; float ManipulatorCircleBoundWidth() const override; bool StickySelectEnabled() const override; + AZ::Vector3 DefaultEditorCameraPosition() const override; }; // EditorViewportWidget window diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/Viewport/ViewportMessages.h b/Code/Framework/AzToolsFramework/AzToolsFramework/Viewport/ViewportMessages.h index 9d2f7e9b90..9a8e0f1f5f 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/Viewport/ViewportMessages.h +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/Viewport/ViewportMessages.h @@ -198,6 +198,8 @@ namespace AzToolsFramework virtual float ManipulatorCircleBoundWidth() const = 0; //! Returns if sticky select is enabled or not. virtual bool StickySelectEnabled() const = 0; + //! Returns the default viewport camera position. + virtual AZ::Vector3 DefaultEditorCameraPosition() const = 0; protected: ~ViewportSettingsRequests() = default;