pixel_rain_anim.h (1509B)
1 // Copyright 2022 @filterpaper 2 // SPDX-License-Identifier: GPL-2.0+ 3 4 #ifdef ENABLE_RGB_MATRIX_PIXEL_RAIN 5 RGB_MATRIX_EFFECT(PIXEL_RAIN) 6 # ifdef RGB_MATRIX_CUSTOM_EFFECT_IMPLS 7 8 static bool PIXEL_RAIN(effect_params_t* params) { 9 static uint8_t index = 0; 10 static uint32_t timer = 0; 11 12 if (params->iter == 0 && params->init) { 13 index = random8_max(RGB_MATRIX_LED_COUNT); 14 } 15 16 RGB_MATRIX_USE_LIMITS(led_min, led_max); 17 if (timer < g_rgb_timer) { // Execute when the delay period has elapsed 18 if (led_min <= index && index < led_max && HAS_ANY_FLAGS(g_led_config.flags[index], params->flags)) { 19 // Assign a random HSV color to hsv with 50% probability, otherwise assign zeroed hsv 20 hsv_t hsv = (random8() & 2) ? (hsv_t){0, 0, 0} : (hsv_t){random8(), random8_min_max(127, 255), rgb_matrix_config.hsv.v}; 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 } 30 } 31 return rgb_matrix_check_finished_leds(led_max); 32 } 33 34 # endif // RGB_MATRIX_CUSTOM_EFFECT_IMPLS 35 #endif // ENABLE_RGB_MATRIX_PIXEL_RAIN