#include "ChangeOrientationBehavior.h" #include "BehaviorBranchContext.h" #include "BehaviorContext.h" #include "EntityManager.h" #include "BaseCombatAIComponent.h" void ChangeOrientationBehavior::Handle(BehaviorContext* context, RakNet::BitStream* bitStream, BehaviorBranchContext branch) { } void ChangeOrientationBehavior::Calculate(BehaviorContext* context, RakNet::BitStream* bitStream, BehaviorBranchContext branch) { if (!m_ToTarget) return; // TODO: Add the other arguments to this behavior auto* self = EntityManager::Instance()->GetEntity(context->originator); auto* other = EntityManager::Instance()->GetEntity(branch.target); if (self == nullptr || other == nullptr) return; const auto source = self->GetPosition(); const auto destination = self->GetPosition(); if (m_OrientCaster) { auto* baseCombatAIComponent = self->GetComponent(); /*if (baseCombatAIComponent != nullptr) { baseCombatAIComponent->LookAt(destination); } else*/ { self->SetRotation(NiQuaternion::LookAt(source, destination)); } EntityManager::Instance()->SerializeEntity(self); } else { other->SetRotation(NiQuaternion::LookAt(destination, source)); EntityManager::Instance()->SerializeEntity(other); } } void ChangeOrientationBehavior::Load() { m_OrientCaster = GetBoolean("orient_caster"); m_ToTarget = GetBoolean("to_target"); }