diff --git a/keywords.txt b/keywords.txt index f65ced1..fc8d795 100644 --- a/keywords.txt +++ b/keywords.txt @@ -146,24 +146,31 @@ setTimeScale KEYWORD2 QuadraticIn KEYWORD2 QuadraticOut KEYWORD2 QuadraticInOut KEYWORD2 +QuadraticCenter KEYWORD2 CubicIn KEYWORD2 CubicOut KEYWORD2 CubicInOut KEYWORD2 +CubicCenter KEYWORD2 QuarticIn KEYWORD2 QuarticOut KEYWORD2 QuarticInOut KEYWORD2 +QuarticCenter KEYWORD2 QuinticIn KEYWORD2 QuinticOut KEYWORD2 QuinticInOut KEYWORD2 +QuinticCenter KEYWORD2 SinusoidalIn KEYWORD2 SinusoidalOut KEYWORD2 SinusoidalInOut KEYWORD2 +SinusoidalCenter KEYWORD2 ExponentialIn KEYWORD2 ExponentialOut KEYWORD2 ExponentialInOut KEYWORD2 +ExponentialCenter KEYWORD2 CircularIn KEYWORD2 CircularOut KEYWORD2 CircularInOut KEYWORD2 +CircularCenter KEYWORD2 Gamma KEYWORD2 Map KEYWORD2 MapProbe KEYWORD2 diff --git a/library.json b/library.json index 8463828..d6db833 100644 --- a/library.json +++ b/library.json @@ -8,7 +8,7 @@ "type": "git", "url": "https://github.com/Makuna/NeoPixelBus" }, - "version": "2.3.4", + "version": "2.3.5", "frameworks": "arduino", "platforms": "*" } diff --git a/library.properties b/library.properties index 42121c2..8bcb937 100644 --- a/library.properties +++ b/library.properties @@ -1,5 +1,5 @@ name=NeoPixelBus by Makuna -version=2.3.4 +version=2.3.5 author=Michael C. Miller (makuna@live.com) maintainer=Michael C. Miller (makuna@live.com) sentence=A library that makes controlling NeoPixels (WS2811, WS2812, WS2813 & SK6812) and DotStars (APA102) easy. diff --git a/src/internal/NeoEase.h b/src/internal/NeoEase.h index eaa5023..b7b5df9 100644 --- a/src/internal/NeoEase.h +++ b/src/internal/NeoEase.h @@ -71,6 +71,20 @@ public: } } + static float QuadraticCenter(float unitValue) + { + unitValue *= 2.0f; + if (unitValue < 1.0f) + { + return (-0.5f * (unitValue * unitValue - 2.0f)); + } + else + { + unitValue -= 1.0f; + return (0.5f * (unitValue * unitValue + 1.0f)); + } + } + static float CubicIn(float unitValue) { return (unitValue * unitValue * unitValue); @@ -96,6 +110,13 @@ public: } } + static float CubicCenter(float unitValue) + { + unitValue *= 2.0f; + unitValue -= 1.0f; + return (0.5f * (unitValue * unitValue * unitValue) + 1); + } + static float QuarticIn(float unitValue) { return (unitValue * unitValue * unitValue * unitValue); @@ -121,6 +142,20 @@ public: } } + static float QuarticCenter(float unitValue) + { + unitValue *= 2.0f; + unitValue -= 1.0f; + if (unitValue < 0.0f) + { + return (-0.5f * (unitValue * unitValue * unitValue * unitValue - 1.0f)); + } + else + { + return (0.5f * (unitValue * unitValue * unitValue * unitValue + 1.0f)); + } + } + static float QuinticIn(float unitValue) { return (unitValue * unitValue * unitValue * unitValue * unitValue); @@ -146,6 +181,13 @@ public: } } + static float QuinticCenter(float unitValue) + { + unitValue *= 2.0f; + unitValue -= 1.0f; + return (0.5f * (unitValue * unitValue * unitValue * unitValue * unitValue + 1.0f)); + } + static float SinusoidalIn(float unitValue) { return (-cos(unitValue * HALF_PI) + 1.0f); @@ -161,6 +203,19 @@ public: return -0.5 * (cos(PI * unitValue) - 1.0f); } + static float SinusoidalCenter(float unitValue) + { + if (unitValue < 0.5f) + { + return (0.5 * sin(PI * unitValue)); + } + else + { + return (-0.5 * (cos(PI * (unitValue-0.5f)) + 1.0f)); + } + + } + static float ExponentialIn(float unitValue) { return (pow(2, 10.0f * (unitValue - 1.0f))); @@ -185,6 +240,20 @@ public: } } + static float ExponentialCenter(float unitValue) + { + unitValue *= 2.0f; + if (unitValue < 1.0f) + { + return (0.5f * (-pow(2, -10.0f * unitValue) + 1.0f)); + } + else + { + unitValue -= 2.0f; + return (0.5f * (pow(2, 10.0f * unitValue) + 1.0f)); + } + } + static float CircularIn(float unitValue) { if (unitValue == 1.0f) @@ -217,6 +286,25 @@ public: } } + static float CircularCenter(float unitValue) + { + unitValue *= 2.0f; + unitValue -= 1.0f; + if (unitValue == 0.0f) + { + return 1.0f; + } + else if (unitValue < 0.0f) + { + return (0.5f * sqrt(1.0f - unitValue * unitValue)); + } + else + { + unitValue -= 2.0f; + return (-0.5f * (sqrt(1.0f - unitValue * unitValue) - 1.0f ) + 0.5f); + } + } + static float Gamma(float unitValue) { return pow(unitValue, 1.0f / 0.45f);