From d4552adc9ec0998725e663c47114e6836061ad2c Mon Sep 17 00:00:00 2001 From: miepzerino <o.skotnik@gmail.com> Date: Wed, 02 Apr 2025 14:52:46 +0000 Subject: [PATCH] #35 reworked ore generation --- Assets/Scripts/Cache/GenerateableDatabase.cs | 96 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 96 insertions(+), 0 deletions(-) diff --git a/Assets/Scripts/Cache/GenerateableDatabase.cs b/Assets/Scripts/Cache/GenerateableDatabase.cs new file mode 100644 index 0000000..f556a80 --- /dev/null +++ b/Assets/Scripts/Cache/GenerateableDatabase.cs @@ -0,0 +1,96 @@ +using System.Collections.Generic; +using UnityEngine; + +public class GenerateableDatabase : MonoBehaviour +{ + public static GenerateableDatabase Instance { get; private set; } + private Dictionary<int, List<(int minClusterSize, int maxHeight, int minHeight, Vector2 dropRange)>> generateableDict + = new Dictionary<int, List<(int, int, int, Vector2 dropRange)>>(); + + private void Awake() + { + if (Instance == null) + { + Instance = this; + } + else + { + Destroy(gameObject); + } + } + + public void InitializeFromGenerateables(List<Generateable> generateables) + { + generateableDict.Clear(); + + foreach (Generateable generateable in generateables) + { + Dropable dropable = generateable.GetComponent<Dropable>(); + + if (dropable != null && dropable.dropable != null) + { + int itemId = dropable.dropable.itemId; + + if (!generateableDict.ContainsKey(itemId)) + { + generateableDict[itemId] = new List<(int, int, int, Vector2 dropRange)>(); + } + + generateableDict[itemId].Add(( + generateable.minClusterSize, + generateable.maxSpawnHeight, + generateable.minSpawnHeight, + dropable.dropRange + )); + } + } + + if (generateableDict.Count == 0) + { + Debug.LogWarning("No valid generateables found with dropable items"); + } + } + + public bool TryGetGenerateables(int itemId, + out List<(int minClusterSize, int maxHeight, int minHeight, Vector2 dropRange)> generateables) + { + if (generateableDict.TryGetValue(itemId, out generateables)) + { + return true; + } + + generateables = null; + return false; + } + + // Optional: Helper method to get ranges across all variants + public bool TryGetGenerateableRanges(int itemId, + out int minClusterSize, out int maxHeight, out int minHeight) + { + if (generateableDict.TryGetValue(itemId, out var variants)) + { + minClusterSize = int.MaxValue; + maxHeight = int.MinValue; + minHeight = int.MaxValue; + + foreach (var variant in variants) + { + minClusterSize = Mathf.Min(minClusterSize, variant.minClusterSize); + maxHeight = Mathf.Max(maxHeight, variant.maxHeight); + minHeight = Mathf.Min(minHeight, variant.minHeight); + } + + return true; + } + + minClusterSize = 0; + maxHeight = 0; + minHeight = 0; + return false; + } + + public IEnumerable<int> GetAllGenerateableIds() + { + return generateableDict.Keys; + } +} \ No newline at end of file -- Gitblit v1.9.3