Rediseño del sistema de Assets para simplificar las texturas y los "SpriteSheets" que ya no son una clase.
Modificada la clase Sprite para adaptarse al nuevo funcionamiento de las texturas. Extraidas las clases Drawable y Transformable de Sprite, para poder hacer más objetos con esas características. Implementada una clase Time que calcula DeltaTime y limita los FPS. Al fin limpiamos el Main y eliminamos todo este código temporal. Cambios al sistema de escenas, pero se acerca un refactor completo al sistema. Hace bastante desde el último Commit. Ahí va todo. GLHF!
This commit is contained in:
+37
-87
@@ -2,16 +2,14 @@
|
||||
|
||||
#include <glm\glm.hpp>
|
||||
|
||||
#include "UberGame1.h"
|
||||
|
||||
#include "UberEngine.h"
|
||||
|
||||
|
||||
#include "Scenes\MainScene.hpp"
|
||||
#include "Scenes\TestScene2.hpp"
|
||||
|
||||
static UE::Renderer* mainRenderer;
|
||||
static UE::AssetManager* asManager;
|
||||
static UE::SceneManager* scManager;
|
||||
|
||||
static bool _quit = false;
|
||||
|
||||
void Init();
|
||||
@@ -34,37 +32,26 @@ int main(int argc, char* args[])
|
||||
void Init()
|
||||
{
|
||||
UE::Logger::InitLogger();
|
||||
|
||||
mainRenderer = new UE::Renderer(640, 480, 5);
|
||||
mainRenderer->InitRenderer();
|
||||
|
||||
UE_LOG_INFO("Renderer Created.");
|
||||
|
||||
asManager = new UE::AssetManager(mainRenderer->GetSDLRenderer());
|
||||
asManager->InitAssetManager();
|
||||
UE_LOG_INFO("AssetManager Created.");
|
||||
|
||||
scManager = new UE::SceneManager();
|
||||
scManager->InitSceneManager();
|
||||
Game::InitGame();
|
||||
|
||||
//Añadimos todas las escenas al Manager. No pasa nada, porque el Manager lo iniciamos después
|
||||
MainScene* scene1 = new MainScene();
|
||||
TestScene2* scene2 = new TestScene2();
|
||||
scManager->AddScene(scene1);
|
||||
scManager->AddScene(scene2);
|
||||
MainScene* scene1 = new MainScene("Main");
|
||||
TestScene2* scene2 = new TestScene2("Test2");
|
||||
Game::GetSceneManager()->AddScene(scene1);
|
||||
Game::GetSceneManager()->AddScene(scene2);
|
||||
|
||||
}
|
||||
|
||||
void Load()
|
||||
{
|
||||
asManager->LoadAssetsFromFile("resources\\AssetList\\MainAssets.json");
|
||||
asManager->ProcessAssetQueue();
|
||||
Game::GetAssetManager()->LoadAssetsFromFile("resources\\AssetList\\MainAssets.json");
|
||||
Game::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.
|
||||
scManager->LoadScene(0);
|
||||
//scManager->LoadScene(0);
|
||||
Game::GetSceneManager()->LoadScene("Main");
|
||||
}
|
||||
|
||||
|
||||
@@ -73,49 +60,34 @@ void Loop()
|
||||
#pragma region TEMP_REDERING
|
||||
|
||||
//SDL_Surface* loaderSurface;
|
||||
SDL_Texture* background;
|
||||
SDL_Texture* test1;
|
||||
//SDL_Texture* background;
|
||||
//SDL_Texture* test1;
|
||||
|
||||
|
||||
SDL_Rect DestR;
|
||||
DestR.x = 0;
|
||||
DestR.y = 0;
|
||||
DestR.w = 640;
|
||||
DestR.h = 480;
|
||||
//SDL_Rect DestR;
|
||||
//DestR.x = 0;
|
||||
//DestR.y = 0;
|
||||
//DestR.w = 640;
|
||||
//DestR.h = 480;
|
||||
|
||||
SDL_Rect DestR2;
|
||||
DestR2.x = 48;
|
||||
DestR2.y = 48;
|
||||
DestR2.w = 128;
|
||||
DestR2.h = 128;
|
||||
//SDL_Rect DestR2;
|
||||
//DestR2.x = 48;
|
||||
//DestR2.y = 48;
|
||||
//DestR2.w = 128;
|
||||
//DestR2.h = 128;
|
||||
|
||||
background = asManager->getTexture("bg1");
|
||||
test1 = asManager->getTexture("test1");
|
||||
//background = Game::GetAssetManager()->getTexture("bg1");
|
||||
//test1 = Game::GetAssetManager()->getTexture("test1");
|
||||
|
||||
glm::vec2 sp1_pos(48, 48);
|
||||
glm::vec2 sp1_size(145, 145);
|
||||
//Sprite sp1("test1", assetManager, 5, sp1_pos, sp1_size);
|
||||
//Sprite sp2("test1", assetManager, 7, sp1_pos);
|
||||
UE::Sprite sp3(test1);
|
||||
|
||||
|
||||
#pragma endregion
|
||||
|
||||
#pragma region TEMP_FPS_Timer
|
||||
|
||||
Uint32 startTime = SDL_GetTicks();
|
||||
Uint16 countedFrames = 0;
|
||||
double deltaTime = 0;
|
||||
const int FPS = 60;
|
||||
const int MS_PER_FRAME = 1000 / FPS;
|
||||
float avgFPS;
|
||||
|
||||
#pragma endregion
|
||||
|
||||
|
||||
while (!_quit)
|
||||
{
|
||||
startTime = SDL_GetTicks();
|
||||
UE::Time::StartFrame();
|
||||
|
||||
|
||||
//TEMP Event Handler:
|
||||
SDL_Event eventHandler;
|
||||
while (SDL_PollEvent(&eventHandler) != 0)
|
||||
@@ -127,47 +99,31 @@ void Loop()
|
||||
}
|
||||
|
||||
const Uint8* keyStates = SDL_GetKeyboardState(NULL);
|
||||
if (keyStates[SDL_SCANCODE_W])
|
||||
{
|
||||
DestR2.y -= (25 * deltaTime);
|
||||
}
|
||||
if (keyStates[SDL_SCANCODE_S])
|
||||
{
|
||||
DestR2.y -= (50 * deltaTime);
|
||||
//std::cout << "S PRESS" << std::endl;
|
||||
}
|
||||
if (keyStates[SDL_SCANCODE_ESCAPE])
|
||||
{
|
||||
_quit = true;
|
||||
}
|
||||
if (keyStates[SDL_SCANCODE_F])
|
||||
{
|
||||
GAME_LOG_TRACE("FPS: {0} / dT: {1}", avgFPS, deltaTime);
|
||||
GAME_LOG_TRACE("FPS: {0} / dT: {1}", 60, UE::Time::deltaTime);
|
||||
}
|
||||
|
||||
//FRAME PHYSICS
|
||||
//TICK ALL OBJECTS.
|
||||
mainRenderer->QueueDrawCall(4, DestR2, test1);
|
||||
mainRenderer->QueueDrawCall(1, DestR, background);
|
||||
|
||||
//Game::GetRenderer()->QueueDrawCall(4, DestR2, test1);
|
||||
//Game::GetRenderer()->QueueDrawCall(1, DestR, background);
|
||||
|
||||
//renderer->Render(sp1);
|
||||
//sp2.Draw(renderer);
|
||||
sp3.Draw(mainRenderer);
|
||||
//sp3.Draw(Game::GetRenderer());
|
||||
//
|
||||
Game::GetSceneManager()->GetActiveScenePtr()->SceneUpdate();
|
||||
|
||||
mainRenderer->RenderFrame();
|
||||
Uint32 frameTime = SDL_GetTicks() - startTime;
|
||||
deltaTime = frameTime / 1000.f;
|
||||
//Frames totales / segundos totales.
|
||||
avgFPS = countedFrames / (SDL_GetTicks() / 1000.f);
|
||||
//std::cout << "FPS: " << avgFPS << " / " << "dT: " << deltaTime << std::endl;
|
||||
Game::GetRenderer()->RenderFrame();
|
||||
|
||||
//FPS CAP
|
||||
if (frameTime < MS_PER_FRAME)
|
||||
{
|
||||
SDL_Delay(MS_PER_FRAME - frameTime);
|
||||
}
|
||||
UE::Time::EndFrame();
|
||||
|
||||
++countedFrames;
|
||||
|
||||
}
|
||||
}
|
||||
@@ -175,13 +131,7 @@ void Loop()
|
||||
|
||||
void Clean()
|
||||
{
|
||||
asManager->CleanAssetManager();
|
||||
delete asManager;
|
||||
|
||||
mainRenderer->CleanRenderer();
|
||||
delete mainRenderer;
|
||||
|
||||
scManager->CleanSceneManager();
|
||||
Game::CleanGame();
|
||||
|
||||
SDL_Quit();
|
||||
}
|
||||
@@ -1,27 +1,68 @@
|
||||
#include "Scene\Scene.h"
|
||||
#include "Render\Renderer.h"
|
||||
|
||||
#include "Drawables\Sprite.h"
|
||||
|
||||
#include <iostream>
|
||||
#include <vector>
|
||||
|
||||
class MainScene : public UE::Scene
|
||||
{
|
||||
public:
|
||||
|
||||
MainScene(std::string sceneName) : Scene(sceneName) {}
|
||||
|
||||
|
||||
void SceneLoad() override
|
||||
{
|
||||
std::cout << "Hey! MainScene! - ID: " << id << std::endl;
|
||||
UE_LOG_INFO("Escena {0} ha sido cargada", _sceneName);
|
||||
|
||||
UE::AssetManager* as = Game::GetAssetManager();
|
||||
SDL_Texture* test1Texture = as->getTexture("test1");
|
||||
|
||||
UE::Sprite sp1(test1Texture, as->getTexureRects("test1"), 0, 2, glm::vec2(55, 60), glm::vec2(100, 100));
|
||||
|
||||
UE::Sprite sp2(test1Texture, as->getTexureRects("test1"), 0, 1, glm::vec2(50, 45), glm::vec2(145, 145));
|
||||
|
||||
UE::Sprite bg(as->getTexture("bg1"), as->getTexureRects("bg1"), 1, 0, glm::vec2(0, 0), Game::GetRenderer()->GetScreenSize());
|
||||
|
||||
sprites.push_back(sp1);
|
||||
sprites.push_back(sp2);
|
||||
sprites.push_back(bg);
|
||||
|
||||
}
|
||||
|
||||
void SceneUpdate() override
|
||||
{
|
||||
std::cout << "MainScene actualizandose! - ID: " << id << std::endl;
|
||||
UE_LOG_INFO("Escena {0} UPDATE", _sceneName);
|
||||
|
||||
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; }
|
||||
|
||||
sp1.SetPosition(pos);
|
||||
|
||||
|
||||
for (UE::Sprite sp : sprites)
|
||||
{
|
||||
renderer->Render(sp);
|
||||
}
|
||||
}
|
||||
|
||||
void SceneUnload() override
|
||||
{
|
||||
std::cout << "MainScene descnsando! - ID: " << id << std::endl;
|
||||
UE_LOG_INFO("Escena {0} se ha descargado.", _sceneName);
|
||||
sprites.clear();
|
||||
}
|
||||
|
||||
|
||||
private:
|
||||
|
||||
|
||||
std::vector<UE::Sprite> sprites;
|
||||
|
||||
};
|
||||
@@ -5,20 +5,23 @@
|
||||
|
||||
class TestScene2 : public UE::Scene
|
||||
{
|
||||
public:
|
||||
|
||||
using Scene::Scene;
|
||||
|
||||
void SceneLoad() override
|
||||
{
|
||||
std::cout << "Scena de prueba 2 cargada" << id << std::endl;
|
||||
UE_LOG_INFO("Escena {0} ha sido cargada", _sceneName);
|
||||
}
|
||||
|
||||
void SceneUpdate() override
|
||||
{
|
||||
std::cout << "TestScene2 actualizandose!" << id << std::endl;
|
||||
UE_LOG_INFO("Escena {0} UPDATE", _sceneName);
|
||||
}
|
||||
|
||||
void SceneUnload() override
|
||||
{
|
||||
std::cout << "Scene2 descansando." << id << std::endl;
|
||||
UE_LOG_INFO("Escena {0} se ha descargado.", _sceneName);
|
||||
}
|
||||
|
||||
};
|
||||
@@ -0,0 +1,37 @@
|
||||
#include "UberGame1.h"
|
||||
|
||||
#include "Logging\Logger.h"
|
||||
#include "Render\Renderer.h"
|
||||
#include "Assets\AssetManager.h"
|
||||
#include "Scene\SceneManager.h"
|
||||
|
||||
UE::Renderer* Game::mainRenderer;
|
||||
UE::AssetManager* Game::asManager;
|
||||
UE::SceneManager* Game::scManager;
|
||||
|
||||
void Game::InitGame()
|
||||
{
|
||||
mainRenderer = new UE::Renderer(640, 480, 5);
|
||||
mainRenderer->InitRenderer();
|
||||
|
||||
UE_LOG_INFO("Renderer Created.");
|
||||
|
||||
asManager = new UE::AssetManager(mainRenderer->GetSDLRenderer());
|
||||
asManager->InitAssetManager();
|
||||
UE_LOG_INFO("AssetManager Created.");
|
||||
|
||||
scManager = new UE::SceneManager();
|
||||
scManager->InitSceneManager();
|
||||
}
|
||||
|
||||
void Game::CleanGame()
|
||||
{
|
||||
asManager->CleanAssetManager();
|
||||
delete asManager;
|
||||
|
||||
mainRenderer->CleanRenderer();
|
||||
delete mainRenderer;
|
||||
|
||||
scManager->CleanSceneManager();
|
||||
delete scManager;
|
||||
}
|
||||
@@ -0,0 +1,27 @@
|
||||
#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