2022-08-06 03:01:59 +00:00
|
|
|
#include "AttackDelayBehavior.h"
|
2021-12-05 17:54:36 +00:00
|
|
|
#include "BehaviorBranchContext.h"
|
|
|
|
#include "BehaviorContext.h"
|
|
|
|
#include "Game.h"
|
2023-10-21 23:31:55 +00:00
|
|
|
#include "Logger.h"
|
2021-12-05 17:54:36 +00:00
|
|
|
|
2024-02-27 07:25:44 +00:00
|
|
|
void AttackDelayBehavior::Handle(BehaviorContext* context, RakNet::BitStream& bitStream, const BehaviorBranchContext branch) {
|
2022-12-16 21:23:02 +00:00
|
|
|
uint32_t handle{};
|
2021-12-05 17:54:36 +00:00
|
|
|
|
2024-02-27 07:25:44 +00:00
|
|
|
if (!bitStream.Read(handle)) {
|
|
|
|
LOG("Unable to read handle from bitStream, aborting Handle! %i", bitStream.GetNumberOfUnreadBits());
|
2022-12-16 21:23:02 +00:00
|
|
|
return;
|
|
|
|
};
|
2022-07-28 13:39:57 +00:00
|
|
|
|
|
|
|
for (auto i = 0u; i < this->m_numIntervals; ++i) {
|
2023-04-11 07:42:12 +00:00
|
|
|
context->RegisterSyncBehavior(handle, this, branch, this->m_delay * i, m_ignoreInterrupts);
|
2021-12-05 17:54:36 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2024-02-27 07:25:44 +00:00
|
|
|
void AttackDelayBehavior::Calculate(BehaviorContext* context, RakNet::BitStream& bitStream, const BehaviorBranchContext branch) {
|
2021-12-05 17:54:36 +00:00
|
|
|
const auto handle = context->GetUniqueSkillId();
|
|
|
|
|
2024-02-27 07:25:44 +00:00
|
|
|
bitStream.Write(handle);
|
2021-12-05 17:54:36 +00:00
|
|
|
|
|
|
|
context->foundTarget = true;
|
|
|
|
|
2022-07-28 13:39:57 +00:00
|
|
|
for (auto i = 0u; i < this->m_numIntervals; ++i) {
|
2021-12-05 17:54:36 +00:00
|
|
|
const auto multiple = static_cast<float>(i + 1);
|
|
|
|
|
|
|
|
context->SyncCalculation(handle, this->m_delay * multiple, this, branch, m_ignoreInterrupts);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2024-02-27 07:25:44 +00:00
|
|
|
void AttackDelayBehavior::Sync(BehaviorContext* context, RakNet::BitStream& bitStream, const BehaviorBranchContext branch) {
|
2021-12-05 17:54:36 +00:00
|
|
|
this->m_action->Handle(context, bitStream, branch);
|
|
|
|
}
|
|
|
|
|
2024-02-27 07:25:44 +00:00
|
|
|
void AttackDelayBehavior::SyncCalculation(BehaviorContext* context, RakNet::BitStream& bitStream, const BehaviorBranchContext branch) {
|
2021-12-05 17:54:36 +00:00
|
|
|
PlayFx(u"cast", context->originator);
|
|
|
|
|
|
|
|
this->m_action->Calculate(context, bitStream, branch);
|
|
|
|
}
|
|
|
|
|
2022-07-28 13:39:57 +00:00
|
|
|
void AttackDelayBehavior::Load() {
|
2021-12-05 17:54:36 +00:00
|
|
|
this->m_numIntervals = GetInt("num_intervals");
|
|
|
|
|
|
|
|
this->m_action = GetAction("action");
|
|
|
|
|
|
|
|
this->m_delay = GetFloat("delay");
|
|
|
|
|
|
|
|
this->m_ignoreInterrupts = GetBoolean("ignore_interrupts");
|
|
|
|
|
2022-07-28 13:39:57 +00:00
|
|
|
if (this->m_numIntervals == 0) {
|
2021-12-05 17:54:36 +00:00
|
|
|
this->m_numIntervals = 1;
|
|
|
|
}
|
|
|
|
}
|