feat: add play mode pause resume and step controls
This commit is contained in:
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user