diff options
| author | フィルターペーパー <76888457+filterpaper@users.noreply.github.com> | 2025-09-10 16:41:29 +0800 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2025-09-10 01:41:29 -0700 |
| commit | 633479ced5a70076cf6906f3ecf7d199928bdb55 (patch) | |
| tree | 692bb575382f4755888ff6db0ef0eff24b73f67d /quantum | |
| parent | a91de722467afc2a080c8c1a7a6f904f1f361c07 (diff) | |
Restructure Pixel Rain interval code (#25516)
Co-authored-by: Joel Challis <git@zvecr.com>
Diffstat (limited to 'quantum')
| -rw-r--r-- | quantum/rgb_matrix/animations/pixel_rain_anim.h | 25 |
1 files changed, 16 insertions, 9 deletions
diff --git a/quantum/rgb_matrix/animations/pixel_rain_anim.h b/quantum/rgb_matrix/animations/pixel_rain_anim.h index c0370831d8..f92a285b67 100644 --- a/quantum/rgb_matrix/animations/pixel_rain_anim.h +++ b/quantum/rgb_matrix/animations/pixel_rain_anim.h | |||
| @@ -6,20 +6,27 @@ RGB_MATRIX_EFFECT(PIXEL_RAIN) | |||
| 6 | # ifdef RGB_MATRIX_CUSTOM_EFFECT_IMPLS | 6 | # ifdef RGB_MATRIX_CUSTOM_EFFECT_IMPLS |
| 7 | 7 | ||
| 8 | static bool PIXEL_RAIN(effect_params_t* params) { | 8 | static bool PIXEL_RAIN(effect_params_t* params) { |
| 9 | static fast_timer_t timer = 0; | 9 | static uint8_t index = 0; |
| 10 | static uint16_t index = RGB_MATRIX_LED_COUNT + 1; | 10 | static uint32_t timer = 0; |
| 11 | 11 | ||
| 12 | if ((params->iter == 0) && (timer_elapsed_fast(timer) > (320 - rgb_matrix_config.speed))) { | 12 | if (params->iter == 0 && params->init) { |
| 13 | index = random8_max(RGB_MATRIX_LED_COUNT); | 13 | index = random8_max(RGB_MATRIX_LED_COUNT); |
| 14 | timer = timer_read_fast(); | ||
| 15 | } | 14 | } |
| 16 | 15 | ||
| 17 | RGB_MATRIX_USE_LIMITS(led_min, led_max); | 16 | RGB_MATRIX_USE_LIMITS(led_min, led_max); |
| 18 | if (led_min <= index && index < led_max && HAS_ANY_FLAGS(g_led_config.flags[index], params->flags)) { | 17 | if (timer < g_rgb_timer) { // Execute when the delay period has elapsed |
| 19 | hsv_t hsv = (random8() & 2) ? (hsv_t){0, 0, 0} : (hsv_t){random8(), random8_min_max(127, 255), rgb_matrix_config.hsv.v}; | 18 | if (led_min <= index && index < led_max && HAS_ANY_FLAGS(g_led_config.flags[index], params->flags)) { |
| 20 | rgb_t rgb = rgb_matrix_hsv_to_rgb(hsv); | 19 | // Assign a random HSV color to hsv with 50% probability, otherwise assign zeroed hsv |
| 21 | rgb_matrix_set_color(index, rgb.r, rgb.g, rgb.b); | 20 | hsv_t hsv = (random8() & 2) ? (hsv_t){0, 0, 0} : (hsv_t){random8(), random8_min_max(127, 255), rgb_matrix_config.hsv.v}; |
| 22 | index = RGB_MATRIX_LED_COUNT + 1; | 21 | rgb_t rgb = rgb_matrix_hsv_to_rgb(hsv); |
| 22 | rgb_matrix_set_color(index, rgb.r, rgb.g, rgb.b); | ||
| 23 | } | ||
| 24 | if (!rgb_matrix_check_finished_leds(led_max)) { | ||
| 25 | // In the final LED range, update the LED index and advance the timer for | ||
| 26 | // the next cycle, scaling the delay between 256–2048 ms based on speed. | ||
| 27 | index = random8_max(RGB_MATRIX_LED_COUNT); | ||
| 28 | timer = g_rgb_timer + (2048 - scale16by8(1792, rgb_matrix_config.speed)); | ||
| 29 | } | ||
| 23 | } | 30 | } |
| 24 | return rgb_matrix_check_finished_leds(led_max); | 31 | return rgb_matrix_check_finished_leds(led_max); |
| 25 | } | 32 | } |
