Nueva Clase Engine.
Se ha eliminado la antigua clase Game y movido a la nueva clase Engine. La clase Engine, encargada de iniciar las cosas, ahora está en el Engine Además, tiene seguridad en la inicialización. Ya no se inicia el juego si hay error al cargar libs o sistemas.
This commit is contained in:
+42
-31
@@ -6,8 +6,8 @@
|
||||
#include <ImGui/imgui_impl_sdl.h>
|
||||
#include <ImGui/imgui_impl_opengl3.h>
|
||||
|
||||
#include "UberGame1.h"
|
||||
|
||||
#include "Engine.h"
|
||||
#include "UberEngine.h"
|
||||
|
||||
|
||||
@@ -16,7 +16,7 @@
|
||||
|
||||
static bool _quit = false;
|
||||
|
||||
void Init();
|
||||
int Init();
|
||||
void Load();
|
||||
void Loop();
|
||||
void Clean();
|
||||
@@ -24,7 +24,9 @@ void Clean();
|
||||
int main(int argc, char* args[])
|
||||
{
|
||||
|
||||
Init();
|
||||
//Si falla la inicialización, terminamos el juego.
|
||||
if(Init() < 0) { return -1; }
|
||||
|
||||
Load();
|
||||
Loop();
|
||||
Clean();
|
||||
@@ -32,25 +34,28 @@ int main(int argc, char* args[])
|
||||
return 0;
|
||||
}
|
||||
|
||||
void Init()
|
||||
int Init()
|
||||
{
|
||||
UE::Logger::InitLogger();
|
||||
|
||||
Game::InitGame();
|
||||
if(UE::Engine::Init() < 0)
|
||||
{
|
||||
GAME_LOG_CRITICAL("No se ha podido cargar el motor.");
|
||||
return -1;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
void Load()
|
||||
{
|
||||
Game::GetAssetManager()->LoadAssetsFromFile("resources/AssetList/MainAssets.json");
|
||||
Game::GetAssetManager()->ProcessAssetQueue();
|
||||
UE::Engine::GetAssetManager()->LoadAssetsFromFile("resources/AssetList/MainAssets.json");
|
||||
UE::Engine::GetAssetManager()->ProcessAssetQueue();
|
||||
|
||||
|
||||
//Cargamos la escena que queramos tras tener todos los Assets pertinentes cargados.
|
||||
//Si la escena contiene su propio AssetManager y los carga ella misma, no ser� necesario.
|
||||
//Game::GetSceneManager()->LoadScene("Main");
|
||||
Game::GetSceneManager()->LoadScene(new MainScene());
|
||||
Game::GetSceneManager()->SwitchScene("MainScene");
|
||||
UE::Engine::GetSceneManager()->LoadScene(new MainScene());
|
||||
UE::Engine::GetSceneManager()->SwitchScene("MainScene");
|
||||
}
|
||||
|
||||
|
||||
@@ -82,10 +87,17 @@ void Loop()
|
||||
#pragma endregion
|
||||
|
||||
|
||||
//Almacenamos el renderer para ya tenerlo por aquí.
|
||||
UE::Renderer* UE_Renderer = UE::Engine::GetRenderer();
|
||||
|
||||
|
||||
while (!_quit)
|
||||
{
|
||||
UE::Time::StartFrame();
|
||||
|
||||
//Almacenamos la escena actual.
|
||||
UE::Scene* currentScene = UE::Engine::GetSceneManager()->GetCurrentScenePtr();
|
||||
|
||||
//TEMP Event Handler:
|
||||
SDL_Event eventHandler;
|
||||
while (SDL_PollEvent(&eventHandler) != 0)
|
||||
@@ -97,7 +109,7 @@ void Loop()
|
||||
if (io.WantCaptureMouse) { continue; }
|
||||
|
||||
|
||||
Game::GetSceneManager()->GetCurrentScenePtr()->SceneHandleEvents(&eventHandler);
|
||||
currentScene->SceneHandleEvents(&eventHandler);
|
||||
if (eventHandler.type == SDL_QUIT)
|
||||
{
|
||||
_quit = true;
|
||||
@@ -105,17 +117,17 @@ void Loop()
|
||||
if (eventHandler.type == SDL_WINDOWEVENT && eventHandler.window.event == SDL_WINDOWEVENT_RESIZED)
|
||||
{
|
||||
//GAME_LOG_CRITICAL("Window Size chaged {0}x{1}", eventHandler.window.data1, eventHandler.window.data2);
|
||||
Game::GetRenderer()->SetScreenSize(eventHandler.window.data1, eventHandler.window.data2);
|
||||
UE_Renderer->SetScreenSize(eventHandler.window.data1, eventHandler.window.data2);
|
||||
}
|
||||
if (eventHandler.type == SDL_KEYDOWN)
|
||||
{
|
||||
switch (eventHandler.key.keysym.sym)
|
||||
{
|
||||
case SDLK_1:
|
||||
Game::GetSceneManager()->LoadAndSwitchScene(new MainScene());
|
||||
UE::Engine::GetSceneManager()->LoadAndSwitchScene(new MainScene());
|
||||
break;
|
||||
case SDLK_2:
|
||||
Game::GetSceneManager()->LoadAndSwitchScene(new TestScene2());
|
||||
UE::Engine::GetSceneManager()->LoadAndSwitchScene(new TestScene2());
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
@@ -133,32 +145,33 @@ void Loop()
|
||||
GAME_LOG_TRACE("FPS: NULL / dT: {1}", UE::Time::deltaTime);
|
||||
}
|
||||
|
||||
|
||||
if (keyStates[SDL_SCANCODE_W])
|
||||
{
|
||||
glm::ivec2 camPos = Game::GetRenderer()->GetCamPosition();
|
||||
glm::ivec2 camPos = UE_Renderer->GetCamPosition();
|
||||
camPos.y -= 5;
|
||||
Game::GetRenderer()->SetCamPosition(camPos.x, camPos.y);
|
||||
UE_Renderer->SetCamPosition(camPos.x, camPos.y);
|
||||
}
|
||||
if (keyStates[SDL_SCANCODE_S])
|
||||
{
|
||||
glm::ivec2 camPos = Game::GetRenderer()->GetCamPosition();
|
||||
glm::ivec2 camPos = UE_Renderer->GetCamPosition();
|
||||
camPos.y += 5;
|
||||
Game::GetRenderer()->SetCamPosition(camPos.x, camPos.y);
|
||||
UE_Renderer->SetCamPosition(camPos.x, camPos.y);
|
||||
}
|
||||
if (keyStates[SDL_SCANCODE_D])
|
||||
{
|
||||
glm::ivec2 camPos = Game::GetRenderer()->GetCamPosition();
|
||||
glm::ivec2 camPos = UE_Renderer->GetCamPosition();
|
||||
camPos.x += 5;
|
||||
Game::GetRenderer()->SetCamPosition(camPos.x, camPos.y);
|
||||
UE_Renderer->SetCamPosition(camPos.x, camPos.y);
|
||||
}
|
||||
if (keyStates[SDL_SCANCODE_A])
|
||||
{
|
||||
glm::ivec2 camPos = Game::GetRenderer()->GetCamPosition();
|
||||
glm::ivec2 camPos = UE_Renderer->GetCamPosition();
|
||||
camPos.x -= 5;
|
||||
Game::GetRenderer()->SetCamPosition(camPos.x, camPos.y);
|
||||
UE_Renderer->SetCamPosition(camPos.x, camPos.y);
|
||||
}
|
||||
|
||||
Game::GetSceneManager()->GetCurrentScenePtr()->SceneUpdate();
|
||||
currentScene->SceneUpdate();
|
||||
|
||||
//Game::GetRenderer()->QueueDrawCall(4, DestR2, test1);
|
||||
//Game::GetRenderer()->QueueDrawCall(1, DestR, background);
|
||||
@@ -169,20 +182,20 @@ void Loop()
|
||||
//
|
||||
|
||||
//Iniciamos un nuevo Frame.
|
||||
Game::GetRenderer()->NewFrame();
|
||||
UE_Renderer->NewFrame();
|
||||
|
||||
//Renderiza la escena.
|
||||
Game::GetSceneManager()->GetCurrentScenePtr()->SceneRender();
|
||||
currentScene->SceneRender();
|
||||
|
||||
//As� podemos renderizar cosas de ImGui cuando estemos entre NewFrame y EndFrame.
|
||||
bool show = true;
|
||||
ImGui::ShowDemoWindow(&show);
|
||||
|
||||
//Dibuja las cosas del Renderer.
|
||||
Game::GetRenderer()->RenderData();
|
||||
UE_Renderer->RenderData();
|
||||
|
||||
//Terminamos el Frame.
|
||||
Game::GetRenderer()->EndFrame();
|
||||
UE_Renderer->EndFrame();
|
||||
|
||||
UE::Time::EndFrame();
|
||||
|
||||
@@ -193,7 +206,5 @@ void Loop()
|
||||
|
||||
void Clean()
|
||||
{
|
||||
Game::CleanGame();
|
||||
|
||||
SDL_Quit();
|
||||
UE::Engine::Clean();
|
||||
}
|
||||
@@ -33,14 +33,14 @@ public:
|
||||
{
|
||||
UE_LOG_INFO("Escena {0} ha sido cargada", _sceneName);
|
||||
|
||||
UE::AssetManager* as = Game::GetAssetManager();
|
||||
UE::AssetManager* as = UE::Engine::GetAssetManager();
|
||||
UE::Texture* test1Texture = as->getTexture("test1");
|
||||
|
||||
UE::Sprite sp1(test1Texture, 0, 2, glm::vec2(55, 60), glm::vec2(100, 100));
|
||||
|
||||
UE::Sprite sp2(test1Texture, 0, 1, glm::vec2(50, 45), glm::vec2(145, 145));
|
||||
|
||||
UE::Sprite bg(as->getTexture("bg1"), 1, 0, glm::vec2(0, 0), Game::GetRenderer()->GetScreenSize());
|
||||
UE::Sprite bg(as->getTexture("bg1"), 1, 0, glm::vec2(0, 0), UE::Engine::GetRenderer()->GetScreenSize());
|
||||
|
||||
UE::Sprite mapSP(as->getTexture("PruebaMap"), 0, 2, glm::vec2(50, 45), glm::vec2(145, 145));
|
||||
|
||||
@@ -65,9 +65,9 @@ public:
|
||||
//UE_LOG_INFO("Escena {0} UPDATE", _sceneName);
|
||||
|
||||
UE::Renderer* renderer;
|
||||
renderer = Game::GetRenderer();
|
||||
renderer = UE::Engine::GetRenderer();
|
||||
|
||||
glm::vec2 screenSize = Game::GetRenderer()->GetScreenSize();
|
||||
glm::vec2 screenSize = UE::Engine::GetRenderer()->GetScreenSize();
|
||||
|
||||
UE::Sprite& sp1 = sprites.at(0);
|
||||
glm::vec2 pos = sp1.GetPosition();
|
||||
@@ -81,7 +81,7 @@ public:
|
||||
void SceneRender() override
|
||||
{
|
||||
UE::Renderer* renderer;
|
||||
renderer = Game::GetRenderer();
|
||||
renderer = UE::Engine::GetRenderer();
|
||||
|
||||
for (UE::Sprite& sp : sprites)
|
||||
{
|
||||
@@ -239,7 +239,7 @@ private:
|
||||
|
||||
void AssetMngGUI()
|
||||
{
|
||||
UE::AssetManager* asmng = Game::GetAssetManager();
|
||||
UE::AssetManager* asmng = UE::Engine::GetAssetManager();
|
||||
|
||||
ImGui::Begin("Asset Manager Inspector", &assetMngGUI);
|
||||
|
||||
|
||||
@@ -29,7 +29,7 @@ public:
|
||||
|
||||
srand(255);
|
||||
|
||||
UE::AssetManager* as = Game::GetAssetManager();
|
||||
UE::AssetManager* as = UE::Engine::GetAssetManager();
|
||||
|
||||
UE::Texture* tx = as->getTexture("PruebaMap");
|
||||
|
||||
@@ -58,7 +58,7 @@ public:
|
||||
void SceneRender() override
|
||||
{
|
||||
UE::Renderer* renderer;
|
||||
renderer = Game::GetRenderer();
|
||||
renderer = UE::Engine::GetRenderer();
|
||||
|
||||
for (UE::Sprite& sp : sprites)
|
||||
{
|
||||
@@ -88,7 +88,7 @@ public:
|
||||
}
|
||||
if (event->type == SDL_MOUSEBUTTONDOWN)
|
||||
{
|
||||
UE::Renderer* rend = Game::GetRenderer();
|
||||
UE::Renderer* rend = UE::Engine::GetRenderer();
|
||||
glm::ivec2 mPos(event->button.x, event->button.y);
|
||||
glm::ivec2 wPos = rend->ScreenToWorldCoords(mPos);
|
||||
GAME_LOG_TRACE("Posicion del raton: \n\tPantalla: {0}x{1}, Mundo: {2}x{3}: ", mPos.x, mPos.y, wPos.x, wPos.y);
|
||||
|
||||
@@ -1,45 +0,0 @@
|
||||
#include "UberGame1.h"
|
||||
|
||||
#include "Logging/Logger.h"
|
||||
#include "Render/Renderer.h"
|
||||
#include "Assets/AssetManager.h"
|
||||
|
||||
#include "Scene/SceneManager.h"
|
||||
|
||||
//Sobrecarga de SceneBuilder que devuelve las escenas correctas para este juego.
|
||||
//#include "GameScenes.hpp"
|
||||
|
||||
UE::Renderer* Game::mainRenderer;
|
||||
UE::AssetManager* Game::asManager;
|
||||
UE::SceneManager* Game::scManager;
|
||||
|
||||
void Game::InitGame()
|
||||
{
|
||||
//Cargamos el Renderer.
|
||||
//Hay que implementar un sistema de flags o
|
||||
// una struct de configuración para la inicialización del renderer.
|
||||
mainRenderer = new UE::Renderer(640, 480, 5);
|
||||
mainRenderer->InitRenderer();
|
||||
|
||||
UE_LOG_INFO("Renderer Created.");
|
||||
|
||||
//Cargamos el AssetManager
|
||||
asManager = new UE::AssetManager(mainRenderer->GetSDLRenderer());
|
||||
asManager->InitAssetManager();
|
||||
UE_LOG_INFO("AssetManager Created.");
|
||||
|
||||
//Cargamos el SceneManager
|
||||
scManager = new UE::SceneManager();
|
||||
}
|
||||
|
||||
void Game::CleanGame()
|
||||
{
|
||||
asManager->CleanAssetManager();
|
||||
delete asManager;
|
||||
|
||||
mainRenderer->CleanRenderer();
|
||||
delete mainRenderer;
|
||||
|
||||
scManager->CleanSceneManager();
|
||||
delete scManager;
|
||||
}
|
||||
@@ -1,25 +0,0 @@
|
||||
#pragma once
|
||||
|
||||
namespace UE
|
||||
{
|
||||
class Renderer;
|
||||
class AssetManager;
|
||||
class SceneManager;
|
||||
}
|
||||
|
||||
class Game
|
||||
{
|
||||
public:
|
||||
static void InitGame();
|
||||
static void CleanGame();
|
||||
|
||||
inline static UE::Renderer* GetRenderer() { return mainRenderer; }
|
||||
inline static UE::AssetManager* GetAssetManager() { return asManager; }
|
||||
inline static UE::SceneManager* GetSceneManager() { return scManager; }
|
||||
|
||||
|
||||
private:
|
||||
static UE::Renderer* mainRenderer;
|
||||
static UE::AssetManager* asManager;
|
||||
static UE::SceneManager* scManager;
|
||||
};
|
||||
Reference in New Issue
Block a user