From 8ac4fe6d5ba5091923c7fdf1fa88724d827706fa Mon Sep 17 00:00:00 2001 From: LaG1924 <12997935+LaG1924@users.noreply.github.com> Date: Fri, 26 May 2017 19:11:17 +0500 Subject: 2017-05-26 --- src/core/AssetManager.cpp | 70 +++++++++++++++++++++++++++++++++++++++++++++++ src/core/AssetManager.hpp | 33 ++++++++++++++++++++++ src/core/Core.cpp | 9 ++---- src/core/Core.hpp | 3 +- 4 files changed, 107 insertions(+), 8 deletions(-) create mode 100644 src/core/AssetManager.cpp create mode 100644 src/core/AssetManager.hpp (limited to 'src/core') diff --git a/src/core/AssetManager.cpp b/src/core/AssetManager.cpp new file mode 100644 index 0000000..9913c18 --- /dev/null +++ b/src/core/AssetManager.cpp @@ -0,0 +1,70 @@ +#include +#include +#include "AssetManager.hpp" + +namespace fs = std::experimental::filesystem; + +const fs::path pathToAssets = "./assets/"; +const fs::path pathToAssetsList = "./items.json"; +const fs::path pathToTextureIndex = "./textures.json"; + +AssetManager::AssetManager() { + for (auto &it:fs::recursive_directory_iterator(pathToAssets)) { + + } + LoadIds(); + LoadTextureResources(); +} + +void AssetManager::LoadIds() { + std::ifstream in(pathToAssetsList); + nlohmann::json index; + in >> index; + for (auto &it:index) { + int id = it["type"].get(); + int state = it["meta"].get(); + std::string blockName = it["text_type"].get(); + assetIds[blockName] = Block(id, state, 0); + } + LOG(INFO) << "Loaded " << assetIds.size() << " ids"; +} + +AssetManager::~AssetManager() { + delete textureAtlas; +} + +//TODO: This function must be replaced with runtime texture atlas generating +void AssetManager::LoadTextureResources() { + std::ifstream in(pathToTextureIndex); + nlohmann::json index; + in >> index; + std::string filename = index["meta"]["image"].get(); + for (auto &it:index["frames"]) { + auto frame = it["frame"]; + TextureCoord coord; + coord.x = frame["x"].get(); + coord.y = frame["y"].get(); + coord.w = frame["w"].get(); + coord.h = frame["h"].get(); + std::string assetName = it["filename"].get(); + assetName.insert(0,"minecraft/textures/"); + assetName.erase(assetName.length()-4); + LOG(ERROR)<texture; +} + +TextureCoord AssetManager::GetTextureByAssetName(std::string AssetName) { + return TextureCoord{0, 0, 0, 0}; +} + +std::string AssetManager::GetTextureAssetNameByBlockId(unsigned short BlockId, unsigned char BlockSide) { + +} + +const GLuint AssetManager::GetTextureAtlas() { + return textureAtlas->texture; +} diff --git a/src/core/AssetManager.hpp b/src/core/AssetManager.hpp new file mode 100644 index 0000000..23b2ba6 --- /dev/null +++ b/src/core/AssetManager.hpp @@ -0,0 +1,33 @@ +#pragma once + +#include +#include +#include +#include +#include +#include "../world/Block.hpp" +#include "../graphics/Texture.hpp" + +struct TextureCoord{ + unsigned int x,y,w,h; +}; + +class AssetManager { + Texture *textureAtlas; + std::map assetIds; + std::map assetTextures; +public: + AssetManager(); + + ~AssetManager(); + + void LoadTextureResources(); + + TextureCoord GetTextureByAssetName(std::string AssetName); + + std::string GetTextureAssetNameByBlockId(unsigned short BlockId, unsigned char BlockSide = 0); + + const GLuint GetTextureAtlas(); + + void LoadIds(); +}; diff --git a/src/core/Core.cpp b/src/core/Core.cpp index 54a16a4..7814c32 100644 --- a/src/core/Core.cpp +++ b/src/core/Core.cpp @@ -108,6 +108,7 @@ Core::Core() { gameState = new GameState(client); std::thread loop = std::thread(&Core::UpdateGameState,this); std::swap(loop,gameStateLoopThread); + assetManager = new AssetManager; LOG(INFO) << "Core is initialized"; } @@ -291,13 +292,8 @@ void Core::RenderWorld(World &Target) { glUniformMatrix4fv(modelLoc, 1, GL_FALSE, glm::value_ptr(model)); glUniform1i(blockLoc, block.id); - std::string textureName = AssetManager::GetAssetNameByBlockId(block.id); - if (textureName.find("air") != std::string::npos) - continue; - Texture &texture1 = *(AssetManager::GetAsset(textureName).data.texture); - glActiveTexture(GL_TEXTURE0); - glBindTexture(GL_TEXTURE_2D, texture1.texture); + //glBindTexture(GL_TEXTURE_2D, texture1.texture); glUniform1i(glGetUniformLocation(shader->Program, "blockTexture"), 0); glDrawArrays(GL_TRIANGLES, 0, 36); @@ -316,7 +312,6 @@ void Core::SetMouseCapture(bool IsCaptured) { } void Core::PrepareToWorldRendering() { - glGenBuffers(1, &VBO); glGenBuffers(1, &VBO2); glGenVertexArrays(1, &VAO); diff --git a/src/core/Core.hpp b/src/core/Core.hpp index a877613..1c2bbc5 100644 --- a/src/core/Core.hpp +++ b/src/core/Core.hpp @@ -10,12 +10,13 @@ #include "../gui/Gui.hpp" #include "../graphics/Camera3D.hpp" #include "../graphics/Shader.hpp" -#include "../graphics/AssetManager.hpp" +#include "AssetManager.hpp" class Core { GameState *gameState; NetworkClient *client; sf::Window *window; + AssetManager *assetManager; bool isMouseCaptured = false, isRunning = true; enum { MainMenu, -- cgit v1.2.3