Formalize scene viewport HUD overlay
This commit is contained in:
@@ -23,6 +23,10 @@ set(EDITOR_TEST_SOURCES
|
||||
test_editor_console_sink.cpp
|
||||
test_editor_script_assembly_builder.cpp
|
||||
test_editor_script_assembly_builder_utils.cpp
|
||||
${CMAKE_BINARY_DIR}/_deps/imgui-src/imgui.cpp
|
||||
${CMAKE_BINARY_DIR}/_deps/imgui-src/imgui_draw.cpp
|
||||
${CMAKE_BINARY_DIR}/_deps/imgui-src/imgui_tables.cpp
|
||||
${CMAKE_BINARY_DIR}/_deps/imgui-src/imgui_widgets.cpp
|
||||
${CMAKE_SOURCE_DIR}/editor/src/Core/EditorConsoleSink.cpp
|
||||
${CMAKE_SOURCE_DIR}/editor/src/Scripting/EditorScriptAssemblyBuilder.cpp
|
||||
${CMAKE_SOURCE_DIR}/editor/src/Core/UndoManager.cpp
|
||||
@@ -33,6 +37,8 @@ set(EDITOR_TEST_SOURCES
|
||||
${CMAKE_SOURCE_DIR}/editor/src/Viewport/SceneViewportMoveGizmo.cpp
|
||||
${CMAKE_SOURCE_DIR}/editor/src/Viewport/SceneViewportRotateGizmo.cpp
|
||||
${CMAKE_SOURCE_DIR}/editor/src/Viewport/SceneViewportScaleGizmo.cpp
|
||||
${CMAKE_SOURCE_DIR}/editor/src/Viewport/SceneViewportHudOverlay.cpp
|
||||
${CMAKE_SOURCE_DIR}/editor/src/Viewport/SceneViewportOrientationGizmo.cpp
|
||||
${CMAKE_SOURCE_DIR}/editor/src/Viewport/SceneViewportOverlayBuilder.cpp
|
||||
${CMAKE_SOURCE_DIR}/editor/src/Viewport/SceneViewportOverlayProviders.cpp
|
||||
)
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
#include <gtest/gtest.h>
|
||||
|
||||
#include "Viewport/SceneViewportCameraController.h"
|
||||
#include "Viewport/SceneViewportHudOverlay.h"
|
||||
#include "Viewport/SceneViewportMath.h"
|
||||
|
||||
#include <XCEngine/Components/GameObject.h>
|
||||
@@ -64,8 +65,12 @@ XCEngine::Rendering::Passes::InfiniteGridPassData ToInfiniteGridPassData(
|
||||
|
||||
using XCEngine::Editor::BuildSceneViewportAxisDragPlaneNormal;
|
||||
using XCEngine::Editor::SceneViewportCameraController;
|
||||
using XCEngine::Editor::SceneViewportHudOverlayHitKind;
|
||||
using XCEngine::Editor::SceneViewportHudOverlayHitResult;
|
||||
using XCEngine::Editor::BuildSceneViewportProjectionMatrix;
|
||||
using XCEngine::Editor::BuildSceneViewportHudOverlayData;
|
||||
using XCEngine::Editor::BuildSceneViewportViewMatrix;
|
||||
using XCEngine::Editor::HitTestSceneViewportHudOverlay;
|
||||
using XCEngine::Editor::ProjectSceneViewportWorldPoint;
|
||||
using XCEngine::Editor::SceneViewportOverlayData;
|
||||
using XCEngine::Components::GameObject;
|
||||
@@ -267,3 +272,38 @@ TEST(SceneViewportOverlayRenderer_Test, BuildSceneViewportAxisDragPlaneNormalFal
|
||||
EXPECT_NEAR(Vector3::Dot(planeNormal, Vector3::Right()), 0.0f, 1e-4f);
|
||||
EXPECT_GT(planeNormal.SqrMagnitude(), 0.5f);
|
||||
}
|
||||
|
||||
TEST(SceneViewportOverlayRenderer_Test, BuildSceneViewportHudOverlayDataTracksVisibilityIntent) {
|
||||
SceneViewportOverlayData overlay = {};
|
||||
overlay.valid = true;
|
||||
|
||||
const auto visibleHud = BuildSceneViewportHudOverlayData(overlay);
|
||||
const auto hiddenHud = BuildSceneViewportHudOverlayData(overlay, false);
|
||||
|
||||
EXPECT_TRUE(visibleHud.HasVisibleElements());
|
||||
EXPECT_FALSE(hiddenHud.HasVisibleElements());
|
||||
}
|
||||
|
||||
TEST(SceneViewportOverlayRenderer_Test, HitTestSceneViewportHudOverlaySkipsInvalidOrHiddenOverlay) {
|
||||
const SceneViewportHudOverlayHitResult invalidHit =
|
||||
HitTestSceneViewportHudOverlay({}, ImVec2(0.0f, 0.0f), ImVec2(200.0f, 200.0f), ImVec2(100.0f, 100.0f));
|
||||
EXPECT_EQ(invalidHit.kind, SceneViewportHudOverlayHitKind::None);
|
||||
|
||||
SceneViewportOverlayData overlay = {};
|
||||
overlay.valid = true;
|
||||
overlay.cameraPosition = Vector3(0.0f, 0.0f, -5.0f);
|
||||
overlay.cameraForward = Vector3::Forward();
|
||||
overlay.cameraRight = Vector3::Right();
|
||||
overlay.cameraUp = Vector3::Up();
|
||||
overlay.verticalFovDegrees = 60.0f;
|
||||
overlay.nearClipPlane = 0.03f;
|
||||
overlay.farClipPlane = 2000.0f;
|
||||
|
||||
const SceneViewportHudOverlayHitResult hiddenHit =
|
||||
HitTestSceneViewportHudOverlay(
|
||||
BuildSceneViewportHudOverlayData(overlay, false),
|
||||
ImVec2(0.0f, 0.0f),
|
||||
ImVec2(200.0f, 200.0f),
|
||||
ImVec2(100.0f, 100.0f));
|
||||
EXPECT_EQ(hiddenHit.kind, SceneViewportHudOverlayHitKind::None);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user