Пример #1
0
 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);
 }
Пример #2
0
        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());
        }