Beispiel #1
0
    public void Start()
    {
        float randomAngle = (float)(r.NextDouble() * 360);

        randomOffset = new Vector3(Mathf.Sin(randomAngle) / 4.0f, 0.18f, Mathf.Cos(randomAngle) / 4.0f);
        //  randomOffset = new Vector3((float)((r.NextDouble() * 0.5f) - 0.25f), (float)((r.NextDouble() * 0.5f) - 0.25f));
        Node startNode = WorldGrid.GetClosestNodeFromPosition(transform.position, true);

        pathToGoal = FindPathToGoalNode(startNode, WorldGrid.GetClosestGoalNode(startNode));
        nodeIndex  = 0;
        lerp       = Vector3.Lerp(Vector3.zero, pathToGoal[nodeIndex].transform.position + randomOffset - transform.position,
                                  0.05f);
    }
Beispiel #2
0
    void Update()
    {
        Vector3 nextPosition = transform.position + lerp;

        Node nextNode = WorldGrid.GetClosestNodeFromPosition(nextPosition);
        Node prevNode = WorldGrid.GetClosestNodeFromPosition(transform.position);

        if (nextNode != prevNode)
        {
            nextNode.OnEnter(this);
            if (!nextNode.IsPassable)
            {
                Start();
            }
        }


        if (pathToGoal[nodeIndex] == null || pathToGoal.Count > nodeIndex + 1 && pathToGoal[nodeIndex + 1] == null)
        {
            Start();
        }
        Vector3 directionToTarget = (pathToGoal[nodeIndex].transform.position + randomOffset) - transform.position;
        float   dSqrToTarget      = directionToTarget.sqrMagnitude;

        if (dSqrToTarget < 0.25f)
        {
            nodeIndex++;
            if (nodeIndex == pathToGoal.Count)
            {
                Win();
            }
            else
            {
                lerp = Vector3.Lerp(Vector3.zero, pathToGoal[nodeIndex].transform.position + randomOffset - transform.position, 0.05f);
            }
        }

        transform.position = nextPosition;
    }
Beispiel #3
0
    void Update()
    {
        Node nextNode = WorldGrid.GetClosestNodeFromPosition(transform.position + (heading * Time.deltaTime));
        Node prevNode = WorldGrid.GetClosestNodeFromPosition(transform.position);

        if (nextNode != prevNode)
        {
            nextNode.OnEnter(this);
        }

        if (!nextNode.IsPassable)
        {
            RandomHeading();
        }
        else
        {
            transform.position += heading * Time.deltaTime;
        }

        if (nextNode.GetType() == typeof(GoalNode))
        {
            Win();
        }
    }