From 60aa8e85d058fccb1fa5e3952975d03d99778c6a Mon Sep 17 00:00:00 2001 From: miepzerino <o.skotnik@gmail.com> Date: Wed, 27 Dec 2023 03:44:34 +0000 Subject: [PATCH] Added ironOre + dropable + pickup creation --- Assets/Scripts/GenerateTileMap.cs | 69 ++++++++++++++++++++++++++++++++-- 1 files changed, 65 insertions(+), 4 deletions(-) diff --git a/Assets/Scripts/GenerateTileMap.cs b/Assets/Scripts/GenerateTileMap.cs index 136a14d..231f61a 100644 --- a/Assets/Scripts/GenerateTileMap.cs +++ b/Assets/Scripts/GenerateTileMap.cs @@ -1,9 +1,33 @@ using System; using System.Collections; using System.Collections.Generic; +using Unity.VisualScripting; using UnityEngine; 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 RuleTile tile; + public int maxSpawnHeight; + public int minSpawnHeight; +} public class GenerateTileMap : MonoBehaviour { @@ -17,13 +41,14 @@ Tilemap tilemap; public RuleTile forestRuleTile; public TileBase borderTile; + public List<Ore> ores; //public List<TileBase> tiles; private void Awake() { tilemap = GetComponent<Tilemap>(); #if DEBUG - //seed = 0123456789; + seed = 0123456789; #endif if (seed == null) { @@ -60,6 +85,7 @@ public IEnumerator GenerateTiles(Action finishedCallback, List<Vector3Int> destroyedTiles) { + // generate ground for (int x = 1; x < maxWidth; x++) { for (int y = 1; y < maxGroundHeight; y++) @@ -68,11 +94,12 @@ float yPerlin = ((float)y / maxHeight) * scale + offsetY; float perlinNoise = Mathf.PerlinNoise(xPerlin, yPerlin); - if (perlinNoise >= 0.3f) + if (perlinNoise <= 0.7f) { - if (!destroyedTiles.Contains(new Vector3Int(x, y, 0))) + Vector3Int tileSpawnCoord = new Vector3Int(x, y); + if (!destroyedTiles.Contains(tileSpawnCoord)) { - tilemap.SetTile(new Vector3Int(x, y), forestRuleTile); + tilemap.SetTile(tileSpawnCoord, forestRuleTile); } } @@ -84,6 +111,40 @@ yield return null; } } + + if (ores != null) + { + foreach (Ore ore in ores) + { + for (int x = 0; x < maxWidth; x++) + { + for (int y = ore.minSpawnHeight; y < ore.maxSpawnHeight; y++) + { + float xPerlin = ((float)x / maxWidth) * (float)ore.clusterWeight + offsetX; + float yPerlin = ((float)y / maxHeight) * (float)ore.clusterWeight + offsetY; + float perlinNoise = Mathf.PerlinNoise(xPerlin, yPerlin); + + if (perlinNoise <= (1f / (float)ore.weight)) + { + Vector3Int tileSpawnCoord = new Vector3Int(x, y); + if (!destroyedTiles.Contains(tileSpawnCoord) && tilemap.HasTile(tileSpawnCoord)) + { + tilemap.SetTile(tileSpawnCoord, ore.tile); + } + } + + } + + // Update UI every 8 lines + if ((x % 8) == 0) + { + yield return null; + } + } + } + } + + // generate borders for (int x = 0; x <= maxWidth; x += maxWidth) { for (int y = 0; y <= maxHeight; y++) -- Gitblit v1.9.3