示例#1
0
 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");
         }
     }
 }
示例#2
0
 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)));
     }
 }
示例#3
0
        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);
        }
示例#4
0
        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);
        }
示例#5
0
        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
                }
            }
        }
示例#6
0
        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));
        }
示例#7
0
        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
        }
示例#8
0
 /// <summary>
 /// Random float between 0 and 1.
 /// </summary>
 public static float Value(RandSync sync = RandSync.Unsynced)
 {
     return(Range(0f, 1f, sync));
 }
示例#9
0
 public static int Int(int max, RandSync sync = RandSync.Unsynced)
 {
     CheckRandThreadSafety(sync);
     return((sync == RandSync.Unsynced ? localRandom : (syncedRandom[(int)sync])).Next(max));
 }
示例#10
0
 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);
 }
示例#11
0
 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);
 }
示例#12
0
 public static Random GetRNG(RandSync randSync)
 {
     return(randSync == RandSync.Unsynced ? localRandom : syncedRandom[(int)randSync]);
 }
示例#13
0
文件: Rand.cs 项目: yweber/Barotrauma
 public static int Int(int max, RandSync sync = RandSync.Unsynced)
 {
     return((sync == RandSync.Unsynced ? localRandom : (syncedRandom[(int)sync])).Next(max));
 }
示例#14
0
文件: Rand.cs 项目: yweber/Barotrauma
 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);
 }
示例#15
0
 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);
 }