Dev Improvements (#4)
* Fixed dependency * Updates to NeoDictionary * Changes to NeoDictionary * Started working on a Git implementation to integrate into Game Engines in the future * Added commit functionality to the git library * New changes * Added select for NeoDictionary.cs * Fixed issue with previous new method * Added a Benchmarking Tool to be used mostly in game engines * Added IndexOf to NeoDictionary.cs * Added new method for BenchmarkUtility.cs * added an instacedobject class * Added a new shuffle method for lists * fixed return type * Added new Changelog generator * Added new Game logic library to assist with game projects * Added Web Project * Added Nuget package configs * Add workflow for publishing game library NuGet package * Add README for OmegaLeo's Helper Library * Updated Website to reflect all libraries * Fixed missing library in Changelog * Added Contributing and Code of Conduct
This commit was merged in pull request #4.
This commit is contained in:
@@ -0,0 +1,26 @@
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using NetFlow.DocumentationHelper.Library.Attributes;
|
||||
using OmegaLeo.HelperLib.Game.Models;
|
||||
|
||||
namespace OmegaLeo.HelperLib.Game.Utilities
|
||||
{
|
||||
public static class WeightedPicker
|
||||
{
|
||||
[Documentation("WeightedPicker.Pick", "Picks a random item from a dictionary of items with associated weights.")]
|
||||
public static T Pick<T>(RandomNumberGenerator rng, Dictionary<T, float> weights)
|
||||
{
|
||||
float total = weights.Values.Sum();
|
||||
float roll = rng.Range(0f, total);
|
||||
|
||||
foreach (var pair in weights)
|
||||
{
|
||||
roll -= pair.Value;
|
||||
if (roll <= 0)
|
||||
return pair.Key;
|
||||
}
|
||||
|
||||
return weights.Keys.Last(); // fallback
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user