feat: add scene view fly controls
This commit is contained in:
@@ -47,6 +47,7 @@ TEST(SceneViewportCameraController_Test, LookInputRotatesCameraInPlaceAndKeepsDi
|
||||
|
||||
const Vector3 initialPosition = controller.GetPosition();
|
||||
const Vector3 initialFocus = controller.GetFocalPoint();
|
||||
const float initialPitch = controller.GetPitchDegrees();
|
||||
|
||||
SceneViewportCameraInputState input = {};
|
||||
input.viewportHeight = 720.0f;
|
||||
@@ -56,6 +57,7 @@ TEST(SceneViewportCameraController_Test, LookInputRotatesCameraInPlaceAndKeepsDi
|
||||
|
||||
EXPECT_TRUE(NearlyEqual(controller.GetPosition(), initialPosition));
|
||||
EXPECT_FALSE(NearlyEqual(controller.GetFocalPoint(), initialFocus));
|
||||
EXPECT_LT(controller.GetPitchDegrees(), initialPitch);
|
||||
EXPECT_TRUE(NearlyEqual(
|
||||
controller.GetFocalPoint(),
|
||||
controller.GetPosition() + controller.GetForward() * controller.GetDistance(),
|
||||
@@ -69,6 +71,7 @@ TEST(SceneViewportCameraController_Test, OrbitInputRotatesAroundFocalPointAndKee
|
||||
const Vector3 initialPosition = controller.GetPosition();
|
||||
const Vector3 initialFocus = controller.GetFocalPoint();
|
||||
const float initialDistance = controller.GetDistance();
|
||||
const float initialPitch = controller.GetPitchDegrees();
|
||||
|
||||
SceneViewportCameraInputState input = {};
|
||||
input.viewportHeight = 720.0f;
|
||||
@@ -78,6 +81,7 @@ TEST(SceneViewportCameraController_Test, OrbitInputRotatesAroundFocalPointAndKee
|
||||
|
||||
EXPECT_FALSE(NearlyEqual(controller.GetPosition(), initialPosition));
|
||||
EXPECT_TRUE(NearlyEqual(controller.GetFocalPoint(), initialFocus));
|
||||
EXPECT_LT(controller.GetPitchDegrees(), initialPitch);
|
||||
EXPECT_NEAR((controller.GetFocalPoint() - controller.GetPosition()).Magnitude(), initialDistance, 1e-3f);
|
||||
}
|
||||
|
||||
@@ -105,6 +109,26 @@ TEST(SceneViewportCameraController_Test, PanAndZoomUpdateCameraStateConsistently
|
||||
1e-3f));
|
||||
}
|
||||
|
||||
TEST(SceneViewportCameraController_Test, FlyInputMovesCameraAndFocalPointTogether) {
|
||||
SceneViewportCameraController controller;
|
||||
controller.Reset();
|
||||
|
||||
const Vector3 initialPosition = controller.GetPosition();
|
||||
const Vector3 initialFocus = controller.GetFocalPoint();
|
||||
const Vector3 initialOffset = initialFocus - initialPosition;
|
||||
|
||||
SceneViewportCameraInputState input = {};
|
||||
input.viewportHeight = 720.0f;
|
||||
input.deltaTime = 0.5f;
|
||||
input.moveForward = 1.0f;
|
||||
input.moveRight = 1.0f;
|
||||
controller.ApplyInput(input);
|
||||
|
||||
EXPECT_FALSE(NearlyEqual(controller.GetPosition(), initialPosition));
|
||||
EXPECT_FALSE(NearlyEqual(controller.GetFocalPoint(), initialFocus));
|
||||
EXPECT_TRUE(NearlyEqual(controller.GetFocalPoint() - controller.GetPosition(), initialOffset, 1e-3f));
|
||||
}
|
||||
|
||||
TEST(SceneViewportCameraController_Test, FocusMovesPivotWithoutChangingDistance) {
|
||||
SceneViewportCameraController controller;
|
||||
controller.Reset();
|
||||
|
||||
Reference in New Issue
Block a user