From b552ee3d45462eccad3dccd6a722fefb02a95612 Mon Sep 17 00:00:00 2001 From: Askou Date: Wed, 9 Jun 2021 11:57:25 +0200 Subject: [PATCH 1/2] add collision for bumper and hole --- sources/Map/Map.cpp | 48 ++++++++++++++++++++++++++------------- sources/Map/Map.hpp | 11 +++++++++ sources/Runner/Runner.cpp | 4 ++-- 3 files changed, 45 insertions(+), 18 deletions(-) diff --git a/sources/Map/Map.cpp b/sources/Map/Map.cpp index 5e8a9a2e..23c14dbe 100644 --- a/sources/Map/Map.cpp +++ b/sources/Map/Map.cpp @@ -12,6 +12,28 @@ namespace RAY3D = RAY::Drawables::Drawables3D; namespace BBM { + void MapGenerator::bumperCollide(WAL::Entity &entity, + const WAL::Entity &wall, + CollisionComponent::CollidedAxis collidedAxis) + { + auto *movable = entity.tryGetComponent(); + + if (!movable) + return; + movable->_velocity.y = 0.5; + } + + void MapGenerator::holeCollide(WAL::Entity &entity, + const WAL::Entity &wall, + CollisionComponent::CollidedAxis collidedAxis) + { + auto *health = entity.tryGetComponent(); + + if (!health) + return; + health->takeDmg(health->getHealthPoint()); + } + void MapGenerator::wallCollide(WAL::Entity &entity, const WAL::Entity &wall, CollisionComponent::CollidedAxis collidedAxis) @@ -23,7 +45,7 @@ namespace BBM if (collidedAxis & CollisionComponent::CollidedAxis::X) mov->_velocity.x = 0; if (collidedAxis & CollisionComponent::CollidedAxis::Y) - mov->_velocity.x = 0; + mov->_velocity.y = 0; if (collidedAxis & CollisionComponent::CollidedAxis::Z) mov->_velocity.z = 0; } @@ -200,19 +222,16 @@ namespace BBM WAL::Entity &holeEntity = scene->addEntity("Hole Block"); - holeEntity.addComponent(Vector3f(coords.x, coords.y - 1, coords.z)); - + holeEntity.addComponent(Vector3f(coords.x, coords.y - 1, coords.z)) + .addComponent( + WAL::Callback(), + &MapGenerator::holeCollide, Vector3f(0.25, 0.25, 0.25),Vector3f(0.75, 1.75, 0.75)); if (coords.y == 0) holeEntity.addComponent(holeObj, std::make_pair(MAP_DIFFUSE, holePng)); else holeEntity.addComponent(secondFloorObj, std::make_pair(MAP_DIFFUSE, secondFloorPng)); - /*.addComponent([](WAL::Entity &other, const WAL::Entity &entity) { - if (other.hasComponent()) { - auto &health = other.getComponent(); - health.takeDmg(health.getHealthPoint()); - } - }, [](WAL::Entity &other, const WAL::Entity &entity){}); */ + } void MapGenerator::createBumper(Vector3f coords, std::shared_ptr scene) @@ -222,13 +241,10 @@ namespace BBM scene->addEntity("Bumper Block") .addComponent(Vector3f(coords.x, coords.y, coords.z)) - .addComponent(bumperObj, std::make_pair(MAP_DIFFUSE, bumperPng)); - /* .addComponent([](const WAL::Entity &entity, WAL::Entity &other) { - if (other.hasComponent()) { - auto &movable = other.getComponent(); - movable.addForce(Vector3f(0, 5, 0)); - } - }); */ + .addComponent(bumperObj, std::make_pair(MAP_DIFFUSE, bumperPng)) + .addComponent( + WAL::Callback(), + &MapGenerator::bumperCollide, Vector3f(0.25, 0.25, 0.25),Vector3f(0.75, 0.75, 0.75)); } void MapGenerator::createStairs(Vector3f coords, std::shared_ptr scene) diff --git a/sources/Map/Map.hpp b/sources/Map/Map.hpp index 4a961cbc..328fa506 100644 --- a/sources/Map/Map.hpp +++ b/sources/Map/Map.hpp @@ -159,11 +159,22 @@ namespace BBM static const std::string secondFloorHolePath; public: + static void wallCollide(WAL::Entity &entity, const WAL::Entity &wall, CollisionComponent::CollidedAxis collidedAxis); + static void wallDestroyed(WAL::Entity &entity); + static void holeCollide(WAL::Entity &entity, + const WAL::Entity &wall, + CollisionComponent::CollidedAxis collidedAxis); + + static void bumperCollide(WAL::Entity &entity, + const WAL::Entity &wall, + CollisionComponent::CollidedAxis collidedAxis); + + //! @param width Width of the map //! @param height Height of the map diff --git a/sources/Runner/Runner.cpp b/sources/Runner/Runner.cpp index 591ce261..5e810675 100644 --- a/sources/Runner/Runner.cpp +++ b/sources/Runner/Runner.cpp @@ -87,8 +87,8 @@ namespace BBM animation.setAnimIndex(5); }); scene->addEntity("camera") - .addComponent(8, 20, 7) - .addComponent(Vector3f(8, 0, 8)); + .addComponent(8, 4, -15) + .addComponent(Vector3f(8, 3, 8)); /*scene->addEntity("cube") .addComponent(-5, 0, -5) .addComponent(Vector3f(0, 0, 0), Vector3f(3, 3, 3), RED) From 1470371c10f6b6e14d8cdf962fdf9a4d7b0fa8a4 Mon Sep 17 00:00:00 2001 From: Askou Date: Wed, 9 Jun 2021 11:58:27 +0200 Subject: [PATCH 2/2] reposition camera --- sources/Runner/Runner.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/sources/Runner/Runner.cpp b/sources/Runner/Runner.cpp index 5e810675..591ce261 100644 --- a/sources/Runner/Runner.cpp +++ b/sources/Runner/Runner.cpp @@ -87,8 +87,8 @@ namespace BBM animation.setAnimIndex(5); }); scene->addEntity("camera") - .addComponent(8, 4, -15) - .addComponent(Vector3f(8, 3, 8)); + .addComponent(8, 20, 7) + .addComponent(Vector3f(8, 0, 8)); /*scene->addEntity("cube") .addComponent(-5, 0, -5) .addComponent(Vector3f(0, 0, 0), Vector3f(3, 3, 3), RED)