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;
|
}
|
}
|