public static int? ChooseSpawn(NPCSpawnInfo spawnInfo)
{
IDictionary<int, float> pool = new Dictionary<int, float>();
pool[0] = 1f;
foreach (ModNPC npc in npcs)
{
float weight = npc.CanSpawn(spawnInfo);
if (weight > 0f)
{
pool[npc.npc.type] = weight;
}
}
foreach (var hook in HookEditSpawnPool)
{
hook(pool, spawnInfo);
}
float totalWeight = 0f;
foreach (int type in pool.Keys)
{
totalWeight += pool[type];
}
float choice = (float)Main.rand.NextDouble() * totalWeight;
foreach (int type in pool.Keys)
{
float weight = pool[type];
if (choice < weight)
{
return type;
}
choice -= weight;
}
return null;
}