| | |
| | | using UnityEngine.Tilemaps; |
| | | using UnityEngine.UIElements; |
| | | |
| | | [Serializable] |
| | | public class Ore |
| | | { |
| | | public string name; |
| | | /// <summary> |
| | | /// The lower the numer the higher the amount of ores that will spawn |
| | | /// Higher number means less ore |
| | | /// </summary> |
| | | [Tooltip("The lower the numer the higher the amount of ores that will spawn. Higher number means less ore.")] |
| | | [Range(1, 100000)] |
| | | public int weight; |
| | | /// <summary> |
| | | /// The lower the number the more dense the ore will spawn (big clusters |
| | | /// Higher number means little clusters (more spread) |
| | | /// </summary> |
| | | [Tooltip("The lower the number the more dense the ore will spawn (big clusters. Higher number means little clusters (more spread).")] |
| | | [Range(10, 100000)] |
| | | public int clusterWeight; |
| | | public CustomRuleTile tile; |
| | | public int maxSpawnHeight; |
| | | public int minSpawnHeight; |
| | | } |
| | | //[Serializable] |
| | | //public class Ore |
| | | //{ |
| | | // public string name; |
| | | // /// <summary> |
| | | // /// The lower the numer the higher the amount of ores that will spawn |
| | | // /// Higher number means less ore |
| | | // /// </summary> |
| | | // [Tooltip("The lower the numer the higher the amount of ores that will spawn. Higher number means less ore.")] |
| | | // [Range(1, 100000)] |
| | | // public int weight; |
| | | // /// <summary> |
| | | // /// The lower the number the more dense the ore will spawn (big clusters |
| | | // /// Higher number means little clusters (more spread) |
| | | // /// </summary> |
| | | // [Tooltip("The lower the number the more dense the ore will spawn (big clusters. Higher number means little clusters (more spread).")] |
| | | // [Range(10, 100000)] |
| | | // public int clusterWeight; |
| | | // public CustomRuleTile tile; |
| | | // public int maxSpawnHeight; |
| | | // public int minSpawnHeight; |
| | | //} |
| | | |
| | | public class GenerateTileMap : MonoBehaviour |
| | | { |
| | |
| | | Tilemap tilemap; |
| | | public CustomRuleTile forestRuleTile; |
| | | public TileBase borderTile; |
| | | public List<Ore> ores; |
| | | public List<Generateable> generateables; |
| | | //public List<TileBase> tiles; |
| | | |
| | | private void Awake() |
| | |
| | | } |
| | | } |
| | | |
| | | if (ores != null) |
| | | if (generateables != null) |
| | | { |
| | | foreach (Ore ore in ores) |
| | | foreach (Generateable generateable in generateables) |
| | | { |
| | | for (int x = 0; x < maxWidth; x++) |
| | | { |
| | | for (int y = ore.minSpawnHeight; y < ore.maxSpawnHeight; y++) |
| | | for (int y = generateable.minSpawnHeight; y < generateable.maxSpawnHeight; y++) |
| | | { |
| | | float xPerlin = ((float)x / maxWidth) * (float)ore.clusterWeight + offsetX; |
| | | float yPerlin = ((float)y / maxHeight) * (float)ore.clusterWeight + offsetY; |
| | | float xPerlin = ((float)x / maxWidth) * (float)generateable.clusterWeight + offsetX; |
| | | float yPerlin = ((float)y / maxHeight) * (float)generateable.clusterWeight + offsetY; |
| | | float perlinNoise = Mathf.PerlinNoise(xPerlin, yPerlin); |
| | | |
| | | if (perlinNoise <= (1f / (float)ore.weight)) |
| | | if (perlinNoise <= (1f / (float)generateable.weight)) |
| | | { |
| | | Vector3Int tileSpawnCoord = new Vector3Int(x, y); |
| | | if (!destroyedTiles.Contains(tileSpawnCoord) && tilemap.HasTile(tileSpawnCoord)) |
| | | { |
| | | tilemap.SetTile(tileSpawnCoord, ore.tile); |
| | | tilemap.SetTile(tileSpawnCoord, generateable.tile); |
| | | } |
| | | } |
| | | |