コード例 #1
0
ファイル: Tilemap2D.cs プロジェクト: takdw00/Project_Empty
        public void InitializeGrid()
        {
            mapTiles.Clear();

            for (int x = tilemap.MinGridX; x <= tilemap.MaxGridX; x++)
            {
                for (int y = tilemap.MinGridY; y <= tilemap.MaxGridY; y++)
                {
                    Tile tileSTE     = tilemap.GetTile(x, y);
                    uint tileDataSTE = tilemap.GetTileData(x, y);
                    uint dataSTE     = Tileset.GetTileFlagsFromTileData(tileDataSTE);

                    if (tileSTE == null)
                    {
                        continue;
                    }

                    LightTile tile = new LightTile();
                    tile.gridPosition = new Vector3Int(x, y, 0);
                    tile.uv           = tileSTE.uv;

                    bool flipX = (dataSTE & k_TileFlag_FlipH) != 0;
                    bool flipY = (dataSTE & k_TileFlag_FlipV) != 0;

                    Vector2 scale = Vector2.one;
                    if (flipX)
                    {
                        scale.x = -1;
                    }

                    if (flipY)
                    {
                        scale.y = -1;
                    }

                    tile.scale = scale;

                    bool dynamic = this.shadowTypeSTE == SuperTilemapEditorSupport.TilemapCollider2D.ShadowType.TileCollider;

                    if (dynamic)
                    {
                        List <Polygon2> polygons = TileColliderDataToPolygons(tileSTE.collData, tile.scale);

                        if (polygons.Count > 0)
                        {
                            tile.SetLocalPolygons(polygons);
                        }
                    }

                    mapTiles.Add(tile);
                }
            }
        }
コード例 #2
0
        public override bool IsPassable()
        {
            bool isBlocked = false;

            for (int i = 0; !isBlocked && i < m_tilemapGroup.Tilemaps.Count; ++i)
            {
                STETilemap tilemap = m_tilemapGroup[i];
                if (tilemap && tilemap.ColliderType != eColliderType.None && tilemap.IsGridPositionInsideTilemap(GridX, GridY))
                {
                    Tile tile = tilemap.GetTile(GridX, GridY);
                    isBlocked = tile != null && tile.collData.type != eTileCollider.None;
                }
            }
            return(!isBlocked);
        }
コード例 #3
0
ファイル: MapPathFinding.cs プロジェクト: FrankOrtiz/ProtoRun
        public override bool IsPassable()
        {
            bool isPositionEmpty = true; //NOTE: for optimization, positions with no tiles are also blocked
            bool isBlocked       = false;

            for (int i = 0; !isBlocked && i < m_tilemapGroup.Tilemaps.Count; ++i)
            {
                STETilemap tilemap = m_tilemapGroup[i];
                if (tilemap && tilemap.ColliderType != eColliderType.None)
                {
                    Tile tile = tilemap.GetTile(GridX, GridY);
                    isPositionEmpty = isPositionEmpty && tile == null;
                    isBlocked       = tile != null && tile.collData.type != eTileCollider.None;
                }
            }
            return(!isBlocked && !isPositionEmpty);
        }
コード例 #4
0
ファイル: TilemapUtils.cs プロジェクト: FrankOrtiz/ProtoRun
        /// <summary>
        /// Checks if a rect overlaps any tile with colliders
        /// </summary>
        /// <returns></returns>
        static public bool OverlapRect(STETilemap tilemap, Rect rect)
        {
            int gridX0 = GetGridX(tilemap, rect.min);
            int gridY0 = GetGridY(tilemap, rect.min);
            int gridX1 = GetGridX(tilemap, rect.max);
            int gridY1 = GetGridY(tilemap, rect.max);

            for (int x = gridX0; x <= gridX1; ++x)
            {
                for (int y = gridY0; y <= gridY1; ++y)
                {
                    Tile tile = tilemap.GetTile(x, y);
                    if (tile != null && tile.collData.type != eTileCollider.None)
                    {
                        return(true);
                    }
                }
            }
            return(false);
        }
コード例 #5
0
        public override bool IsPassable()
        {
            if (m_owner.IsComputing && m_owner.AllowBlockedDestination && m_owner.EndNode == this)
            {
                return(true);
            }
            bool isBlocked   = false;
            bool isEmptyCell = true; // true is not tile is found in the node position

            for (int i = 0; !isBlocked && i < m_tilemapGroup.Tilemaps.Count; ++i)
            {
                STETilemap tilemap = m_tilemapGroup[i];
                if (tilemap && tilemap.ColliderType != eColliderType.None && tilemap.IsGridPositionInsideTilemap(GridX, GridY))
                {
                    Tile tile = tilemap.GetTile(tilemap.transform.InverseTransformPoint(Position)); // Use Position instead to allow tilemaps with offset different than 0, tilemap.GetTile(GridX, GridY);
                    isEmptyCell = false;
                    isBlocked   = tile != null && tile.collData.type != eTileCollider.None;
                }
            }
            return(!isBlocked && !isEmptyCell);
        }