diff options
-rw-r--r-- | src/common/Utilities/EventMap.cpp | 11 | ||||
-rw-r--r-- | src/common/Utilities/EventMap.h | 2 | ||||
-rw-r--r-- | tests/common/test-EventMap.cpp | 9 |
3 files changed, 17 insertions, 5 deletions
diff --git a/src/common/Utilities/EventMap.cpp b/src/common/Utilities/EventMap.cpp index de3400b403f..8e09d21ed6d 100644 --- a/src/common/Utilities/EventMap.cpp +++ b/src/common/Utilities/EventMap.cpp @@ -94,7 +94,16 @@ uint32 EventMap::ExecuteEvent() void EventMap::DelayEvents(Milliseconds delay) { - _time = delay < _time - _time.min() ? _time - delay : TimePoint::min(); + if (Empty()) + return; + + EventStore delayed = std::move(_eventMap); + for (EventStore::iterator itr = delayed.begin(); itr != delayed.end();) + { + EventStore::node_type node = delayed.extract(itr++); + node.key() = node.key() + delay; + _eventMap.insert(_eventMap.end(), std::move(node)); + } } void EventMap::DelayEvents(Milliseconds delay, uint32 group) diff --git a/src/common/Utilities/EventMap.h b/src/common/Utilities/EventMap.h index 37e4fcb0bfb..97916e711b9 100644 --- a/src/common/Utilities/EventMap.h +++ b/src/common/Utilities/EventMap.h @@ -179,7 +179,7 @@ public: /** * @name DelayEvents - * @brief Delays all events. If delay is greater than or equal internal timer, delay will be 0. + * @brief Delays all events. * @param delay Amount of delay as std::chrono type. */ void DelayEvents(Milliseconds delay); diff --git a/tests/common/test-EventMap.cpp b/tests/common/test-EventMap.cpp index 89d3c4d2bb2..9a28361d930 100644 --- a/tests/common/test-EventMap.cpp +++ b/tests/common/test-EventMap.cpp @@ -15,7 +15,9 @@ * with this program. If not, see <http://www.gnu.org/licenses/>. */ +#define CATCH_CONFIG_ENABLE_CHRONO_STRINGMAKER #include "catch2/catch.hpp" + #include "EventMap.h" enum EVENTS @@ -282,8 +284,8 @@ TEST_CASE("Delay all events", "[EventMap]") { eventMap.DelayEvents(1s); - // Timer hasn't ticked yet, so maximum delay is 0ms: 1s (init) + 0s (delay) = 1s - REQUIRE(eventMap.GetTimeUntilEvent(EVENT_1) == 1s); + // 1s (init) + 1s (delay) = 2s + REQUIRE(eventMap.GetTimeUntilEvent(EVENT_1) == 2s); } SECTION("With timer update smaller than delay") @@ -291,7 +293,8 @@ TEST_CASE("Delay all events", "[EventMap]") eventMap.Update(500); eventMap.DelayEvents(1s); - REQUIRE(eventMap.GetTimeUntilEvent(EVENT_1) == 1s); + // 1s (init) + 1s (delay) - 500ms (tick) = 1500ms + REQUIRE(eventMap.GetTimeUntilEvent(EVENT_1) == 1500ms); } SECTION("With timer update larger than delay") |