feat: add play mode pause resume and step controls

This commit is contained in:
2026-04-02 19:56:07 +08:00
parent fb15d60be9
commit 1f29dfd611
11 changed files with 270 additions and 3 deletions

View File

@@ -79,5 +79,46 @@ TEST_F(PlaySessionControllerTest, StartAndStopRequestsRouteThroughEventBus) {
m_controller.Detach(m_context);
}
TEST_F(PlaySessionControllerTest, PauseResumeAndStepRequestsDrivePlayStateMachine) {
auto* editorEntity = m_context.GetSceneManager().CreateEntity("Persistent");
ASSERT_NE(editorEntity, nullptr);
int pausedCount = 0;
int resumedCount = 0;
const uint64_t pausedSubscription = m_context.GetEventBus().Subscribe<PlayModePausedEvent>(
[&](const PlayModePausedEvent&) {
++pausedCount;
});
const uint64_t resumedSubscription = m_context.GetEventBus().Subscribe<PlayModeResumedEvent>(
[&](const PlayModeResumedEvent&) {
++resumedCount;
});
m_controller.Attach(m_context);
m_context.GetEventBus().Publish(PlayModeStartRequestedEvent{});
EXPECT_EQ(m_context.GetRuntimeMode(), EditorRuntimeMode::Play);
m_context.GetEventBus().Publish(PlayModePauseRequestedEvent{});
EXPECT_EQ(m_context.GetRuntimeMode(), EditorRuntimeMode::Paused);
EXPECT_EQ(pausedCount, 1);
m_context.GetEventBus().Publish(PlayModeStepRequestedEvent{});
EXPECT_EQ(m_context.GetRuntimeMode(), EditorRuntimeMode::Paused);
EXPECT_EQ(pausedCount, 1);
EXPECT_EQ(resumedCount, 0);
m_context.GetEventBus().Publish(PlayModeResumeRequestedEvent{});
EXPECT_EQ(m_context.GetRuntimeMode(), EditorRuntimeMode::Play);
EXPECT_EQ(resumedCount, 1);
m_context.GetEventBus().Publish(PlayModeStopRequestedEvent{});
EXPECT_EQ(m_context.GetRuntimeMode(), EditorRuntimeMode::Edit);
m_controller.Detach(m_context);
m_context.GetEventBus().Unsubscribe<PlayModePausedEvent>(pausedSubscription);
m_context.GetEventBus().Unsubscribe<PlayModeResumedEvent>(resumedSubscription);
}
} // namespace
} // namespace XCEngine::Editor