diff --git a/sources/Component/Bonus/PlayerBonusComponent.hpp b/sources/Component/Bonus/PlayerBonusComponent.hpp index 38622327..9c9e55c7 100644 --- a/sources/Component/Bonus/PlayerBonusComponent.hpp +++ b/sources/Component/Bonus/PlayerBonusComponent.hpp @@ -20,14 +20,12 @@ namespace BBM std::chrono::nanoseconds speedBonusRate = 15s; //! @brief The number of nanosecond before the expiration of a speed bonus. std::chrono::nanoseconds nextSpeedBonusRate = speedBonusRate; - //! @brief The number of seconds before a range bonus expire. This variable is used to reset the nextRangeBonusRate value. - std::chrono::nanoseconds rangeBonusRate = 10s; - //! @brief The number of nanosecond before the expiration of a range bonus. - std::chrono::nanoseconds nextRangeBonusRate = rangeBonusRate; - //! @brief The number of seconds before a range bonus expire. This variable is used to reset the nextRangeBonusRate value. + //! @brief The number of seconds before a range bonus expire. This variable is used to reset the nextNoClipBonusRate value. std::chrono::nanoseconds noClipBonusRate = 10s; - //! @brief The number of nanosecond before the expiration of a range bonus. + //! @brief The number of nanosecond before the expiration of a no clip bonus std::chrono::nanoseconds nextNoClipRate = noClipBonusRate; + //! @brief To know if the player can clip through block + bool isNoClipOn = false; //! @inherit WAL::Component *clone(WAL::Entity &entity) const override; diff --git a/sources/Items/Bonus.cpp b/sources/Items/Bonus.cpp index fa1f2e77..746876af 100644 --- a/sources/Items/Bonus.cpp +++ b/sources/Items/Bonus.cpp @@ -28,9 +28,7 @@ namespace BBM { auto *playerBonus = player.tryGetComponent(); if (!bombHolder || !playerBonus) return; - if (bombHolder->explosionRadius <= 6) - bombHolder->explosionRadius++; - playerBonus->nextRangeBonusRate = playerBonus->rangeBonusRate; + bombHolder->explosionRadius++; } void Bonus::SpeedUpBonus(WAL::Entity &player, const WAL::Entity &bonus, CollisionComponent::CollidedAxis axis) @@ -53,6 +51,7 @@ namespace BBM { if (!playerBonus) return; playerBonus->nextNoClipRate = playerBonus->nextSpeedBonusRate; + playerBonus->isNoClipOn = true; } Bonus::BonusType Bonus::getRandomBonusType() diff --git a/sources/Map/Map.cpp b/sources/Map/Map.cpp index c711e8e0..b96630df 100644 --- a/sources/Map/Map.cpp +++ b/sources/Map/Map.cpp @@ -12,7 +12,7 @@ #include "Component/Movable/MovableComponent.hpp" #include #include -#include +#include "Component/Bonus/PlayerBonusComponent.hpp" namespace RAY3D = RAY::Drawables::Drawables3D; using namespace std::chrono_literals; @@ -24,9 +24,12 @@ namespace BBM CollisionComponent::CollidedAxis collidedAxis) { auto *mov = entity.tryGetComponent(); - auto *playerBonus = entity.tryGetComponent(); + if (!mov) return; + if (playerBonus && playerBonus->isNoClipOn) + return; if (collidedAxis & CollisionComponent::CollidedAxis::X) mov->_velocity.x = 0; if (collidedAxis & CollisionComponent::CollidedAxis::Y) @@ -42,10 +45,11 @@ namespace BBM static std::map map = { {Bonus::BonusType::BOMBSTOCK, "assets/items/bombup"}, {Bonus::BonusType::SPEEDUP, "assets/items/speedup"}, - {Bonus::BonusType::EXPLOSIONINC, "assets/items/fireup"} + {Bonus::BonusType::EXPLOSIONINC, "assets/items/fireup"}, + {Bonus::BonusType::NOCLIP, "assets/items/wallpass"} }; static std::vector> func = { - &Bonus::BombUpBonus, &Bonus::SpeedUpBonus, &Bonus::ExplosionRangeBonus + &Bonus::BombUpBonus, &Bonus::SpeedUpBonus, &Bonus::ExplosionRangeBonus, &Bonus::NoClipBonus }; auto bonusType = Bonus::getRandomBonusType(); diff --git a/sources/System/Bonus/PlayerBonusSystem.cpp b/sources/System/Bonus/PlayerBonusSystem.cpp index 20a62e4b..c5990f5b 100644 --- a/sources/System/Bonus/PlayerBonusSystem.cpp +++ b/sources/System/Bonus/PlayerBonusSystem.cpp @@ -23,13 +23,10 @@ namespace BBM playerBonus.nextSpeedBonusRate = playerBonus.speedBonusRate; controllable.speed = 0.25f; } - playerBonus.nextRangeBonusRate -= dtime; - if (playerBonus.nextRangeBonusRate <= 0ns) { - playerBonus.nextRangeBonusRate = playerBonus.rangeBonusRate; - holder.explosionRadius = 3; - } playerBonus.nextNoClipRate -= dtime; - if (playerBonus.nextNoClipRate <= 0ns) + if (playerBonus.nextNoClipRate <= 0ns) { playerBonus.nextNoClipRate = playerBonus.noClipBonusRate; + playerBonus.isNoClipOn = false; + } } } \ No newline at end of file