#pragma once #include #include "IProcess.h" #include "ProcessFactory.h" class ProcessManager { std::unique_ptr (*_nextProcConstructFunc)(); std::unique_ptr _curProcess; public: constexpr ProcessManager() : _nextProcConstructFunc(nullptr) { } void MainLoop(); void SetupDefaultVBlankHandler(); template [[gnu::noinline]] void Goto() { _nextProcConstructFunc = ProcessFactory::Construct; if (_curProcess) _curProcess->Exit(); } IProcess* GetRunningProcess() { return _curProcess.get(); } };