From 7f1913677d73bc96b0a1bac649b3518e95d0fdbf Mon Sep 17 00:00:00 2001 From: miepzerino <o.skotnik@gmail.com> Date: Wed, 02 Apr 2025 17:05:30 +0000 Subject: [PATCH] #41 changed ground layer to start at y=-1 --- Assets/Resources/Generateable/IronOreHigh.prefab | 4 +- Assets/Scenes/GameplayScene.unity | 10 ++--- Assets/Scripts/GenerateTileMap.cs | 96 +++++++++++++++++++++++++++++------------------ Assets/Resources/Generateable/IronOre.prefab | 5 +- 4 files changed, 67 insertions(+), 48 deletions(-) diff --git a/Assets/Resources/Generateable/IronOre.prefab b/Assets/Resources/Generateable/IronOre.prefab index 26378f1..b8435e6 100644 --- a/Assets/Resources/Generateable/IronOre.prefab +++ b/Assets/Resources/Generateable/IronOre.prefab @@ -61,7 +61,6 @@ m_EditorClassIdentifier: isDropable: 1 dropable: {fileID: 7215668260114684477, guid: ead8eea59ce41c244814a994365e1129, type: 3} - dropAmount: 2 dropRange: {x: 1, y: 1} --- !u!114 &5943816882416256805 MonoBehaviour: @@ -79,6 +78,6 @@ weight: 7 clusterWeight: 30 minClusterSize: 8 - maxSpawnHeight: 250 - minSpawnHeight: 150 + maxSpawnHeight: 0 + minSpawnHeight: -50 sprite: {fileID: 21300000, guid: 83ee72e0f385a7641b729c9f5c288e74, type: 3} diff --git a/Assets/Resources/Generateable/IronOreHigh.prefab b/Assets/Resources/Generateable/IronOreHigh.prefab index 550a871..b7a5c4a 100644 --- a/Assets/Resources/Generateable/IronOreHigh.prefab +++ b/Assets/Resources/Generateable/IronOreHigh.prefab @@ -78,6 +78,6 @@ weight: 8 clusterWeight: 25 minClusterSize: 4 - maxSpawnHeight: 200 - minSpawnHeight: 100 + maxSpawnHeight: -50 + minSpawnHeight: -100 sprite: {fileID: 21300000, guid: f2e947bf683bb8e419d65be7f14b0679, type: 3} diff --git a/Assets/Scenes/GameplayScene.unity b/Assets/Scenes/GameplayScene.unity index 7b14c9e..564f44c 100644 --- a/Assets/Scenes/GameplayScene.unity +++ b/Assets/Scenes/GameplayScene.unity @@ -697,7 +697,7 @@ m_GameObject: {fileID: 519420028} serializedVersion: 2 m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 62, y: -22.89, z: -10} + m_LocalPosition: {x: 0, y: 0, z: -10} m_LocalScale: {x: 1, y: 1, z: 1} m_ConstrainProportionsScale: 0 m_Children: [] @@ -4197,7 +4197,7 @@ m_GameObject: {fileID: 1624236510} serializedVersion: 2 m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 62, y: -22.89, z: -10} + m_LocalPosition: {x: 0, y: 0, z: -10} m_LocalScale: {x: 1, y: 1, z: 1} m_ConstrainProportionsScale: 0 m_Children: @@ -4882,8 +4882,6 @@ m_EditorClassIdentifier: forestRuleTile: {fileID: 11400000, guid: 3999614e192b37546a6b710bf5ceb30c, type: 2} borderTile: {fileID: 11400000, guid: dcef846474e534b45ab3b175559c19a2, type: 2} - generateables: - - {fileID: 5943816882416256805, guid: 858e9987645c29748a5b0990923da82f, type: 3} --- !u!1 &1955008394 GameObject: m_ObjectHideFlags: 0 @@ -5754,11 +5752,11 @@ objectReference: {fileID: 0} - target: {fileID: 2368348636056148999, guid: c220ec455fce341408d66d880b464cad, type: 3} propertyPath: m_LocalPosition.x - value: 62 + value: 0 objectReference: {fileID: 0} - target: {fileID: 2368348636056148999, guid: c220ec455fce341408d66d880b464cad, type: 3} propertyPath: m_LocalPosition.y - value: -22.89 + value: 0 objectReference: {fileID: 0} - target: {fileID: 2368348636056148999, guid: c220ec455fce341408d66d880b464cad, type: 3} propertyPath: m_LocalPosition.z diff --git a/Assets/Scripts/GenerateTileMap.cs b/Assets/Scripts/GenerateTileMap.cs index 9402602..3ad8390 100644 --- a/Assets/Scripts/GenerateTileMap.cs +++ b/Assets/Scripts/GenerateTileMap.cs @@ -34,15 +34,15 @@ { public int? seed; public static int maxWidth = 256; - public static int maxHeight = 384; - public static int maxGroundHeight = 256; + public static int maxDepth = 384; + public static int groundDepth = 256; private float scale; private float offsetX; private float offsetY; Tilemap tilemap; public CustomRuleTile forestRuleTile; public TileBase borderTile; - public List<Generateable> generateables; + private List<Generateable> generateables; //public List<TileBase> tiles; private void Awake() @@ -58,7 +58,8 @@ SetSettingsFromSeed(seed.Value); - transform.position = new Vector3((maxWidth / 2) * -1, (maxGroundHeight + 1) * -1, transform.position.z); + // Position adjusted to center horizontally, but align top at y=0 + transform.position = new Vector3((maxWidth / 2) * -1, -1, transform.position.z); LoadGenerateablesFromResources(); } @@ -120,12 +121,26 @@ public IEnumerator GenerateTiles(Action finishedCallback, List<Vector3Int> destroyedTiles) { // generate ground + yield return CreateGroundLayer(destroyedTiles); + + if (generateables != null) + { + yield return GenerateOreClusters(destroyedTiles); + } + + // generate borders + yield return GenerateBorders(); + finishedCallback(); + } + + private IEnumerator CreateGroundLayer(List<Vector3Int> destroyedTiles) + { for (int x = 1; x < maxWidth; x++) { - for (int y = 1; y < maxGroundHeight; y++) + for (int y = -1; y > -groundDepth; y--) { float xPerlin = ((float)x / maxWidth) * scale + offsetX; - float yPerlin = ((float)y / maxHeight) * scale + offsetY; + float yPerlin = ((float)Mathf.Abs(y) / maxDepth) * scale + offsetY; float perlinNoise = Mathf.PerlinNoise(xPerlin, yPerlin); if (perlinNoise <= 0.7f) @@ -145,66 +160,73 @@ yield return null; } } + } - if (generateables != null) + private IEnumerator GenerateOreClusters(List<Vector3Int> destroyedTiles) + { + foreach (Generateable generateable in generateables) { - foreach (Generateable generateable in generateables) + // Convert spawn heights to negative values if they aren't already + int maxY = -Mathf.Abs(generateable.maxSpawnHeight); + int minY = -Mathf.Abs(generateable.minSpawnHeight); + Debug.Log($"Generating {generateable.name} between Y: {minY} - {maxY}"); + for (int x = 0; x < maxWidth; x++) { - for (int x = 0; x < maxWidth; x++) + for (int y = maxY; y > minY; y--) { - for (int y = generateable.minSpawnHeight; y < generateable.maxSpawnHeight; y++) - { - float xPerlin = ((float)x / maxWidth) * (float)generateable.clusterWeight + offsetX; - float yPerlin = ((float)y / maxHeight) * (float)generateable.clusterWeight + offsetY; - float perlinNoise = Mathf.PerlinNoise(xPerlin, yPerlin); + float xPerlin = ((float)x / maxWidth) * (float)generateable.clusterWeight + offsetX; + float yPerlin = ((float)Mathf.Abs(y) / maxDepth) * (float)generateable.clusterWeight + offsetY; + float perlinNoise = Mathf.PerlinNoise(xPerlin, yPerlin); - if (perlinNoise <= (1f / (float)generateable.weight)) + if (perlinNoise <= (1f / (float)generateable.weight)) + { + Vector3Int tileSpawnCoord = new Vector3Int(x, y); + if (!destroyedTiles.Contains(tileSpawnCoord) && tilemap.HasTile(tileSpawnCoord)) { - Vector3Int tileSpawnCoord = new Vector3Int(x, y); - if (!destroyedTiles.Contains(tileSpawnCoord) && tilemap.HasTile(tileSpawnCoord)) + // Check potential cluster size before placing + int clusterSize = CountPotentialClusterSize(x, y, generateable.weight, generateable.clusterWeight); + if (clusterSize >= generateable.minClusterSize) { - // Check potential cluster size before placing - int clusterSize = CountPotentialClusterSize(x, y, generateable.weight, generateable.clusterWeight); - if (clusterSize >= generateable.minClusterSize) - { - tilemap.SetTile(tileSpawnCoord, generateable.tile); - } - //tilemap.SetTile(tileSpawnCoord, generateable.tile); + tilemap.SetTile(tileSpawnCoord, generateable.tile); } + //tilemap.SetTile(tileSpawnCoord, generateable.tile); } - } - // Update UI every 8 lines - if ((x % 8) == 0) - { - yield return null; - } + } + + // Update UI every 8 lines + if ((x % 8) == 0) + { + yield return null; } } } + } - // generate borders + private IEnumerator GenerateBorders() + { + // Vertical borders (going up from underground to sky) for (int x = 0; x <= maxWidth; x += maxWidth) { - for (int y = 0; y <= maxHeight; y++) + for (int y = -groundDepth; y <= maxDepth - groundDepth; y++) { tilemap.SetTile(new Vector3Int(x, y), borderTile); } - } yield return null; - for (int y = 0; y <= maxHeight; y += maxHeight) + + // Horizontal borders (at bottom and sky level) + for (int y = -groundDepth; y <= maxDepth - groundDepth; y += maxDepth) { for (int x = 1; x <= maxWidth; x++) { tilemap.SetTile(new Vector3Int(x, y), borderTile); } - } yield return null; - finishedCallback(); } + private int CountPotentialClusterSize(int startX, int startY, int weight, int clusterWeight) { int size = 0; @@ -230,7 +252,7 @@ if (checked_positions.Contains(neighbor)) continue; float xPerlin = ((float)neighbor.x / maxWidth) * clusterWeight + offsetX; - float yPerlin = ((float)neighbor.y / maxHeight) * clusterWeight + offsetY; + float yPerlin = ((float)Mathf.Abs(neighbor.y) / maxDepth) * clusterWeight + offsetY; float perlinNoise = Mathf.PerlinNoise(xPerlin, yPerlin); if (perlinNoise <= (1f / (float)weight)) -- Gitblit v1.9.3