Nuevo sistema de escenas mediante el uso de un SceneBuilder polimófico. De esta forma sólo habrá una escena cargada en cada momento.

Actualización de las librerías Vendor Dear ImGui y SDL2 a sus últimas versiones. (Es posible que actualicemos ImGui al "Docking Branch" en un futuro).
Preparación inicial para el renderizado mediante ImGui (SDL+SDL_Renderer). (Hará falta un pequeño rediseño al renderer para hacer posible el renderizado de ImGui fuera de UE).
This commit is contained in:
2022-01-26 21:14:27 +01:00
parent a9180fde92
commit 92f743edf2
109 changed files with 8916 additions and 2320 deletions
+48
View File
@@ -0,0 +1,48 @@
#pragma once
#include "Scene\SceneBuilder.h"
#include "Scene\Scene.h"
#include "Scenes\MainScene.hpp"
#include "Scenes\TestScene2.hpp"
//#include "Logging\Logger.h"
enum LasEscenas
{
mainMenu = 0, nivel1
};
class GameScenes : public UE::SceneBuilder
{
public:
GameScenes()
{
}
UE::Scene* InstanciateScene(int sceneID) override
{
switch (sceneID)
{
case LasEscenas::mainMenu:
{
UE::Scene* sc = new MainScene("Main");
return sc;
break;
}
case LasEscenas::nivel1:
{
UE::Scene* sc = new TestScene2("Test2");
return sc;
break;
}
default:
return nullptr;
break;
}
}
};
+32 -11
View File
@@ -2,7 +2,12 @@
#include <glm\glm.hpp>
#include <ImGui\imgui.h>
#include <ImGui\imgui_impl_sdl.h>
#include <ImGui\imgui_impl_opengl3.h>
#include "UberGame1.h"
#include "GameScenes.hpp"
#include "UberEngine.h"
@@ -35,12 +40,6 @@ void Init()
Game::InitGame();
//Añadimos todas las escenas al Manager. No pasa nada, porque el Manager lo iniciamos después
MainScene* scene1 = new MainScene("Main");
TestScene2* scene2 = new TestScene2("Test2");
Game::GetSceneManager()->AddScene(scene1);
Game::GetSceneManager()->AddScene(scene2);
}
void Load()
@@ -51,7 +50,8 @@ void Load()
//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("Main");
Game::GetSceneManager()->NewLoadScene(LasEscenas::mainMenu);
}
@@ -87,15 +87,33 @@ void Loop()
{
UE::Time::StartFrame();
//TEMP Event Handler:
SDL_Event eventHandler;
while (SDL_PollEvent(&eventHandler) != 0)
{
ImGui_ImplSDL2_ProcessEvent(&eventHandler);
if (eventHandler.type == SDL_QUIT)
{
_quit = true;
}
if (eventHandler.type == SDL_WINDOWEVENT_RESIZED)
{
Game::GetRenderer()->SetScreenSize(eventHandler.window.data1, eventHandler.window.data2);
}
if (eventHandler.type == SDL_KEYDOWN)
{
switch (eventHandler.key.keysym.sym)
{
case SDLK_1:
Game::GetSceneManager()->NewLoadScene(LasEscenas::mainMenu);
break;
case SDLK_2:
Game::GetSceneManager()->NewLoadScene(LasEscenas::nivel1);
break;
default:
break;
}
}
}
const Uint8* keyStates = SDL_GetKeyboardState(NULL);
@@ -107,9 +125,12 @@ void Loop()
{
GAME_LOG_TRACE("FPS: {0} / dT: {1}", 60, UE::Time::deltaTime);
}
//FRAME PHYSICS
//TICK ALL OBJECTS.
if (keyStates[SDL_SCANCODE_1])
{
}
if (keyStates[SDL_SCANCODE_2])
{
}
//Game::GetRenderer()->QueueDrawCall(4, DestR2, test1);
//Game::GetRenderer()->QueueDrawCall(1, DestR, background);
+14 -3
View File
@@ -1,10 +1,18 @@
//#include "UberEngine.h"
#pragma once
#include "Scene\Scene.h"
#include "Render\Renderer.h"
#include "Assets\AssetManager.h"
#include "Drawables\Sprite.h"
#include "Logging\Logger.h"
#include "Time\Time.h"
#include <iostream>
#include <vector>
#include <SDL.h>
class MainScene : public UE::Scene
{
@@ -38,12 +46,13 @@ public:
UE::Renderer* renderer;
renderer = Game::GetRenderer();
glm::vec2 screenSize = Game::GetRenderer()->GetScreenSize();
UE::Sprite& sp1 = sprites.at(0);
glm::vec2 pos = sp1.GetPosition();
if (pos.x > screenSize.x) { pos.x -= 1000; } else { pos.x += 200 * UE::Time::deltaTime; }
if (pos.x > screenSize.x) { pos.x -= 1000; }
else { pos.x += 200 * UE::Time::deltaTime; }
sp1.SetPosition(pos);
@@ -52,6 +61,8 @@ public:
{
renderer->Render(sp);
}
}
void SceneUnload() override
+2
View File
@@ -1,3 +1,5 @@
#pragma once
#include "Scene\Scene.h"
#include <iostream>
+13 -1
View File
@@ -3,12 +3,21 @@
#include "Logging\Logger.h"
#include "Render\Renderer.h"
#include "Assets\AssetManager.h"
#include "Scene\SceneManager.h"
#include "Scene\SceneBuilder.h"
#include "GameScenes.hpp"
//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;
GameScenes Game::_sceneBuilder;
void Game::InitGame()
{
mainRenderer = new UE::Renderer(640, 480, 5);
@@ -20,8 +29,11 @@ void Game::InitGame()
asManager->InitAssetManager();
UE_LOG_INFO("AssetManager Created.");
//Creamos el SceneBuilder de este juego.
_sceneBuilder = GameScenes();
scManager = new UE::SceneManager();
scManager->InitSceneManager();
scManager->InitSceneManager(&_sceneBuilder);
}
void Game::CleanGame()
+4 -1
View File
@@ -5,8 +5,11 @@ namespace UE
class Renderer;
class AssetManager;
class SceneManager;
class SceneBuilder;
}
class GameScenes;
class Game
{
public:
@@ -23,5 +26,5 @@ private:
static UE::AssetManager* asManager;
static UE::SceneManager* scManager;
static GameScenes _sceneBuilder;
};