Fix play mode runtime scene replacement
This commit is contained in:
@@ -3,6 +3,7 @@
|
||||
#include "Core/EditorContext.h"
|
||||
#include "Core/EditorEvents.h"
|
||||
#include "Core/PlaySessionController.h"
|
||||
#include "Commands/EntityCommands.h"
|
||||
|
||||
#include <XCEngine/Core/Math/Vector3.h>
|
||||
#include <XCEngine/Input/InputManager.h>
|
||||
@@ -236,5 +237,42 @@ TEST_F(PlaySessionControllerTest, GameViewInputFramesDriveAndReleaseRuntimeInput
|
||||
m_controller.Detach(m_context);
|
||||
}
|
||||
|
||||
TEST_F(PlaySessionControllerTest, RuntimeSceneUndoRedoRebindsPlaySessionBeforeStop) {
|
||||
auto* editorEntity = m_context.GetSceneManager().CreateEntity("Persistent");
|
||||
ASSERT_NE(editorEntity, nullptr);
|
||||
const uint64_t editorEntityId = editorEntity->GetID();
|
||||
|
||||
ASSERT_TRUE(m_controller.StartPlay(m_context));
|
||||
ASSERT_EQ(m_context.GetRuntimeMode(), EditorRuntimeMode::Play);
|
||||
|
||||
const auto* runtimeSceneBeforeUndo = m_context.GetSceneManager().GetScene();
|
||||
ASSERT_NE(runtimeSceneBeforeUndo, nullptr);
|
||||
ASSERT_EQ(m_controller.GetRuntimeScene(), runtimeSceneBeforeUndo);
|
||||
|
||||
auto* runtimeEntity = Commands::CreateEmptyEntity(m_context, nullptr, "Create Runtime Entity", "RuntimeOnly");
|
||||
ASSERT_NE(runtimeEntity, nullptr);
|
||||
const uint64_t runtimeEntityId = runtimeEntity->GetID();
|
||||
ASSERT_EQ(m_controller.GetRuntimeScene(), m_context.GetSceneManager().GetScene());
|
||||
|
||||
m_context.GetUndoManager().Undo();
|
||||
const auto* runtimeSceneAfterUndo = m_context.GetSceneManager().GetScene();
|
||||
ASSERT_NE(runtimeSceneAfterUndo, nullptr);
|
||||
EXPECT_NE(runtimeSceneAfterUndo, runtimeSceneBeforeUndo);
|
||||
EXPECT_EQ(m_controller.GetRuntimeScene(), runtimeSceneAfterUndo);
|
||||
EXPECT_EQ(m_context.GetSceneManager().GetEntity(runtimeEntityId), nullptr);
|
||||
|
||||
m_context.GetUndoManager().Redo();
|
||||
const auto* runtimeSceneAfterRedo = m_context.GetSceneManager().GetScene();
|
||||
ASSERT_NE(runtimeSceneAfterRedo, nullptr);
|
||||
EXPECT_NE(runtimeSceneAfterRedo, runtimeSceneAfterUndo);
|
||||
EXPECT_EQ(m_controller.GetRuntimeScene(), runtimeSceneAfterRedo);
|
||||
EXPECT_NE(m_context.GetSceneManager().GetEntity(runtimeEntityId), nullptr);
|
||||
|
||||
ASSERT_TRUE(m_controller.StopPlay(m_context));
|
||||
EXPECT_EQ(m_context.GetRuntimeMode(), EditorRuntimeMode::Edit);
|
||||
ASSERT_NE(m_context.GetSceneManager().GetEntity(editorEntityId), nullptr);
|
||||
EXPECT_EQ(m_context.GetSceneManager().GetEntity(runtimeEntityId), nullptr);
|
||||
}
|
||||
|
||||
} // namespace
|
||||
} // namespace XCEngine::Editor
|
||||
|
||||
Reference in New Issue
Block a user