41 lines
987 B
C#
41 lines
987 B
C#
using System.Collections.Generic;
|
|
using Godot;
|
|
|
|
public class ResourceDistributor
|
|
{
|
|
public static Dictionary<string, Texture2D> resources = ResourceLoader.LoadResourceSymbols();
|
|
public static Dictionary<string, float[]> weights = ResourceLoader.LoadResourceWeights();
|
|
|
|
public static string GetResource(int layer)
|
|
{
|
|
return ChooseWeighted(layer);
|
|
}
|
|
|
|
private static string ChooseWeighted(int layer)
|
|
{
|
|
float totalWeight = 0f;
|
|
float weightLerp;
|
|
|
|
foreach (string resource in resources.Keys)
|
|
{
|
|
weightLerp = Mathf.Lerp(weights[resource][0], weights[resource][1], layer);
|
|
totalWeight += weightLerp;
|
|
}
|
|
|
|
float r = (float)(GameData.rand.NextDouble() * totalWeight);
|
|
|
|
float cumulative = 0f;
|
|
|
|
foreach (string resource in resources.Keys)
|
|
{
|
|
weightLerp = Mathf.Lerp(weights[resource][0], weights[resource][1], layer);
|
|
cumulative += weightLerp;
|
|
|
|
if (r <= cumulative)
|
|
return resource;
|
|
}
|
|
|
|
return "stone";
|
|
}
|
|
}
|