#pragma once #include #include namespace extra2d { /** * @brief 导演类 * * 主循环管理器,协调调度器和服务管理器 */ class Director { public: static Director& inst(); bool init(); void shutdown(); void mainLoop(float dt); void mainLoopParallel(float dt); Scheduler& sched() { return SCHED; } SvcMgr& svcs() { return SVC_MGR; } float dt() const { return dt_; } float totalTime() const { return totalTime_; } uint64 frameCount() const { return frameCount_; } void pause(); void resume(); bool isPaused() const { return paused_; } void setTimeScale(float scale); private: Director() = default; float dt_ = 0.0f; float totalTime_ = 0.0f; float fixedAccumulator_ = 0.0f; float fixedDt_ = 1.0f / 60.0f; uint64 frameCount_ = 0; bool paused_ = false; bool inited_ = false; }; #define DIRECTOR extra2d::Director::inst() } // namespace extra2d