diff --git a/res/models.json b/res/models.json index ac280c2..b0cf78e 100644 --- a/res/models.json +++ b/res/models.json @@ -2,7 +2,10 @@ "models": [ { "unique_name": "backpack", - "path": "res/models/backpack.ffo" + "path": "res/models/backpack.ffo", + + "position": ["0.0", "0.0", "0.0"], + "rotation": ["0.0", "0.0", "0.0"] }, { "unique_name": "ground", diff --git a/src/Controller.cpp b/src/Controller.cpp index 8ee6339..b60ec76 100644 --- a/src/Controller.cpp +++ b/src/Controller.cpp @@ -105,9 +105,6 @@ void Controller::run() World world(shaderPrograms); - Model *skyboxModel = world.getModelByName("cube"); - Skybox skybox(skyboxModel, getShaderProgramByName("skyboxProgram"), "res/textures/skybox/"); - Entity *lightSource = world.getEntityByName("light"); lightSource->setScale(0.1f); lightSource->setRotation(glm::vec3(0.f)); @@ -163,7 +160,7 @@ void Controller::run() glViewport(0, 0, gameWindow->getWindowWidth(), gameWindow->getWindowHeight()); - skybox.draw(camera->getView(), camera->getProj()); + world.getSkybox()->draw(camera->getView(), camera->getProj()); world.draw(camera->getViewProj(), camera->getPosition()); pp_framebuffer->unbind(); diff --git a/src/JsonParser.cpp b/src/JsonParser.cpp index 88b6d25..581ba64 100644 --- a/src/JsonParser.cpp +++ b/src/JsonParser.cpp @@ -106,3 +106,15 @@ std::vector JsonParser::getShaderPrograms() return temp_shaderPrograms; } +Skybox *JsonParser::getSkybox(Model *cubeModel, ShaderProgram *skyboxProgram) +{ + Skybox* temp_skybox; + + const Json::Value shaderProgramsJson = root["skybox"]; + + std::string skybox_texturePath = shaderProgramsJson["texturePath"].asString(); + temp_skybox = new Skybox(cubeModel, skyboxProgram, skybox_texturePath.c_str()); + std::cout << "Loaded Skybox \"" << skybox_texturePath << "\"" << std::endl; + + return temp_skybox; +} diff --git a/src/JsonParser.h b/src/JsonParser.h index 9c9f5c6..a0d56d8 100644 --- a/src/JsonParser.h +++ b/src/JsonParser.h @@ -16,6 +16,7 @@ public: std::vector getModels(); std::vector getEntities(std::vector &models, std::vector shaderPrograms); + Skybox *getSkybox(Model *cubeModel, ShaderProgram *skyboxProgram); std::vector getShaderPrograms(); diff --git a/src/World.cpp b/src/World.cpp index 5d49ddd..b5e326b 100644 --- a/src/World.cpp +++ b/src/World.cpp @@ -30,6 +30,7 @@ World::World(std::vector shaderPrograms) : JsonParser worldParser("res/models.json"); models = worldParser.getModels(); entities = worldParser.getEntities(models, shaderPrograms); + skybox = worldParser.getSkybox(getModelByName("cube"), Controller::getShaderProgramByName(shaderPrograms, "skyboxProgram")); } World::~World() @@ -45,6 +46,8 @@ World::~World() for (auto it = entities.begin(); it != entities.end(); it++) { delete (*it); } + + delete skybox; } void World::addEntity(Entity *entity) @@ -71,12 +74,6 @@ void World::clearEntities() } } -void World::loadWorld ( unsigned int id ) -{ - // Load World from File... -} - - void World::updatePointLight(unsigned int lightId, bool active, glm::vec3 position, glm::vec3 color) { pointLights[lightId].setActive(active); diff --git a/src/World.h b/src/World.h index 8d345d4..67a1883 100644 --- a/src/World.h +++ b/src/World.h @@ -18,8 +18,6 @@ public: void removeEntityByName(std::string name); void clearEntities(); - void loadWorld(unsigned int id); - void updatePointLight(unsigned int lightId, bool active, glm::vec3 position, glm::vec3 color); void updateDirectionalLight(bool active, glm::vec3 direction, glm::vec3 color); @@ -32,6 +30,10 @@ public: { return pointLights.data(); } + Skybox *getSkybox() + { + return skybox; + } Entity* getEntityByName(std::string name); Entity* getEntityById(uint32_t id); @@ -45,6 +47,7 @@ private: std::vector models; std::vector entities; + Skybox *skybox; // Lights DirectionalLight directionalLight;