Add flag for non-colliding objects

This commit is contained in:
karl 2021-01-16 22:35:25 +01:00
parent 6801208905
commit 1649af9943
3 changed files with 17 additions and 6 deletions

View File

@ -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<float> getVerticesFromFile(const std::string &path) {
objl::Loader loader;

View File

@ -23,6 +23,9 @@ class CollisionSystem : public EntitySystem {
// ObjMesh
myWorld->each<ObjMesh, Transform>(
[&](Entity *ent, ComponentHandle<ObjMesh> mesh, ComponentHandle<Transform> transform) {
// If this mesh shouldn't collide, skip it
if (!mesh->colliding) { return; }
std::vector<unsigned int> indices = mesh->indices;
std::vector<float> vertices = mesh->vertices;

View File

@ -94,7 +94,11 @@ int main(int argc, char **argv) {
// Create collision indicator
Entity *collision_point = world->create();
collision_point->assign<Transform>();
collision_point->assign<ObjMesh>(ObjMesh("Resources/sphere.obj", ObjMesh::Settings()));
ObjMesh::Settings cp_obj_settings = ObjMesh::Settings();
cp_obj_settings.colliding = false;
collision_point->assign<ObjMesh>(ObjMesh("Resources/sphere.obj", cp_obj_settings));
collision_point->assign<Texture>("Resources/red.png", Texture::Settings(true), false);
collision_point->assign<Material>(0.1, 0.9);
@ -128,8 +132,8 @@ int main(int argc, char **argv) {
Entity *monkey = world->create();
monkey->assign<Transform>();
monkey->assign<LODObjMesh>(std::vector<ObjMesh>{
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<Texture>("Resources/Marble010_2K_Color.jpg", Texture::Settings(true), false);
monkey->get<Texture>()->addNormalmap("Resources/Marble010_2K_Normal.jpg",
Texture::Settings(true));