Exemple #1
0
        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);
            }
        }
Exemple #2
0
    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);
    }