#pragma once #include "EngineFrame/Scene/Scene.h" #include "EngineFrame/Render/RenderManager.h" #include "Tool/RefPtr.h" #include #include #include #include #include #include // some switch buttons #define JOY_A 0 #define JOY_B 1 #define JOY_X 2 #define JOY_Y 3 #define JOY_PLUS 10 #define JOY_MINUS 11 #define JOY_LEFT 12 #define JOY_UP 13 #define JOY_RIGHT 14 #define JOY_DOWN 15 class Debug_Actor; class Game { #ifndef __SWITCH__ typedef Uint32 u32; #endif public: // 删除拷贝构造和赋值运算符,确保无法复制 Game(const Game &) = delete; Game &operator=(const Game &) = delete; // 移动构造和赋值也删除,避免意外转移 Game(Game &&) = delete; Game &operator=(Game &&) = delete; // 全局访问点 static Game &GetInstance() { static Game instance; // 局部静态变量,保证只初始化一次 return instance; } void Init(std::function CallBack); void Run(); void HandleEvents(SDL_Event *e); void Update(float deltaTime); void Render(); void Clear(); void MemoryReclaims(); // 切换场景 void ChangeScene(RefPtr scene); // 设定UI层场景对象 void ChangeUIScene(RefPtr scene); // 获取当前游戏层场景 RefPtr GetScene(); RenderManager *GetRenderer(); private: // 构造函数和析构函数设为私有,防止外部创建和销毁 Game(); ~Game(); // 游戏是否运行 bool m_isRunning = true; // 窗口 SDL_Window *m_window; // 渲染器 RenderManager *m_renderer; // 游戏层场景 RefPtr m_scene; // UI层场景 RefPtr m_uiScene; // 帧数 #ifdef __SWITCH__ float m_Settingfps = 5000.0; #else float m_Settingfps = 144.0; #endif // 单帧时间 float m_frameTime = 0.f; // 帧间隔 float m_deltaTime = 0.f; // 每秒内的帧数计数器 u32 m_frameCounter; u32 m_lastFpsPrintTime; // 内存回收计时器 u32 m_lastMemoryPrintTime = 0; // 内存回收间隔 u32 m_memoryPrintInterval = 5000; public: // 屏幕宽高 int Screen_W = 1280; int Screen_H = 720; // 每秒帧率 u32 m_fps; // 单帧时间 u32 m_frameTime_ms; // 节点个数 u32 m_nodeCount = 0; };