Beispiel #1
0
        /// <summary>
        /// Combines multiple sets of columns into a single set of columns.
        /// </summary>
        public static IReadOnlyList <ColumnSymbol> Combine(CombineKind kind, IEnumerable <IReadOnlyList <ColumnSymbol> > columnSets)
        {
            var result = new List <ColumnSymbol>();

            foreach (var list in columnSets)
            {
                result.AddRange(list);
            }

            switch (kind)
            {
            case CombineKind.UnifySameNameAndType:
                Binding.Binder.UnifyColumnsWithSameNameAndType(result);
                break;

            case CombineKind.UnifySameName:
                Binding.Binder.UnifyColumnsWithSameName(result);
                break;

            case CombineKind.UniqueNames:
                Binding.Binder.MakeColumnNamesUnique(result);
                break;
            }

            return(result);
        }
Beispiel #2
0
 public static IReadOnlyList <ColumnSymbol> Combine(CombineKind kind, params IReadOnlyList <ColumnSymbol>[] columnSets)
 {
     return(Combine(kind, (IEnumerable <IReadOnlyList <ColumnSymbol> >)columnSets));
 }
Beispiel #3
0
 /// <summary>
 /// Combine the columns of multiple tables into a new table.
 /// </summary>
 public static TableSymbol Combine(CombineKind kind, params TableSymbol[] tables)
 {
     return(Combine(kind, (IEnumerable <TableSymbol>)tables));
 }
    void Start()
    {
        Tilemap tilemap  = GetComponent <Tilemap>();
        Vector3 cellSize = tilemap.cellSize;

        cellSize.Scale(transform.lossyScale);

        Quaternion rotation = Quaternion.AngleAxis(-90, transform.right) * transform.rotation;

        BoundsInt bounds = tilemap.cellBounds;

        TileBase[]     allTiles      = tilemap.GetTilesBlock(bounds);
        TileObstacle[] tileObstacles = new TileObstacle[(bounds.size.x + 1) * (bounds.size.y + 1)];

        int width = bounds.size.x, height = bounds.size.y;

        for (int x = 0; x < width; x++)
        {
            int ox = x + 1;
            for (int y = 0; y < height; y++)
            {
                int oy = y + 1;

                Tile tile = (allTiles[x + y * width] as Tile);
                if (tile == null || tile.colliderType == Tile.ColliderType.None)
                {
                    continue;
                }

                int          oi = ox + oy * width;
                TileObstacle combineCandidate = tileObstacles[oi - 1];      // on the left of current tile
                CombineKind  kind             = combineCandidate.combineKind;
                if (kind == CombineKind.Single || kind == CombineKind.Horizontal)
                {
                    tileObstacles[oi - 1].combineKind = CombineKind.Horizontal;
                    tileObstacles[oi] = HorizontalCombine(combineCandidate, cellSize.x);
                    continue;
                }

                combineCandidate = tileObstacles[oi - width];  // on the top of current tile
                kind             = combineCandidate.combineKind;
                if (kind == CombineKind.Single || kind == CombineKind.Vertical)
                {
                    tileObstacles[oi - width].combineKind = CombineKind.Vertical;
                    tileObstacles[oi] = VerticalCombine(combineCandidate, cellSize.y);
                    continue;
                }

                var obstacleObject = new GameObject(this.name + " Nav Obstacle");
                obstacleObject.isStatic         = this.gameObject.isStatic;
                obstacleObject.transform.parent = NavigationMain.current.transform;
                Vector3 position = tilemap.CellToWorld(new Vector3Int(bounds.x + x, bounds.y + y, 0));
                obstacleObject.transform.SetPositionAndRotation(new Vector3(position.x + cellSize.x / 2f, position.y + cellSize.y / 2f, 0), rotation);

                var nmObstacle = obstacleObject.AddComponent <NavMeshObstacle>();
                nmObstacle.carving = true;
                nmObstacle.size    = new Vector3(cellSize.x, obstacleHeight, cellSize.y);

                tileObstacles[oi].obstacle    = nmObstacle;
                tileObstacles[oi].combineKind = CombineKind.Single;
            }
        }
        Destroy(this);
    }
Beispiel #5
0
 /// <summary>
 /// Combine the columns of multiple tables into a new table.
 /// </summary>
 public static TableSymbol Combine(CombineKind kind, IEnumerable <TableSymbol> tables)
 {
     return(new TableSymbol(ColumnSymbol.Combine(kind, tables.Select(t => t.Columns))));
 }