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.10.0