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) noexcept | |
TaskContext & | operator= (TaskContext const &right) noexcept |
TaskContext & | operator= (TaskContext &&right) noexcept |
bool | IsExpired () const |
Returns true if the owner was deallocated and this context has expired. More... | |
bool | IsInGroup (TaskScheduler::group_t const group) const |
Returns true if the event is in the given group. More... | |
TaskContext & | SetGroup (TaskScheduler::group_t const group) |
Sets the event in the given group. More... | |
TaskContext & | ClearGroup () |
Removes the group from the event. More... | |
TaskScheduler::repeated_t | GetRepeatCounter () const |
Returns the repeat counter which increases every time the task is repeated. More... | |
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. More... | |
TaskContext & | CancelGroup (TaskScheduler::group_t const group) |
Cancel all tasks of a single group from within the context. More... | |
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. More... | |
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. More... | |
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. More... | |
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. More... | |
template<class _Rep , class _Period > | |
TaskContext & | RescheduleAll (std::chrono::duration< _Rep, _Period > const &duration) |
Reschedule all tasks with the given duration. More... | |
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. More... | |
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. More... | |
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. More... | |
Private Member Functions | |
TaskContext & | Dispatch (std::function< TaskScheduler &(TaskScheduler &)> const &apply) |
Dispatches an action safe on the TaskScheduler. More... | |
void | AssertOnConsumed () const |
Asserts if the task was consumed already. More... | |
void | Invoke () |
Invokes the associated hook of the task. More... | |
Private Attributes | |
TaskScheduler::TaskContainer | _task |
Associated task. More... | |
std::weak_ptr< TaskScheduler > | _owner |
Owner. More... | |
std::shared_ptr< bool > | _consumed |
Marks the task as consumed. More... | |
Friends | |
class | TaskScheduler |
|
inline |
|
inlineexplicit |
|
inline |
|
inlinenoexcept |
|
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().
Referenced by boss_warbringer_omrogg::ScheduleBurningPhase().
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(), boss_rage_winterchill::JustEngagedWith(), and boss_pandemonius::JustEngagedWith().
|
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(), boss_grandmaster_vorpil::JustEngagedWith(), boss_wrath_scryer_soccothrates::JustEngagedWith(), boss_mechano_lord_capacitus::JustEngagedWith(), boss_pandemonius::JustEngagedWith(), boss_eye_of_cthun::ScheduleTask(), and npc_warchief_portal::SetData().
|
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.
|
inlinenoexcept |
|
inlinenoexcept |
|
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_marli::_schedulePhaseSpider(), boss_marli::_schedulePhaseTroll(), boss_thekal::CheckPhaseTransition(), boss_mor_grayhoof::DamageTaken(), boss_isalien::DamageTaken(), boss_ouro::DamageTaken(), boss_leotheras_the_blind::DemonTime(), boss_apothecary_hummel::boss_apothecary_hummelAI::DoAction(), boss_broggok::DoAction(), boss_leotheras_the_blind::ElfTime(), boss_ouro::Emerge(), boss_halazzi::EnterPhase(), boss_glob_of_viscidus::InitializeAI(), npc_rancid_mushroom::InitializeAI(), npc_underbog_mushroom::InitializeAI(), boss_moroes::InitializeGuests(), go_firework_show::InitShow(), boss_grand_warlock_nethekurse::IntroRP(), npc_corrupted_totem::IsSummonedBy(), boss_kormok::IsSummonedBy(), npc_anzu_spirit::IsSummonedBy(), npc_parasitic_shadowfiend::IsSummonedBy(), npc_raging_flames::IsSummonedBy(), boss_attumen::IsSummonedBy(), npc_inner_demon::IsSummonedBy(), boss_mor_grayhoof::JustEngagedWith(), boss_malchezaar::JustEngagedWith(), npc_malchezaar_axe::JustEngagedWith(), boss_servant_quarters::JustEngagedWith(), npc_kilrek::JustEngagedWith(), boss_terestian_illhoof::JustEngagedWith(), boss_dorothee::JustEngagedWith(), npc_tito::JustEngagedWith(), boss_roar::JustEngagedWith(), boss_strawman::JustEngagedWith(), boss_tinhead::JustEngagedWith(), boss_crone::JustEngagedWith(), npc_cyclone::JustEngagedWith(), boss_bigbadwolf::JustEngagedWith(), boss_kormok::JustEngagedWith(), boss_baroness_anastari::boss_baroness_anastariAI::JustEngagedWith(), boss_jarien::JustEngagedWith(), boss_sothos::JustEngagedWith(), boss_twilight_corrupter::JustEngagedWith(), npc_healing_ward::JustEngagedWith(), npc_shade_of_jindo::JustEngagedWith(), npc_vilebranch_speaker::JustEngagedWith(), boss_thekal::JustEngagedWith(), npc_zealot_lorkhan::JustEngagedWith(), npc_zealot_zath::JustEngagedWith(), boss_venoxis::JustEngagedWith(), npc_coren_direbrew_sisters::JustEngagedWith(), npc_hallows_end_soh::JustEngagedWith(), boss_azuregos::boss_azuregosAI::JustEngagedWith(), npc_hyjal_jaina::hyjalJainaAI::JustEngagedWith(), npc_hyjal_thrall::hyjalThrallAI::JustEngagedWith(), npc_hyjal_tyrande::hyjalTyrandeAI::JustEngagedWith(), npc_hyjal_ground_trash::JustEngagedWith(), npc_hyjal_gargoyle::JustEngagedWith(), npc_hyjal_frost_wyrm::JustEngagedWith(), boss_captain_skarloc::JustEngagedWith(), boss_epoch_hunter::JustEngagedWith(), boss_lieutenant_drake::JustEngagedWith(), boss_aeonus::JustEngagedWith(), boss_chrono_lord_deja::JustEngagedWith(), boss_temporus::JustEngagedWith(), boss_isalien::JustEngagedWith(), npc_anubisath_guardian::JustEngagedWith(), npc_obsidian_destroyer::JustEngagedWith(), npc_eye_tentacle::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(), npc_icc_spire_frostwyrm::JustEngagedWith(), boss_yoggsaron_keeper::JustEngagedWith(), boss_exarch_maladaar::JustEngagedWith(), boss_shirrak_the_dead_watcher::JustEngagedWith(), boss_nexusprince_shaffar::JustEngagedWith(), npc_yor::JustEngagedWith(), boss_tavarok::JustEngagedWith(), boss_anzu::JustEngagedWith(), boss_darkweaver_syth::JustEngagedWith(), boss_talon_king_ikiss::JustEngagedWith(), boss_ambassador_hellmaw::JustEngagedWith(), boss_blackheart_the_inciter::JustEngagedWith(), boss_grandmaster_vorpil::JustEngagedWith(), boss_essence_of_desire::boss_essence_of_desireAI::JustEngagedWith(), boss_doomlord_kazzak::boss_doomlordkazzakAI::JustEngagedWith(), boss_doomwalker::JustEngagedWith(), npc_tainted_elemental::JustEngagedWith(), boss_mennu_the_betrayer::JustEngagedWith(), boss_quagmirran::JustEngagedWith(), boss_rokmar_the_crackler::JustEngagedWith(), boss_hydromancer_thespia::JustEngagedWith(), boss_mekgineer_steamrigger::JustEngagedWith(), boss_warlord_kalithresh::JustEngagedWith(), boss_ghazan::JustEngagedWith(), boss_hungarfen::JustEngagedWith(), boss_swamplord_muselek::JustEngagedWith(), boss_the_black_stalker::JustEngagedWith(), npc_underbat::JustEngagedWith(), boss_gruul::JustEngagedWith(), boss_high_king_maulgar::JustEngagedWith(), boss_olm_the_summoner::JustEngagedWith(), boss_kiggler_the_crazed::JustEngagedWith(), boss_blindeye_the_seer::JustEngagedWith(), boss_krosh_firehand::JustEngagedWith(), boss_kelidan_the_breaker::JustEngagedWith(), boss_the_maker::JustEngagedWith(), boss_omor_the_unscarred::JustEngagedWith(), boss_nazan::JustEngagedWith(), boss_vazruden::JustEngagedWith(), boss_watchkeeper_gargolmar::JustEngagedWith(), boss_dalliah_the_doomsayer::JustEngagedWith(), boss_harbinger_skyriss::JustEngagedWith(), boss_wrath_scryer_soccothrates::JustEngagedWith(), boss_zereketh_the_unbound::JustEngagedWith(), boss_high_botanist_freywinn::JustEngagedWith(), boss_thorngrin_the_tender::JustEngagedWith(), boss_warp_splinter::JustEngagedWith(), boss_gatewatcher_gyrokill::JustEngagedWith(), boss_gatewatcher_iron_hand::JustEngagedWith(), boss_mechano_lord_capacitus::JustEngagedWith(), boss_nethermancer_sepethrea::JustEngagedWith(), boss_pathaleon_the_calculator::JustEngagedWith(), npc_enraged_spirit::npc_enraged_spiritAI::JustEngagedWith(), boss_curator::JustEngagedWith(), boss_maiden_of_virtue::JustEngagedWith(), boss_midnight::JustEngagedWith(), boss_moroes::JustEngagedWith(), boss_nalorakk::JustEngagedWith(), npc_batrider::JustEngagedWith(), npc_ohgan::npc_ohganAI::JustEngagedWith(), boss_marli::JustEngagedWith(), boss_anetheron::JustEngagedWith(), boss_azgalor::JustEngagedWith(), boss_kazrogal::JustEngagedWith(), boss_rage_winterchill::JustEngagedWith(), boss_kurinnaxx::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_pandemonius::JustEngagedWith(), boss_murmur::JustEngagedWith(), boss_gurtogg_bloodboil::JustEngagedWith(), boss_supremus::JustEngagedWith(), boss_fathomlord_karathress::JustEngagedWith(), boss_fathomguard_sharkkis::JustEngagedWith(), boss_fathomguard_tidalvess::JustEngagedWith(), boss_fathomguard_caribdis::JustEngagedWith(), boss_hydross_the_unstable::JustEngagedWith(), boss_morogrim_tidewalker::JustEngagedWith(), boss_grand_warlock_nethekurse::JustEngagedWith(), boss_porung::JustEngagedWith(), boss_warchief_kargath_bladefist::JustEngagedWith(), boss_alar::JustEngagedWith(), boss_high_astromancer_solarian::JustEngagedWith(), boss_void_reaver::JustEngagedWith(), npc_midsummer_ribbon_pole_target::LocateRibbonPole(), boss_nalorakk::MoveInLineOfSight(), npc_ulduar_snow_mound::MoveInLineOfSight(), boss_ayamiss::MovementInform(), boss_lady_vashj::MovementInform(), boss_nazan::MovementInform(), npc_shattered_hand_scout::MovementInform(), boss_kaelthas::MovementInform(), npc_midsummer_bonfire::npc_midsummer_bonfire(), npc_midsummer_ribbon_pole_target::npc_midsummer_ribbon_pole_target(), boss_high_nethermancer_zerevor::OnAuraRemove(), boss_jeklik::PathEndReached(), boss_malchezaar::Reset(), npc_apothecary_baxter::Reset(), npc_shade_of_jindo::Reset(), boss_thekal::Reset(), npc_zealot_lorkhan::Reset(), npc_zealot_zath::Reset(), npc_giant_eye_tentacle::Reset(), npc_ahnqiraji_critter::Reset(), boss_kologarn_pit_kill_bunny::Reset(), npc_cosmetic_toy_plane::Reset(), npc_stolen_soul::Reset(), npc_ashtongue_channeler::Reset(), boss_high_king_maulgar::Reset(), boss_omor_the_unscarred::Reset(), boss_watchkeeper_gargolmar::Reset(), boss_magtheridon::Reset(), boss_high_astromancer_solarian::Reset(), npc_injured_patient::npc_injured_patientAI::Reset(), boss_illidan_stormrage::ScheduleAbilities(), boss_razuvious_minion::boss_razuvious_minionAI::ScheduleAttackDummy(), boss_warbringer_omrogg::ScheduleBurningPhase(), boss_julianne::ScheduleCombat(), boss_romulo::ScheduleCombat(), boss_magtheridon::ScheduleCombatEvents(), npc_dream_fog::npc_dream_fogAI::ScheduleEvents(), boss_nightbane::ScheduleFly(), boss_nightbane::ScheduleGround(), boss_alar::ScheduleMainSpellAttack(), instance_the_black_morass::instance_the_black_morass_InstanceMapScript::ScheduleNextPortal(), boss_warbringer_omrogg::ScheduleNonBurningPhase(), boss_supremus::SchedulePhase(), boss_baroness_anastari::boss_baroness_anastariAI::SchedulePossession(), boss_commander_sarannis::ScheduleReinforcements(), boss_razuvious::boss_razuviousAI::ScheduleRP(), boss_the_lurker_below::SchedulerPhaseOne(), boss_lady_vashj::ScheduleSpells(), npc_giant_claw_tentacle::ScheduleTasks(), boss_attumen::ScheduleTasks(), boss_ayamiss::ScheduleTasks(), boss_cthun::ScheduleTasks(), ScriptedAI::ScheduleTimedEvent(), instance_hyjal::instance_mount_hyjal_InstanceMapScript::ScheduleWaves(), instance_hyjal::instance_mount_hyjal_InstanceMapScript::SetData(), instance_ruins_of_ahnqiraj::instance_ruins_of_ahnqiraj_InstanceMapScript::SetData(), npc_warchief_portal::SetData(), boss_hydross_the_unstable::SetForm(), boss_nalorakk::ShapeShift(), go_firework_show::StartShow(), boss_netherspite::SwitchToBanishPhase(), and boss_netherspite::SwitchToPortalPhase().
|
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_warbringer_omrogg::HandleHeadTalk(), boss_glob_of_viscidus::InitializeAI(), npc_underbog_mushroom::InitializeAI(), Schedule(), boss_warbringer_omrogg::ScheduleBurningPhase(), and boss_warbringer_omrogg::ScheduleNonBurningPhase().
|
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::JustEngagedWith(), boss_rage_winterchill::JustEngagedWith(), boss_gurtogg_bloodboil::JustEngagedWith(), boss_supremus::JustEngagedWith(), boss_malchezaar::Reset(), instance_the_black_morass::instance_the_black_morass_InstanceMapScript::ScheduleNextPortal(), boss_supremus::SchedulePhase(), boss_eye_of_cthun::ScheduleTask(), instance_hyjal::instance_mount_hyjal_InstanceMapScript::ScheduleWaves(), 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().