[WIP] collision fixing
This commit is contained in:
@@ -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 };
|
||||
}
|
||||
}
|
||||
|
||||
@@ -58,7 +58,7 @@ namespace entities
|
||||
void SetCollisionBehaviour(std::function<void(const collision::Collision&)> function)
|
||||
{ if (function != nullptr) { on_collide = function; } }
|
||||
|
||||
protected:
|
||||
public:
|
||||
|
||||
/*
|
||||
* @brief: This method moves the collision to the center of the entity
|
||||
|
||||
@@ -20,12 +20,13 @@ namespace entities
|
||||
GenerateFurnitureModels();
|
||||
}
|
||||
|
||||
std::deque<std::shared_ptr<Entity>> HouseGenerator::GenerateHouse(const glm::vec3& position, float y_rotation)
|
||||
std::deque<std::shared_ptr<CollisionEntity>> HouseGenerator::GenerateHouse(const glm::vec3& position, float y_rotation)
|
||||
{
|
||||
std::deque<std::shared_ptr<Entity>> furniture;
|
||||
std::deque<std::shared_ptr<CollisionEntity>> furniture;
|
||||
|
||||
// Add house
|
||||
furniture.push_front(std::make_shared<Entity>(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<CollisionEntity>(house_model, position, glm::vec3(0, y_rotation, 0), HOUSE_SIZE, house_box));
|
||||
|
||||
for(int i = 0; i<toolbox::Random(1,4);i++)
|
||||
{
|
||||
@@ -41,7 +42,7 @@ namespace entities
|
||||
|
||||
//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);
|
||||
@@ -88,7 +89,7 @@ namespace entities
|
||||
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 };
|
||||
furniture.push_back(std::make_shared<CollisionEntity>(misc, misc_pos, glm::vec3(0, 0, 0), HOUSE_SIZE, misc_box));
|
||||
*/
|
||||
|
||||
return furniture;
|
||||
}
|
||||
|
||||
|
||||
@@ -5,6 +5,7 @@
|
||||
#include <map>
|
||||
#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<std::shared_ptr<Entity>> GenerateHouse(const glm::vec3& position, float y_rotation);
|
||||
std::deque<std::shared_ptr<CollisionEntity>> GenerateHouse(const glm::vec3& position, float y_rotation);
|
||||
|
||||
/*
|
||||
* @brief: Returns the depth of the house (chunk)
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
17
src/main.cpp
17
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<Point> 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";
|
||||
|
||||
@@ -181,5 +181,4 @@ namespace scene
|
||||
hand_mode_gameOver = !hand_mode_gameOver;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
@@ -32,8 +32,6 @@ namespace scene
|
||||
std::shared_ptr<entities::MainCharacter>main_character;
|
||||
std::vector<std::shared_ptr<entities::CollisionEntity>> collision_entities;
|
||||
|
||||
//std::deque<std::shared_ptr<entities::CollisionEntity>> furniture_collision;
|
||||
|
||||
entities::HouseGenerator* house_generator;
|
||||
std::deque<std::shared_ptr<entities::Entity>> 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<std::shared_ptr<entities::Entity>> furniture = house_generator->GenerateHouse(glm::vec3(0, -75, -50 - z_offset), 90);
|
||||
std::deque<std::shared_ptr<entities::CollisionEntity>> 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
|
||||
|
||||
@@ -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) {
|
||||
|
||||
Reference in New Issue
Block a user