EventMap: Change GetTimeUntilEvent to return std::chrono types

(cherry picked from commit 8cb35b0d5f)
This commit is contained in:
Carbenium
2020-07-25 16:46:43 +02:00
committed by Shauren
parent 7847589d9c
commit 27c1f47598
6 changed files with 22 additions and 21 deletions

View File

@@ -146,11 +146,11 @@ void EventMap::CancelEventGroup(uint32 group)
}
}
uint32 EventMap::GetTimeUntilEvent(uint32 eventId) const
Milliseconds EventMap::GetTimeUntilEvent(uint32 eventId) const
{
for (std::pair<TimePoint const, uint32> const& itr : _eventMap)
if (eventId == (itr.second & 0x0000FFFF))
return std::chrono::duration_cast<Milliseconds>((itr.first - _time)).count();
return std::chrono::duration_cast<Milliseconds>(itr.first - _time);
return std::numeric_limits<uint32>::max();
return Milliseconds::max();
}

View File

@@ -219,11 +219,11 @@ public:
/**
* @name GetTimeUntilEvent
* @brief Returns time in milliseconds until next event.
* @brief Returns time as std::chrono type until next event.
* @param eventId of the event.
* @return Time of next event.
* @return Time of next event. If event is not scheduled returns Milliseconds::max()
*/
uint32 GetTimeUntilEvent(uint32 eventId) const;
Milliseconds GetTimeUntilEvent(uint32 eventId) const;
private:
/**

View File

@@ -186,7 +186,8 @@ public:
switch (eventId)
{
case EVENT_IMPALE:
if (events.GetTimeUntilEvent(EVENT_LOCUST) < 5 * IN_MILLISECONDS) break; // don't chain impale tank -> locust swarm
if (events.GetTimeUntilEvent(EVENT_LOCUST) < 5s)
break; // don't chain impale tank -> locust swarm
if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0))
DoCast(target, SPELL_IMPALE);
else

View File

@@ -879,7 +879,7 @@ class boss_leviathan_mk_ii : public CreatureScript
DoCastVictim(SPELL_SCRIPT_EFFECT_PLASMA_BLAST);
events.RescheduleEvent(EVENT_PLASMA_BLAST, 30s, 45s, 0, PHASE_LEVIATHAN_MK_II);
if (events.GetTimeUntilEvent(EVENT_NAPALM_SHELL) < 9000)
if (events.GetTimeUntilEvent(EVENT_NAPALM_SHELL) < 9s)
events.RescheduleEvent(EVENT_NAPALM_SHELL, 9s, 0, PHASE_LEVIATHAN_MK_II); // The actual spell is cast by the turret, we should not let it interrupt itself.
break;
case EVENT_SHOCK_BLAST:
@@ -894,7 +894,7 @@ class boss_leviathan_mk_ii : public CreatureScript
DoCastAOE(SPELL_FORCE_CAST_NAPALM_SHELL);
events.RescheduleEvent(EVENT_NAPALM_SHELL, 6s, 15s, 0, PHASE_LEVIATHAN_MK_II);
if (events.GetTimeUntilEvent(EVENT_PLASMA_BLAST) < 2000)
if (events.GetTimeUntilEvent(EVENT_PLASMA_BLAST) < 2s)
events.RescheduleEvent(EVENT_PLASMA_BLAST, 2s, 0, PHASE_LEVIATHAN_MK_II); // The actual spell is cast by the turret, we should not let it interrupt itself.
break;
case EVENT_MOVE_POINT_2:

View File

@@ -915,8 +915,8 @@ struct boss_illidan_stormrage : public BossAI
if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0, 150.0f, true))
DoCast(target, SPELL_DARK_BARRAGE);
events.RescheduleEvent(EVENT_EYE_BLAST, Seconds(5), GROUP_PHASE_2);
uint32 currentTime = events.GetTimeUntilEvent(EVENT_FLY_TO_RANDOM_PILLAR);
events.RescheduleEvent(EVENT_FLY_TO_RANDOM_PILLAR, Seconds(currentTime) + Seconds(30), GROUP_PHASE_2);
Milliseconds currentTime = events.GetTimeUntilEvent(EVENT_FLY_TO_RANDOM_PILLAR);
events.RescheduleEvent(EVENT_FLY_TO_RANDOM_PILLAR, currentTime + 30s, GROUP_PHASE_2);
break;
}
case EVENT_FIREBALL:

View File

@@ -54,7 +54,7 @@ TEST_CASE("Schedule an event", "[EventMap]")
REQUIRE(id == 0);
REQUIRE_FALSE(eventMap.Empty());
REQUIRE(eventMap.GetTimeUntilEvent(EVENT_1) == 900);
REQUIRE(eventMap.GetTimeUntilEvent(EVENT_1) == 900ms);
}
SECTION("Event has reached its delay")
@@ -64,7 +64,7 @@ TEST_CASE("Schedule an event", "[EventMap]")
REQUIRE(id == EVENT_1);
REQUIRE(eventMap.Empty());
REQUIRE(eventMap.GetTimeUntilEvent(EVENT_1) == std::numeric_limits<uint32>::max());
REQUIRE(eventMap.GetTimeUntilEvent(EVENT_1) == Milliseconds::max());
}
}
@@ -269,14 +269,14 @@ TEST_CASE("Delay all events", "[EventMap]")
EventMap eventMap;
eventMap.ScheduleEvent(EVENT_1, 1s);
REQUIRE(eventMap.GetTimeUntilEvent(EVENT_1) == 1000);
REQUIRE(eventMap.GetTimeUntilEvent(EVENT_1) == 1s);
SECTION("Without timer update")
{
eventMap.DelayEvents(1s);
// Timer hasn't ticked yet, so maximum delay is 0ms
REQUIRE(eventMap.GetTimeUntilEvent(EVENT_1) == 1000);
// Timer hasn't ticked yet, so maximum delay is 0ms: 1s (init) + 0s (delay) = 1s
REQUIRE(eventMap.GetTimeUntilEvent(EVENT_1) == 1s);
}
SECTION("With timer update smaller than delay")
@@ -284,7 +284,7 @@ TEST_CASE("Delay all events", "[EventMap]")
eventMap.Update(500);
eventMap.DelayEvents(1s);
REQUIRE(eventMap.GetTimeUntilEvent(EVENT_1) == 1000);
REQUIRE(eventMap.GetTimeUntilEvent(EVENT_1) == 1s);
}
SECTION("With timer update larger than delay")
@@ -293,7 +293,7 @@ TEST_CASE("Delay all events", "[EventMap]")
eventMap.DelayEvents(1s);
// 1s (init) + 1s (delay) - 2s (tick) = 0s
REQUIRE(eventMap.GetTimeUntilEvent(EVENT_1) == 0);
REQUIRE(eventMap.GetTimeUntilEvent(EVENT_1) == 0s);
}
}
@@ -307,9 +307,9 @@ TEST_CASE("Delay grouped events", "[EventMap]")
eventMap.Update(2000);
eventMap.DelayEvents(3s, GROUP_1);
REQUIRE(eventMap.GetTimeUntilEvent(EVENT_1) == 2000);
REQUIRE(eventMap.GetTimeUntilEvent(EVENT_2) == 0);
REQUIRE(eventMap.GetTimeUntilEvent(EVENT_3) == 4000);
REQUIRE(eventMap.GetTimeUntilEvent(EVENT_1) == 2s);
REQUIRE(eventMap.GetTimeUntilEvent(EVENT_2) == 0s);
REQUIRE(eventMap.GetTimeUntilEvent(EVENT_3) == 4s);
}
TEST_CASE("Reset map", "[EventMap]")