From 1649af99434d0088ce71e39259cb4afd987ca4b1 Mon Sep 17 00:00:00 2001 From: karl Date: Sat, 16 Jan 2021 22:35:25 +0100 Subject: [PATCH] Add flag for non-colliding objects --- ECS/Components/ObjMesh.h | 10 +++++++--- ECS/Systems/CollisionSystem.h | 3 +++ main.cpp | 10 +++++++--- 3 files changed, 17 insertions(+), 6 deletions(-) diff --git a/ECS/Components/ObjMesh.h b/ECS/Components/ObjMesh.h index 85ecc43..dec38b1 100644 --- a/ECS/Components/ObjMesh.h +++ b/ECS/Components/ObjMesh.h @@ -13,22 +13,26 @@ struct ObjMesh : public Mesh { Settings() = default; Settings(float minDistanceForRender, float maxDistanceForRender, float diffuse, - float specular) + float specular, bool colliding) : minDistanceForRender(minDistanceForRender), - maxDistanceForRender(maxDistanceForRender) {} + maxDistanceForRender(maxDistanceForRender), colliding(colliding) {} float minDistanceForRender = 0.0; float maxDistanceForRender = 1000.0; + bool colliding = true; }; explicit ObjMesh(const std::string &path, const Settings &settings) : Mesh(getVerticesFromFile(path), getIndicesFromFile(path)), - minDistance(settings.minDistanceForRender), maxDistance(settings.maxDistanceForRender) {} + minDistance(settings.minDistanceForRender), maxDistance(settings.maxDistanceForRender), + colliding(settings.colliding) {} float minDistance; float maxDistance; + bool colliding; + private: static std::vector getVerticesFromFile(const std::string &path) { objl::Loader loader; diff --git a/ECS/Systems/CollisionSystem.h b/ECS/Systems/CollisionSystem.h index 2bc9c5a..9a4c517 100644 --- a/ECS/Systems/CollisionSystem.h +++ b/ECS/Systems/CollisionSystem.h @@ -23,6 +23,9 @@ class CollisionSystem : public EntitySystem { // ObjMesh myWorld->each( [&](Entity *ent, ComponentHandle mesh, ComponentHandle transform) { + // If this mesh shouldn't collide, skip it + if (!mesh->colliding) { return; } + std::vector indices = mesh->indices; std::vector vertices = mesh->vertices; diff --git a/main.cpp b/main.cpp index 8e7a387..b6d9143 100644 --- a/main.cpp +++ b/main.cpp @@ -94,7 +94,11 @@ int main(int argc, char **argv) { // Create collision indicator Entity *collision_point = world->create(); collision_point->assign(); - collision_point->assign(ObjMesh("Resources/sphere.obj", ObjMesh::Settings())); + + ObjMesh::Settings cp_obj_settings = ObjMesh::Settings(); + cp_obj_settings.colliding = false; + collision_point->assign(ObjMesh("Resources/sphere.obj", cp_obj_settings)); + collision_point->assign("Resources/red.png", Texture::Settings(true), false); collision_point->assign(0.1, 0.9); @@ -128,8 +132,8 @@ int main(int argc, char **argv) { Entity *monkey = world->create(); monkey->assign(); monkey->assign(std::vector{ - ObjMesh("Resources/Monkey.obj", ObjMesh::Settings(0.0, 8.0, 0.4, 0.6)), - ObjMesh("Resources/MonkeySimple.obj", ObjMesh::Settings(8.0, 100.0, 0.4, 0.6))}); + ObjMesh("Resources/Monkey.obj", ObjMesh::Settings(0.0, 8.0, 0.4, 0.6, false)), + ObjMesh("Resources/MonkeySimple.obj", ObjMesh::Settings(8.0, 100.0, 0.4, 0.6, false))}); monkey->assign("Resources/Marble010_2K_Color.jpg", Texture::Settings(true), false); monkey->get()->addNormalmap("Resources/Marble010_2K_Normal.jpg", Texture::Settings(true));