[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
{
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)
@@ -15,7 +15,7 @@ namespace collision
entities[1]->OnCollide(c);
}
}
for (int i = 0; i < entities.size() - 2; 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.
*/
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 cap(0);
static cv::VideoCapture cap(1);
return cap;
}
};

View File

@@ -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 };
}
}

View File

@@ -28,66 +28,66 @@ namespace entities
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++)
{
FurnitureType type = FurnitureType(toolbox::Random(0, furniture_models.size() - 1));
models::TexturedModel model = GetFurnitureModel(type);
glm::vec3 model_pos = glm::vec3(position.x, position.y, position.z);
collision::Box model_box = { model_pos, model.raw_model.model_size };
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_collision.push_back(std::make_shared<CollisionEntity>(model, model_pos, glm::vec3(0, -90, 0), HOUSE_SIZE * 2, model_box));
}
// for(int i = 0; i<toolbox::Random(1,4);i++)
// {
// FurnitureType type = FurnitureType(toolbox::Random(0, furniture_models.size() - 1));
// models::TexturedModel model = GetFurnitureModel(type);
// glm::vec3 model_pos = glm::vec3(position.x, position.y, position.z);
// collision::Box model_box = { model_pos, model.raw_model.model_size };
// 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_collision.push_back(std::make_shared<CollisionEntity>(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<CollisionEntity>(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<CollisionEntity>(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<CollisionEntity>(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<CollisionEntity>(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<CollisionEntity>(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<CollisionEntity>(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<CollisionEntity>(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<CollisionEntity>(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<CollisionEntity>(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<CollisionEntity>(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<CollisionEntity>(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<CollisionEntity>(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<CollisionEntity>(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<CollisionEntity>(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<CollisionEntity>(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<CollisionEntity>(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<CollisionEntity>(misc, misc_pos, glm::vec3(0, 0, 0), HOUSE_SIZE, misc_box));
return furniture;

View File

@@ -60,22 +60,6 @@ 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";
@@ -159,4 +143,4 @@ static double UpdateDelta()
double delt_time = current_time - last_frame_time;
last_frame_time = current_time;
return delt_time;
}
}

View File

@@ -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());