Пример #1
0
        // =============================== Conversion

        public BorderInit SetBorderInit(TileInit leftTile, TileInit rightTile, List <BorderInit> bordersBase, List <BorderInit> bordersSummit)
        {
            this.leftTile         = leftTile;
            this.rightTile        = rightTile;
            this.neighboursBase   = bordersBase;
            this.neighboursSummit = bordersSummit;
            return((BorderInit)this);
        }
    // ==================================== Get Function

    public (List <BorderInit>, List <TileInit>) GetBordersAndTiles()
    {
        List <BorderInit> borders = new List <BorderInit>();
        List <TileInit>   tiles   = new List <TileInit>();

        Dictionary <int, BorderInit> borderDict = new Dictionary <int, BorderInit>();
        Dictionary <int, TileInit>   tileDict   = new Dictionary <int, TileInit>();

        // Step 1: Setting the borders & tiles
        foreach (Boundary C in V)
        {
            BorderInit border = C.CreateUnsetBorder();
            if (border != null)
            {
                if (!borderDict.ContainsKey(border.GetHashCode()))
                {
                    borders.Add(border);
                    borderDict.Add(border.GetHashCode(), border);
                }
            }
        }
        foreach (Site s in S)
        {
            TileInit tile = s.CreateUnsetTile();
            if (tile != null)
            {
                if (!tileDict.ContainsKey(tile.GetHashCode()))
                {
                    tiles.Add(tile);
                    tileDict.Add(tile.GetHashCode(), tile);
                }
            }
        }

        // Step 2: Correcting the refrences
        foreach (UnsetBorderInit b in borders)
        {
            TileInit          leftTile     = SearchDict(tileDict, b.LeftSite);
            TileInit          rightTile    = SearchDict(tileDict, b.RightSite);
            List <BorderInit> borderBase   = SearchDictList(borderDict, b.BaseNeighbours);
            List <BorderInit> borderSummit = SearchDictList(borderDict, b.SummitNeighbours);
            b.SetBorderInit(leftTile, rightTile, borderBase, borderSummit);
        }
        foreach (UnsetTileInit t in tiles)
        {
            List <BorderInit> tileBorders = SearchDictList(borderDict, t.Boundaries);
            t.SetTileInit(tileBorders);
        }

        return(borders, tiles);
    }
 public TileInit OtherTile(TileInit currentTile)
 {
     if (currentTile == leftTile)
     {
         return(rightTile);
     }
     else if (currentTile == rightTile)
     {
         return(leftTile);
     }
     else
     {
         throw new Exception("tile not recognized");
     }
 }