PKHeX/PKHeX.Core/Legality/Enums/EncounterTime.cs
Kurt c301ce88ab Update Random to be a bit more thread safe
Random isn't thread safe; users of PKHeX.Core.dll might run multithreaded operations (see PKSM + ALM), so we need to have a thread-specific RNG available.

Thread Local get; to improve performance, save the random object locally whenever it is used more than once in the method.

https://docs.microsoft.com/en-us/dotnet/api/system.threading.threadlocal-1?redirectedfrom=MSDN&view=netframework-4.8
https://stackoverflow.com/questions/18333885/threadstatic-v-s-threadlocalt-is-generic-better-than-attribute/18337158#18337158
2020-01-25 21:49:52 -08:00

32 lines
No EOL
795 B
C#

using System;
namespace PKHeX.Core
{
/// <summary>
/// Generation 2 Time of Encounter enum
/// </summary>
[Flags]
internal enum EncounterTime
{
Any = 0,
Morning = 1 << 1,
Day = 1 << 2,
Night = 1 << 3,
}
internal static class EncounterTimeExtension
{
internal static bool Contains(this EncounterTime t1, int t2) => t1 == EncounterTime.Any || (t1 & (EncounterTime)(1 << t2)) != 0;
internal static int RandomValidTime(this EncounterTime t1)
{
var rnd = Util.Rand;
int val = rnd.Next(1, 4);
if (t1 == EncounterTime.Any)
return val;
while (!t1.Contains(val))
val = rnd.Next(1, 4);
return val;
}
}
}