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 | 100 +++++++++++++++++++++++++++++++++++++++++++++----- 1 files changed, 90 insertions(+), 10 deletions(-) diff --git a/Assets/Scripts/GenerateTileMap.cs b/Assets/Scripts/GenerateTileMap.cs index 6d5d630..231f61a 100644 --- a/Assets/Scripts/GenerateTileMap.cs +++ b/Assets/Scripts/GenerateTileMap.cs @@ -1,28 +1,54 @@ 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 { public int? seed; - public int width = 256; - public int height = 256; + public int maxWidth = 256; + public int maxHeight = 384; + public int maxGroundHeight = 256; private float scale; private float offsetX; private float offsetY; 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) { @@ -59,19 +85,21 @@ public IEnumerator GenerateTiles(Action finishedCallback, List<Vector3Int> destroyedTiles) { - for (int x = 0; x < width; x++) + // generate ground + for (int x = 1; x < maxWidth; x++) { - for (int y = 0; y < height; y++) + for (int y = 1; y < maxGroundHeight; y++) { - float xPerlin = ((float)x / width) * scale + offsetX; - float yPerlin = ((float)y / height) * scale + offsetY; + float xPerlin = ((float)x / maxWidth) * scale + offsetX; + 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); } } @@ -83,6 +111,58 @@ 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++) + { + tilemap.SetTile(new Vector3Int(x, y), borderTile); + } + + } + yield return null; + for (int y = 0; y <= maxHeight; y += maxHeight) + { + for (int x = 1; x <= maxWidth; x++) + { + tilemap.SetTile(new Vector3Int(x, y), borderTile); + } + + } + yield return null; finishedCallback(); } } -- Gitblit v1.9.3