#include "DamageReductionBehavior.h" #include "BehaviorBranchContext.h" #include "BehaviorContext.h" #include "EntityManager.h" #include "Game.h" #include "Logger.h" #include "DestroyableComponent.h" void DamageReductionBehavior::Handle(BehaviorContext* context, RakNet::BitStream& bitStream, const BehaviorBranchContext branch) { auto* target = Game::entityManager->GetEntity(branch.target); if (target == nullptr) { Log::Warn("Failed to find target ({})!", branch.target); return; } auto* destroyable = target->GetComponent(); if (destroyable == nullptr) { return; } destroyable->SetDamageReduction(m_ReductionAmount); context->RegisterTimerBehavior(this, branch, target->GetObjectID()); } void DamageReductionBehavior::Calculate(BehaviorContext* context, RakNet::BitStream& bitStream, BehaviorBranchContext branch) { Handle(context, bitStream, branch); } void DamageReductionBehavior::Timer(BehaviorContext* context, BehaviorBranchContext branch, const LWOOBJID second) { auto* target = Game::entityManager->GetEntity(second); if (target == nullptr) { Log::Warn("Failed to find target ({})!", second); return; } auto* destroyable = target->GetComponent(); if (destroyable == nullptr) { return; } destroyable->SetDamageReduction(0); } void DamageReductionBehavior::Load() { this->m_ReductionAmount = GetInt("reduction_amount"); }