47 lines
1.1 KiB
C++
47 lines
1.1 KiB
C++
#pragma once
|
|
|
|
#include <XCEngine/Scene/SceneRuntime.h>
|
|
|
|
#include <cstdint>
|
|
|
|
namespace XCEngine {
|
|
namespace Components {
|
|
|
|
class RuntimeLoop {
|
|
public:
|
|
struct Settings {
|
|
float fixedDeltaTime = 1.0f / 50.0f;
|
|
float maxFrameDeltaTime = 0.1f;
|
|
uint32_t maxFixedStepsPerFrame = 4;
|
|
};
|
|
|
|
explicit RuntimeLoop(Settings settings = {});
|
|
|
|
void SetSettings(const Settings& settings);
|
|
const Settings& GetSettings() const { return m_settings; }
|
|
|
|
void Start(Scene* scene);
|
|
void Stop();
|
|
void ReplaceScene(Scene* scene);
|
|
|
|
void Tick(float deltaTime);
|
|
void Pause();
|
|
void Resume();
|
|
void StepFrame();
|
|
|
|
bool IsRunning() const { return m_sceneRuntime.IsRunning(); }
|
|
bool IsPaused() const { return m_paused; }
|
|
Scene* GetScene() const { return m_sceneRuntime.GetScene(); }
|
|
float GetFixedAccumulator() const { return m_fixedAccumulator; }
|
|
|
|
private:
|
|
SceneRuntime m_sceneRuntime;
|
|
Settings m_settings = {};
|
|
float m_fixedAccumulator = 0.0f;
|
|
bool m_paused = false;
|
|
bool m_stepRequested = false;
|
|
};
|
|
|
|
} // namespace Components
|
|
} // namespace XCEngine
|