Exemplo n.º 1
0
    static bool ConnectedCheck(PolyGraph graph, List <GameObject> gameObjects)
    {
        var xforms   = gameObjects.ConvertAll(v => v.transform).ToArray();
        var resolver = new RegionResolver(graph);

        resolver.Collect(xforms);
        resolver.CalculateTriangleAdjacents();
        resolver.CalculateRegionAdjacents();

        List <int>            regionIndexs     = Enumerable.Range(0, resolver.regions.Count).ToList();
        List <List <string> > connectedRegions = new List <List <string> >();

        while (regionIndexs.Count > 0)
        {
            List <string> connected = new List <string>();
            Queue <int>   queue     = new Queue <int>();
            queue.Enqueue(regionIndexs[0]);
            while (queue.Count > 0)
            {
                int i = queue.Dequeue();
                regionIndexs.Remove(i);
                var region = resolver.regions[i];
                connected.Add(region.name);
                foreach (int adj in region.adjacents)
                {
                    if (regionIndexs.Contains(adj) && !queue.Contains(adj))
                    {
                        queue.Enqueue(adj);
                    }
                }
            }
            connectedRegions.Add(connected);
        }

        if (connectedRegions.Count > 1)
        {
            var log = new StringBuilder("Selected regions are not all connected, connected regions are:\n");
            foreach (var names in connectedRegions)
            {
                log.AppendFormat("{{ {0} }}\n", string.Join(", ", names));
            }
            Debug.LogError(log);
            return(false);
        }
        else
        {
            return(true);
        }
    }
Exemplo n.º 2
0
    public static void Resolve(PolyGraph graph)
    {
        Transform[] xforms = new Transform[graph.transform.childCount];
        for (int i = 0; i < graph.transform.childCount; ++i)
        {
            xforms[i] = graph.transform.GetChild(i);
        }

        var resolver = new RegionResolver(graph);

        resolver.Collect(xforms);
        resolver.CalculateTriangleAdjacents();
        resolver.CalculateRegionAdjacents();
        resolver.CalculateRegionBorderEdges();
        resolver.Apply();
    }