コード例 #1
0
 void setTile(int x, int y, SpawnConfigulation spawnThing, System.Random random, TilemapStructure tilemapStruct, int groundTile)
 {
     if (spawnThing.spawnTileType.Any(tile => (int)tile == groundTile)) // 타일 중 하나라도 groundTile이랑 같다면
     {
         if (random.Next(0, 100) <= spawnThing.SpawnChancePerCell)
         {
             tilemapStruct.SetTileEnumNumber(x, y, (int)spawnThing.objectType);
         }
     }
 }
コード例 #2
0
        /// <summary>
        /// 모래 타일, 물 타일, 풀 타일 뭐 등등 그 중에 풀 타일을 골라
        ///  10x10 그리드에  각 셀 하나하나 그 타일의 8개의 이웃타일에게 얼마나 많이 같은 타입이 있는지 세고
        ///  그 숫자를 통해 타일들을 같은 타입으로 두냐 아니냐를 선택한다.
        /// </summary>
        /// <param name="tilemap"></param>


        public override void Apply(TilemapStructure tilemap)
        {
            int targetTileId  = (int)TargetTile;
            int replaceTileId = (int)ReplaceBy;

            for (int i = 0; i < Reptitions; i++)
            {
                for (int x = 0; x < tilemap.Width; x++)
                {
                    for (int y = 0; y < tilemap.Height; y++)
                    {
                        var tile = tilemap.GetTileEnumNumber(x, y);
                        if (tile == targetTileId)
                        {
                            var neighbors = tilemap.GetNeighbors(x, y);

                            int targetTilesCount = neighbors.Count(a => a.Value == targetTileId);


                            // 만약 minAlive 숫자가 도달하지 못하면 타일을 교체한다
                            if (targetTilesCount < minAlive)
                            {
                                if (ReplaceByDominantTile)
                                {
                                    int dominantTile = neighbors
                                                       .GroupBy(a => a.Value)
                                                       .OrderByDescending(a => a.Count())
                                                       .Select(a => a.Key)
                                                       .First();
                                    tilemap.SetTileEnumNumber(x, y, dominantTile);
                                }
                                else
                                {
                                    tilemap.SetTileEnumNumber(x, y, replaceTileId);
                                }
                            }
                        }
                    }
                }
            }
        }
コード例 #3
0
    public void Apply(TilemapStructure tilemap)
    {
        var validEnumValues = (GroundTileType[])Enum.GetValues(typeof(GroundTileType));

        for (int x = 0; x < tilemap.Width; x++)
        {
            for (int y = 0; y < tilemap.Height; y++)
            {
                var randomValue = (int)validEnumValues[UnityEngine.Random.Range(0, validEnumValues.Length)];

                tilemap.SetTileEnumNumber(x, y, randomValue);
            }
        }
    }
コード例 #4
0
        public override void Apply(TilemapStructure tilemap)
        {
            // Make sure TileType ordered from small to high height
            tileTypes = tileTypes.OrderBy(a => a.Height).ToArray();

            float[] noiseMap = Noise.GenerateNoiseMap(tilemap.Width, tilemap.Height, tilemap.grid.Seed, NoiseScale, Octaves, Persistance, Lacunarity, Offset);

            if (ApplyIslandGradient)
            {
                float[] islandGradient = Noise.GenerateIslandGradientMap(tilemap.Width, tilemap.Height);
                for (int x = 0, y; x < tilemap.Width; x++)
                {
                    for (y = 0; y < tilemap.Height; y++)
                    {
                        float subtractedValue = noiseMap[y * tilemap.Width + x] - islandGradient[y * tilemap.Width + x];
                        // make sure Clamp to 0f~ 1f;
                        noiseMap[y * tilemap.Width + x] = Mathf.Clamp01(subtractedValue);
                    }
                }
            }

            for (int x = 0; x < tilemap.Width; x++)
            {
                for (int y = 0; y < tilemap.Height; y++)
                {
                    float height = noiseMap[y * tilemap.Width + x];

                    for (int i = 0; i < tileTypes.Length; i++)
                    {
                        if (height <= tileTypes[i].Height)
                        {
                            tilemap.SetTileEnumNumber(x, y, (int)tileTypes[i].tileTypeEnum);
                            break;
                        }
                    }
                }
            }
        }