From a65f3391f7a7d015c54390ff72ccc060130b7356 Mon Sep 17 00:00:00 2001 From: "DESKTOP-EBR7IVA\\kimve" Date: Fri, 11 Jun 2021 15:32:06 +0200 Subject: [PATCH] [Add] Pointsystem works --- src/renderEngine/Renderer.cpp | 82 +++++++++++++++++++++++ src/renderEngine/Renderer.h | 17 +++++ src/scenes/in_Game_Scene.cpp | 59 +++++++++++----- src/scenes/in_Game_Scene.h | 5 +- src/toolbox/toolbox.cpp | 2 +- wk2_fps.vcxproj.filters | 122 +++++++++------------------------- 6 files changed, 176 insertions(+), 111 deletions(-) diff --git a/src/renderEngine/Renderer.cpp b/src/renderEngine/Renderer.cpp index f135200..70f2259 100644 --- a/src/renderEngine/Renderer.cpp +++ b/src/renderEngine/Renderer.cpp @@ -121,5 +121,87 @@ namespace render_engine shader.Stop(); } + + void Render(std::vector>& guis, shaders::GuiShader& shader) + { + shader.Start(); + + // Enable the VAO and the positions VBO + glBindVertexArray(quad.vao_id); + glEnableVertexAttribArray(0); + + // Enable alpha blending (for transparency in the texture) + glEnable(GL_BLEND); + glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); + + // Disable depth testing to textures with transparency can overlap + glDisable(GL_DEPTH_TEST); + + // Render each gui to the screen + for (std::shared_ptr gui : guis) + { + // Bind the texture of the gui to the shader + glActiveTexture(GL_TEXTURE0); + glBindTexture(GL_TEXTURE_2D, gui->texture); + + glm::mat4 matrix = toolbox::CreateModelMatrix(gui->position, gui->scale); + shader.LoadModelMatrix(matrix); + + glDrawArrays(GL_TRIANGLE_STRIP, 0, quad.vertex_count); + + std::cout << "in render method, gui x value: " << gui.get()->scale.x << std::endl; + } + + // Enable depth test again + glEnable(GL_DEPTH_TEST); + + // Disable alpha blending + glDisable(GL_BLEND); + + // Disable the VBO and VAO + glDisableVertexAttribArray(0); + glBindVertexArray(0); + + shader.Stop(); + } + + void Render(std::shared_ptr& gui, shaders::GuiShader& shader) + { + shader.Start(); + + // Enable the VAO and the positions VBO + glBindVertexArray(quad.vao_id); + glEnableVertexAttribArray(0); + + // Enable alpha blending (for transparency in the texture) + glEnable(GL_BLEND); + glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); + + // Disable depth testing to textures with transparency can overlap + glDisable(GL_DEPTH_TEST); + + // Render each gui to the screen + // Bind the texture of the gui to the shader + glActiveTexture(GL_TEXTURE0); + glBindTexture(GL_TEXTURE_2D, gui->texture); + + glm::mat4 matrix = toolbox::CreateModelMatrix(gui->position, gui->scale); + shader.LoadModelMatrix(matrix); + + glDrawArrays(GL_TRIANGLE_STRIP, 0, quad.vertex_count); + + + // Enable depth test again + glEnable(GL_DEPTH_TEST); + + // Disable alpha blending + glDisable(GL_BLEND); + + // Disable the VBO and VAO + glDisableVertexAttribArray(0); + glBindVertexArray(0); + + shader.Stop(); + } } } diff --git a/src/renderEngine/Renderer.h b/src/renderEngine/Renderer.h index 8a7a473..2e90e3c 100644 --- a/src/renderEngine/Renderer.h +++ b/src/renderEngine/Renderer.h @@ -40,5 +40,22 @@ namespace render_engine @param shade: The shader the GUI textures need to be rendered with */ void Render(std::vector& guis, shaders::GuiShader& shader); + + /* + * @brief: renders guis elements from a shared pointer vector + * + * @param guis: List with GUI textures to render + * @param sahde: The shader to use + */ + void Render(std::vector>& guis, shaders::GuiShader& shader); + + + /* + * @brief renders 1 gui element. + * + * @param gui: the texture to render + * @param shader: the shader to use + */ + void Render(std::shared_ptr& gui, shaders::GuiShader& shader); } } \ No newline at end of file diff --git a/src/scenes/in_Game_Scene.cpp b/src/scenes/in_Game_Scene.cpp index 8f28727..bee93b8 100644 --- a/src/scenes/in_Game_Scene.cpp +++ b/src/scenes/in_Game_Scene.cpp @@ -27,7 +27,6 @@ #define UPCOMING_MODEL_AMOUNT 4 // how much models should be loaded in front of us - namespace scene { std::shared_ptrmain_character; @@ -40,6 +39,7 @@ namespace scene shaders::EntityShader* shader; shaders::GuiShader* gui_shader; std::vector guis; + std::vector> score_textures; int furniture_count_old; int score; @@ -61,7 +61,26 @@ namespace scene gui_shader = new shaders::GuiShader(); gui_shader->Init(); score = 0; + + for (int i = 0; i <= 9; i++) + { + std::shared_ptr score_pointer; + + std::string texture_path = "res/"; + texture_path += std::to_string(i); + texture_path += ".png"; + + score_pointer = std::make_unique(render_engine::loader::LoadTexture(texture_path), glm::vec2(-0.9f, 0.8f), glm::vec2(0.07, 0.15)); + + score_textures.push_back(score_pointer); + + std::cout << "Add to score_pointer: " << texture_path << std::endl; + } + + std::cout << "Size textures: " << score_textures.size() << std::endl; + } + /** * temporary!!!! * just to make some bounding boxes @@ -242,13 +261,14 @@ namespace scene // Stop rendering the entities shader->Stop(); + + DrawScore(score); } //updates certain variables void scene::In_Game_Scene::update(GLFWwindow* window) { //camera.Move(window); - main_character->Move(window); //std::cout << "x get: " << movement.x << "\ny get: " << movement.y << "\nz get: " << movement.z << "\n"; @@ -264,23 +284,16 @@ namespace scene load_chunk(model_pos + UPCOMING_MODEL_AMOUNT); score += furniture_count_old; std::cout << "Score: " << score << std::endl; - std::cout << "Funriture_count_old in model (house excluded): " << furniture_count_old << std::endl; - DrawScore(); + std::cout << "Furniture_count_old in model (house excluded): " << furniture_count_old << std::endl; + } // remember the position at which the new model was added last_model_pos = model_pos; collision::CheckCollisions(collision_entities); update_hand_detection(); - std::vector res; - toolbox::GetDigitsFromNumber(1234567890, res); - std::cout << "number 1234567890 in digits: " << std::endl; - for (int i : res) - { - std::cout << i << " , "; - } + - std::cout << std::endl; } //manages the key input in the game scene @@ -332,11 +345,21 @@ namespace scene render_engine::renderer::Render(pause_guis, *gui_shader); } - void In_Game_Scene::DrawScore(cv::Mat& output_frame) - { - cv::rectangle(output_frame, cv::Rect(0, 0, 30, 40), cv::Scalar(0, 0, 0), -1); - cv::putText(output_frame, "Score: ", cv::Point(0, 0), cv::FONT_HERSHEY_PLAIN, 2.0, cv::Scalar(18, 219, 65), 2); - cv::putText(output_frame, std::to_string(score), cv::Point(5, 15), cv::FONT_HERSHEY_PLAIN, 2.0, cv::Scalar(18, 219, 65), 2); - + void In_Game_Scene::DrawScore(int score) + { + std::vector digits; + score_guis.clear(); + + toolbox::GetDigitsFromNumber(score, digits); + + std::cout << "Digits size: " << digits.size() << std::endl; + + for (int i = digits.size()-1; i >= 0; i--) + { + std::cout << "Digit in digits: " << i << std::endl; + score_textures[digits[i]].get()->position.x = 0.15 * i -0.9; + render_engine::renderer::Render(score_textures[digits[i]], *gui_shader); + + } } } diff --git a/src/scenes/in_Game_Scene.h b/src/scenes/in_Game_Scene.h index b251a2e..656f4b3 100644 --- a/src/scenes/in_Game_Scene.h +++ b/src/scenes/in_Game_Scene.h @@ -57,7 +57,7 @@ namespace scene //pause_guis is a list of components that will be rendered when the game is paused. std::vector pause_guis; - std::vector score_guis; + std::vector> score_guis; /** * @brief renders the objects/gui models @@ -103,7 +103,8 @@ namespace scene */ void onKey(GLFWwindow* window, int key, int scancode, int action, int mods) override; - void DrawScore(cv::Mat& output_frame); + void DrawScore(int score); + }; } diff --git a/src/toolbox/toolbox.cpp b/src/toolbox/toolbox.cpp index ffb369c..461405c 100644 --- a/src/toolbox/toolbox.cpp +++ b/src/toolbox/toolbox.cpp @@ -1,6 +1,6 @@ #include #include "toolbox.h" - +#include namespace toolbox { glm::mat4 CreateModelMatrix(glm::vec2 translation, glm::vec2 scale) diff --git a/wk2_fps.vcxproj.filters b/wk2_fps.vcxproj.filters index fad9c5f..0b8c679 100644 --- a/wk2_fps.vcxproj.filters +++ b/wk2_fps.vcxproj.filters @@ -24,6 +24,10 @@ + + + + @@ -83,98 +87,8 @@ Source Files - - Source Files - - - Source Files - - - Source Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - @@ -206,6 +120,34 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + +