Files
XCEngine/editor/src/Core/PlaySessionController.h

56 lines
1.6 KiB
C++

#pragma once
#include "EditorRuntimeMode.h"
#include "SceneSnapshot.h"
#include "Core/EditorEvents.h"
#include <XCEngine/Scene/RuntimeLoop.h>
#include <cstddef>
#include <cstdint>
namespace XCEngine {
namespace Editor {
class IEditorContext;
class PlaySessionController {
public:
void Attach(IEditorContext& context);
void Detach(IEditorContext& context);
void Update(IEditorContext& context, float deltaTime);
bool StartPlay(IEditorContext& context);
bool StopPlay(IEditorContext& context);
bool PausePlay(IEditorContext& context);
bool ResumePlay(IEditorContext& context);
bool StepPlay(IEditorContext& context);
::XCEngine::Components::Scene* GetRuntimeScene() const { return m_runtimeLoop.GetScene(); }
private:
void ResetRuntimeInputBridge();
void ApplyGameViewInputFrame(float deltaTime);
void EnsureRuntimeSceneSyncSubscription(IEditorContext& context);
void ClearRuntimeSceneSyncSubscription(IEditorContext& context);
void SyncRuntimeSceneIfNeeded(IEditorContext& context);
uint64_t m_playStartRequestedHandlerId = 0;
uint64_t m_playStopRequestedHandlerId = 0;
uint64_t m_playPauseRequestedHandlerId = 0;
uint64_t m_playResumeRequestedHandlerId = 0;
uint64_t m_playStepRequestedHandlerId = 0;
uint64_t m_gameViewInputFrameHandlerId = 0;
uint64_t m_runtimeSceneChangedHandlerId = 0;
SceneSnapshot m_editorSnapshot = {};
GameViewInputFrameEvent m_pendingGameViewInput = {};
GameViewInputFrameEvent m_appliedGameViewInput = {};
bool m_hasPendingGameViewInput = false;
XCEngine::Components::RuntimeLoop m_runtimeLoop;
};
} // namespace Editor
} // namespace XCEngine