ProtoTank/Game.hpp

57 lines
1.3 KiB
C++

#pragma once
#include <SFML/Graphics/RenderWindow.hpp>
#include "Engine/Graphics/UI.hpp"
#include "Engine/Graphics/DebugUI.hpp"
#include "Engine/Graphics/3DRenderer.hpp"
#include "Engine/Utils/Timers.hpp"
typedef enum eGameStatus {
GAME_INIT,
GAME_RUNNING,
GAME_QUIT
} GAME_STATUS;
class Game final {
public:
static Game& getInstance(std::shared_ptr<sf::RenderWindow> mainWnd, bool dbgFlag) {
if (smInstance == nullptr)
smInstance = new Game(mainWnd, dbgFlag);
return *smInstance;
}
~Game() = default;
Game(Game&&) = default;
Game& operator= (Game&&) = default;
Game(Game const&) = delete;
Game& operator= (Game const&) = delete;
GAME_STATUS Tick();
void EventMouseMoved(int _x, int _y);
private:
Game(std::shared_ptr<sf::RenderWindow> mainWnd, bool dbgFlag) noexcept(false);
static Game* smInstance;
void Update();
void KeyboardInputsCheck();
void Render();
bool mbDbgModeEnabled;
std::unique_ptr<DebugUI> mDbgUI = nullptr;
SysTimer mSysTimer;
std::unique_ptr<SysTimer> mPerfsTimer = nullptr;
std::shared_ptr<sf::RenderWindow> mMainWindow;
std::shared_ptr<Graphic3DRenderer> mWorld3D;
std::unique_ptr<CockpitUI> mCockpitUI;
std::unique_ptr<WorldUI> mWorldUI;
sf::Vector2i mPrevMousePos = {0, 0};
};