private static Col RandomizeColor(Col baseColor, float maxRelativeVariance, bool monochrome = false) { if (maxRelativeVariance >= 0 && maxRelativeVariance <= 1) { //Monochrome colors should stay monochrome if (!monochrome) { float variance = Rul.RandFloat(maxRelativeVariance * GetVarianceFactor(baseColor.R)); int r = MathHelper.Clamp(baseColor.R + (int)(Rul.RandSign() * 255 * variance), 0, 255); variance = Rul.RandFloat(maxRelativeVariance * GetVarianceFactor(baseColor.G)); int g = MathHelper.Clamp(baseColor.G + (int)(Rul.RandSign() * 255 * variance), 0, 255); variance = Rul.RandFloat(maxRelativeVariance * GetVarianceFactor(baseColor.B)); int b = MathHelper.Clamp(baseColor.B + (int)(Rul.RandSign() * 255 * variance), 0, 255); return(new Col(r, g, b, baseColor.A)); } else { float variance = Rul.RandFloat(maxRelativeVariance * GetVarianceFactor(baseColor.R)); int newValue = MathHelper.Clamp(baseColor.R + (int)(Rul.RandSign() * 255 * variance), 0, 255); return(new Col(newValue, newValue, newValue, baseColor.A)); } } else { throw new ArgumentException("Value must be between 0 and 1"); } }
/// <summary> /// Returns a randomly rotated version of the given base vector /// </summary> /// <param name="baseVector">The vector that is used as a base for the new one</param> /// <param name="maxAngle">The greatest possible angle(in radians) between the base vector and the rotated random vector</param> public static Vector2 RandVector2(Vector2 baseVector, double maxAngle) { float angle = Rul.RandFloat((float)maxAngle % (float)(2F * Math.PI)) * Rul.RandSign(); double cos = Math.Cos(angle); double sin = Math.Sin(angle); float newX = (float)(baseVector.x * cos - baseVector.y * sin); float newY = (float)(baseVector.x * sin + baseVector.y * cos); return(new Vector2(newX, newY)); }
private static UnityEngine.Color RandomizeColor(UnityEngine.Color baseColor, float maxRelativeVariance, bool monochrome = false) { maxRelativeVariance = MathHelper.Clamp(maxRelativeVariance, 0, 1); //Monochrome colors should stay monochrome if (!monochrome) { float variance = Rul.RandFloat(maxRelativeVariance * GetVarianceFactor(baseColor.r)); float r = MathHelper.Clamp(baseColor.r + Rul.RandSign() * variance, 0, 1); variance = Rul.RandFloat(maxRelativeVariance * GetVarianceFactor(baseColor.g)); float g = MathHelper.Clamp(baseColor.g + Rul.RandSign() * variance, 0, 1); variance = Rul.RandFloat(maxRelativeVariance * GetVarianceFactor(baseColor.b)); float b = MathHelper.Clamp(baseColor.b + Rul.RandSign() * variance, 0, 1); return(new UnityEngine.Color(r, g, b, baseColor.a)); } else { float variance = Rul.RandFloat(maxRelativeVariance * GetVarianceFactor(baseColor.r)); float newValue = MathHelper.Clamp(baseColor.r + Rul.RandSign() * variance, 0, 1); return(new UnityEngine.Color(newValue, newValue, newValue, baseColor.a)); } }