Add flag for non-colliding objects
This commit is contained in:
parent
6801208905
commit
1649af9943
@ -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;
|
||||
|
@ -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;
|
||||
|
||||
|
10
main.cpp
10
main.cpp
@ -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));
|
||||
|
Loading…
x
Reference in New Issue
Block a user