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() = default;
|
||||||
|
|
||||||
Settings(float minDistanceForRender, float maxDistanceForRender, float diffuse,
|
Settings(float minDistanceForRender, float maxDistanceForRender, float diffuse,
|
||||||
float specular)
|
float specular, bool colliding)
|
||||||
: minDistanceForRender(minDistanceForRender),
|
: minDistanceForRender(minDistanceForRender),
|
||||||
maxDistanceForRender(maxDistanceForRender) {}
|
maxDistanceForRender(maxDistanceForRender), colliding(colliding) {}
|
||||||
|
|
||||||
float minDistanceForRender = 0.0;
|
float minDistanceForRender = 0.0;
|
||||||
float maxDistanceForRender = 1000.0;
|
float maxDistanceForRender = 1000.0;
|
||||||
|
bool colliding = true;
|
||||||
};
|
};
|
||||||
|
|
||||||
explicit ObjMesh(const std::string &path, const Settings &settings)
|
explicit ObjMesh(const std::string &path, const Settings &settings)
|
||||||
: Mesh(getVerticesFromFile(path), getIndicesFromFile(path)),
|
: Mesh(getVerticesFromFile(path), getIndicesFromFile(path)),
|
||||||
minDistance(settings.minDistanceForRender), maxDistance(settings.maxDistanceForRender) {}
|
minDistance(settings.minDistanceForRender), maxDistance(settings.maxDistanceForRender),
|
||||||
|
colliding(settings.colliding) {}
|
||||||
|
|
||||||
float minDistance;
|
float minDistance;
|
||||||
|
|
||||||
float maxDistance;
|
float maxDistance;
|
||||||
|
|
||||||
|
bool colliding;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
static std::vector<float> getVerticesFromFile(const std::string &path) {
|
static std::vector<float> getVerticesFromFile(const std::string &path) {
|
||||||
objl::Loader loader;
|
objl::Loader loader;
|
||||||
|
@ -23,6 +23,9 @@ class CollisionSystem : public EntitySystem {
|
|||||||
// ObjMesh
|
// ObjMesh
|
||||||
myWorld->each<ObjMesh, Transform>(
|
myWorld->each<ObjMesh, Transform>(
|
||||||
[&](Entity *ent, ComponentHandle<ObjMesh> mesh, ComponentHandle<Transform> 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<unsigned int> indices = mesh->indices;
|
||||||
std::vector<float> vertices = mesh->vertices;
|
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
|
// Create collision indicator
|
||||||
Entity *collision_point = world->create();
|
Entity *collision_point = world->create();
|
||||||
collision_point->assign<Transform>();
|
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<Texture>("Resources/red.png", Texture::Settings(true), false);
|
||||||
collision_point->assign<Material>(0.1, 0.9);
|
collision_point->assign<Material>(0.1, 0.9);
|
||||||
|
|
||||||
@ -128,8 +132,8 @@ int main(int argc, char **argv) {
|
|||||||
Entity *monkey = world->create();
|
Entity *monkey = world->create();
|
||||||
monkey->assign<Transform>();
|
monkey->assign<Transform>();
|
||||||
monkey->assign<LODObjMesh>(std::vector<ObjMesh>{
|
monkey->assign<LODObjMesh>(std::vector<ObjMesh>{
|
||||||
ObjMesh("Resources/Monkey.obj", ObjMesh::Settings(0.0, 8.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))});
|
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->assign<Texture>("Resources/Marble010_2K_Color.jpg", Texture::Settings(true), false);
|
||||||
monkey->get<Texture>()->addNormalmap("Resources/Marble010_2K_Normal.jpg",
|
monkey->get<Texture>()->addNormalmap("Resources/Marble010_2K_Normal.jpg",
|
||||||
Texture::Settings(true));
|
Texture::Settings(true));
|
||||||
|
Loading…
x
Reference in New Issue
Block a user