private void InstantiateLights(int2 position, DungeonTileMapComponent tilemapComponent, Transform lightParent) { tilemapComponent.WallTorchAnimatedTile.m_AnimationStartTime = UnityEngine.Random.Range(1, 10); tilemapComponent.TilemapWallsAnimated.SetTile(new Vector3Int(position.x, position.y, 0), tilemapComponent.WallTorchAnimatedTile); Object.Instantiate(tilemapComponent.TorchLight, new Vector3(position.x + 0.5f, position.y - 0.5f, -1), Quaternion.identity, lightParent); }
private IEnumerator SetTiles(Entity boardEntity, Entity tilemapEntity, DungeonTileMapComponent tilemapComponent, int2 boardSize, NativeArray <FinalTileComponent> tilesArray, Transform transform) { var wallCollider = tilemapComponent.TilemapWalls.GetComponent <TilemapCollider2D>(); wallCollider.enabled = false; tilemapComponent.TilemapWalls.ClearAllTiles(); tilemapComponent.TilemapWallsTop.ClearAllTiles(); tilemapComponent.TilemapBase.ClearAllTiles(); tilemapComponent.TilemapWallsAnimated.ClearAllTiles(); var centerX = (int)math.floor(boardSize.x / 2f); var centerY = (int)math.floor(boardSize.y / 2f); var count = (int)math.ceil(math.max(boardSize.x, boardSize.y) / 2f); yield return(null); for (var i = 0; i < count; i++) { var yTop = centerY + i > boardSize.y - 1 ? boardSize.y - 1 : centerY + i; var yBottom = centerY - i < 0 ? 0 : centerY - i; var xLeft = centerX - i < 0 ? 0 : centerX - i;; var xRigth = centerX + i > boardSize.x - 1 ? boardSize.x - 1 : centerX + i;; if (xLeft >= 0 && xRigth < boardSize.x) { for (int x = xLeft, iterationCounter = 0; x <= xRigth; x++, iterationCounter++) { var tile = tilesArray[yTop * boardSize.x + x]; if (tile.TileType == TileType.Floor) { tilemapComponent.TilemapBase.SetTile(new Vector3Int(tile.Position.x, tile.Position.y, 0), tilemapComponent.GroundTile); tilemapComponent.TilemapMinimap.SetTile(new Vector3Int(tile.Position.x, tile.Position.y, 0), tilemapComponent.MinimapTile); } else { tilemapComponent.TilemapWalls.SetTile(new Vector3Int(tile.Position.x, tile.Position.y, 0), tilemapComponent.WallTile); tilemapComponent.TilemapWallsTop.SetTile(new Vector3Int(tile.Position.x, tile.Position.y, 0), tilemapComponent.WallTileTop); } tile = tilesArray[yBottom * boardSize.x + x]; if (tile.TileType == TileType.Floor) { tilemapComponent.TilemapBase.SetTile(new Vector3Int(tile.Position.x, tile.Position.y, 0), tilemapComponent.GroundTile); tilemapComponent.TilemapMinimap.SetTile(new Vector3Int(tile.Position.x, tile.Position.y, 0), tilemapComponent.MinimapTile); } else { tilemapComponent.TilemapWalls.SetTile(new Vector3Int(tile.Position.x, tile.Position.y, 0), tilemapComponent.WallTile); tilemapComponent.TilemapWallsTop.SetTile(new Vector3Int(tile.Position.x, tile.Position.y, 0), tilemapComponent.WallTileTop); } } } if (yBottom >= 0 && yTop < boardSize.y) { for (int y = yBottom, iterationCounter = 0; y <= yTop; y++, iterationCounter++) { var tile = tilesArray[y * boardSize.x + xLeft]; if (tile.TileType == TileType.Floor) { tilemapComponent.TilemapBase.SetTile(new Vector3Int(tile.Position.x, tile.Position.y, 0), tilemapComponent.GroundTile); tilemapComponent.TilemapMinimap.SetTile(new Vector3Int(tile.Position.x, tile.Position.y, 0), tilemapComponent.MinimapTile); } else { tilemapComponent.TilemapWalls.SetTile(new Vector3Int(tile.Position.x, tile.Position.y, 0), tilemapComponent.WallTile); tilemapComponent.TilemapWallsTop.SetTile(new Vector3Int(tile.Position.x, tile.Position.y, 0), tilemapComponent.WallTileTop); } tile = tilesArray[y * boardSize.x + xRigth]; if (tile.TileType == TileType.Floor) { tilemapComponent.TilemapBase.SetTile(new Vector3Int(tile.Position.x, tile.Position.y, 0), tilemapComponent.GroundTile); tilemapComponent.TilemapMinimap.SetTile(new Vector3Int(tile.Position.x, tile.Position.y, 0), tilemapComponent.MinimapTile); } else { tilemapComponent.TilemapWalls.SetTile(new Vector3Int(tile.Position.x, tile.Position.y, 0), tilemapComponent.WallTile); tilemapComponent.TilemapWallsTop.SetTile(new Vector3Int(tile.Position.x, tile.Position.y, 0), tilemapComponent.WallTileTop); } } } yield return(null); } if (boardSize.y % 2 == 0) { for (var x = 0; x < boardSize.x; x++) { var tile = tilesArray[0 * boardSize.x + x]; if (tile.TileType == TileType.Floor) { tilemapComponent.TilemapBase.SetTile(new Vector3Int(tile.Position.x, tile.Position.y, 0), tilemapComponent.GroundTile); tilemapComponent.TilemapMinimap.SetTile(new Vector3Int(tile.Position.x, tile.Position.y, 0), tilemapComponent.MinimapTile); } else { tilemapComponent.TilemapWalls.SetTile(new Vector3Int(tile.Position.x, tile.Position.y, 0), tilemapComponent.WallTile); tilemapComponent.TilemapWallsTop.SetTile(new Vector3Int(tile.Position.x, tile.Position.y, 0), tilemapComponent.WallTileTop); } } } if (boardSize.x % 2 == 0) { for (var y = 0; y < boardSize.y; y++) { var tile = tilesArray[y * boardSize.x]; if (tile.TileType == TileType.Floor) { tilemapComponent.TilemapBase.SetTile(new Vector3Int(tile.Position.x, tile.Position.y, 0), tilemapComponent.GroundTile); tilemapComponent.TilemapMinimap.SetTile(new Vector3Int(tile.Position.x, tile.Position.y, 0), tilemapComponent.MinimapTile); } else { tilemapComponent.TilemapWalls.SetTile(new Vector3Int(tile.Position.x, tile.Position.y, 0), tilemapComponent.WallTile); tilemapComponent.TilemapWallsTop.SetTile(new Vector3Int(tile.Position.x, tile.Position.y, 0), tilemapComponent.WallTileTop); } } } yield return(null); //hide skybox for (var x = -tilemapComponent.OuterWallWidth; x < boardSize.x + tilemapComponent.OuterWallWidth; x++) { for (var y = boardSize.y; y < boardSize.y + tilemapComponent.OuterWallWidth; y++) { tilemapComponent.TilemapWalls.SetTile(new Vector3Int(x, boardSize.y - 1 - y, 0), tilemapComponent.WallTile); tilemapComponent.TilemapWallsTop.SetTile(new Vector3Int(x, boardSize.y - 1 - y, 0), tilemapComponent.WallTileTop); tilemapComponent.TilemapWalls.SetTile(new Vector3Int(x, y, 0), tilemapComponent.WallTile); tilemapComponent.TilemapWallsTop.SetTile(new Vector3Int(x, y, 0), tilemapComponent.WallTileTop); } yield return(null); } for (var y = 0; y < boardSize.y; y++) { for (var x = boardSize.x; x < boardSize.x + tilemapComponent.OuterWallWidth; x++) { tilemapComponent.TilemapWalls.SetTile(new Vector3Int(boardSize.x - 1 - x, y, 0), tilemapComponent.WallTile); tilemapComponent.TilemapWallsTop.SetTile(new Vector3Int(boardSize.x - 1 - x, y, 0), tilemapComponent.WallTileTop); tilemapComponent.TilemapWalls.SetTile(new Vector3Int(x, y, 0), tilemapComponent.WallTile); tilemapComponent.TilemapWallsTop.SetTile(new Vector3Int(x, y, 0), tilemapComponent.WallTileTop); } yield return(null); } tilesArray.Dispose(); wallCollider.enabled = true; tilemapComponent.tileSpawnRoutine = null; var entityManager = World.Active.EntityManager; entityManager.AddComponentData(boardEntity, new TilemapReadyComponent()); }