aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorフィルターペーパー <[email protected]>2024-10-28 14:20:14 +0800
committerGitHub <[email protected]>2024-10-27 23:20:14 -0700
commitdd7287bf4ef945117545acd7e0cc064aed75a936 (patch)
treeb226b08892b7a8de51b3190f1bd775916ea6d7ff
parentd9fedce9b966c2249eaad983ab62480f182d1a5a (diff)
downloadqmk_firmware-dd7287bf4ef945117545acd7e0cc064aed75a936.tar.gz
qmk_firmware-dd7287bf4ef945117545acd7e0cc064aed75a936.zip
Update Jellybean Raindrops to respect LED range limits (#24534)
-rw-r--r--quantum/rgb_matrix/animations/jellybean_raindrops_anim.h24
1 files changed, 16 insertions, 8 deletions
diff --git a/quantum/rgb_matrix/animations/jellybean_raindrops_anim.h b/quantum/rgb_matrix/animations/jellybean_raindrops_anim.h
index 2b20b0706b..5790b27367 100644
--- a/quantum/rgb_matrix/animations/jellybean_raindrops_anim.h
+++ b/quantum/rgb_matrix/animations/jellybean_raindrops_anim.h
@@ -2,25 +2,33 @@
RGB_MATRIX_EFFECT(JELLYBEAN_RAINDROPS)
# ifdef RGB_MATRIX_CUSTOM_EFFECT_IMPLS
-static void jellybean_raindrops_set_color(int i, effect_params_t* params) {
+static void jellybean_raindrops_set_color(uint8_t i, effect_params_t* params) {
if (!HAS_ANY_FLAGS(g_led_config.flags[i], params->flags)) return;
+
hsv_t hsv = {random8(), random8_min_max(127, 255), rgb_matrix_config.hsv.v};
rgb_t rgb = rgb_matrix_hsv_to_rgb(hsv);
rgb_matrix_set_color(i, rgb.r, rgb.g, rgb.b);
}
bool JELLYBEAN_RAINDROPS(effect_params_t* params) {
+ static uint16_t index = RGB_MATRIX_LED_COUNT + 1;
+
+ // Periodic trigger for LED change
+ if ((params->iter == 0) && (scale16by8(g_rgb_timer, qadd8(rgb_matrix_config.speed, 16)) % 5 == 0)) {
+ index = random8_max(RGB_MATRIX_LED_COUNT);
+ }
+
RGB_MATRIX_USE_LIMITS(led_min, led_max);
- if (!params->init) {
- // Change one LED every tick, make sure speed is not 0
- if (scale16by8(g_rgb_timer, qadd8(rgb_matrix_config.speed, 16)) % 5 == 0) {
- jellybean_raindrops_set_color(random8_max(RGB_MATRIX_LED_COUNT), params);
- }
- } else {
- for (int i = led_min; i < led_max; i++) {
+ if (params->init) {
+ for (uint8_t i = led_min; i < led_max; i++) {
jellybean_raindrops_set_color(i, params);
}
}
+ // Change LED once and set index out of range till next trigger
+ else if (led_min <= index && index < led_max) {
+ jellybean_raindrops_set_color(index, params);
+ index = RGB_MATRIX_LED_COUNT + 1;
+ }
return rgb_matrix_check_finished_leds(led_max);
}