Пример #1
0
        public bool RemoveAllIslands(Action <string> reportProgress)
        {
            bool layersFixed = false;

            reportProgress?.Invoke("Removing islands from " + islandLayers.Count + " layers...<br>");
            PhotonLayer layer = null;

            foreach (var layerNo in islandLayers)
            {
                PhotonFileLayer fileLayer = layers[layerNo];
                if (layer == null)
                {
                    layer = fileLayer.GetLayer();
                }
                else
                {
                    fileLayer.GetUpdateLayer(layer);
                }
                reportProgress?.Invoke("Removing islands from layer " + layerNo);

                int removed = layer.RemoveIslands();
                if (removed == 0)
                {
                    reportProgress?.Invoke(", but nothing could be done.");
                }
                else
                {
                    reportProgress?.Invoke(", " + removed + " islands removed");
                    fileLayer.SaveLayer(layer);
                    Calculate(layerNo);
                    if (layerNo < GetLayerCount() - 1)
                    {
                        Calculate(layerNo + 1);
                    }
                    layersFixed = true;
                }
                reportProgress?.Invoke("<br>");
            }
            FindIslands();
            return(layersFixed);
        }
Пример #2
0
        public bool FixLayers(Action <string> reportProgress)
        {
            bool        layersFixed = false;
            PhotonLayer layer       = null;

            foreach (int layerNo in islandLayers)
            {
                reportProgress?.Invoke("Checking layer " + layerNo);

                // Unpack the layer data to the layer utility class
                PhotonFileLayer fileLayer = layers[layerNo];
                if (layer == null)
                {
                    layer = fileLayer.GetLayer();
                }
                else
                {
                    fileLayer.GetUpdateLayer(layer);
                }

                int changed = Fixit(reportProgress, layer, fileLayer, 10);
                if (changed == 0)
                {
                    reportProgress?.Invoke(", but nothing could be done.");
                }
                else
                {
                    fileLayer.SaveLayer(layer);
                    Calculate(layerNo);
                    if (layerNo < GetLayerCount() - 1)
                    {
                        Calculate(layerNo + 1);
                    }
                    layersFixed = true;
                }

                reportProgress?.Invoke("<br>");
            }
            FindIslands();
            return(layersFixed);
        }