Ejemplo n.º 1
0
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();
	}
}