#include "SpeedBehavior.h" #include "ControllablePhysicsComponent.h" #include "BehaviorContext.h" #include "BehaviorBranchContext.h" #include "dLogger.h" void SpeedBehavior::Handle(BehaviorContext* context, RakNet::BitStream* bitStream, BehaviorBranchContext branch) { if (m_AffectsCaster) { branch.target = context->caster; } auto* target = EntityManager::Instance()->GetEntity(branch.target); if (target == nullptr) { return; } auto* controllablePhysicsComponent = target->GetComponent(); if (controllablePhysicsComponent == nullptr) { return; } const auto current = controllablePhysicsComponent->GetSpeedMultiplier(); controllablePhysicsComponent->SetSpeedMultiplier(current + ((m_RunSpeed - 500.0f) / 500.0f)); EntityManager::Instance()->SerializeEntity(target); if (branch.duration > 0.0f) { context->RegisterTimerBehavior(this, branch); } else if (branch.start > 0) { controllablePhysicsComponent->SetIgnoreMultipliers(true); context->RegisterEndBehavior(this, branch); } } void SpeedBehavior::Timer(BehaviorContext* context, BehaviorBranchContext branch, LWOOBJID second) { auto* target = EntityManager::Instance()->GetEntity(branch.target); if (target == nullptr) { return; } auto* controllablePhysicsComponent = target->GetComponent(); if (controllablePhysicsComponent == nullptr) { return; } const auto current = controllablePhysicsComponent->GetSpeedMultiplier(); controllablePhysicsComponent->SetSpeedMultiplier(current - ((m_RunSpeed - 500.0f) / 500.0f)); EntityManager::Instance()->SerializeEntity(target); } void SpeedBehavior::End(BehaviorContext* context, BehaviorBranchContext branch, LWOOBJID second) { auto* target = EntityManager::Instance()->GetEntity(branch.target); if (target == nullptr) { return; } auto* controllablePhysicsComponent = target->GetComponent(); if (controllablePhysicsComponent == nullptr) { return; } const auto current = controllablePhysicsComponent->GetSpeedMultiplier(); controllablePhysicsComponent->SetIgnoreMultipliers(false); controllablePhysicsComponent->SetSpeedMultiplier(current - ((m_RunSpeed - 500.0f) / 500.0f)); EntityManager::Instance()->SerializeEntity(target); } void SpeedBehavior::Load() { m_RunSpeed = GetFloat("run_speed"); if (m_RunSpeed < 500.0f) { m_RunSpeed = 500.0f; } m_AffectsCaster = GetBoolean("affects_caster"); }