aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/common/Utilities/EventMap.cpp11
-rw-r--r--src/common/Utilities/EventMap.h2
-rw-r--r--tests/common/test-EventMap.cpp9
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")