From 318d2ec9f6a64d45ef44ae5dcfa6de04d2e710fe Mon Sep 17 00:00:00 2001
From: miepzerino <o.skotnik@gmail.com>
Date: Wed, 27 Dec 2023 20:21:18 +0000
Subject: [PATCH] Fix stop rotate while drilling
---
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,10 +1,34 @@
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;
@@ -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.10.0