SwitchGame/source/EngineCore/Game.h

91 lines
2.0 KiB
C++
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#pragma once
#include "EngineFrame/Scene/Scene.h"
#include "Tool/RefPtr.h"
#include <SDL.h>
#include <SDL_image.h>
#include <SDL_mixer.h>
#include <SDL_ttf.h>
#include <switch.h>
#include <memory>
#include <functional>
// 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
{
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<void()> CallBack);
void Run();
void HandleEvents(SDL_Event *e);
void Update(float deltaTime);
void Render(float deltaTime);
void Clear();
// 切换场景
void ChangeScene(RefPtr<Scene> scene);
// 设定UI层场景对象
void ChangeUIScene(RefPtr<Scene> scene);
SDL_Renderer *GetRenderer();
private:
// 构造函数和析构函数设为私有,防止外部创建和销毁
Game();
~Game();
// 游戏是否运行
bool m_isRunning = true;
// 窗口
SDL_Window *m_window;
// 渲染器
SDL_Renderer *m_renderer;
// 游戏层场景
RefPtr<Scene> m_scene;
// UI层场景
RefPtr<Scene> m_uiScene;
// 屏幕宽高
int Screen_W = 1280;
int Screen_H = 720;
// 帧数
int m_fps = 10000;
u32 m_frameTime;
float m_deltaTime;
// 新增:帧率统计变量
u32 m_frameCount; // 每秒内的帧数计数器
u32 m_lastFpsPrintTime; // 上一次输出帧率的时间(毫秒,基于 SDL_GetTicks()
// 调试信息Actor
RefPtr<Debug_Actor> m_DebugInfoActor;
};