Просмотр исходного кода

[New Feature/Core] New RGB Matrix Animation "Starlight Smooth" (#25203)

art-was-here 1 год назад
Родитель
Сommit
7f42a5bc03

+ 2 - 0
docs/features/rgb_matrix.md

@@ -150,6 +150,7 @@ enum rgb_matrix_effects {
     RGB_MATRIX_SOLID_SPLASH,        // Hue & value pulse away from a single key hit then fades value out
     RGB_MATRIX_SOLID_MULTISPLASH,   // Hue & value pulse away from multiple key hits then fades value out
     RGB_MATRIX_STARLIGHT,           // LEDs turn on and off at random at varying brightness, maintaining user set color
+    RGB_MATRIX_STARLIGHT_SMOOTH,    // LEDs slowly increase and decrease in brightness randomly
     RGB_MATRIX_STARLIGHT_DUAL_HUE,  // LEDs turn on and off at random at varying brightness, modifies user set hue by +- 30
     RGB_MATRIX_STARLIGHT_DUAL_SAT,  // LEDs turn on and off at random at varying brightness, modifies user set saturation by +- 30
     RGB_MATRIX_RIVERFLOW,           // Modification to breathing animation, offset's animation depending on key location to simulate a river flowing
@@ -193,6 +194,7 @@ You can enable a single effect by defining `ENABLE_[EFFECT_NAME]` in your `confi
 |`#define ENABLE_RGB_MATRIX_PIXEL_FLOW`                |Enables `RGB_MATRIX_PIXEL_FLOW`               |
 |`#define ENABLE_RGB_MATRIX_PIXEL_RAIN`                |Enables `RGB_MATRIX_PIXEL_RAIN`               |
 |`#define ENABLE_RGB_MATRIX_STARLIGHT`                 |Enables `RGB_MATRIX_STARLIGHT`                |
+|`#define ENABLE_RGB_MATRIX_STARLIGHT_SMOOTH`          |Enables `RGB_MATRIX_STARLIGHT_SMOOTH`         |
 |`#define ENABLE_RGB_MATRIX_STARLIGHT_DUAL_HUE`        |Enables `RGB_MATRIX_STARLIGHT_DUAL_HUE`       |
 |`#define ENABLE_RGB_MATRIX_STARLIGHT_DUAL_SAT`        |Enables `RGB_MATRIX_STARLIGHT_DUAL_SAT`       |
 |`#define ENABLE_RGB_MATRIX_RIVERFLOW`                 |Enables `RGB_MATRIX_RIVERFLOW`                |

+ 1 - 0
quantum/rgb_matrix/animations/rgb_matrix_effects.inc

@@ -39,6 +39,7 @@
 #include "solid_reactive_nexus.h"
 #include "splash_anim.h"
 #include "solid_splash_anim.h"
+#include "starlight_smooth_anim.h"
 #include "starlight_anim.h"
 #include "starlight_dual_sat_anim.h"
 #include "starlight_dual_hue_anim.h"

+ 26 - 0
quantum/rgb_matrix/animations/starlight_smooth_anim.h

@@ -0,0 +1,26 @@
+// Copyright 2022 @art-was-here
+// SPDX-License-Identifier: GPL-2.0+
+
+#ifdef ENABLE_RGB_MATRIX_STARLIGHT_SMOOTH
+RGB_MATRIX_EFFECT(STARLIGHT_SMOOTH)
+#    ifdef RGB_MATRIX_CUSTOM_EFFECT_IMPLS
+
+static uint8_t phase_offsets[RGB_MATRIX_LED_COUNT];
+
+hsv_t STARLIGHT_SMOOTH_math(hsv_t hsv, uint8_t i, uint8_t time) {
+    if (phase_offsets[i] == 0) {
+        phase_offsets[i] = rand() % 255;
+    }
+    hsv.v = scale8(abs8(sin8((time + phase_offsets[i]) / 2) - 128) * 2, hsv.v);
+    return hsv;
+}
+
+bool STARLIGHT_SMOOTH(effect_params_t* params) {
+    if (params->init) {
+        memset(phase_offsets, 0, sizeof(phase_offsets));
+    }
+    return effect_runner_i(params, &STARLIGHT_SMOOTH_math);
+}
+
+#    endif // RGB_MATRIX_CUSTOM_EFFECT_IMPLS
+#endif     // ENABLE_RGB_MATRIX_STARLIGHT_SMOOTH