Merge pull request #4627 from aws-lumberyard-dev/igarri/Fix-Viewport-camera-locations
Make Go To Location affect the Default Viewport Camera
This commit is contained in:
@@ -75,7 +75,10 @@ void CEditorPreferencesPage_ViewportCamera::Reflect(AZ::SerializeContext& serial
|
|||||||
->Field("CaptureCursorLook", &CameraMovementSettings::m_captureCursorLook)
|
->Field("CaptureCursorLook", &CameraMovementSettings::m_captureCursorLook)
|
||||||
->Field("OrbitYawRotationInverted", &CameraMovementSettings::m_orbitYawRotationInverted)
|
->Field("OrbitYawRotationInverted", &CameraMovementSettings::m_orbitYawRotationInverted)
|
||||||
->Field("PanInvertedX", &CameraMovementSettings::m_panInvertedX)
|
->Field("PanInvertedX", &CameraMovementSettings::m_panInvertedX)
|
||||||
->Field("PanInvertedY", &CameraMovementSettings::m_panInvertedY);
|
->Field("PanInvertedY", &CameraMovementSettings::m_panInvertedY)
|
||||||
|
->Field("DefaultPositionX", &CameraMovementSettings::m_defaultCameraPositionX)
|
||||||
|
->Field("DefaultPositionY", &CameraMovementSettings::m_defaultCameraPositionY)
|
||||||
|
->Field("DefaultPositionZ", &CameraMovementSettings::m_defaultCameraPositionZ);
|
||||||
|
|
||||||
serialize.Class<CameraInputSettings>()
|
serialize.Class<CameraInputSettings>()
|
||||||
->Version(2)
|
->Version(2)
|
||||||
@@ -154,7 +157,16 @@ void CEditorPreferencesPage_ViewportCamera::Reflect(AZ::SerializeContext& serial
|
|||||||
"Invert direction of pan in local Y axis")
|
"Invert direction of pan in local Y axis")
|
||||||
->DataElement(
|
->DataElement(
|
||||||
AZ::Edit::UIHandlers::CheckBox, &CameraMovementSettings::m_captureCursorLook, "Camera Capture Look Cursor",
|
AZ::Edit::UIHandlers::CheckBox, &CameraMovementSettings::m_captureCursorLook, "Camera Capture Look Cursor",
|
||||||
"Should the cursor be captured (hidden) while performing free look");
|
"Should the cursor be captured (hidden) while performing free look")
|
||||||
|
->DataElement(
|
||||||
|
AZ::Edit::UIHandlers::SpinBox, &CameraMovementSettings::m_defaultCameraPositionX, "Default X Camera Position",
|
||||||
|
"Default X Camera Position when a level is opened")
|
||||||
|
->DataElement(
|
||||||
|
AZ::Edit::UIHandlers::SpinBox, &CameraMovementSettings::m_defaultCameraPositionY, "Default Y Camera Position",
|
||||||
|
"Default Y Camera Position when a level is opened")
|
||||||
|
->DataElement(
|
||||||
|
AZ::Edit::UIHandlers::SpinBox, &CameraMovementSettings::m_defaultCameraPositionZ, "Default Z Camera Position",
|
||||||
|
"Default Z Camera Position when a level is opened");
|
||||||
|
|
||||||
editContext->Class<CameraInputSettings>("Camera Input Settings", "")
|
editContext->Class<CameraInputSettings>("Camera Input Settings", "")
|
||||||
->DataElement(
|
->DataElement(
|
||||||
@@ -271,6 +283,12 @@ void CEditorPreferencesPage_ViewportCamera::OnApply()
|
|||||||
SandboxEditor::SetCameraOrbitYawRotationInverted(m_cameraMovementSettings.m_orbitYawRotationInverted);
|
SandboxEditor::SetCameraOrbitYawRotationInverted(m_cameraMovementSettings.m_orbitYawRotationInverted);
|
||||||
SandboxEditor::SetCameraPanInvertedX(m_cameraMovementSettings.m_panInvertedX);
|
SandboxEditor::SetCameraPanInvertedX(m_cameraMovementSettings.m_panInvertedX);
|
||||||
SandboxEditor::SetCameraPanInvertedY(m_cameraMovementSettings.m_panInvertedY);
|
SandboxEditor::SetCameraPanInvertedY(m_cameraMovementSettings.m_panInvertedY);
|
||||||
|
SandboxEditor::SetDefaultCameraEditorPosition(
|
||||||
|
AZ::Vector3(
|
||||||
|
m_cameraMovementSettings.m_defaultCameraPositionX,
|
||||||
|
m_cameraMovementSettings.m_defaultCameraPositionY,
|
||||||
|
m_cameraMovementSettings.m_defaultCameraPositionZ
|
||||||
|
));
|
||||||
|
|
||||||
SandboxEditor::SetCameraTranslateForwardChannelId(m_cameraInputSettings.m_translateForwardChannelId);
|
SandboxEditor::SetCameraTranslateForwardChannelId(m_cameraInputSettings.m_translateForwardChannelId);
|
||||||
SandboxEditor::SetCameraTranslateBackwardChannelId(m_cameraInputSettings.m_translateBackwardChannelId);
|
SandboxEditor::SetCameraTranslateBackwardChannelId(m_cameraInputSettings.m_translateBackwardChannelId);
|
||||||
@@ -308,6 +326,11 @@ void CEditorPreferencesPage_ViewportCamera::InitializeSettings()
|
|||||||
m_cameraMovementSettings.m_panInvertedX = SandboxEditor::CameraPanInvertedX();
|
m_cameraMovementSettings.m_panInvertedX = SandboxEditor::CameraPanInvertedX();
|
||||||
m_cameraMovementSettings.m_panInvertedY = SandboxEditor::CameraPanInvertedY();
|
m_cameraMovementSettings.m_panInvertedY = SandboxEditor::CameraPanInvertedY();
|
||||||
|
|
||||||
|
AZ::Vector3 defaultCameraPosition = SandboxEditor::DefaultEditorCameraPosition();
|
||||||
|
m_cameraMovementSettings.m_defaultCameraPositionX = defaultCameraPosition.GetX();
|
||||||
|
m_cameraMovementSettings.m_defaultCameraPositionY = defaultCameraPosition.GetY();
|
||||||
|
m_cameraMovementSettings.m_defaultCameraPositionZ = defaultCameraPosition.GetZ();
|
||||||
|
|
||||||
m_cameraInputSettings.m_translateForwardChannelId = SandboxEditor::CameraTranslateForwardChannelId().GetName();
|
m_cameraInputSettings.m_translateForwardChannelId = SandboxEditor::CameraTranslateForwardChannelId().GetName();
|
||||||
m_cameraInputSettings.m_translateBackwardChannelId = SandboxEditor::CameraTranslateBackwardChannelId().GetName();
|
m_cameraInputSettings.m_translateBackwardChannelId = SandboxEditor::CameraTranslateBackwardChannelId().GetName();
|
||||||
m_cameraInputSettings.m_translateLeftChannelId = SandboxEditor::CameraTranslateLeftChannelId().GetName();
|
m_cameraInputSettings.m_translateLeftChannelId = SandboxEditor::CameraTranslateLeftChannelId().GetName();
|
||||||
|
|||||||
@@ -57,6 +57,9 @@ private:
|
|||||||
bool m_orbitYawRotationInverted;
|
bool m_orbitYawRotationInverted;
|
||||||
bool m_panInvertedX;
|
bool m_panInvertedX;
|
||||||
bool m_panInvertedY;
|
bool m_panInvertedY;
|
||||||
|
float m_defaultCameraPositionX;
|
||||||
|
float m_defaultCameraPositionY;
|
||||||
|
float m_defaultCameraPositionZ;
|
||||||
|
|
||||||
AZ::Crc32 RotateSmoothingVisibility() const
|
AZ::Crc32 RotateSmoothingVisibility() const
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -52,6 +52,9 @@ namespace SandboxEditor
|
|||||||
constexpr AZStd::string_view CameraOrbitDollyIdSetting = "/Amazon/Preferences/Editor/Camera/OrbitDollyId";
|
constexpr AZStd::string_view CameraOrbitDollyIdSetting = "/Amazon/Preferences/Editor/Camera/OrbitDollyId";
|
||||||
constexpr AZStd::string_view CameraOrbitPanIdSetting = "/Amazon/Preferences/Editor/Camera/OrbitPanId";
|
constexpr AZStd::string_view CameraOrbitPanIdSetting = "/Amazon/Preferences/Editor/Camera/OrbitPanId";
|
||||||
constexpr AZStd::string_view CameraFocusIdSetting = "/Amazon/Preferences/Editor/Camera/FocusId";
|
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<typename T>
|
template<typename T>
|
||||||
void SetRegistry(const AZStd::string_view setting, T&& value)
|
void SetRegistry(const AZStd::string_view setting, T&& value)
|
||||||
@@ -111,6 +114,21 @@ namespace SandboxEditor
|
|||||||
return AZStd::make_unique<EditorViewportSettingsCallbacksImpl>();
|
return AZStd::make_unique<EditorViewportSettingsCallbacksImpl>();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
AZ::Vector3 DefaultEditorCameraPosition()
|
||||||
|
{
|
||||||
|
float xPosition = aznumeric_cast<float>(GetRegistry(CameraDefaultStartingPositionX, 0.0));
|
||||||
|
float yPosition = aznumeric_cast<float>(GetRegistry(CameraDefaultStartingPositionY, -10.0));
|
||||||
|
float zPosition = aznumeric_cast<float>(GetRegistry(CameraDefaultStartingPositionZ, 4.0));
|
||||||
|
return AZ::Vector3(xPosition, yPosition, zPosition);
|
||||||
|
}
|
||||||
|
|
||||||
|
void SetDefaultCameraEditorPosition(const AZ::Vector3 defaultCameraPosition)
|
||||||
|
{
|
||||||
|
SetRegistry(CameraDefaultStartingPositionX, defaultCameraPosition.GetX());
|
||||||
|
SetRegistry(CameraDefaultStartingPositionY, defaultCameraPosition.GetY());
|
||||||
|
SetRegistry(CameraDefaultStartingPositionZ, defaultCameraPosition.GetZ());
|
||||||
|
}
|
||||||
|
|
||||||
AZ::u64 MaxItemsShownInAssetBrowserSearch()
|
AZ::u64 MaxItemsShownInAssetBrowserSearch()
|
||||||
{
|
{
|
||||||
return GetRegistry(AssetBrowserMaxItemsShownInSearchSetting, aznumeric_cast<AZ::u64>(50));
|
return GetRegistry(AssetBrowserMaxItemsShownInSearchSetting, aznumeric_cast<AZ::u64>(50));
|
||||||
|
|||||||
@@ -12,6 +12,7 @@
|
|||||||
|
|
||||||
#include <AzCore/Settings/SettingsRegistry.h>
|
#include <AzCore/Settings/SettingsRegistry.h>
|
||||||
#include <AzCore/std/smart_ptr/unique_ptr.h>
|
#include <AzCore/std/smart_ptr/unique_ptr.h>
|
||||||
|
#include <AzCore/Math/Vector3.h>
|
||||||
#include <AzFramework/Input/Channels/InputChannelId.h>
|
#include <AzFramework/Input/Channels/InputChannelId.h>
|
||||||
|
|
||||||
namespace SandboxEditor
|
namespace SandboxEditor
|
||||||
@@ -32,6 +33,9 @@ namespace SandboxEditor
|
|||||||
//! event will fire when a value in the settings registry (editorpreferences.setreg) is modified.
|
//! event will fire when a value in the settings registry (editorpreferences.setreg) is modified.
|
||||||
SANDBOX_API AZStd::unique_ptr<EditorViewportSettingsCallbacks> CreateEditorViewportSettingsCallbacks();
|
SANDBOX_API AZStd::unique_ptr<EditorViewportSettingsCallbacks> CreateEditorViewportSettingsCallbacks();
|
||||||
|
|
||||||
|
SANDBOX_API AZ::Vector3 DefaultEditorCameraPosition();
|
||||||
|
SANDBOX_API void SetDefaultCameraEditorPosition(AZ::Vector3 defaultCameraPosition);
|
||||||
|
|
||||||
SANDBOX_API AZ::u64 MaxItemsShownInAssetBrowserSearch();
|
SANDBOX_API AZ::u64 MaxItemsShownInAssetBrowserSearch();
|
||||||
SANDBOX_API void SetMaxItemsShownInAssetBrowserSearch(AZ::u64 numberOfItemsShown);
|
SANDBOX_API void SetMaxItemsShownInAssetBrowserSearch(AZ::u64 numberOfItemsShown);
|
||||||
|
|
||||||
|
|||||||
@@ -112,7 +112,6 @@ void StartFixedCursorMode(QObject *viewport);
|
|||||||
|
|
||||||
#define RENDER_MESH_TEST_DISTANCE (0.2f)
|
#define RENDER_MESH_TEST_DISTANCE (0.2f)
|
||||||
#define CURSOR_FONT_HEIGHT 8.0f
|
#define CURSOR_FONT_HEIGHT 8.0f
|
||||||
|
|
||||||
namespace AZ::ViewportHelpers
|
namespace AZ::ViewportHelpers
|
||||||
{
|
{
|
||||||
static const char TextCantCreateCameraNoLevel[] = "Cannot create camera when no level is loaded.";
|
static const char TextCantCreateCameraNoLevel[] = "Cannot create camera when no level is loaded.";
|
||||||
@@ -623,16 +622,10 @@ void EditorViewportWidget::OnEditorNotifyEvent(EEditorNotifyEvent event)
|
|||||||
PopDisableRendering();
|
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;
|
Matrix34 viewTM;
|
||||||
viewTM.SetIdentity();
|
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(m_editorViewportSettings.DefaultEditorCameraPosition()));
|
||||||
viewTM.SetTranslation(Vec3(sx * 0.5f, sy * 0.5f, 34.0f));
|
|
||||||
SetViewTM(viewTM);
|
SetViewTM(viewTM);
|
||||||
|
|
||||||
UpdateScene();
|
UpdateScene();
|
||||||
@@ -647,16 +640,10 @@ void EditorViewportWidget::OnEditorNotifyEvent(EEditorNotifyEvent event)
|
|||||||
PopDisableRendering();
|
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;
|
Matrix34 viewTM;
|
||||||
viewTM.SetIdentity();
|
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(m_editorViewportSettings.DefaultEditorCameraPosition()));
|
||||||
viewTM.SetTranslation(Vec3(sx * 0.5f, sy * 0.5f, 34.0f));
|
|
||||||
SetViewTM(viewTM);
|
SetViewTM(viewTM);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
@@ -1345,10 +1332,6 @@ void EditorViewportWidget::keyPressEvent(QKeyEvent* event)
|
|||||||
|
|
||||||
void EditorViewportWidget::SetViewTM(const Matrix34& tm)
|
void EditorViewportWidget::SetViewTM(const Matrix34& tm)
|
||||||
{
|
{
|
||||||
if (m_viewSourceType == ViewSourceType::None)
|
|
||||||
{
|
|
||||||
m_defaultViewTM = tm;
|
|
||||||
}
|
|
||||||
SetViewTM(tm, false);
|
SetViewTM(tm, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1445,6 +1428,10 @@ void EditorViewportWidget::SetViewTM(const Matrix34& camMatrix, bool bMoveOnly)
|
|||||||
"Please report this as a bug."
|
"Please report this as a bug."
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
else if (shouldUpdateObject == ShouldUpdateObject::No)
|
||||||
|
{
|
||||||
|
GetCurrentAtomView()->SetCameraTransform(LYTransformToAZMatrix3x4(camMatrix));
|
||||||
|
}
|
||||||
|
|
||||||
if (m_pressedKeyState == KeyPressedState::PressedThisFrame)
|
if (m_pressedKeyState == KeyPressedState::PressedThisFrame)
|
||||||
{
|
{
|
||||||
@@ -2028,6 +2015,9 @@ void EditorViewportWidget::SetDefaultCamera()
|
|||||||
m_viewSourceType = ViewSourceType::None;
|
m_viewSourceType = ViewSourceType::None;
|
||||||
GetViewManager()->SetCameraObjectId(GUID_NULL);
|
GetViewManager()->SetCameraObjectId(GUID_NULL);
|
||||||
SetName(m_defaultViewName);
|
SetName(m_defaultViewName);
|
||||||
|
|
||||||
|
// Set the default Editor Camera position.
|
||||||
|
m_defaultViewTM.SetTranslation(Vec3(m_editorViewportSettings.DefaultEditorCameraPosition()));
|
||||||
SetViewTM(m_defaultViewTM);
|
SetViewTM(m_defaultViewTM);
|
||||||
|
|
||||||
// Synchronize the configured editor viewport FOV to the default camera
|
// Synchronize the configured editor viewport FOV to the default camera
|
||||||
@@ -2530,6 +2520,11 @@ bool EditorViewportSettings::StickySelectEnabled() const
|
|||||||
return SandboxEditor::StickySelectEnabled();
|
return SandboxEditor::StickySelectEnabled();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
AZ::Vector3 EditorViewportSettings::DefaultEditorCameraPosition() const
|
||||||
|
{
|
||||||
|
return SandboxEditor::DefaultEditorCameraPosition();
|
||||||
|
}
|
||||||
|
|
||||||
AZ_CVAR_EXTERNED(bool, ed_previewGameInFullscreen_once);
|
AZ_CVAR_EXTERNED(bool, ed_previewGameInFullscreen_once);
|
||||||
|
|
||||||
bool EditorViewportWidget::ShouldPreviewFullscreen() const
|
bool EditorViewportWidget::ShouldPreviewFullscreen() const
|
||||||
@@ -2641,5 +2636,4 @@ void EditorViewportWidget::StopFullscreenPreview()
|
|||||||
// Show the main window
|
// Show the main window
|
||||||
MainWindow::instance()->show();
|
MainWindow::instance()->show();
|
||||||
}
|
}
|
||||||
|
|
||||||
#include <moc_EditorViewportWidget.cpp>
|
#include <moc_EditorViewportWidget.cpp>
|
||||||
|
|||||||
@@ -78,6 +78,7 @@ struct EditorViewportSettings : public AzToolsFramework::ViewportInteraction::Vi
|
|||||||
float ManipulatorLineBoundWidth() const override;
|
float ManipulatorLineBoundWidth() const override;
|
||||||
float ManipulatorCircleBoundWidth() const override;
|
float ManipulatorCircleBoundWidth() const override;
|
||||||
bool StickySelectEnabled() const override;
|
bool StickySelectEnabled() const override;
|
||||||
|
AZ::Vector3 DefaultEditorCameraPosition() const override;
|
||||||
};
|
};
|
||||||
|
|
||||||
// EditorViewportWidget window
|
// EditorViewportWidget window
|
||||||
|
|||||||
+2
@@ -46,6 +46,8 @@ namespace AzManipulatorTestFramework
|
|||||||
virtual void UpdateVisibility() = 0;
|
virtual void UpdateVisibility() = 0;
|
||||||
//! Set if sticky select is enabled or not.
|
//! Set if sticky select is enabled or not.
|
||||||
virtual void SetStickySelect(bool enabled) = 0;
|
virtual void SetStickySelect(bool enabled) = 0;
|
||||||
|
//! Get default Editor Camera Position.
|
||||||
|
virtual AZ::Vector3 DefaultEditorCameraPosition() const = 0;
|
||||||
};
|
};
|
||||||
|
|
||||||
//! This interface is used to simulate the manipulator manager while the manipulators are under test.
|
//! This interface is used to simulate the manipulator manager while the manipulators are under test.
|
||||||
|
|||||||
+1
@@ -36,6 +36,7 @@ namespace AzManipulatorTestFramework
|
|||||||
int GetViewportId() const override;
|
int GetViewportId() const override;
|
||||||
void UpdateVisibility() override;
|
void UpdateVisibility() override;
|
||||||
void SetStickySelect(bool enabled) override;
|
void SetStickySelect(bool enabled) override;
|
||||||
|
AZ::Vector3 DefaultEditorCameraPosition() const override;
|
||||||
|
|
||||||
// ViewportInteractionRequestBus overrides ...
|
// ViewportInteractionRequestBus overrides ...
|
||||||
AzFramework::CameraState GetCameraState() override;
|
AzFramework::CameraState GetCameraState() override;
|
||||||
|
|||||||
@@ -120,6 +120,11 @@ namespace AzManipulatorTestFramework
|
|||||||
m_stickySelect = enabled;
|
m_stickySelect = enabled;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
AZ::Vector3 ViewportInteraction::DefaultEditorCameraPosition() const
|
||||||
|
{
|
||||||
|
return {};
|
||||||
|
}
|
||||||
|
|
||||||
void ViewportInteraction::SetGridSize(float size)
|
void ViewportInteraction::SetGridSize(float size)
|
||||||
{
|
{
|
||||||
m_gridSize = size;
|
m_gridSize = size;
|
||||||
|
|||||||
@@ -198,6 +198,8 @@ namespace AzToolsFramework
|
|||||||
virtual float ManipulatorCircleBoundWidth() const = 0;
|
virtual float ManipulatorCircleBoundWidth() const = 0;
|
||||||
//! Returns if sticky select is enabled or not.
|
//! Returns if sticky select is enabled or not.
|
||||||
virtual bool StickySelectEnabled() const = 0;
|
virtual bool StickySelectEnabled() const = 0;
|
||||||
|
//! Returns the default viewport camera position.
|
||||||
|
virtual AZ::Vector3 DefaultEditorCameraPosition() const = 0;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
~ViewportSettingsRequests() = default;
|
~ViewportSettingsRequests() = default;
|
||||||
|
|||||||
Reference in New Issue
Block a user