[FIXED] collisions

This commit is contained in:
Menno
2021-06-18 12:32:45 +02:00
parent 022c7eb1f0
commit c0a099a05e
7 changed files with 63 additions and 81 deletions

View File

@@ -3,7 +3,7 @@
namespace collision namespace collision
{ {
void CheckCollisions(std::vector<std::shared_ptr<entities::CollisionEntity>> entities) void CheckCollisions(std::vector<std::shared_ptr<entities::CollisionEntity>>& entities)
{ {
if (entities.size() < 2) { return; } if (entities.size() < 2) { return; }
if (entities.size() == 2) if (entities.size() == 2)
@@ -15,7 +15,7 @@ namespace collision
entities[1]->OnCollide(c); entities[1]->OnCollide(c);
} }
} }
for (int i = 0; i < entities.size() - 2; i++) for (int i = 0; i < entities.size() - 2; i++)
{ {
std::shared_ptr<entities::CollisionEntity> entity = entities[i]; std::shared_ptr<entities::CollisionEntity> entity = entities[i];

View File

@@ -13,5 +13,5 @@ namespace collision
* *
* @param entities: A list with all the collision entities. * @param entities: A list with all the collision entities.
*/ */
void CheckCollisions(std::vector<std::shared_ptr<entities::CollisionEntity>> entities); void CheckCollisions(std::vector<std::shared_ptr<entities::CollisionEntity>>& entities);
} }

View File

@@ -6,7 +6,7 @@ namespace static_camera
static cv::VideoCapture getCap() static cv::VideoCapture getCap()
{ {
static cv::VideoCapture cap(0); static cv::VideoCapture cap(1);
return cap; return cap;
} }
}; };

View File

@@ -40,10 +40,10 @@ namespace entities
const glm::vec3 size = bounding_box.size; 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) }; 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) };*/ 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; // 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 }; // max_xyz = { bounding_box.center_pos.x + size.x, bounding_box.center_pos.y + size.y, bounding_box.center_pos.z + size.z };
} }
} }

View File

