// Project: XnaGraphicEngine, File: RandomHelper.cs
// Namespace: XnaGraphicEngine.Helpers, Class: RandomHelper
// Path: C:\code\XnaGraphicEngine\Helpers, Author: Abi
// Code lines: 113, Size of file: 3,24 KB
// Creation date: 07.09.2006 05:56
// Last modified: 16.10.2006 11:27
// Generated with Commenter by abi.exDream.com

#region Using directives
using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Graphics;
using System;
using System.Collections.Generic;
using System.Text;
#endregion

namespace XnaGraphicEngine.Helpers
{
	/// <summary>
	/// Random helper
	/// </summary>
	public class RandomHelper
	{
		#region Variables
		/// <summary>
		/// Global random generator
		/// </summary>
		public static Random globalRandomGenerator = GenerateNewRandomGenerator();
		#endregion

		#region Generate a new random generator
		/// <summary>
		/// Generate a new random generator with help of
		/// WindowsHelper.GetPerformanceCounter.
		/// Also used for all GetRandom methods here.
		/// </summary>
		/// <returns>Random</returns>
		public static Random GenerateNewRandomGenerator()
		{
			globalRandomGenerator =
				new Random((int)DateTime.Now.Ticks);
				//needs Interop: (int)WindowsHelper.GetPerformanceCounter());
			return globalRandomGenerator;
		} // GenerateNewRandomGenerator()
		#endregion

		#region Get random float and byte methods
		/// <summary>
		/// Get random int
		/// </summary>
		/// <param name="max">Maximum</param>
		/// <returns>Int</returns>
		public static int GetRandomInt(int max)
		{
			return globalRandomGenerator.Next(max);
		} // GetRandomInt(max)

		/// <summary>
		/// Get random float between min and max
		/// </summary>
		/// <param name="min">Min</param>
		/// <param name="max">Max</param>
		/// <returns>Float</returns>
		public static float GetRandomFloat(float min, float max)
		{
			return (float)globalRandomGenerator.NextDouble() * (max - min) + min;
		} // GetRandomFloat(min, max)

		/// <summary>
		/// Get random byte between min and max
		/// </summary>
		/// <param name="min">Min</param>
		/// <param name="max">Max</param>
		/// <returns>Byte</returns>
		public static byte GetRandomByte(byte min, byte max)
		{
			return (byte)(globalRandomGenerator.Next(min, max));
		} // GetRandomByte(min, max)

		/// <summary>
		/// Get random Vector2
		/// </summary>
		/// <param name="min">Minimum for each component</param>
		/// <param name="max">Maximum for each component</param>
		/// <returns>Vector2</returns>
		public static Vector2 GetRandomVector2(float min, float max)
		{
			return new Vector2(
				GetRandomFloat(min, max),
				GetRandomFloat(min, max));
		} // GetRandomVector2(min, max)

		/// <summary>
		/// Get random Vector3
		/// </summary>
		/// <param name="min">Minimum for each component</param>
		/// <param name="max">Maximum for each component</param>
		/// <returns>Vector3</returns>
		public static Vector3 GetRandomVector3(float min, float max)
		{
			return new Vector3(
				GetRandomFloat(min, max),
				GetRandomFloat(min, max),
				GetRandomFloat(min, max));
		} // GetRandomVector3(min, max)

		/// <summary>
		/// Get random color
		/// </summary>
		/// <returns>Color</returns>
		public static Color GetRandomColor()
		{
			return new Color(new Vector3(
				GetRandomFloat(0.25f, 1.0f),
				GetRandomFloat(0.25f, 1.0f),
				GetRandomFloat(0.25f, 1.0f)));
		} // GetRandomColor()
		#endregion
	} // class RandomHelper
} // namespace XnaGraphicEngine.Helpers