예제 #1
0
파일: RulCol.cs 프로젝트: MStadlmeier/RUL
 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");
     }
 }
예제 #2
0
        /// <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));
        }
예제 #3
0
 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));
     }
 }