void AttackState::moveToLastSeen(double dt) { Guard* g = dynamic_cast<Guard*>(m_FSMOwner); // Check if the NPC is legit if (!g) { return; } g->SetLookDir((g->GetLastSeen() - g->GetTransform().Translation).Normalized()); float distFromLastSeen = (g->GetTransform().Translation - g->GetLastSeen()).LengthSquared(); float movement = g->GetMoveSpeed() * dt; float movementSquared = movement * movement; if (movementSquared > distFromLastSeen) // Walk past waypoint { g->SetPos(g->GetLastSeen()); g->UpdateViewPosition(); m_reached = true; } else { g->SetPos(g->GetTransform().Translation + (g->GetLookDir() * movement)); g->UpdateViewPosition(); } }