![]() |
AzerothCore 3.3.5a
OpenSource WoW Emulator
|
#include "TaskScheduler.h"
Public Member Functions | |
TaskContext () | |
TaskContext (TaskScheduler::TaskContainer &&task, std::weak_ptr< TaskScheduler > &&owner) | |
TaskContext (TaskContext const &right) | |
TaskContext (TaskContext &&right) | |
TaskContext & | operator= (TaskContext const &right) |
TaskContext & | operator= (TaskContext &&right) |
bool | IsExpired () const |
Returns true if the owner was deallocated and this context has expired. | |
bool | IsInGroup (TaskScheduler::group_t const group) const |
Returns true if the event is in the given group. | |
TaskContext & | SetGroup (TaskScheduler::group_t const group) |
Sets the event in the given group. | |
TaskContext & | ClearGroup () |
Removes the group from the event. | |
TaskScheduler::repeated_t | GetRepeatCounter () const |
Returns the repeat counter which increases every time the task is repeated. | |
template<class _Rep , class _Period > | |
TaskContext & | Repeat (std::chrono::duration< _Rep, _Period > const &duration) |
TaskContext & | Repeat () |
template<class _RepLeft , class _PeriodLeft , class _RepRight , class _PeriodRight > | |
TaskContext & | Repeat (std::chrono::duration< _RepLeft, _PeriodLeft > const &min, std::chrono::duration< _RepRight, _PeriodRight > const &max) |
TaskContext & | Async (std::function< void()> const &callable) |
template<class _Rep , class _Period > | |
TaskContext & | Schedule (std::chrono::duration< _Rep, _Period > const &time, TaskScheduler::task_handler_t const &task) |
template<class _Rep , class _Period > | |
TaskContext & | Schedule (std::chrono::duration< _Rep, _Period > const &time, TaskScheduler::group_t const group, TaskScheduler::task_handler_t const &task) |
template<class _RepLeft , class _PeriodLeft , class _RepRight , class _PeriodRight > | |
TaskContext & | Schedule (std::chrono::duration< _RepLeft, _PeriodLeft > const &min, std::chrono::duration< _RepRight, _PeriodRight > const &max, TaskScheduler::task_handler_t const &task) |
template<class _RepLeft , class _PeriodLeft , class _RepRight , class _PeriodRight > | |
TaskContext & | Schedule (std::chrono::duration< _RepLeft, _PeriodLeft > const &min, std::chrono::duration< _RepRight, _PeriodRight > const &max, TaskScheduler::group_t const group, TaskScheduler::task_handler_t const &task) |
TaskContext & | CancelAll () |
Cancels all tasks from within the context. | |
TaskContext & | CancelGroup (TaskScheduler::group_t const group) |
Cancel all tasks of a single group from within the context. | |
TaskContext & | CancelGroupsOf (std::vector< TaskScheduler::group_t > const &groups) |
template<class _Rep , class _Period > | |
TaskContext & | DelayAll (std::chrono::duration< _Rep, _Period > const &duration) |
Delays all tasks with the given duration from within the context. | |
template<class _RepLeft , class _PeriodLeft , class _RepRight , class _PeriodRight > | |
TaskContext & | DelayAll (std::chrono::duration< _RepLeft, _PeriodLeft > const &min, std::chrono::duration< _RepRight, _PeriodRight > const &max) |
Delays all tasks with a random duration between min and max from within the context. | |
template<class _Rep , class _Period > | |
TaskContext & | DelayGroup (TaskScheduler::group_t const group, std::chrono::duration< _Rep, _Period > const &duration) |
Delays all tasks of a group with the given duration from within the context. | |
template<class _RepLeft , class _PeriodLeft , class _RepRight , class _PeriodRight > | |
TaskContext & | DelayGroup (TaskScheduler::group_t const group, std::chrono::duration< _RepLeft, _PeriodLeft > const &min, std::chrono::duration< _RepRight, _PeriodRight > const &max) |
Delays all tasks of a group with a random duration between min and max from within the context. | |
template<class _Rep , class _Period > | |
TaskContext & | RescheduleAll (std::chrono::duration< _Rep, _Period > const &duration) |
Reschedule all tasks with the given duration. | |
template<class _RepLeft , class _PeriodLeft , class _RepRight , class _PeriodRight > | |
TaskContext & | RescheduleAll (std::chrono::duration< _RepLeft, _PeriodLeft > const &min, std::chrono::duration< _RepRight, _PeriodRight > const &max) |
Reschedule all tasks with a random duration between min and max. | |
template<class _Rep , class _Period > | |
TaskContext & | RescheduleGroup (TaskScheduler::group_t const group, std::chrono::duration< _Rep, _Period > const &duration) |
Reschedule all tasks of a group with the given duration. | |
template<class _RepLeft , class _PeriodLeft , class _RepRight , class _PeriodRight > | |
TaskContext & | RescheduleGroup (TaskScheduler::group_t const group, std::chrono::duration< _RepLeft, _PeriodLeft > const &min, std::chrono::duration< _RepRight, _PeriodRight > const &max) |
Reschedule all tasks of a group with a random duration between min and max. | |
Private Member Functions | |
TaskContext & | Dispatch (std::function< TaskScheduler &(TaskScheduler &)> const &apply) |
Dispatches an action safe on the TaskScheduler. | |
void | AssertOnConsumed () const |
Asserts if the task was consumed already. | |
void | Invoke () |
Invokes the associated hook of the task. | |
Private Attributes | |
TaskScheduler::TaskContainer | _task |
Associated task. | |
std::weak_ptr< TaskScheduler > | _owner |
Owner. | |
std::shared_ptr< bool > | _consumed |
Marks the task as consumed. | |
Friends | |
class | TaskScheduler |
|
inline |
|
inlineexplicit |
|
inline |
|
inline |
|
private |
TaskContext & TaskContext::Async | ( | std::function< void()> const & | callable | ) |
Schedule a callable function that is executed at the next update tick from within the context. Its safe to modify the TaskScheduler from within the callable.
References TaskScheduler::Async(), and TaskScheduler::Dispatch().
TaskContext & TaskContext::CancelAll | ( | ) |
Cancels all tasks from within the context.
References TaskScheduler::CancelAll(), and TaskScheduler::Dispatch().
TaskContext & TaskContext::CancelGroup | ( | TaskScheduler::group_t const | group | ) |
Cancel all tasks of a single group from within the context.
References TaskScheduler::CancelGroup(), and TaskScheduler::Dispatch().
TaskContext & TaskContext::CancelGroupsOf | ( | std::vector< TaskScheduler::group_t > const & | groups | ) |
Cancels all groups in the given std::vector from within the context. Hint: Use std::initializer_list for this: "{1, 2, 3, 4}"
References TaskScheduler::CancelGroupsOf(), and TaskScheduler::Dispatch().
TaskContext & TaskContext::ClearGroup | ( | ) |
Removes the group from the event.
|
inline |
Delays all tasks with the given duration from within the context.
References Dispatch().
Referenced by DelayAll().
|
inline |
Delays all tasks with a random duration between min and max from within the context.
References DelayAll(), and TaskScheduler::RandomDurationBetween().
|
inline |
Delays all tasks of a group with the given duration from within the context.
References Dispatch().
Referenced by DelayGroup().
|
inline |
Delays all tasks of a group with a random duration between min and max from within the context.
References DelayGroup(), and TaskScheduler::RandomDurationBetween().
|
private |
Dispatches an action safe on the TaskScheduler.
Referenced by DelayAll(), DelayGroup(), Repeat(), RescheduleAll(), RescheduleGroup(), and Schedule().
TaskScheduler::repeated_t TaskContext::GetRepeatCounter | ( | ) | const |
Returns the repeat counter which increases every time the task is repeated.
Referenced by boss_mor_grayhoof::DamageTaken(), npc_underbog_mushroom::InitializeAI(), npc_spawn_of_marli::JustEngagedWith(), and boss_eye_of_cthun::ScheduleTask().
|
private |
Invokes the associated hook of the task.
Referenced by TaskScheduler::Dispatch().
bool TaskContext::IsExpired | ( | ) | const |
Returns true if the owner was deallocated and this context has expired.
bool TaskContext::IsInGroup | ( | TaskScheduler::group_t const | group | ) | const |
Returns true if the event is in the given group.
|
inline |
|
inline |
|
inline |
|
inline |
Repeats the event and sets a new duration. std::chrono::seconds(5) for example. This will consume the task context, its not possible to repeat the task again from the same task context!
References _task, AssertOnConsumed(), Dispatch(), and TaskScheduler::InsertTask().
Referenced by boss_thekal::boss_thekalAI::CheckPhaseTransition(), boss_mor_grayhoof::DamageTaken(), boss_isalien::DamageTaken(), boss_malchezaar::DamageTaken(), boss_ouro::DamageTaken(), boss_apothecary_hummel::boss_apothecary_hummelAI::DoAction(), boss_broggok::DoAction(), boss_ouro::Emerge(), boss_glob_of_viscidus::InitializeAI(), npc_underbog_mushroom::InitializeAI(), npc_corrupted_totem::IsSummonedBy(), boss_kormok::IsSummonedBy(), boss_attumen::boss_attumenAI::IsSummonedBy(), boss_mor_grayhoof::JustEngagedWith(), boss_malchezaar::JustEngagedWith(), npc_malchezaar_axe::JustEngagedWith(), boss_kormok::JustEngagedWith(), boss_baroness_anastari::boss_baroness_anastariAI::JustEngagedWith(), boss_jarien::JustEngagedWith(), boss_sothos::JustEngagedWith(), boss_twilight_corrupter::JustEngagedWith(), npc_batrider::JustEngagedWith(), npc_healing_ward::JustEngagedWith(), npc_shade_of_jindo::JustEngagedWith(), npc_vilebranch_speaker::JustEngagedWith(), boss_thekal::boss_thekalAI::JustEngagedWith(), npc_zealot_lorkhan::npc_zealot_lorkhanAI::JustEngagedWith(), npc_zealot_zath::npc_zealot_zathAI::JustEngagedWith(), npc_coren_direbrew_sisters::JustEngagedWith(), npc_hallows_end_soh::JustEngagedWith(), boss_azuregos::boss_azuregosAI::JustEngagedWith(), boss_aeonus::JustEngagedWith(), boss_chrono_lord_deja::JustEngagedWith(), boss_temporus::JustEngagedWith(), boss_isalien::JustEngagedWith(), npc_anubisath_guardian::JustEngagedWith(), npc_obsidian_destroyer::JustEngagedWith(), npc_claw_tentacle::JustEngagedWith(), npc_dirt_mound::JustEngagedWith(), npc_anubisath_defender::JustEngagedWith(), npc_obsidian_eradicator::JustEngagedWith(), npc_anubisath_warder::JustEngagedWith(), npc_obsidian_nullifier::JustEngagedWith(), npc_ahnqiraji_critter::JustEngagedWith(), boss_talon_king_ikiss::JustEngagedWith(), boss_dalliah_the_doomsayer::JustEngagedWith(), boss_zereketh_the_unbound::JustEngagedWith(), boss_commander_sarannis::JustEngagedWith(), boss_high_botanist_freywinn::JustEngagedWith(), boss_laj::JustEngagedWith(), boss_thorngrin_the_tender::JustEngagedWith(), boss_warp_splinter::JustEngagedWith(), npc_raliq_the_drunk::npc_raliq_the_drunkAI::JustEngagedWith(), npc_steamrigger_mechanic::JustEngagedWith(), boss_midnight::boss_midnightAI::JustEngagedWith(), npc_ohgan::npc_ohganAI::JustEngagedWith(), npc_hivezara_stinger::JustEngagedWith(), boss_kri::JustEngagedWith(), boss_vem::JustEngagedWith(), boss_yauj::JustEngagedWith(), boss_fankriss::JustEngagedWith(), boss_twinemperorsAI::JustEngagedWith(), boss_veknilash::JustEngagedWith(), boss_veklor::JustEngagedWith(), npc_vekniss_stinger::JustEngagedWith(), boss_hungarfen::JustEngagedWith(), boss_ayamiss::MovementInform(), npc_apothecary_baxter::Reset(), npc_shade_of_jindo::Reset(), npc_eye_tentacle::Reset(), npc_giant_eye_tentacle::Reset(), npc_ahnqiraji_critter::Reset(), npc_raliq_the_drunk::npc_raliq_the_drunkAI::Reset(), npc_dream_fog::npc_dream_fogAI::ScheduleEvents(), boss_baroness_anastari::boss_baroness_anastariAI::SchedulePossession(), boss_commander_sarannis::ScheduleReinforcements(), boss_eye_of_cthun::ScheduleTask(), npc_giant_claw_tentacle::ScheduleTasks(), boss_attumen::boss_attumenAI::ScheduleTasks(), boss_ayamiss::ScheduleTasks(), boss_cthun::ScheduleTasks(), and instance_ruins_of_ahnqiraj::instance_ruins_of_ahnqiraj_InstanceMapScript::SetData().
|
inline |
Repeats the event and set a new duration that is randomized between min and max. std::chrono::seconds(5) for example. This will consume the task context, its not possible to repeat the task again from the same task context!
References TaskScheduler::RandomDurationBetween(), and Repeat().
|
inline |
Reschedule all tasks with the given duration.
References Dispatch(), and TaskScheduler::RescheduleAll().
Referenced by RescheduleAll().
|
inline |
Reschedule all tasks with a random duration between min and max.
References TaskScheduler::RandomDurationBetween(), and RescheduleAll().
|
inline |
Reschedule all tasks of a group with the given duration.
References Dispatch().
Referenced by RescheduleGroup().
|
inline |
Reschedule all tasks of a group with a random duration between min and max.
References TaskScheduler::RandomDurationBetween(), and RescheduleGroup().
|
inline |
Schedule an event with a fixed rate from within the context. Its possible that the new event is executed immediately! Use TaskScheduler::Async to create a task which will be called at the next update tick.
References _task, Dispatch(), and TaskScheduler::ScheduleAt().
|
inline |
Schedule an event with a fixed rate from within the context. Its possible that the new event is executed immediately! Use TaskScheduler::Async to create a task which will be called at the next update tick.
References _task, Dispatch(), and TaskScheduler::ScheduleAt().
Referenced by boss_isalien::DamageTaken(), boss_apothecary_hummel::boss_apothecary_hummelAI::DoAction(), boss_glob_of_viscidus::InitializeAI(), npc_underbog_mushroom::InitializeAI(), and Schedule().
|
inline |
Schedule an event with a randomized rate between min and max rate from within the context. Its possible that the new event is executed immediately! Use TaskScheduler::Async to create a task which will be called at the next update tick.
References TaskScheduler::RandomDurationBetween(), and Schedule().
|
inline |
Schedule an event with a randomized rate between min and max rate from within the context. Its possible that the new event is executed immediately! Use TaskScheduler::Async to create a task which will be called at the next update tick.
References TaskScheduler::RandomDurationBetween(), and Schedule().
TaskContext & TaskContext::SetGroup | ( | TaskScheduler::group_t const | group | ) |
Sets the event in the given group.
Referenced by boss_malchezaar::DamageTaken(), boss_malchezaar::JustEngagedWith(), instance_the_black_morass::instance_the_black_morass_InstanceMapScript::ScheduleNextPortal(), boss_eye_of_cthun::ScheduleTask(), boss_ayamiss::ScheduleTasks(), and instance_ruins_of_ahnqiraj::instance_ruins_of_ahnqiraj_InstanceMapScript::SetData().
|
friend |
|
private |
Marks the task as consumed.
Referenced by operator=().
|
private |
Owner.
Referenced by operator=().
|
private |
Associated task.
Referenced by operator=(), Repeat(), and Schedule().