diff --git a/Source/MonoGame.Extended.Particles/ColorExtensions.cs b/Source/MonoGame.Extended.Particles/ColorExtensions.cs deleted file mode 100644 index 1d4b4d65..00000000 --- a/Source/MonoGame.Extended.Particles/ColorExtensions.cs +++ /dev/null @@ -1,72 +0,0 @@ -using System; -using Microsoft.Xna.Framework; - -namespace MonoGame.Extended.Particles -{ - public static class ColorExtensions - { - public static Color ToRgb(this HslColor c) - { - var h = c.H; - var s = c.S; - var l = c.L; - - if (s == 0f) - return new Color(l, l, l); - - h = h/360f; - var max = l < 0.5f ? l*(1 + s) : l + s - l*s; - var min = 2f*l - max; - - return new Color( - ComponentFromHue(min, max, h + 1f/3f), - ComponentFromHue(min, max, h), - ComponentFromHue(min, max, h - 1f/3f)); - } - - private static float ComponentFromHue(float m1, float m2, float h) - { - h = (h + 1f)%1f; - if (h*6f < 1) - return m1 + (m2 - m1)*6f*h; - if (h*2 < 1) - return m2; - if (h*3 < 2) - return m1 + (m2 - m1)*(2f/3f - h)*6f; - return m1; - } - - public static HslColor ToHsl(this Color c) - { - var r = c.R/255f; - var b = c.B/255f; - var g = c.G/255f; - - var max = Math.Max(Math.Max(r, g), b); - var min = Math.Min(Math.Min(r, g), b); - var chroma = max - min; - var sum = max + min; - - var l = sum*0.5f; - - if (chroma == 0) - return new HslColor(0f, 0f, l); - - float h; - - if (r == max) - h = (60*(g - b)/chroma + 360)%360; - else - { - if (g == max) - h = 60*(b - r)/chroma + 120f; - else - h = 60*(r - g)/chroma + 240f; - } - - var s = l <= 0.5f ? chroma/sum : chroma/(2f - sum); - - return new HslColor(h, s, l); - } - } -} \ No newline at end of file diff --git a/Source/MonoGame.Extended.Particles/FastRandomExtensions.cs b/Source/MonoGame.Extended.Particles/FastRandomExtensions.cs index f5e8ef71..66c99e7e 100644 --- a/Source/MonoGame.Extended.Particles/FastRandomExtensions.cs +++ b/Source/MonoGame.Extended.Particles/FastRandomExtensions.cs @@ -1,4 +1,6 @@ -namespace MonoGame.Extended.Particles +using MonoGame.Extended; + +namespace MonoGame.Extended.Particles { public static class FastRandomExtensions { diff --git a/Source/MonoGame.Extended.Particles/Modifiers/Interpolators/ColorInterpolator.cs b/Source/MonoGame.Extended.Particles/Modifiers/Interpolators/ColorInterpolator.cs index 76821508..32492b9a 100644 --- a/Source/MonoGame.Extended.Particles/Modifiers/Interpolators/ColorInterpolator.cs +++ b/Source/MonoGame.Extended.Particles/Modifiers/Interpolators/ColorInterpolator.cs @@ -1,4 +1,5 @@ using System; +using MonoGame.Extended; namespace MonoGame.Extended.Particles.Modifiers.Interpolators { diff --git a/Source/MonoGame.Extended.Particles/Modifiers/Interpolators/HueInterpolator.cs b/Source/MonoGame.Extended.Particles/Modifiers/Interpolators/HueInterpolator.cs index 49721622..b4706dd4 100644 --- a/Source/MonoGame.Extended.Particles/Modifiers/Interpolators/HueInterpolator.cs +++ b/Source/MonoGame.Extended.Particles/Modifiers/Interpolators/HueInterpolator.cs @@ -1,4 +1,6 @@ -namespace MonoGame.Extended.Particles.Modifiers.Interpolators +using MonoGame.Extended; + +namespace MonoGame.Extended.Particles.Modifiers.Interpolators { public class HueInterpolator : IInterpolator { diff --git a/Source/MonoGame.Extended.Particles/Modifiers/VelocityColorModifier.cs b/Source/MonoGame.Extended.Particles/Modifiers/VelocityColorModifier.cs index 295da5e6..d85277d6 100644 --- a/Source/MonoGame.Extended.Particles/Modifiers/VelocityColorModifier.cs +++ b/Source/MonoGame.Extended.Particles/Modifiers/VelocityColorModifier.cs @@ -1,4 +1,5 @@ using System; +using MonoGame.Extended; namespace MonoGame.Extended.Particles.Modifiers { diff --git a/Source/MonoGame.Extended.Particles/MonoGame.Extended.Particles.csproj b/Source/MonoGame.Extended.Particles/MonoGame.Extended.Particles.csproj index 92dc981b..e2760329 100644 --- a/Source/MonoGame.Extended.Particles/MonoGame.Extended.Particles.csproj +++ b/Source/MonoGame.Extended.Particles/MonoGame.Extended.Particles.csproj @@ -43,9 +43,7 @@ - - @@ -82,7 +80,6 @@ - diff --git a/Source/MonoGame.Extended.Particles/Particle.cs b/Source/MonoGame.Extended.Particles/Particle.cs index d55303d5..042d8cef 100644 --- a/Source/MonoGame.Extended.Particles/Particle.cs +++ b/Source/MonoGame.Extended.Particles/Particle.cs @@ -1,5 +1,6 @@ using System.Runtime.InteropServices; using Microsoft.Xna.Framework; +using MonoGame.Extended; namespace MonoGame.Extended.Particles { diff --git a/Source/MonoGame.Extended.Particles/ParticleReleaseParameters.cs b/Source/MonoGame.Extended.Particles/ParticleReleaseParameters.cs index 31c98c4b..8350f742 100644 --- a/Source/MonoGame.Extended.Particles/ParticleReleaseParameters.cs +++ b/Source/MonoGame.Extended.Particles/ParticleReleaseParameters.cs @@ -1,4 +1,5 @@ using Microsoft.Xna.Framework; +using MonoGame.Extended; namespace MonoGame.Extended.Particles { diff --git a/Source/MonoGame.Extended/ColorExtensions.cs b/Source/MonoGame.Extended/ColorExtensions.cs index 794665b5..452ad37f 100644 --- a/Source/MonoGame.Extended/ColorExtensions.cs +++ b/Source/MonoGame.Extended/ColorExtensions.cs @@ -1,4 +1,5 @@ -using System.Globalization; +using System; +using System.Globalization; using Microsoft.Xna.Framework; namespace MonoGame.Extended @@ -16,5 +17,69 @@ namespace MonoGame.Extended var a = value.Length > 7 ? int.Parse(value.Substring(7, 2), NumberStyles.HexNumber) : 255; return new Color(r, g, b, a); } - } + + public static Color ToRgb(this HslColor c) + { + var h = c.H; + var s = c.S; + var l = c.L; + + if (s == 0f) + return new Color(l, l, l); + + h = h/360f; + var max = l < 0.5f ? l*(1 + s) : l + s - l*s; + var min = 2f*l - max; + + return new Color( + ComponentFromHue(min, max, h + 1f/3f), + ComponentFromHue(min, max, h), + ComponentFromHue(min, max, h - 1f/3f)); + } + + private static float ComponentFromHue(float m1, float m2, float h) + { + h = (h + 1f)%1f; + if (h*6f < 1) + return m1 + (m2 - m1)*6f*h; + if (h*2 < 1) + return m2; + if (h*3 < 2) + return m1 + (m2 - m1)*(2f/3f - h)*6f; + return m1; + } + + public static HslColor ToHsl(this Color c) + { + var r = c.R/255f; + var b = c.B/255f; + var g = c.G/255f; + + var max = Math.Max(Math.Max(r, g), b); + var min = Math.Min(Math.Min(r, g), b); + var chroma = max - min; + var sum = max + min; + + var l = sum*0.5f; + + if (chroma == 0) + return new HslColor(0f, 0f, l); + + float h; + + if (r == max) + h = (60*(g - b)/chroma + 360)%360; + else + { + if (g == max) + h = 60*(b - r)/chroma + 120f; + else + h = 60*(r - g)/chroma + 240f; + } + + var s = l <= 0.5f ? chroma/sum : chroma/(2f - sum); + + return new HslColor(h, s, l); + } + } } diff --git a/Source/MonoGame.Extended.Particles/HslColor.cs b/Source/MonoGame.Extended/HslColor.cs similarity index 99% rename from Source/MonoGame.Extended.Particles/HslColor.cs rename to Source/MonoGame.Extended/HslColor.cs index f21b335e..7d16a57a 100644 --- a/Source/MonoGame.Extended.Particles/HslColor.cs +++ b/Source/MonoGame.Extended/HslColor.cs @@ -2,7 +2,7 @@ using System.Globalization; using Microsoft.Xna.Framework; -namespace MonoGame.Extended.Particles +namespace MonoGame.Extended { /// /// An immutable data structure representing a 24bit color composed of separate hue, saturation and lightness channels. diff --git a/Source/MonoGame.Extended/MonoGame.Extended.csproj b/Source/MonoGame.Extended/MonoGame.Extended.csproj index f0b4d031..8a1c13ec 100644 --- a/Source/MonoGame.Extended/MonoGame.Extended.csproj +++ b/Source/MonoGame.Extended/MonoGame.Extended.csproj @@ -40,9 +40,12 @@ + + + diff --git a/Source/MonoGame.Extended.Particles/Serialization/HslColorJsonConverter.cs b/Source/MonoGame.Extended/Serialization/HslColorJsonConverter.cs similarity index 100% rename from Source/MonoGame.Extended.Particles/Serialization/HslColorJsonConverter.cs rename to Source/MonoGame.Extended/Serialization/HslColorJsonConverter.cs