示例#1
0
    public void ClearNodes()
    {
        m_nodes.Clear();

        RiderRouteNode newNode = new RiderRouteNode();

        newNode.x = (int)transform.position.x;
        newNode.y = (int)transform.position.z;
        m_nodes.Add(newNode);
    }
示例#2
0
    public void AddNode(int x, int y)
    {
        // Handle backing out a node
        if (m_nodes.Count > 2)
        {
            if (m_nodes[m_nodes.Count - 2].x == x && m_nodes[m_nodes.Count - 2].y == y)
            {
                m_nodes.RemoveAt(m_nodes.Count - 1);
            }
        }

        // Don't allow more nodes than the limit
        if (m_nodes.Count >= m_nodeLimit)
        {
            return;
        }

        // Dont allow entering a cell that another team-mate is also entering

        // Don't allow jumping more than one node in any direction at a time
        if (m_nodes.Count > 1)
        {
            int lastX = m_nodes[m_nodes.Count - 1].x;
            int lastY = m_nodes[m_nodes.Count - 1].y;

            if (Mathf.Abs(x - lastX) > 1 || Mathf.Abs(y - lastY) > 1)
            {
                return;
            }
        }



        if (m_nodes.Any(node => node.x == x && node.y == y))
        {
            return;
        }

        RiderRouteNode newNode = new RiderRouteNode();

        newNode.x = x;
        newNode.y = y;

        m_nodes.Add(newNode);
    }