149 lines
3.8 KiB
C++
Executable File
149 lines
3.8 KiB
C++
Executable File
#include "Game.h"
|
|
#include "AnimatedModel.h"
|
|
#include "BoneAnimatedModel.h"
|
|
#include "Utils.h"
|
|
#include "Inventory.h" // Add this include
|
|
#include "OpenGlExtensions.h"
|
|
#include <iostream>
|
|
|
|
namespace ZL
|
|
{
|
|
|
|
Game::Game()
|
|
: window(nullptr)
|
|
, glContext(nullptr)
|
|
, newTickCount(0)
|
|
, lastTickCount(0)
|
|
, renderer(renderSystem.getRenderer()) // Инициализация ссылки на renderer
|
|
{
|
|
}
|
|
|
|
Game::~Game() {
|
|
if (glContext) {
|
|
SDL_GL_DeleteContext(glContext);
|
|
}
|
|
if (window) {
|
|
SDL_DestroyWindow(window);
|
|
}
|
|
SDL_Quit();
|
|
}
|
|
|
|
void Game::setup() {
|
|
glContext = SDL_GL_CreateContext(ZL::Environment::window);
|
|
|
|
ZL::BindOpenGlFunctions();
|
|
ZL::CheckGlError();
|
|
|
|
std::cout << "Hello 1" << std::endl;
|
|
|
|
// Initialize renderer
|
|
|
|
#ifdef EMSCRIPTEN
|
|
renderer.shaderManager.AddShaderFromFiles("default", "./default.vertex", "./default_web.fragment");
|
|
renderer.shaderManager.AddShaderFromFiles("defaultColor", "./defaultColor.vertex", "./defaultColor_web.fragment");
|
|
renderer.shaderManager.AddShaderFromFiles("defaultHideCam", "./defaultHideCam.vertex", "./defaultHideCam_web.fragment");
|
|
#else
|
|
renderer.shaderManager.AddShaderFromFiles("default", "./default.vertex", "./default_desktop.fragment");
|
|
renderer.shaderManager.AddShaderFromFiles("defaultColor", "./defaultColor.vertex", "./defaultColor_desktop.fragment");
|
|
renderer.shaderManager.AddShaderFromFiles("defaultHideCam", "./defaultHideCam.vertex", "./defaultHideCam_desktop.fragment");
|
|
#endif
|
|
|
|
|
|
// Initialize game objects
|
|
std::cout << "Hello 2" << std::endl;
|
|
|
|
gameObjects.initialize();
|
|
|
|
std::cout << "Hello 3" << std::endl;
|
|
|
|
renderer.InitOpenGL();
|
|
|
|
}
|
|
|
|
void Game::drawScene() {
|
|
// Вместо прямого рисования используем RenderSystem
|
|
renderSystem.drawScene(gameObjects);
|
|
}
|
|
|
|
void Game::processTickCount() {
|
|
|
|
if (Environment::finalIsGood)
|
|
{
|
|
return;
|
|
}
|
|
if (Environment::finalIsBad)
|
|
{
|
|
return;
|
|
}
|
|
|
|
if (Environment::gameIsLoading)
|
|
{
|
|
if (gameObjects.loadingFunctions.size() != 0)
|
|
{
|
|
bool result = gameObjects.loadingFunctions.begin()->operator()();
|
|
if (result)
|
|
{
|
|
gameObjects.loadingFunctions.erase(gameObjects.loadingFunctions.begin());
|
|
}
|
|
}
|
|
else
|
|
{
|
|
Environment::gameIsLoading = false;
|
|
}
|
|
return;
|
|
}
|
|
|
|
if (lastTickCount == 0) {
|
|
lastTickCount = SDL_GetTicks64();
|
|
return;
|
|
}
|
|
|
|
newTickCount = SDL_GetTicks64();
|
|
if (newTickCount - lastTickCount > CONST_TIMER_INTERVAL) {
|
|
size_t delta = (newTickCount - lastTickCount > CONST_MAX_TIME_INTERVAL) ?
|
|
CONST_MAX_TIME_INTERVAL : newTickCount - lastTickCount;
|
|
|
|
gameObjects.updateScene(delta);
|
|
|
|
lastTickCount = newTickCount;
|
|
}
|
|
}
|
|
|
|
void Game::render() {
|
|
SDL_GL_MakeCurrent(ZL::Environment::window, glContext);
|
|
ZL::CheckGlError();
|
|
|
|
glClearColor(0.0f, 1.0f, 0.0f, 1.0f);
|
|
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
|
|
|
|
drawScene();
|
|
processTickCount();
|
|
|
|
SDL_GL_SwapWindow(ZL::Environment::window);
|
|
}
|
|
|
|
void Game::update() {
|
|
SDL_Event event;
|
|
while (SDL_PollEvent(&event)) {
|
|
if (event.type == SDL_QUIT) {
|
|
if (gameObjects.loadingThread.joinable())
|
|
{
|
|
gameObjects.loadingThread.join();
|
|
}
|
|
#ifdef AUDIO
|
|
gameObjects.audioPlayerAsync.exit();
|
|
#endif
|
|
Environment::exitGameLoop = true;
|
|
|
|
}
|
|
|
|
if (!Environment::gameIsLoading)
|
|
{
|
|
gameObjects.handleEvent(event);
|
|
}
|
|
|
|
}
|
|
render();
|
|
}
|
|
|
|
} // namespace ZL
|