From e51b56b1560ea4dbb08344281904a3202689ccc8 Mon Sep 17 00:00:00 2001 From: "DESKTOP-EBR7IVA\\kimve" Date: Fri, 11 Jun 2021 16:49:09 +0200 Subject: [PATCH 1/6] [WIP] Collision detectie moet nog worden egimplementeerd om naar game over screen te gaan --- src/entities/house_generator.cpp | 9 ++ src/entities/house_generator.h | 9 +- src/entities/main_character.cpp | 4 + src/entities/main_character.h | 2 + src/scenes/game_Over_Scene.cpp | 184 +++++++++++++++++++++++++++++++ src/scenes/game_Over_Scene.h | 26 +++++ src/scenes/in_Game_Scene.cpp | 14 ++- src/scenes/in_Game_Scene.h | 4 + wk2_fps.vcxproj | 2 + wk2_fps.vcxproj.filters | 2 + 10 files changed, 251 insertions(+), 5 deletions(-) create mode 100644 src/scenes/game_Over_Scene.cpp create mode 100644 src/scenes/game_Over_Scene.h diff --git a/src/entities/house_generator.cpp b/src/entities/house_generator.cpp index 6573701..6224dde 100644 --- a/src/entities/house_generator.cpp +++ b/src/entities/house_generator.cpp @@ -35,7 +35,11 @@ namespace entities collision::Box model_box = { model_pos, model.raw_model.model_size }; model_box.SetRotation(-90); furniture.push_back(std::make_shared(model, model_pos, glm::vec3(0, -90, 0), HOUSE_SIZE * 2, model_box)); + //furniture_collision.push_back(std::make_shared(model, model_pos, glm::vec3(0, -90, 0), HOUSE_SIZE * 2, model_box)); + } + + //furniture_collision.pop_front(); /* // Add furniture @@ -255,4 +259,9 @@ namespace entities furniture_models.insert(std::pair>(FurnitureType::MISC, miscs)); } + + /*std::deque> HouseGenerator::GetFurnitureCollisions() + { + return furniture_collision; + }*/ } diff --git a/src/entities/house_generator.h b/src/entities/house_generator.h index 12fbfa0..ab5e4f1 100644 --- a/src/entities/house_generator.h +++ b/src/entities/house_generator.h @@ -30,6 +30,8 @@ namespace entities models::ModelTexture default_texture; std::map> furniture_models; + //std::deque> furniture_collision; + public: HouseGenerator(); @@ -47,7 +49,12 @@ namespace entities /* * @brief: Returns the depth of the house (chunk) */ - float GetHouseDepth() const { return house_model.raw_model.model_size.x * HOUSE_SIZE; } + float GetHouseDepth() const { return house_model.raw_model.model_size.x * HOUSE_SIZE; + + } + + //std::deque> GetFurnitureCollisions(); + private: /* diff --git a/src/entities/main_character.cpp b/src/entities/main_character.cpp index cdf53c7..b366b89 100644 --- a/src/entities/main_character.cpp +++ b/src/entities/main_character.cpp @@ -97,4 +97,8 @@ namespace entities is_playing = false; std::cout << "collision" << std::endl; } + + bool MainCharacter::GetOnCollide() { + return is_playing; + } } \ No newline at end of file diff --git a/src/entities/main_character.h b/src/entities/main_character.h index d1029a2..79ae656 100644 --- a/src/entities/main_character.h +++ b/src/entities/main_character.h @@ -34,5 +34,7 @@ namespace entities void Move(GLFWwindow* window); void OnCollide(const collision::Collision& collision) override; + + bool GetOnCollide(); }; } diff --git a/src/scenes/game_Over_Scene.cpp b/src/scenes/game_Over_Scene.cpp new file mode 100644 index 0000000..00bd49c --- /dev/null +++ b/src/scenes/game_Over_Scene.cpp @@ -0,0 +1,184 @@ +#include +#include +#include +#include +#include "game_Over_Scene.h" +#include +#include + +#include "../models/model.h" +#include "../renderEngine/loader.h" +#include "../renderEngine/obj_loader.h" +#include "../renderEngine/renderer.h" +#include "../shaders/entity_shader.h" +#include "../gui/gui_interactable.h" +#include "../toolbox/toolbox.h" +#include "../computervision/MenuTest.h" +#include "../computervision/ObjectDetection.h" +#include "../computervision/HandDetectRegion.h" + +namespace scene +{ + shaders::GuiShader* gui_shader_gameOver; + std::vector guis_gameOver; + computervision::ObjectDetection objDetect_gameOver; + + float item_number_gameOver = 0; + + bool hand_mode_gameOver = false; + + Game_Over_Scene::Game_Over_Scene() { + shaders::EntityShader shader; + shader.Init(); + render_engine::renderer::Init(shader); + shader.CleanUp(); + + gui_shader_gameOver = new shaders::GuiShader(); + gui_shader_gameOver->Init(); + } + + gui::Button* ConvertGuiTextureToButtonGameOver(gui::GuiTexture* texture) { + gui::Button* button; + if (texture != NULL) + { + + if (texture->GetType() == gui::GuiType::BUTTON) { + + button = (gui::Button*)texture; + return button; + } + else { + button = nullptr; + return button; + } + } + else { + button = nullptr; + return button; + } + } + + gui::GuiTexture* GetMenuItemGameOver(bool hand_state) { + if (hand_state) + item_number_gameOver += 0.20f; + + int temp_item_number = item_number_gameOver; + + //If temp_item_number is equal to the size of the array, set item_number bac to zero to loop through the array again + if (temp_item_number == guis_gameOver.size()) { + item_number_gameOver = 0; + temp_item_number = 0; + } + std::cout << guis_gameOver[temp_item_number]->texture << std::endl; + return guis_gameOver[temp_item_number]; + } + + scene::Scenes scene::Game_Over_Scene::start(GLFWwindow* window) { + gui::Button button_start_scene(render_engine::loader::LoadTexture("res/Birb1.jpg"), glm::vec2(0.0f, 0.6f), glm::vec2(0.25f, 0.25f)); + button_start_scene.SetHoverTexture(render_engine::loader::LoadTexture("res/Birb2.jpg")); + button_start_scene.SetClickedTexture(render_engine::loader::LoadTexture("res/Birb3.jpg")); + button_start_scene.SetOnClickAction([]() + { + std::cout << "Back to start screen!!" << std::endl; + }); + guis_gameOver.push_back(&button_start_scene); + + computervision::ObjectDetection objDetect; + cv::Mat cameraFrame; + gui::GuiTexture* chosen_item_gameOver = NULL; //This is the selected menu_item + bool hand_closed = false; //Flag to prevent multiple button presses + + while (return_value == scene::Scenes:: GAMEOVER) + { + render(); + update(window); + + if (hand_mode_gameOver) + { + cameraFrame = objDetect_gameOver.ReadCamera(); + + bool detect = false; + bool hand_detection = objDetect_gameOver.DetectHand(cameraFrame, detect); + + if (hand_detection) + { + hand_closed = false; + std::cout << "hand is opened" << std::endl; + + //Loop through menu items + chosen_item_gameOver = GetMenuItemGameOver(true); + + gui::Button* new_button = ConvertGuiTextureToButtonGameOver(chosen_item_gameOver); + if (new_button != NULL) { + const float x_pos = (chosen_item_gameOver->position.x + 1.0) * WINDOW_WIDTH / 2; + const float y_pos = (1.0 - chosen_item_gameOver->position.y) * WINDOW_HEIGHT / 2; + + //Set cursor to location of selected menu_item + glfwSetCursorPos(window, x_pos, y_pos); + } + } + else if (!hand_detection) + { + std::cout << "hand is closed" << std::endl; + + //Gets selected menu_item + chosen_item_gameOver = GetMenuItemGameOver(false); + gui::Button* new_button = ConvertGuiTextureToButtonGameOver(chosen_item_gameOver); + + if (new_button != NULL && !hand_closed) { + //Run function click + new_button->ForceClick(GLFW_MOUSE_BUTTON_LEFT); + hand_closed = true; + } + } + } + glfwSwapBuffers(window); + glfwPollEvents(); + } + + gui_shader_gameOver->CleanUp(); + render_engine::loader::CleanUp(); + return return_value; + } + + /** + * renders the models in the start-up scene + */ + void scene::Game_Over_Scene::render() + { + render_engine::renderer::Prepare(); + + // Render GUI items + render_engine::renderer::Render(guis_gameOver, *gui_shader_gameOver); + } + + /** + * updates the variables for the start-up scene + */ + void scene::Game_Over_Scene::update(GLFWwindow* window) + { + for (gui::GuiTexture* button : guis_gameOver) { + gui::Button* new_button = ConvertGuiTextureToButtonGameOver(button); + if (new_button != NULL) + new_button->Update(window); + } + bool hand_present; + objDetect_gameOver.DetectHand(objDetect_gameOver.ReadCamera(), hand_present); + } + + /** + * manages the key input in the start-up scene + */ + void scene::Game_Over_Scene::onKey(GLFWwindow* window, int key, int scancode, int action, int mods) + { + if (glfwGetKey(window, GLFW_KEY_SPACE) == GLFW_PRESS) + { + return_value = scene::Scenes::INGAME; + cv::destroyWindow("camera"); + } + else if (glfwGetKey(window, GLFW_KEY_BACKSPACE) == GLFW_PRESS) { + hand_mode_gameOver = !hand_mode_gameOver; + } + } + +} \ No newline at end of file diff --git a/src/scenes/game_Over_Scene.h b/src/scenes/game_Over_Scene.h new file mode 100644 index 0000000..e94e758 --- /dev/null +++ b/src/scenes/game_Over_Scene.h @@ -0,0 +1,26 @@ +#pragma once +#include "scene.h" +#include "../gui/gui_element.h" + +namespace scene +{ + extern GLFWwindow* window; + + class Game_Over_Scene : public scene::Scene + { + private: + scene::Scenes return_value = scene::Scenes::GAMEOVER; + + public: + Game_Over_Scene(); + + Scenes start(GLFWwindow* window) override; + + void render() override; + + void update(GLFWwindow* window) override; + + void onKey(GLFWwindow* window, int key, int scancode, int action, int mods) override; + + }; +} \ No newline at end of file diff --git a/src/scenes/in_Game_Scene.cpp b/src/scenes/in_Game_Scene.cpp index bee93b8..0252fe5 100644 --- a/src/scenes/in_Game_Scene.cpp +++ b/src/scenes/in_Game_Scene.cpp @@ -31,6 +31,9 @@ namespace scene { std::shared_ptrmain_character; std::vector> collision_entities; + + //std::deque> furniture_collision; + entities::HouseGenerator* house_generator; std::deque> house_models; @@ -135,10 +138,11 @@ namespace scene std::deque> furniture = house_generator->GenerateHouse(glm::vec3(0, -75, -50 - z_offset), 90); furniture_count = furniture.size(); - + house_models.insert(house_models.end(), furniture.begin(), furniture.end()); std::cout << "funriture_count in load chunk (house included): " << furniture_count << std::endl; furniture_count_old = furniture_count - 1; + } /** @@ -270,6 +274,10 @@ namespace scene { //camera.Move(window); main_character->Move(window); + if (!main_character.get()->GetOnCollide()) + { + return_value = scene::Scenes::GAMEOVER; + } //std::cout << "x get: " << movement.x << "\ny get: " << movement.y << "\nz get: " << movement.z << "\n"; camera->Follow(main_character->GetPosition()); @@ -291,6 +299,7 @@ namespace scene last_model_pos = model_pos; collision::CheckCollisions(collision_entities); + update_hand_detection(); @@ -352,11 +361,8 @@ namespace scene 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 656f4b3..241927f 100644 --- a/src/scenes/in_Game_Scene.h +++ b/src/scenes/in_Game_Scene.h @@ -103,6 +103,10 @@ namespace scene */ void onKey(GLFWwindow* window, int key, int scancode, int action, int mods) override; + /** + * @brief: This method renders the score points onto the game window + * @param score: Score to show + */ void DrawScore(int score); }; diff --git a/wk2_fps.vcxproj b/wk2_fps.vcxproj index f9065d6..5122172 100644 --- a/wk2_fps.vcxproj +++ b/wk2_fps.vcxproj @@ -24,6 +24,7 @@ + @@ -55,6 +56,7 @@ + diff --git a/wk2_fps.vcxproj.filters b/wk2_fps.vcxproj.filters index 0b8c679..9822aa3 100644 --- a/wk2_fps.vcxproj.filters +++ b/wk2_fps.vcxproj.filters @@ -28,6 +28,7 @@ + @@ -148,6 +149,7 @@ + From ca61dfc78150b3e42d66c3af84ba8bf08910852a Mon Sep 17 00:00:00 2001 From: "DESKTOP-EBR7IVA\\kimve" Date: Fri, 11 Jun 2021 16:58:01 +0200 Subject: [PATCH 2/6] [WIP] from start menu, if you press space, you get to gameover screen. Just to check. This works --- src/main.cpp | 5 +++++ src/scenes/game_Over_Scene.cpp | 3 ++- src/scenes/startup_Scene.cpp | 2 +- 3 files changed, 8 insertions(+), 2 deletions(-) diff --git a/src/main.cpp b/src/main.cpp index be9e1bc..472c320 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -27,6 +27,7 @@ #include "scenes/scene.h" #include "scenes/in_Game_Scene.h" #include "scenes/startup_Scene.h" +#include "scenes/game_Over_Scene.h" #include "computervision/ObjectDetection.h" //#include "computervision/OpenPoseImage.h" @@ -112,6 +113,10 @@ int main(void) current_scene = new scene::In_Game_Scene(); break; + case scene::Scenes::GAMEOVER: + current_scene = new scene::Game_Over_Scene(); + break; + default: std::cout << "Wrong return value!!! ->" << std::endl; break; diff --git a/src/scenes/game_Over_Scene.cpp b/src/scenes/game_Over_Scene.cpp index 00bd49c..5fb9135 100644 --- a/src/scenes/game_Over_Scene.cpp +++ b/src/scenes/game_Over_Scene.cpp @@ -27,7 +27,8 @@ namespace scene bool hand_mode_gameOver = false; - Game_Over_Scene::Game_Over_Scene() { + Game_Over_Scene::Game_Over_Scene() + { shaders::EntityShader shader; shader.Init(); render_engine::renderer::Init(shader); diff --git a/src/scenes/startup_Scene.cpp b/src/scenes/startup_Scene.cpp index b734214..05698ce 100644 --- a/src/scenes/startup_Scene.cpp +++ b/src/scenes/startup_Scene.cpp @@ -211,7 +211,7 @@ namespace scene { if (glfwGetKey(window, GLFW_KEY_SPACE) == GLFW_PRESS) { - return_value = scene::Scenes::INGAME; + return_value = scene::Scenes::GAMEOVER; cv::destroyWindow("camera"); } else if (glfwGetKey(window, GLFW_KEY_BACKSPACE) == GLFW_PRESS) { From 022c7eb1f0886dc66bbbd458e1a15685409c96ec Mon Sep 17 00:00:00 2001 From: "DESKTOP-EBR7IVA\\kimve" Date: Fri, 18 Jun 2021 11:20:24 +0200 Subject: [PATCH 3/6] [WIP] collision fixing --- src/entities/collision_entity.cpp | 5 ++++- src/entities/collision_entity.h | 2 +- src/entities/house_generator.cpp | 11 ++++++----- src/entities/house_generator.h | 3 ++- src/entities/main_character.cpp | 2 +- src/main.cpp | 17 +++++++++++++++++ src/scenes/game_Over_Scene.cpp | 1 - src/scenes/in_Game_Scene.cpp | 14 ++++++-------- src/scenes/startup_Scene.cpp | 2 +- 9 files changed, 38 insertions(+), 19 deletions(-) diff --git a/src/entities/collision_entity.cpp b/src/entities/collision_entity.cpp index 304ffb7..3418d3d 100644 --- a/src/entities/collision_entity.cpp +++ b/src/entities/collision_entity.cpp @@ -40,7 +40,10 @@ namespace entities const glm::vec3 size = bounding_box.size; + /*min_xyz = { bounding_box.center_pos.x - (0.5 * size.x), bounding_box.center_pos.y, bounding_box.center_pos.z + (0.5 * size.z) }; + max_xyz = { bounding_box.center_pos.x + (0.5 * size.x), bounding_box.center_pos.y + size.y, bounding_box.center_pos.z - (0.5 * size.z) };*/ + min_xyz = bounding_box.center_pos; - max_xyz = glm::vec3(min_xyz.x + size.x, min_xyz.y + size.y, min_xyz.z + size.z); + max_xyz = { bounding_box.center_pos.x + size.x, bounding_box.center_pos.y + size.y, bounding_box.center_pos.z - size.z }; } } diff --git a/src/entities/collision_entity.h b/src/entities/collision_entity.h index a1269d1..1eb8ee4 100644 --- a/src/entities/collision_entity.h +++ b/src/entities/collision_entity.h @@ -58,7 +58,7 @@ namespace entities void SetCollisionBehaviour(std::function function) { if (function != nullptr) { on_collide = function; } } - protected: + public: /* * @brief: This method moves the collision to the center of the entity diff --git a/src/entities/house_generator.cpp b/src/entities/house_generator.cpp index 6224dde..6d5ef96 100644 --- a/src/entities/house_generator.cpp +++ b/src/entities/house_generator.cpp @@ -20,12 +20,13 @@ namespace entities GenerateFurnitureModels(); } - std::deque> HouseGenerator::GenerateHouse(const glm::vec3& position, float y_rotation) + std::deque> HouseGenerator::GenerateHouse(const glm::vec3& position, float y_rotation) { - std::deque> furniture; + std::deque> furniture; // Add house - furniture.push_front(std::make_shared(house_model, position, glm::vec3(0, y_rotation, 0), HOUSE_SIZE)); + collision::Box house_box = { position, glm::vec3(0,0,0) }; + furniture.push_front(std::make_shared(house_model, position, glm::vec3(0, y_rotation, 0), HOUSE_SIZE, house_box)); for(int i = 0; i(misc, misc_pos, glm::vec3(0, 0, 0), HOUSE_SIZE, misc_box)); - */ + return furniture; } diff --git a/src/entities/house_generator.h b/src/entities/house_generator.h index ab5e4f1..fcd734d 100644 --- a/src/entities/house_generator.h +++ b/src/entities/house_generator.h @@ -5,6 +5,7 @@ #include #include "../models/Model.h" #include "../collision/collision.h" +#include "collision_entity.h" namespace entities { @@ -44,7 +45,7 @@ namespace entities * * @return: A list with all the entities of the generated house (the furniture) */ - std::deque> GenerateHouse(const glm::vec3& position, float y_rotation); + std::deque> GenerateHouse(const glm::vec3& position, float y_rotation); /* * @brief: Returns the depth of the house (chunk) diff --git a/src/entities/main_character.cpp b/src/entities/main_character.cpp index b366b89..c37e00c 100644 --- a/src/entities/main_character.cpp +++ b/src/entities/main_character.cpp @@ -22,7 +22,7 @@ namespace entities void MainCharacter::Move(GLFWwindow* window) { if (is_playing) { - movement_speed = -0.5f; //Forward speed adjustment, bee is moving at a standard speedrate + movement_speed = -2.0f; //Forward speed adjustment, bee is moving at a standard speedrate down_speed = -1.0f; //Down speed adjustment, downspeed is difference between down_speed and UP_SPEED side_speed = 0; //Side speed adjustment diff --git a/src/main.cpp b/src/main.cpp index 472c320..a799195 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -28,6 +28,7 @@ #include "scenes/in_Game_Scene.h" #include "scenes/startup_Scene.h" #include "scenes/game_Over_Scene.h" +#include "entities/collision_entity.h" #include "computervision/ObjectDetection.h" //#include "computervision/OpenPoseImage.h" @@ -59,6 +60,22 @@ void retrieve_points(std::vector arm_points, cv::Mat points_on_image) int main(void) { + collision::Box house_box_1 = { glm::vec3(-50, 0,0), glm::vec3(5,5,5) }; + collision::Box house_box_2 = { glm::vec3(50, 0,0), glm::vec3(5,5,5) }; + entities::CollisionEntity ent1({ {0,0}, {0} }, glm::vec3(-50, 0, 0), glm::vec3(0, 0, 0), 1, house_box_1); + entities::CollisionEntity ent2({ {0,0}, {0} }, glm::vec3(50, 0, 0), glm::vec3(0, 0, 0), 1, house_box_2); + while (true){ + house_box_1.center_pos += 1; + ent1.IncreasePosition(glm::vec3(1, 0, 0)); + ent1.MoveCollisionBox(); + ent2.IncreasePosition(glm::vec3(-1, 0, 0)); + ent2.MoveCollisionBox(); + + if (ent1.IsColliding(ent2)) { + std::cout << "entities are colliding!! " << ent1.GetPosition().x << " : " << ent2.GetPosition().x << std::endl; + } + } + return 0; #pragma region OPENGL_SETTINGS if (!glfwInit()) throw "Could not inditialize glwf"; diff --git a/src/scenes/game_Over_Scene.cpp b/src/scenes/game_Over_Scene.cpp index 5fb9135..3832cb9 100644 --- a/src/scenes/game_Over_Scene.cpp +++ b/src/scenes/game_Over_Scene.cpp @@ -181,5 +181,4 @@ namespace scene hand_mode_gameOver = !hand_mode_gameOver; } } - } \ No newline at end of file diff --git a/src/scenes/in_Game_Scene.cpp b/src/scenes/in_Game_Scene.cpp index 0252fe5..71506a3 100644 --- a/src/scenes/in_Game_Scene.cpp +++ b/src/scenes/in_Game_Scene.cpp @@ -32,8 +32,6 @@ namespace scene std::shared_ptrmain_character; std::vector> collision_entities; - //std::deque> furniture_collision; - entities::HouseGenerator* house_generator; std::deque> house_models; @@ -132,14 +130,16 @@ namespace scene for (int i = 0; i < furniture_count; i++) { house_models.pop_front(); + collision_entities.pop_back(); } } int z_offset = model_pos * (house_generator->GetHouseDepth()); // how much "in the distance" we should load the model - std::deque> furniture = house_generator->GenerateHouse(glm::vec3(0, -75, -50 - z_offset), 90); + std::deque> furniture = house_generator->GenerateHouse(glm::vec3(0, -75, -50 - z_offset), 90); furniture_count = furniture.size(); house_models.insert(house_models.end(), furniture.begin(), furniture.end()); + collision_entities.insert(collision_entities.end(), furniture.begin(), furniture.end()); std::cout << "funriture_count in load chunk (house included): " << furniture_count << std::endl; furniture_count_old = furniture_count - 1; @@ -154,7 +154,6 @@ namespace scene texture.shine_damper = 10; texture.reflectivity = 0; - raw_model_char = render_engine::LoadObjModel("res/beeTwo.obj"); models::TexturedModel model_char = { raw_model_char, texture }; collision::Box char_box = create_bounding_box(raw_model_char.model_size, glm::vec3(0, 0, 0), 1); @@ -230,7 +229,6 @@ namespace scene break; } - glfwSwapBuffers(window); glfwPollEvents(); } @@ -279,6 +277,8 @@ namespace scene return_value = scene::Scenes::GAMEOVER; } + std::cout << "Pos of main char: " << main_character.get()->GetPosition().z << std::endl; + std::cout << "Pos z of collision entity: "<< collision_entities.at(0).get()->GetPosition().z << std::endl; //std::cout << "x get: " << movement.x << "\ny get: " << movement.y << "\nz get: " << movement.z << "\n"; camera->Follow(main_character->GetPosition()); @@ -293,16 +293,14 @@ namespace scene score += furniture_count_old; std::cout << "Score: " << score << std::endl; 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; + std::cout << "amount of collision entities: " << collision_entities.size() << std::endl; collision::CheckCollisions(collision_entities); update_hand_detection(); - - } //manages the key input in the game scene diff --git a/src/scenes/startup_Scene.cpp b/src/scenes/startup_Scene.cpp index 05698ce..b734214 100644 --- a/src/scenes/startup_Scene.cpp +++ b/src/scenes/startup_Scene.cpp @@ -211,7 +211,7 @@ namespace scene { if (glfwGetKey(window, GLFW_KEY_SPACE) == GLFW_PRESS) { - return_value = scene::Scenes::GAMEOVER; + return_value = scene::Scenes::INGAME; cv::destroyWindow("camera"); } else if (glfwGetKey(window, GLFW_KEY_BACKSPACE) == GLFW_PRESS) { From c0a099a05e1946c83ca126abb6a8ac05bb6d165a Mon Sep 17 00:00:00 2001 From: Menno Date: Fri, 18 Jun 2021 12:32:45 +0200 Subject: [PATCH 4/6] [FIXED] collisions --- src/collision/collision_handler.cpp | 4 +- src/collision/collision_handler.h | 2 +- .../async/StaticCameraInstance.h | 2 +- src/entities/collision_entity.cpp | 8 +- src/entities/house_generator.cpp | 106 +++++++++--------- src/main.cpp | 18 +-- src/scenes/in_Game_Scene.cpp | 4 +- 7 files changed, 63 insertions(+), 81 deletions(-) diff --git a/src/collision/collision_handler.cpp b/src/collision/collision_handler.cpp index 4a82a7f..6859cab 100644 --- a/src/collision/collision_handler.cpp +++ b/src/collision/collision_handler.cpp @@ -3,7 +3,7 @@ namespace collision { - void CheckCollisions(std::vector> entities) + void CheckCollisions(std::vector>& entities) { if (entities.size() < 2) { return; } if (entities.size() == 2) @@ -15,7 +15,7 @@ namespace collision entities[1]->OnCollide(c); } } - + for (int i = 0; i < entities.size() - 2; i++) { std::shared_ptr entity = entities[i]; diff --git a/src/collision/collision_handler.h b/src/collision/collision_handler.h index ea1a67d..8b6d556 100644 --- a/src/collision/collision_handler.h +++ b/src/collision/collision_handler.h @@ -13,5 +13,5 @@ namespace collision * * @param entities: A list with all the collision entities. */ - void CheckCollisions(std::vector> entities); + void CheckCollisions(std::vector>& entities); } \ No newline at end of file diff --git a/src/computervision/async/StaticCameraInstance.h b/src/computervision/async/StaticCameraInstance.h index 625d478..93e4725 100644 --- a/src/computervision/async/StaticCameraInstance.h +++ b/src/computervision/async/StaticCameraInstance.h @@ -6,7 +6,7 @@ namespace static_camera static cv::VideoCapture getCap() { - static cv::VideoCapture cap(0); + static cv::VideoCapture cap(1); return cap; } }; diff --git a/src/entities/collision_entity.cpp b/src/entities/collision_entity.cpp index 3418d3d..ef22775 100644 --- a/src/entities/collision_entity.cpp +++ b/src/entities/collision_entity.cpp @@ -40,10 +40,10 @@ namespace entities const glm::vec3 size = bounding_box.size; - /*min_xyz = { bounding_box.center_pos.x - (0.5 * size.x), bounding_box.center_pos.y, bounding_box.center_pos.z + (0.5 * size.z) }; - max_xyz = { bounding_box.center_pos.x + (0.5 * size.x), bounding_box.center_pos.y + size.y, bounding_box.center_pos.z - (0.5 * size.z) };*/ + min_xyz = { bounding_box.center_pos.x - (0.5 * size.x), bounding_box.center_pos.y, bounding_box.center_pos.z - (0.5 * size.z) }; + max_xyz = { bounding_box.center_pos.x + (0.5 * size.x), bounding_box.center_pos.y + size.y, bounding_box.center_pos.z + (0.5 * size.z) }; - min_xyz = bounding_box.center_pos; - max_xyz = { bounding_box.center_pos.x + size.x, bounding_box.center_pos.y + size.y, bounding_box.center_pos.z - size.z }; + // min_xyz = bounding_box.center_pos; + // max_xyz = { bounding_box.center_pos.x + size.x, bounding_box.center_pos.y + size.y, bounding_box.center_pos.z + size.z }; } } diff --git a/src/entities/house_generator.cpp b/src/entities/house_generator.cpp index 6d5ef96..568b792 100644 --- a/src/entities/house_generator.cpp +++ b/src/entities/house_generator.cpp @@ -28,66 +28,66 @@ namespace entities collision::Box house_box = { position, glm::vec3(0,0,0) }; furniture.push_front(std::make_shared(house_model, position, glm::vec3(0, y_rotation, 0), HOUSE_SIZE, house_box)); - for(int i = 0; i(model, model_pos, glm::vec3(0, -90, 0), HOUSE_SIZE * 2, model_box)); - //furniture_collision.push_back(std::make_shared(model, model_pos, glm::vec3(0, -90, 0), HOUSE_SIZE * 2, model_box)); - - } + // for(int i = 0; i(model, model_pos, glm::vec3(0, -90, 0), HOUSE_SIZE * 2, model_box)); + // //furniture_collision.push_back(std::make_shared(model, model_pos, glm::vec3(0, -90, 0), HOUSE_SIZE * 2, model_box)); + // + // } //furniture_collision.pop_front(); // Add furniture - models::TexturedModel couch = GetFurnitureModel(FurnitureType::COUCH); - glm::vec3 couch_pos = glm::vec3(position.x + 200, position.y, position.z + 10); - collision::Box couch_box = { couch_pos, couch.raw_model.model_size }; - couch_box.SetRotation(-90); - furniture.push_back(std::make_shared(couch, couch_pos, glm::vec3(0, -90, 0), HOUSE_SIZE * 2, couch_box)); - - models::TexturedModel table = GetFurnitureModel(FurnitureType::TABLE); - glm::vec3 table_pos = glm::vec3(position.x - 30, position.y, position.z); - collision::Box table_box = { table_pos, table.raw_model.model_size }; - furniture.push_back(std::make_shared(table, table_pos, glm::vec3(0, 0, 0), HOUSE_SIZE * 1.3, table_box)); - - models::TexturedModel chair = GetFurnitureModel(FurnitureType::CHAIR); - glm::vec3 chair_pos = glm::vec3(position.x - 50, position.y, position.z + 220); - collision::Box chair_box = { chair_pos, chair.raw_model.model_size }; - furniture.push_back(std::make_shared(chair, chair_pos, glm::vec3(0, 0, 0), HOUSE_SIZE, chair_box)); - - models::TexturedModel plant = GetFurnitureModel(FurnitureType::PLANT); - glm::vec3 plant_pos = glm::vec3(position.x - 50, position.y, position.z + 220); - collision::Box plant_box = { plant_pos, plant.raw_model.model_size }; - furniture.push_back(std::make_shared(plant, plant_pos, glm::vec3(0, 0, 0), HOUSE_SIZE, plant_box)); - - models::TexturedModel guitar = GetFurnitureModel(FurnitureType::GUITAR); - glm::vec3 guitar_pos = glm::vec3(position.x - 50, position.y, position.z + 220); - collision::Box guitar_box = { guitar_pos, guitar.raw_model.model_size }; - furniture.push_back(std::make_shared(guitar, guitar_pos, glm::vec3(0, 0, 0), HOUSE_SIZE, guitar_box)); - - models::TexturedModel bookshelf = GetFurnitureModel(FurnitureType::BOOKSHELF); - glm::vec3 bookshelf_pos = glm::vec3(position.x - 50, position.y, position.z + 220); - collision::Box bookshelf_box = { bookshelf_pos, bookshelf.raw_model.model_size }; - furniture.push_back(std::make_shared(bookshelf, bookshelf_pos, glm::vec3(0, 0, 0), HOUSE_SIZE, bookshelf_box)); - - models::TexturedModel lamp = GetFurnitureModel(FurnitureType::LAMP); - glm::vec3 lamp_pos = glm::vec3(position.x - 50, position.y, position.z + 220); - collision::Box lamp_box = { lamp_pos, lamp.raw_model.model_size }; - furniture.push_back(std::make_shared(lamp, lamp_pos, glm::vec3(0, 0, 0), HOUSE_SIZE, lamp_box)); - - models::TexturedModel ceiling_object = GetFurnitureModel(FurnitureType::CEILING_OBJECTS); - glm::vec3 ceiling_object_pos = glm::vec3(position.x - 50, position.y, position.z + 220); - collision::Box ceiling_object_box = { ceiling_object_pos, ceiling_object.raw_model.model_size }; - furniture.push_back(std::make_shared(ceiling_object, ceiling_object_pos, glm::vec3(0, 0, 0), HOUSE_SIZE, ceiling_object_box)); + // models::TexturedModel couch = GetFurnitureModel(FurnitureType::COUCH); + // glm::vec3 couch_pos = glm::vec3(position.x + 200, position.y, position.z + 10); + // collision::Box couch_box = { couch_pos, couch.raw_model.model_size * (HOUSE_SIZE) }; + // couch_box.SetRotation(-90); + // furniture.push_back(std::make_shared(couch, couch_pos, glm::vec3(0, -90, 0), HOUSE_SIZE * 2, couch_box)); + // + // models::TexturedModel table = GetFurnitureModel(FurnitureType::TABLE); + // glm::vec3 table_pos = glm::vec3(position.x - 30, position.y, position.z); + // collision::Box table_box = { table_pos, table.raw_model.model_size * ((HOUSE_SIZE) * 1.3f) }; + // furniture.push_back(std::make_shared(table, table_pos, glm::vec3(0, 0, 0), HOUSE_SIZE * 1.3, table_box)); + // + // models::TexturedModel chair = GetFurnitureModel(FurnitureType::CHAIR); + // glm::vec3 chair_pos = glm::vec3(position.x - 50, position.y, position.z + 220); + // collision::Box chair_box = { chair_pos, chair.raw_model.model_size * (HOUSE_SIZE) }; + // furniture.push_back(std::make_shared(chair, chair_pos, glm::vec3(0, 0, 0), HOUSE_SIZE, chair_box)); + // + // models::TexturedModel plant = GetFurnitureModel(FurnitureType::PLANT); + // glm::vec3 plant_pos = glm::vec3(position.x - 50, position.y, position.z + 220); + // collision::Box plant_box = { plant_pos, plant.raw_model.model_size * (HOUSE_SIZE) }; + // furniture.push_back(std::make_shared(plant, plant_pos, glm::vec3(0, 0, 0), HOUSE_SIZE, plant_box)); + // + // models::TexturedModel guitar = GetFurnitureModel(FurnitureType::GUITAR); + // glm::vec3 guitar_pos = glm::vec3(position.x - 50, position.y, position.z + 220); + // collision::Box guitar_box = { guitar_pos, guitar.raw_model.model_size * (HOUSE_SIZE) }; + // furniture.push_back(std::make_shared(guitar, guitar_pos, glm::vec3(0, 0, 0), HOUSE_SIZE, guitar_box)); + // + // models::TexturedModel bookshelf = GetFurnitureModel(FurnitureType::BOOKSHELF); + // glm::vec3 bookshelf_pos = glm::vec3(position.x - 50, position.y, position.z + 220); + // collision::Box bookshelf_box = { bookshelf_pos, bookshelf.raw_model.model_size * (HOUSE_SIZE) }; + // furniture.push_back(std::make_shared(bookshelf, bookshelf_pos, glm::vec3(0, 0, 0), HOUSE_SIZE, bookshelf_box)); + // + // models::TexturedModel lamp = GetFurnitureModel(FurnitureType::LAMP); + // glm::vec3 lamp_pos = glm::vec3(position.x - 50, position.y, position.z + 220); + // collision::Box lamp_box = { lamp_pos, lamp.raw_model.model_size * (HOUSE_SIZE) }; + // furniture.push_back(std::make_shared(lamp, lamp_pos, glm::vec3(0, 0, 0), HOUSE_SIZE, lamp_box)); + // + // models::TexturedModel ceiling_object = GetFurnitureModel(FurnitureType::CEILING_OBJECTS); + // glm::vec3 ceiling_object_pos = glm::vec3(position.x - 50, position.y, position.z + 220); + // collision::Box ceiling_object_box = { ceiling_object_pos, ceiling_object.raw_model.model_size * (HOUSE_SIZE / 2) }; + // furniture.push_back(std::make_shared(ceiling_object, ceiling_object_pos, glm::vec3(0, 0, 0), HOUSE_SIZE, ceiling_object_box)); models::TexturedModel misc = GetFurnitureModel(FurnitureType::MISC); - glm::vec3 misc_pos = glm::vec3(position.x - 50, position.y, position.z + 220); - collision::Box misc_box = { misc_pos, misc.raw_model.model_size }; + glm::vec3 misc_pos = glm::vec3(position.x - 50, position.y - 10, position.z + 220); + collision::Box misc_box = { misc_pos, misc.raw_model.model_size * (HOUSE_SIZE) }; furniture.push_back(std::make_shared(misc, misc_pos, glm::vec3(0, 0, 0), HOUSE_SIZE, misc_box)); return furniture; diff --git a/src/main.cpp b/src/main.cpp index a799195..6b94b69 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -60,22 +60,6 @@ void retrieve_points(std::vector arm_points, cv::Mat points_on_image) int main(void) { - collision::Box house_box_1 = { glm::vec3(-50, 0,0), glm::vec3(5,5,5) }; - collision::Box house_box_2 = { glm::vec3(50, 0,0), glm::vec3(5,5,5) }; - entities::CollisionEntity ent1({ {0,0}, {0} }, glm::vec3(-50, 0, 0), glm::vec3(0, 0, 0), 1, house_box_1); - entities::CollisionEntity ent2({ {0,0}, {0} }, glm::vec3(50, 0, 0), glm::vec3(0, 0, 0), 1, house_box_2); - while (true){ - house_box_1.center_pos += 1; - ent1.IncreasePosition(glm::vec3(1, 0, 0)); - ent1.MoveCollisionBox(); - ent2.IncreasePosition(glm::vec3(-1, 0, 0)); - ent2.MoveCollisionBox(); - - if (ent1.IsColliding(ent2)) { - std::cout << "entities are colliding!! " << ent1.GetPosition().x << " : " << ent2.GetPosition().x << std::endl; - } - } - return 0; #pragma region OPENGL_SETTINGS if (!glfwInit()) throw "Could not inditialize glwf"; @@ -159,4 +143,4 @@ static double UpdateDelta() double delt_time = current_time - last_frame_time; last_frame_time = current_time; return delt_time; -} +} \ No newline at end of file diff --git a/src/scenes/in_Game_Scene.cpp b/src/scenes/in_Game_Scene.cpp index 71506a3..6627d20 100644 --- a/src/scenes/in_Game_Scene.cpp +++ b/src/scenes/in_Game_Scene.cpp @@ -274,11 +274,9 @@ namespace scene main_character->Move(window); if (!main_character.get()->GetOnCollide()) { - return_value = scene::Scenes::GAMEOVER; + //return_value = scene::Scenes::GAMEOVER; } - std::cout << "Pos of main char: " << main_character.get()->GetPosition().z << std::endl; - std::cout << "Pos z of collision entity: "<< collision_entities.at(0).get()->GetPosition().z << std::endl; //std::cout << "x get: " << movement.x << "\ny get: " << movement.y << "\nz get: " << movement.z << "\n"; camera->Follow(main_character->GetPosition()); From 824f9a2433ec5004d6dc08f7855ebd2ac12ffa74 Mon Sep 17 00:00:00 2001 From: "DESKTOP-EBR7IVA\\kimve" Date: Fri, 18 Jun 2021 13:35:19 +0200 Subject: [PATCH 5/6] [ADD] gameover scene shows the points --- src/main.cpp | 11 ++++---- src/scenes/game_Over_Scene.cpp | 47 +++++++++++++++++++++++++++++----- src/scenes/game_Over_Scene.h | 13 ++++++++-- src/scenes/in_Game_Scene.cpp | 16 +++++------- src/scenes/in_Game_Scene.h | 3 +-- src/scenes/scene.h | 15 ++++++++--- 6 files changed, 75 insertions(+), 30 deletions(-) diff --git a/src/main.cpp b/src/main.cpp index 472c320..ea09479 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -28,6 +28,7 @@ #include "scenes/in_Game_Scene.h" #include "scenes/startup_Scene.h" #include "scenes/game_Over_Scene.h" +#include "entities/collision_entity.h" #include "computervision/ObjectDetection.h" //#include "computervision/OpenPoseImage.h" @@ -39,6 +40,7 @@ #pragma comment(lib, "glew32s.lib") #pragma comment(lib, "opengl32.lib") +int score; static double UpdateDelta(); static GLFWwindow* window; @@ -73,7 +75,8 @@ int main(void) glGetError(); #pragma endregion - + //TODO change back to 0, only to show how score is visible on end screen + score = 30; current_scene = new scene::Startup_Scene(); glfwSetKeyCallback(window, [](GLFWwindow* window, int key, int scancode, int action, int mods) @@ -88,8 +91,6 @@ int main(void) bool window_open = true; - - // Main game loop while (!glfwWindowShouldClose(window) && window_open) { @@ -110,11 +111,11 @@ int main(void) case scene::Scenes::INGAME: - current_scene = new scene::In_Game_Scene(); + current_scene = new scene::In_Game_Scene(&score); break; case scene::Scenes::GAMEOVER: - current_scene = new scene::Game_Over_Scene(); + current_scene = new scene::Game_Over_Scene(score); break; default: diff --git a/src/scenes/game_Over_Scene.cpp b/src/scenes/game_Over_Scene.cpp index 5fb9135..0291d57 100644 --- a/src/scenes/game_Over_Scene.cpp +++ b/src/scenes/game_Over_Scene.cpp @@ -22,12 +22,12 @@ namespace scene shaders::GuiShader* gui_shader_gameOver; std::vector guis_gameOver; computervision::ObjectDetection objDetect_gameOver; + std::vector> score_textures_gameOver; float item_number_gameOver = 0; - bool hand_mode_gameOver = false; - Game_Over_Scene::Game_Over_Scene() + Game_Over_Scene::Game_Over_Scene(int score) { shaders::EntityShader shader; shader.Init(); @@ -36,13 +36,28 @@ namespace scene gui_shader_gameOver = new shaders::GuiShader(); gui_shader_gameOver->Init(); + + 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.0f, 0.2f), glm::vec2(0.07, 0.15)); + + score_textures_gameOver.push_back(score_pointer); + } + + game_over_texture = std::make_unique(render_engine::loader::LoadTexture("res/game_over.png"), glm::vec2(0.0f, 0.6f), glm::vec2(0.50f, 0.50f)); + end_score = score; } gui::Button* ConvertGuiTextureToButtonGameOver(gui::GuiTexture* texture) { gui::Button* button; if (texture != NULL) { - if (texture->GetType() == gui::GuiType::BUTTON) { button = (gui::Button*)texture; @@ -75,12 +90,13 @@ namespace scene } scene::Scenes scene::Game_Over_Scene::start(GLFWwindow* window) { - gui::Button button_start_scene(render_engine::loader::LoadTexture("res/Birb1.jpg"), glm::vec2(0.0f, 0.6f), glm::vec2(0.25f, 0.25f)); + gui::Button button_start_scene(render_engine::loader::LoadTexture("res/Birb1.jpg"), glm::vec2(0.0f, -0.5f), glm::vec2(0.25f, 0.25f)); button_start_scene.SetHoverTexture(render_engine::loader::LoadTexture("res/Birb2.jpg")); button_start_scene.SetClickedTexture(render_engine::loader::LoadTexture("res/Birb3.jpg")); button_start_scene.SetOnClickAction([]() { std::cout << "Back to start screen!!" << std::endl; + }); guis_gameOver.push_back(&button_start_scene); @@ -134,7 +150,7 @@ namespace scene } } glfwSwapBuffers(window); - glfwPollEvents(); + glfwPollEvents(); } gui_shader_gameOver->CleanUp(); @@ -165,7 +181,10 @@ namespace scene } bool hand_present; objDetect_gameOver.DetectHand(objDetect_gameOver.ReadCamera(), hand_present); - } + + render_engine::renderer::Render(game_over_texture, *gui_shader_gameOver); + DrawScore(end_score); + } /** * manages the key input in the start-up scene @@ -174,12 +193,26 @@ namespace scene { if (glfwGetKey(window, GLFW_KEY_SPACE) == GLFW_PRESS) { - return_value = scene::Scenes::INGAME; + return_value = scene::Scenes::STARTUP; cv::destroyWindow("camera"); } else if (glfwGetKey(window, GLFW_KEY_BACKSPACE) == GLFW_PRESS) { hand_mode_gameOver = !hand_mode_gameOver; } } + + void Game_Over_Scene::DrawScore(int score) + { + std::vector digits; + score_guis_gameOver.clear(); + + toolbox::GetDigitsFromNumber(score, digits); + + for (int i = digits.size() - 1; i >= 0; i--) + { + score_textures_gameOver[digits[i]].get()->position.x = (0.15 * i - 0.05); + render_engine::renderer::Render(score_textures_gameOver[digits[i]], *gui_shader_gameOver); + } + } } \ No newline at end of file diff --git a/src/scenes/game_Over_Scene.h b/src/scenes/game_Over_Scene.h index e94e758..5fd7203 100644 --- a/src/scenes/game_Over_Scene.h +++ b/src/scenes/game_Over_Scene.h @@ -9,10 +9,15 @@ namespace scene class Game_Over_Scene : public scene::Scene { private: + + int end_score; scene::Scenes return_value = scene::Scenes::GAMEOVER; + std::vector> score_guis_gameOver; + std::shared_ptr game_over_texture; + public: - Game_Over_Scene(); + Game_Over_Scene(int score); Scenes start(GLFWwindow* window) override; @@ -21,6 +26,10 @@ namespace scene void update(GLFWwindow* window) override; void onKey(GLFWwindow* window, int key, int scancode, int action, int mods) override; - + /** + * @brief: This method renders the score points onto the game window + * @param score: Score to show + */ + void DrawScore(int score); }; } \ No newline at end of file diff --git a/src/scenes/in_Game_Scene.cpp b/src/scenes/in_Game_Scene.cpp index 0252fe5..6a2cf8f 100644 --- a/src/scenes/in_Game_Scene.cpp +++ b/src/scenes/in_Game_Scene.cpp @@ -46,6 +46,7 @@ namespace scene int furniture_count_old; int score; + int* ptr; std::vector regions; computervision::HandDetectRegion reg_left("left", 0, 0, 150, 150), reg_right("right", 0, 0, 150, 150), reg_up("up", 0, 0, 150, 150); @@ -53,8 +54,9 @@ namespace scene /** * sets up the first things when the objects has been made */ - In_Game_Scene::In_Game_Scene() + In_Game_Scene::In_Game_Scene(int *score_ptr) { + ptr = score_ptr; camera = std::make_unique(glm::vec3(0, 0, 0), glm::vec3(0, 0, 0)); shader = new shaders::EntityShader; @@ -76,12 +78,7 @@ namespace scene 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; - } /** @@ -275,11 +272,12 @@ namespace scene //camera.Move(window); main_character->Move(window); if (!main_character.get()->GetOnCollide()) - { + { + *ptr = score; + std::cout << "Score: " << score << std::endl; return_value = scene::Scenes::GAMEOVER; } - //std::cout << "x get: " << movement.x << "\ny get: " << movement.y << "\nz get: " << movement.z << "\n"; camera->Follow(main_character->GetPosition()); // calculate where the next house model should be loaded @@ -301,8 +299,6 @@ namespace scene collision::CheckCollisions(collision_entities); update_hand_detection(); - - } //manages the key input in the game scene diff --git a/src/scenes/in_Game_Scene.h b/src/scenes/in_Game_Scene.h index 241927f..60f1ca1 100644 --- a/src/scenes/in_Game_Scene.h +++ b/src/scenes/in_Game_Scene.h @@ -30,7 +30,6 @@ namespace scene PAUSED }; - class In_Game_Scene : public scene::Scene { private: @@ -68,7 +67,7 @@ namespace scene void update_hand_detection(); public: - In_Game_Scene(); + In_Game_Scene(int *score_ptr); ~In_Game_Scene(); /** diff --git a/src/scenes/scene.h b/src/scenes/scene.h index 4db2fe5..a1af4eb 100644 --- a/src/scenes/scene.h +++ b/src/scenes/scene.h @@ -19,10 +19,11 @@ namespace scene { }; class Scene - { + { + static int END_SCORE; public: virtual ~Scene() = 0; - + /** * @brief the method start is the start of a scene where a while loop runs, this runs the scene. * @param window the main window of the application @@ -54,7 +55,13 @@ namespace scene { * @return void */ virtual void onKey(GLFWwindow* window, int key, int scancode, int action, int mods) {}; + + static void SetEndScore(int score) { + END_SCORE = score; + } + + static int GetEndScore() { + return END_SCORE; + } }; } - - From b92c0c74eb02a5b74e5d72218a636233aaac5e94 Mon Sep 17 00:00:00 2001 From: "DESKTOP-EBR7IVA\\kimve" Date: Fri, 18 Jun 2021 15:08:08 +0200 Subject: [PATCH 6/6] no message --- src/collision/collision_handler.cpp | 2 +- src/collision/collision_handler.h | 3 ++- src/entities/collision_entity.cpp | 4 ++-- src/scenes/game_Over_Scene.cpp | 1 - src/scenes/in_Game_Scene.cpp | 10 +++++++--- 5 files changed, 12 insertions(+), 8 deletions(-) diff --git a/src/collision/collision_handler.cpp b/src/collision/collision_handler.cpp index 6859cab..61d7c0e 100644 --- a/src/collision/collision_handler.cpp +++ b/src/collision/collision_handler.cpp @@ -3,7 +3,7 @@ namespace collision { - void CheckCollisions(std::vector>& entities) + void CheckCollisions(std::deque>& entities) { if (entities.size() < 2) { return; } if (entities.size() == 2) diff --git a/src/collision/collision_handler.h b/src/collision/collision_handler.h index 8b6d556..8887dd8 100644 --- a/src/collision/collision_handler.h +++ b/src/collision/collision_handler.h @@ -4,6 +4,7 @@ #include #include "../entities/collision_entity.h" #include "collision.h" +#include namespace collision { @@ -13,5 +14,5 @@ namespace collision * * @param entities: A list with all the collision entities. */ - void CheckCollisions(std::vector>& entities); + void CheckCollisions(std::deque>& entities); } \ No newline at end of file diff --git a/src/entities/collision_entity.cpp b/src/entities/collision_entity.cpp index ef22775..57e7b9e 100644 --- a/src/entities/collision_entity.cpp +++ b/src/entities/collision_entity.cpp @@ -40,8 +40,8 @@ namespace entities const glm::vec3 size = bounding_box.size; - min_xyz = { bounding_box.center_pos.x - (0.5 * size.x), bounding_box.center_pos.y, bounding_box.center_pos.z - (0.5 * size.z) }; - max_xyz = { bounding_box.center_pos.x + (0.5 * size.x), bounding_box.center_pos.y + size.y, bounding_box.center_pos.z + (0.5 * size.z) }; + min_xyz = { bounding_box.center_pos.x - (0.5 * size.x), bounding_box.center_pos.y, bounding_box.center_pos.z + (0.5 * size.z) }; + max_xyz = { bounding_box.center_pos.x + (0.5 * size.x), bounding_box.center_pos.y + size.y, bounding_box.center_pos.z - (0.5 * size.z) }; // min_xyz = bounding_box.center_pos; // max_xyz = { bounding_box.center_pos.x + size.x, bounding_box.center_pos.y + size.y, bounding_box.center_pos.z + size.z }; diff --git a/src/scenes/game_Over_Scene.cpp b/src/scenes/game_Over_Scene.cpp index 8b1e50b..a04ac48 100644 --- a/src/scenes/game_Over_Scene.cpp +++ b/src/scenes/game_Over_Scene.cpp @@ -214,5 +214,4 @@ namespace scene render_engine::renderer::Render(score_textures_gameOver[digits[i]], *gui_shader_gameOver); } } - } \ No newline at end of file diff --git a/src/scenes/in_Game_Scene.cpp b/src/scenes/in_Game_Scene.cpp index ba84036..f741403 100644 --- a/src/scenes/in_Game_Scene.cpp +++ b/src/scenes/in_Game_Scene.cpp @@ -30,7 +30,7 @@ namespace scene { std::shared_ptrmain_character; - std::vector> collision_entities; + std::deque> collision_entities; //std::deque> furniture_collision; @@ -129,7 +129,7 @@ namespace scene for (int i = 0; i < furniture_count; i++) { house_models.pop_front(); - collision_entities.pop_back(); + collision_entities.erase(collision_entities.begin() + 1); } } int z_offset = model_pos * (house_generator->GetHouseDepth()); // how much "in the distance" we should load the model @@ -158,8 +158,10 @@ namespace scene models::TexturedModel model_char = { raw_model_char, texture }; collision::Box char_box = create_bounding_box(raw_model_char.model_size, glm::vec3(0, 0, 0), 1); main_character = std::make_shared(model_char, glm::vec3(0, 50, -100), glm::vec3(0, 90, 0), 5, char_box); - collision_entities.push_back(main_character); + + //collision_entities.push_back(main_character); house_generator = new entities::HouseGenerator(); + // load the first few house models for (int i = 0; i <= UPCOMING_MODEL_AMOUNT; i++) { @@ -297,8 +299,10 @@ namespace scene } // remember the position at which the new model was added last_model_pos = model_pos; + collision_entities.push_front(main_character); collision::CheckCollisions(collision_entities); + collision_entities.pop_front(); update_hand_detection(); }