public override void StateEnter() { base.StateEnter(); status = StateStatus.Error; brain.Navigator.SetBrakingEnabled(false); path = brain.Navigator.Path; T entity = GetEntity(); if (path == null) { AIInformationZone forPoint = AIInformationZone.GetForPoint(entity.ServerPosition); if (forPoint == null) { return; } path = forPoint.GetNearestPath(entity.ServerPosition); if (path == null) { return; } } currentTargetPoint = path.FindNearestPoint(entity.ServerPosition); if (!(currentTargetPoint == null)) { status = StateStatus.Running; currentWaitTime = 0f; brain.Navigator.SetDestination(currentTargetPoint.transform.position, BaseNavigator.NavigationSpeed.Slow); } }
public AIMovePointPath GetNearestPath(Vector3 position) { if (paths == null || paths.Count == 0) { return(null); } float num = float.MaxValue; AIMovePointPath result = null; foreach (AIMovePointPath path in paths) { foreach (AIMovePoint point in path.Points) { float num2 = Vector3.SqrMagnitude(point.transform.position - position); if (num2 < num) { num = num2; result = path; } } } return(result); }