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); } } }
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); }
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); }
/// <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); }
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); }