#include "AttackDelayBehavior.h" #include "BehaviorBranchContext.h" #include "BehaviorContext.h" #include "Game.h" #include "Logger.h" void AttackDelayBehavior::Handle(BehaviorContext* context, RakNet::BitStream& bitStream, const BehaviorBranchContext branch) { uint32_t handle{}; if (!bitStream.Read(handle)) { Log::Warn("Unable to read handle from bitStream, aborting Handle! {:d}", bitStream.GetNumberOfUnreadBits()); return; }; for (auto i = 0u; i < this->m_numIntervals; ++i) { context->RegisterSyncBehavior(handle, this, branch, this->m_delay * i, m_ignoreInterrupts); } } void AttackDelayBehavior::Calculate(BehaviorContext* context, RakNet::BitStream& bitStream, const BehaviorBranchContext branch) { const auto handle = context->GetUniqueSkillId(); bitStream.Write(handle); context->foundTarget = true; for (auto i = 0u; i < this->m_numIntervals; ++i) { const auto multiple = static_cast(i + 1); context->SyncCalculation(handle, this->m_delay * multiple, this, branch, m_ignoreInterrupts); } } void AttackDelayBehavior::Sync(BehaviorContext* context, RakNet::BitStream& bitStream, const BehaviorBranchContext branch) { this->m_action->Handle(context, bitStream, branch); } void AttackDelayBehavior::SyncCalculation(BehaviorContext* context, RakNet::BitStream& bitStream, const BehaviorBranchContext branch) { PlayFx(u"cast", context->originator); this->m_action->Calculate(context, bitStream, branch); } void AttackDelayBehavior::Load() { this->m_numIntervals = GetInt("num_intervals"); this->m_action = GetAction("action"); this->m_delay = GetFloat("delay"); this->m_ignoreInterrupts = GetBoolean("ignore_interrupts"); if (this->m_numIntervals == 0) { this->m_numIntervals = 1; } }