@@ -28,66 +28,66 @@ namespace entities
collision::Box house_box = { position, glm::vec3(0,0,0) }; 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)); 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++) // for(int i = 0; i<toolbox::Random(1,4);i++)
{ // {
FurnitureType type = FurnitureType(toolbox::Random(0, furniture_models.size() - 1)); // FurnitureType type = FurnitureType(toolbox::Random(0, furniture_models.size() - 1));
models::TexturedModel model = GetFurnitureModel(type); // models::TexturedModel model = GetFurnitureModel(type);
glm::vec3 model_pos = glm::vec3(position.x, position.y, position.z); // glm::vec3 model_pos = glm::vec3(position.x, position.y, position.z);
collision::Box model_box = { model_pos, model.raw_model.model_size }; // collision::Box model_box = { model_pos, model.raw_model.model_size };
model_box.SetRotation(-90); // model_box.SetRotation(-90);
furniture.push_back(std::make_shared<CollisionEntity>(model, model_pos, glm::vec3(0, -90, 0), HOUSE_SIZE * 2, model_box)); // furniture.push_back(std::make_shared<CollisionEntity>(model, model_pos, glm::vec3(0, -90, 0), HOUSE_SIZE * 2, model_box));
//furniture_collision.push_back(std::make_shared<CollisionEntity>(model, model_pos, glm::vec3(0, -90, 0), HOUSE_SIZE * 2, model_box)); // //furniture_collision.push_back(std::make_shared<CollisionEntity>(model, model_pos, glm::vec3(0, -90, 0), HOUSE_SIZE * 2, model_box));
//
} // }
//furniture_collision.pop_front(); //furniture_collision.pop_front();
// Add furniture // Add furniture
models::TexturedModel couch = GetFurnitureModel(FurnitureType::COUCH); // models::TexturedModel couch = GetFurnitureModel(FurnitureType::COUCH);
glm::vec3 couch_pos = glm::vec3(position.x + 200, position.y, position.z + 10); // 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 }; // collision::Box couch_box = { couch_pos, couch.raw_model.model_size * (HOUSE_SIZE) };
couch_box.SetRotation(-90); // couch_box.SetRotation(-90);
furniture.push_back(std::make_shared<CollisionEntity>(couch, couch_pos, glm::vec3(0, -90, 0), HOUSE_SIZE * 2, couch_box)); // furniture.push_back(std::make_shared<CollisionEntity>(couch, couch_pos, glm::vec3(0, -90, 0), HOUSE_SIZE * 2, couch_box));
//
models::TexturedModel table = GetFurnitureModel(FurnitureType::TABLE); // models::TexturedModel table = GetFurnitureModel(FurnitureType::TABLE);
glm::vec3 table_pos = glm::vec3(position.x - 30, position.y, position.z); // glm::vec3 table_pos = glm::vec3(position.x - 30, position.y, position.z);
collision::Box table_box = { table_pos, table.raw_model.model_size }; // collision::Box table_box = { table_pos, table.raw_model.model_size * ((HOUSE_SIZE) * 1.3f) };
furniture.push_back(std::make_shared<CollisionEntity>(table, table_pos, glm::vec3(0, 0, 0), HOUSE_SIZE * 1.3, table_box)); // furniture.push_back(std::make_shared<CollisionEntity>(table, table_pos, glm::vec3(0, 0, 0), HOUSE_SIZE * 1.3, table_box));
//
models::TexturedModel chair = GetFurnitureModel(FurnitureType::CHAIR); // models::TexturedModel chair = GetFurnitureModel(FurnitureType::CHAIR);
glm::vec3 chair_pos = glm::vec3(position.x - 50, position.y, position.z + 220); // 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 }; // collision::Box chair_box = { chair_pos, chair.raw_model.model_size * (HOUSE_SIZE) };
furniture.push_back(std::make_shared<CollisionEntity>(chair, chair_pos, glm::vec3(0, 0, 0), HOUSE_SIZE, chair_box)); // furniture.push_back(std::make_shared<CollisionEntity>(chair, chair_pos, glm::vec3(0, 0, 0), HOUSE_SIZE, chair_box));
//
models::TexturedModel plant = GetFurnitureModel(FurnitureType::PLANT); // models::TexturedModel plant = GetFurnitureModel(FurnitureType::PLANT);
glm::vec3 plant_pos = glm::vec3(position.x - 50, position.y, position.z + 220); // 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 }; // collision::Box plant_box = { plant_pos, plant.raw_model.model_size * (HOUSE_SIZE) };
furniture.push_back(std::make_shared<CollisionEntity>(plant, plant_pos, glm::vec3(0, 0, 0), HOUSE_SIZE, plant_box)); // furniture.push_back(std::make_shared<CollisionEntity>(plant, plant_pos, glm::vec3(0, 0, 0), HOUSE_SIZE, plant_box));
//
models::TexturedModel guitar = GetFurnitureModel(FurnitureType::GUITAR); // models::TexturedModel guitar = GetFurnitureModel(FurnitureType::GUITAR);
glm::vec3 guitar_pos = glm::vec3(position.x - 50, position.y, position.z + 220); // 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 }; // collision::Box guitar_box = { guitar_pos, guitar.raw_model.model_size * (HOUSE_SIZE) };
furniture.push_back(std::make_shared<CollisionEntity>(guitar, guitar_pos, glm::vec3(0, 0, 0), HOUSE_SIZE, guitar_box)); // furniture.push_back(std::make_shared<CollisionEntity>(guitar, guitar_pos, glm::vec3(0, 0, 0), HOUSE_SIZE, guitar_box));
//
models::TexturedModel bookshelf = GetFurnitureModel(FurnitureType::BOOKSHELF); // models::TexturedModel bookshelf = GetFurnitureModel(FurnitureType::BOOKSHELF);
glm::vec3 bookshelf_pos = glm::vec3(position.x - 50, position.y, position.z + 220); // 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 }; // collision::Box bookshelf_box = { bookshelf_pos, bookshelf.raw_model.model_size * (HOUSE_SIZE) };
furniture.push_back(std::make_shared<CollisionEntity>(bookshelf, bookshelf_pos, glm::vec3(0, 0, 0), HOUSE_SIZE, bookshelf_box)); // furniture.push_back(std::make_shared<CollisionEntity>(bookshelf, bookshelf_pos, glm::vec3(0, 0, 0), HOUSE_SIZE, bookshelf_box));
//
models::TexturedModel lamp = GetFurnitureModel(FurnitureType::LAMP); // models::TexturedModel lamp = GetFurnitureModel(FurnitureType::LAMP);
glm::vec3 lamp_pos = glm::vec3(position.x - 50, position.y, position.z + 220); // 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 }; // collision::Box lamp_box = { lamp_pos, lamp.raw_model.model_size * (HOUSE_SIZE) };
furniture.push_back(std::make_shared<CollisionEntity>(lamp, lamp_pos, glm::vec3(0, 0, 0), HOUSE_SIZE, lamp_box)); // furniture.push_back(std::make_shared<CollisionEntity>(lamp, lamp_pos, glm::vec3(0, 0, 0), HOUSE_SIZE, lamp_box));
//
models::TexturedModel ceiling_object = GetFurnitureModel(FurnitureType::CEILING_OBJECTS); // models::TexturedModel ceiling_object = GetFurnitureModel(FurnitureType::CEILING_OBJECTS);
glm::vec3 ceiling_object_pos = glm::vec3(position.x - 50, position.y, position.z + 220); // 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 }; // collision::Box ceiling_object_box = { ceiling_object_pos, ceiling_object.raw_model.model_size * (HOUSE_SIZE / 2) };
furniture.push_back(std::make_shared<CollisionEntity>(ceiling_object, ceiling_object_pos, glm::vec3(0, 0, 0), HOUSE_SIZE, ceiling_object_box)); // furniture.push_back(std::make_shared<CollisionEntity>(ceiling_object, ceiling_object_pos, glm::vec3(0, 0, 0), HOUSE_SIZE, ceiling_object_box));
models::TexturedModel misc = GetFurnitureModel(FurnitureType::MISC); models::TexturedModel misc = GetFurnitureModel(FurnitureType::MISC);
glm::vec3 misc_pos = glm::vec3(position.x - 50, position.y, position.z + 220); 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 }; collision::Box misc_box = { misc_pos, misc.raw_model.model_size * (HOUSE_SIZE) };
furniture.push_back(std::make_shared<CollisionEntity>(misc, misc_pos, glm::vec3(0, 0, 0), HOUSE_SIZE, misc_box)); furniture.push_back(std::make_shared<CollisionEntity>(misc, misc_pos, glm::vec3(0, 0, 0), HOUSE_SIZE, misc_box));
return furniture; return furniture;

View File

@@ -60,22 +60,6 @@ void retrieve_points(std::vector<Point> arm_points, cv::Mat points_on_image)
int main(void) 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 #pragma region OPENGL_SETTINGS
if (!glfwInit()) if (!glfwInit())
throw "Could not inditialize glwf"; throw "Could not inditialize glwf";
@@ -159,4 +143,4 @@ static double UpdateDelta()
double delt_time = current_time - last_frame_time; double delt_time = current_time - last_frame_time;
last_frame_time = current_time; last_frame_time = current_time;
return delt_time; return delt_time;
} }

View File

@@ -274,11 +274,9 @@ namespace scene
main_character->Move(window); main_character->Move(window);
if (!main_character.get()->GetOnCollide()) 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"; //std::cout << "x get: " << movement.x << "\ny get: " << movement.y << "\nz get: " << movement.z << "\n";
camera->Follow(main_character->GetPosition()); camera->Follow(main_character->GetPosition());