private static void CheckRandThreadSafety(RandSync sync) { if (ThreadId != 0 && sync == RandSync.Server) { if (System.Threading.Thread.CurrentThread.ManagedThreadId != ThreadId) { throw new Exception("Unauthorized multithreaded access to RandSync.Server"); } } }
public static Color Color(bool randomAlpha = false, RandSync sync = RandSync.Unsynced) { if (randomAlpha) { return(new Color(Value(sync), Value(sync), Value(sync), Value(sync))); } else { return(new Color(Value(sync), Value(sync), Value(sync))); } }
public static Vector2 Vector(float length, RandSync sync = RandSync.Unsynced) { Vector2 randomVector = new Vector2(Range(-1.0f, 1.0f, sync), Range(-1.0f, 1.0f, sync)); if (randomVector.LengthSquared() < 0.001f) { return(new Vector2(0.0f, length)); } return(Vector2.Normalize(randomVector) * length); }
public static Vector2 Vector(float length, RandSync sync = RandSync.Unsynced) { Assert(sync); Vector2 randomVector = new Vector2(Range(-1.0f, 1.0f, sync), Range(-1.0f, 1.0f, sync)); if (randomVector == Vector2.Zero) { return(new Vector2(0.0f, length)); } return(Vector2.Normalize(randomVector) * length); }
private static void CheckRandThreadSafety(RandSync sync) { if (ThreadId != 0 && sync == RandSync.Server) { if (System.Threading.Thread.CurrentThread.ManagedThreadId != ThreadId) { #if DEBUG throw new Exception("Unauthorized multithreaded access to RandSync.Server"); #else DebugConsole.ThrowError("Unauthorized multithreaded access to RandSync.Server\n" + Environment.StackTrace); #endif } } }
public static DoubleVector2 Vector(double length, RandSync sync = RandSync.Unsynced) { double x = Range(-1.0, 1.0, sync); double y = Range(-1.0, 1.0, sync); double len = Math.Sqrt(x * x + y * y); if (len < 0.00001) { return(new DoubleVector2(0.0, length)); } return(new DoubleVector2(x / len * length, y / len * length)); }
private static void Assert(RandSync sync) { //TODO: REMOVE AFTER FINDING ALL WRONG RNG USAGE #if false string trace = Environment.StackTrace.ToString(); if (sync != RandSync.Server) { return; } if (trace.ToLower().Contains("barotraumaclient\\source")) { DebugConsole.NewMessage("WARNING: Client code using RandSync.Server\n" + trace, Color.Yellow); } #endif }
/// <summary> /// Random float between 0 and 1. /// </summary> public static float Value(RandSync sync = RandSync.Unsynced) { return(Range(0f, 1f, sync)); }
public static int Int(int max, RandSync sync = RandSync.Unsynced) { CheckRandThreadSafety(sync); return((sync == RandSync.Unsynced ? localRandom : (syncedRandom[(int)sync])).Next(max)); }
public static int Range(int minimum, int maximum, RandSync sync = RandSync.Unsynced) { CheckRandThreadSafety(sync); return((sync == RandSync.Unsynced ? localRandom : (syncedRandom[(int)sync])).Next(maximum - minimum) + minimum); }
public static double Range(double minimum, double maximum, RandSync sync = RandSync.Unsynced) { CheckRandThreadSafety(sync); return((sync == RandSync.Unsynced ? localRandom : (syncedRandom[(int)sync])).NextDouble() * (maximum - minimum) + minimum); }
public static Random GetRNG(RandSync randSync) { return(randSync == RandSync.Unsynced ? localRandom : syncedRandom[(int)randSync]); }
public static int Int(int max, RandSync sync = RandSync.Unsynced) { return((sync == RandSync.Unsynced ? localRandom : (syncedRandom[(int)sync])).Next(max)); }
public static float Range(float minimum, float maximum, RandSync sync = RandSync.Unsynced) { return((float)(sync == RandSync.Unsynced ? localRandom : (syncedRandom[(int)sync])).NextDouble() * (maximum - minimum) + minimum); }
public static int Range(int minimum, int maximum, RandSync sync = RandSync.Unsynced) { Assert(sync); return((sync == RandSync.Unsynced ? localRandom : (syncedRandom[(int)sync])).Next(maximum - minimum) + minimum); }