diff --git a/LastTowerDefense/CMakelists.txt b/LastTowerDefense/CMakelists.txt index 032c260..47b812f 100644 --- a/LastTowerDefense/CMakelists.txt +++ b/LastTowerDefense/CMakelists.txt @@ -20,7 +20,8 @@ include_directories("../ExternalLibs/Assimp/include" set(CMAKE_BINARY_DIR "../") set(EXECUTABLE_OUTPUT_PATH ${CMAKE_BINARY_DIR}) -add_executable(LastTowerDefense "src/Enemy.cpp" +add_executable(LastTowerDefense "src/LoadScreen.cpp" + "src/Enemy.cpp" "src/Floor.cpp" "src/Game.cpp" "src/GameObject.cpp" diff --git a/LastTowerDefense/include/Game.h b/LastTowerDefense/include/Game.h index 2a2a07e..1b8b8b3 100644 --- a/LastTowerDefense/include/Game.h +++ b/LastTowerDefense/include/Game.h @@ -56,4 +56,5 @@ class Game : public GameState void LoadModels(const std::map& models); void LoadEnemies(const std::vector& pathFileModels); void LoadMusic(); + static void InitResources(); }; diff --git a/LastTowerDefense/include/LoadScreen.h b/LastTowerDefense/include/LoadScreen.h new file mode 100644 index 0000000..4ee4935 --- /dev/null +++ b/LastTowerDefense/include/LoadScreen.h @@ -0,0 +1,45 @@ +#pragma once +#include "Base/GameState.h" +#include "Base/GameStateManager.h" +#include "Graphic/Mesh.h" +#include "Graphic/Shader.h" +#include "Base/ShaderManager.h" +#include "Base/ResourceManager.h" +#include "Graphic/Model.h" +#include "Graphic/Skybox.h" +#include "Player.h" +#include "Enemy.h" +#include "Floor.h" +#include "Level.h" +#include "Wall.h" +#include "Physics/Physics.h" +#include "Graphic/GUI.h" +#include "Graphic/GUILine.h" +#include "Audio/AudioPlayer.h" +#include "Audio/MusicPlayer.h" +#include +using std::thread; + +class LoadScreen : public GameState +{ +private: + static bool isFinish; + thread* load; + Graphic::GUI* loadGUI; + Platform* platform; + Camera* camera; + GameStateManager* manager; + ResourceManager* resourceManager; + ShaderManager* shaderManager; + Skybox *skybox; +public: + LoadScreen(); + ~LoadScreen(); + static void Loading(); + void Init() override; + void Draw() override; + bool Input(std::map keys) override; + bool MouseInput(int x, int y, bool leftbutton); + void Update(unsigned int delta) override; + void Close() override; +}; diff --git a/LastTowerDefense/src/Game.cpp b/LastTowerDefense/src/Game.cpp index 6345c00..02c7eee 100644 --- a/LastTowerDefense/src/Game.cpp +++ b/LastTowerDefense/src/Game.cpp @@ -14,21 +14,16 @@ Game::~Game() { } -void Game::Init() +void Game::InitResources() { - physics = Physics::GetPtr(); - physics->InitPhysics(); - std::cout << " Menu Init" << std::endl; - this->platform = Platform::GetPtr(); - this->manager = GameStateManager::GetPtr(); - resourceManager = ResourceManager::GetPtr(); + auto resourceManager = ResourceManager::GetPtr(); resourceManager->Add(ResourceType::Model3d, "floor"); resourceManager->Add(ResourceType::Model3d, "floor2"); resourceManager->Add(ResourceType::Model3d, "floor3"); resourceManager->Add(ResourceType::Model3d, "container"); resourceManager->Add(ResourceType::Model3d, "pina_pose"); resourceManager->Add(ResourceType::Model3d, "wall"); - + resourceManager->Add(ResourceType::Texture, "pina"); resourceManager->Add(ResourceType::Texture, "brick"); resourceManager->Add(ResourceType::Texture, "ContainerAlbedo"); @@ -36,11 +31,21 @@ void Game::Init() resourceManager->Add(ResourceType::Music, "funnysong"); resourceManager->Add(ResourceType::Sound, "laser_shot"); - resourceManager->Add(ResourceType::ImageUI, "montanas"); + resourceManager->Add(ResourceType::ImageUI, "montanas1"); resourceManager->Add(ResourceType::ImageUI, "montanas2"); resourceManager->Add(ResourceType::ImageUI, "montanas3"); resourceManager->Wait(); +} + +void Game::Init() +{ + resourceManager = ResourceManager::GetPtr(); + physics = Physics::GetPtr(); + physics->InitPhysics(); + std::cout << " Menu Init" << std::endl; + this->platform = Platform::GetPtr(); + this->manager = GameStateManager::GetPtr(); resourceManager->Load(); @@ -75,7 +80,7 @@ void Game::Init() skybox = new Skybox(skyboxFaces); weaponUI = new Graphic::GUI((Graphic::IGUILayer*)resourceManager->GetElement("montanas2"), player->GetCamera(), shaderManager); - playerUI = new Graphic::GUI((Graphic::IGUILayer*)resourceManager->GetElement("montanas"), player->GetCamera(), shaderManager); + playerUI = new Graphic::GUI((Graphic::IGUILayer*)resourceManager->GetElement("montanas1"), player->GetCamera(), shaderManager); new Graphic::GUI((Graphic::IGUILayer*)resourceManager->GetElement("montanas3"), player->GetCamera(), shaderManager); std::vector pathsEnemies = { @@ -99,7 +104,7 @@ void Game::LoadEnemies(const std::vector& pathFileModels) void Game::LoadMusic() { auto asset = (MusicPlayer*)ResourceManager::GetPtr()->GetElement("funnysong"); - asset->PlayMusic(); + //asset->PlayMusic(); } void Game::LoadShaders() @@ -145,6 +150,7 @@ void Game::DrawEnemies() void Game::Update(unsigned int delta) { + shaderManager->initShader(player->GetCamera()); floor->Update(delta); level->Update(delta); wall->Update(delta); diff --git a/LastTowerDefense/src/LoadScreen.cpp b/LastTowerDefense/src/LoadScreen.cpp new file mode 100644 index 0000000..5626d73 --- /dev/null +++ b/LastTowerDefense/src/LoadScreen.cpp @@ -0,0 +1,78 @@ +#include "LoadScreen.h" +#include "Game.h" +#include +#include +#include +#include +#include + +bool LoadScreen::isFinish = false; +LoadScreen::LoadScreen() +{ + +} + +LoadScreen::~LoadScreen() +{ + +} + +void LoadScreen::Loading() +{ + Game::InitResources(); + isFinish = true; +} + +void LoadScreen::Init() +{ + this->platform = Platform::GetPtr(); + this->manager = GameStateManager::GetPtr(); + resourceManager = ResourceManager::GetPtr(); + resourceManager->Add(ResourceType::ImageUI, "LoadingScreen"); + + resourceManager->Wait(); + resourceManager->Load(); + + shaderManager = ShaderManager::getPtr(); + + camera = new Camera(glm::vec3(10, 10.7, 100.6f), glm::vec3(0.0f, 1.0f, 0.0f), 3.0f, 3.0f, 355.0f, 0.1f); + shaderManager->initShader(camera); + + shaderManager->LoadShaders("gui", "Assets/Shaders/gui.vert", "Assets/Shaders/gui.frag"); + loadGUI = new Graphic::GUI((Graphic::IGUILayer*)resourceManager->GetElement("LoadingScreen"), camera, shaderManager); + + load = new thread(&LoadScreen::Loading); +} + +void LoadScreen::Draw() +{ + +} + +void LoadScreen::Update(unsigned int delta) +{ + if (load->joinable() && isFinish) + { + resourceManager->RemoveLoadResource(); + manager->RealaseState(); + manager->SetState(new Game()); + load->join(); + } +} + +bool LoadScreen::MouseInput(int x, int y, bool leftbutton) +{ + return false; +} + +bool LoadScreen::Input(std::map keys) +{ + return false; +} + +void LoadScreen::Close() +{ + delete loadGUI; + //Graphic::GUIOverlay::GetPtr()->Remove(loadGUI); Error draro de Link... + std::cout << " Close Init" << std::endl; +} \ No newline at end of file diff --git a/LastTowerDefense/src/main.cpp b/LastTowerDefense/src/main.cpp index c84645e..763dfa8 100644 --- a/LastTowerDefense/src/main.cpp +++ b/LastTowerDefense/src/main.cpp @@ -1,10 +1,12 @@ #include "Base/GameStateManager.h" #include "Game.h" +#include "LoadScreen.h" int main(int argc, char* argv[]) { GameStateManager* manager = GameStateManager::GetPtr(); - manager->SetState(new Game()); + manager->SetState(new LoadScreen()); + //manager->SetState(new Game()); manager->GameLoop(); return 0; } diff --git a/PlayEngine/Base/ResourceManager.cpp b/PlayEngine/Base/ResourceManager.cpp index f8ee5fe..7a2d097 100644 --- a/PlayEngine/Base/ResourceManager.cpp +++ b/PlayEngine/Base/ResourceManager.cpp @@ -14,6 +14,7 @@ ResourceManager* ResourceManager::ptr = nullptr; unsigned long ResourceManager::CounterImageUI = 0; size_t ResourceManager::handleCount = 0; +size_t ResourceManager::loadResourceKey = 0; ResourceManager* ResourceManager::GetPtr() { @@ -26,6 +27,14 @@ ResourceManager* ResourceManager::GetPtr() return ptr; } + +void ResourceManager::RemoveLoadResource() +{ + loadResource->Clear(); + resourceMap->erase(loadResourceKey); + delete loadResource; +} + ResourceManager::ResourceManager() { resourceMap = new std::map; @@ -155,7 +164,14 @@ unsigned int ResourceManager::AddResource(ResourceType type, const std::string& } else if (type == ResourceType::ImageUI) { - resource = new Graphic::ImageUI(CounterImageUI++, name, path); + //resource = new Graphic::ImageUI(CounterImageUI++, name, path); + Graphic::ImageUI* image = new Graphic::ImageUI(CounterImageUI++, name, path); + resource = image; + if (name == "LoadingScreen") + { + loadResourceKey = handleCount; + loadResource = image; + } } else if (type == ResourceType::LineUI) { @@ -182,6 +198,4 @@ void ResourceManager::Load() auto model = (i->second); model->Load(); } -} - - +} \ No newline at end of file diff --git a/PlayEngine/Base/ShaderManager.cpp b/PlayEngine/Base/ShaderManager.cpp index 7c0b033..8720b7e 100644 --- a/PlayEngine/Base/ShaderManager.cpp +++ b/PlayEngine/Base/ShaderManager.cpp @@ -7,6 +7,7 @@ ShaderManager* ShaderManager::ptr; ShaderManager::ShaderManager() : currentShader(nullptr) { + camera = nullptr; LoadShaders("default", vShaderDefault, fShaderDefault); } @@ -44,6 +45,10 @@ GLint ShaderManager::GetSpecularIntensityLocation() glm::mat4 ShaderManager::GetViewMatrix() { + if (!camera) + { + return glm::mat4(1); + } return camera->calculateViewMatrix(); } diff --git a/PlayEngine/Graphic/Texture.cpp b/PlayEngine/Graphic/Texture.cpp index f142ef5..af1a9c4 100644 --- a/PlayEngine/Graphic/Texture.cpp +++ b/PlayEngine/Graphic/Texture.cpp @@ -19,6 +19,7 @@ namespace Graphic printf("Failed to find: %s\n", path.c_str()); return false; } + return true; } Resource* Texture::Load() diff --git a/PlayEngine/include/Base/ResourceManager.h b/PlayEngine/include/Base/ResourceManager.h index e25d94a..3e60dd2 100644 --- a/PlayEngine/include/Base/ResourceManager.h +++ b/PlayEngine/include/Base/ResourceManager.h @@ -1,5 +1,6 @@ #pragma once #include "../Export.h" +#include "Graphic/GUI_IMAGE.h" #include "Graphic/Model.h" #include "Audio/AudioPlayer.h" #include "Audio/MusicPlayer.h" @@ -35,8 +36,10 @@ class PLAYENGINE ResourceManager public: std::mutex mu; private: - static size_t handleCount; static unsigned long CounterImageUI; + static size_t handleCount; + static size_t loadResourceKey; + Graphic::ImageUI* loadResource; std::list pool; std::map* resourceMap; std::map paths; @@ -47,8 +50,9 @@ class PLAYENGINE ResourceManager void PathsReader(std::string path, bool force = false); std::string GetPath(ResourceType type,const std::string &name); public: - + bool const GetLoadFinish(); static ResourceManager* GetPtr(); + void RemoveLoadResource(); void ClearResources(); void GetSafeOpenIds(unsigned int& a); size_t GetSize(); diff --git a/PlayEngine/include/Physics/Physics.h b/PlayEngine/include/Physics/Physics.h index 3e0717e..a7e3c27 100644 --- a/PlayEngine/include/Physics/Physics.h +++ b/PlayEngine/include/Physics/Physics.h @@ -7,7 +7,6 @@ #include "BulletCollision/CollisionDispatch/btDefaultCollisionConfiguration.h" #include "BulletCollision/CollisionShapes/btCollisionShape.h" #include "BulletDynamics/Dynamics/btDiscreteDynamicsWorld.h" -#include "examples/CommonGUIHelperInterface.h" #include "LinearMath/btTransform.h" #include "LinearMath/btHashMap.h" @@ -20,7 +19,6 @@ class PLAYENGINE Physics btConstraintSolver* m_solver; btDefaultCollisionConfiguration* m_collisionConfiguration; btDiscreteDynamicsWorld* m_dynamicsWorld; - GUIHelperInterface* m_guiHelper; static Physics* ptr; public: static Physics* GetPtr();