Files
DNF_DEV/source/EngineCore/Game.h

103 lines
2.1 KiB
C++

#pragma once
#include "EngineFrame/Scene/Scene.h"
#include "EngineFrame/Render/RenderManager.h"
#include "Tool/RefPtr.h"
#include <SDL.h>
#include <SDL_image.h>
#include <SDL_mixer.h>
#include <SDL_ttf.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
{
#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<void()> CallBack);
void Run();
void HandleEvents(SDL_Event *e);
void Update(float deltaTime);
void Render();
void Clear();
// 切换场景
void ChangeScene(RefPtr<Scene> scene);
// 设定UI层场景对象
void ChangeUIScene(RefPtr<Scene> scene);
RenderManager *GetRenderer();
private:
// 构造函数和析构函数设为私有,防止外部创建和销毁
Game();
~Game();
// 游戏是否运行
bool m_isRunning = true;
// 窗口
SDL_Window *m_window;
// 渲染器
RenderManager *m_renderer;
// 游戏层场景
RefPtr<Scene> m_scene;
// UI层场景
RefPtr<Scene> m_uiScene;
// 帧数
#ifdef __SWITCH__
float m_Settingfps = 5000.0;
#else
float m_Settingfps = 5000.0;
#endif
// 单帧时间
float m_frameTime = 0.f;
// 帧间隔
float m_deltaTime = 0.f;
// 每秒内的帧数计数器
u32 m_frameCounter;
u32 m_lastFpsPrintTime;
public:
// 屏幕宽高
int Screen_W = 1280;
int Screen_H = 720;
// 每秒帧率
u32 m_fps;
// 单帧时间
u32 m_frameTime_ms;
// 节点个数
u32 m_nodeCount = 0;
};