Exemplo n.º 1
0
    void Roam()
    {
        flying = false;

        LookAtSlowly (targetNode.worldPos);

        transform.Translate(Vector3.forward * (Time.deltaTime + 0.2f));

        atTarget = false;
        if(Vector3.Distance(transform.position,targetNode.worldPos) < minRange)
        {
            atTarget = true;
            currentNode = targetNode;
            roaming = false;
            Next(currentNode.connectedNodes[Random.Range(0, (currentNode.GetConnectionCount()))]);
            StartCoroutine(WaitAtFlower());

        }
    }
Exemplo n.º 2
0
    void Update()
    {
        //put this in update function (not in start) to avoid ArgumentOutOfRange(Index)Error
        if(_world.nodes.Count > 0 && startup)
        {
            currentNode = _world.nodes[Random.Range(0,_world.nodes.Count -1)];

            Next(currentNode.connectedNodes[Random.Range(0, (currentNode.GetConnectionCount()))]);
            roaming = true;
            startup = false;
        }

        if(roaming)
            Roam();

        if (flying) {
            if(FlyTrigger2.activeSelf)
            {
                Fly(FlyTrigger2);
                playerObj.transform.position = playerSeat.transform.position;
            }
            if(!FlyTrigger2.activeSelf)
            {
                Fly(FlyTrigger);
                playerObj.transform.position = playerSeat.transform.position;
            }
        }

        //if (landing)
        //	Land ();

        if (waitingForPlayer) {
            roaming = false;
            if(Input.GetKey("e"))
            {

                StartCoroutine(WaitForPlayer());
                waitingForPlayer = false;
            }
        }
    }
    private void CalculateClosestNodes()
    {
        float distanceSqrToClosestNode = (m_closestNode.transform.position - transform.position).sqrMagnitude;
        int connectionCount = m_closestNode.GetConnectionCount();

        float closestDistanceSqr = distanceSqrToClosestNode;
        int closestIndex = -1;
        Node closestNode = null;
        for (int i = 0; i < connectionCount; i++)
        {
            Connection connection = m_closestNode.GetConnection(i);
            if(!Connection.IsValid(connection))
                continue;

            Node node = connection.TargetNode;
            var sqrDistance = (transform.position - node.transform.position).sqrMagnitude;
            if (sqrDistance < closestDistanceSqr)
            {
                closestIndex = i;
                closestDistanceSqr = sqrDistance;
                closestNode = node;
            }
        }

        //Find the new closest node if we have one
        if (closestIndex != -1)
            m_closestNode = closestNode;

        //check to see if we are at the closest node
        float distanceToClosest = (m_closestNode.transform.position - transform.position).magnitude;
        m_atNode = distanceToClosest < m_atNodeDistance ? m_closestNode : null;

        if (m_atNode == null)
        {
            Vector2 vectorFromNode = transform.position - m_closestNode.transform.position;
            Direction directionFromNode = DirectionHelper.VectorToDirection(vectorFromNode);
            Direction oppositeDirection = DirectionHelper.OppositeDirection(directionFromNode);

            for (int i = 0; i < m_closestNodes.Length; i++)
            {
                m_closestNodes[i] = null;
            }

            m_closestNodes[(int) oppositeDirection] = m_closestNode;

            Connection otherDirectionConnection = m_closestNode.GetConnection(directionFromNode);
            if (Connection.IsValid(otherDirectionConnection))
                m_closestNodes[(int) directionFromNode] = otherDirectionConnection.TargetNode;
        }
        else
        {
            connectionCount = m_atNode.GetConnectionCount();
            for (int i = 0; i < connectionCount; i++)
            {
                Connection connection = m_atNode.GetConnection(i);
                m_closestNodes[i] = Connection.IsValid(connection) ? connection.TargetNode : null;
            }
        }
    }