diff --git a/code/snowman_code.py b/code/snowman_code.py index 87ffab4..86aa42d 100755 --- a/code/snowman_code.py +++ b/code/snowman_code.py @@ -2,7 +2,7 @@ # SPDX-License-Identifier: MIT # snowman_code.py -# 2022-07-01 v1.2 +# 2022-07-24 v1.2 """A two-layer snowstorm animation with a snowman bitmap image. STORM_INTENSITY controls the maximum number of foreground and background snowflakes; 0 for @@ -17,25 +17,25 @@ from cedargrove_palettefader import PaletteFader # fmt: off -DISP_BRIGHTNESS = 0.5 # float: 0.1 to 1.0 +DISP_BRIGHTNESS = 0.1 # float: 0.1 to 1.0 STORM_INTENSITY = 1 # int: 0 to 3 STORM_INTENSITY = int(max(0, min(STORM_INTENSITY, 3))) -max_foreground_flakes = STORM_INTENSITY * 30 -max_background_flakes = STORM_INTENSITY * 10 +max_fg_flake_count = STORM_INTENSITY * 30 +max_bg_flake_count = STORM_INTENSITY * 10 # Set up a few lists to store animation parameters for each snowflake. -foreground_flake_time = [] -background_flake_time = [] -foreground_flake_displ = [] -background_flake_displ = [] +fg_flake_duration = [] +bg_flake_duration = [] +fg_flake_displacement = [] +bg_flake_displacement = [] display = Matrix(bit_depth=6).display display.rotation = 180 # Portrait orientation; MatrixPortal USB connect on bottom center_group = displayio.Group() # The primary display group -foreground_flakes = displayio.Group() -background_flakes = displayio.Group() +fg_flakes = displayio.Group() +bg_flakes = displayio.Group() # Define the snowman and snowflake color palettes. snowman_palette_source = displayio.Palette(5) @@ -58,45 +58,46 @@ # Build the foreground and background snowflake layers. if STORM_INTENSITY != 0: - for i in range(0, max_foreground_flakes): + for i in range(0, max_fg_flake_count): snowflake = vectorio.Circle( pixel_shader=fg_flake_faded.palette, x=rn.randrange(0, 63), - y=1 + (int(32 * (i / max_background_flakes)) % 32), + y=1 + (int(32 * (i / max_bg_flake_count)) % 32), radius=1, ) - foreground_flakes.append(snowflake) - foreground_flake_time.append(rn.random() / max_foreground_flakes) - foreground_flake_displ.append(rn.randrange(1, 3)) + fg_flakes.append(snowflake) + fg_flake_duration.append(rn.random() / max_fg_flake_count) + fg_flake_displacement.append(rn.randrange(1, 3)) - for i in range(0, max_background_flakes): + for i in range(0, max_bg_flake_count): snowflake = vectorio.Circle( pixel_shader=bk_flake_faded.palette, x=rn.randrange(3, 63), - y=1 + (int(32 * (i / max_background_flakes)) % 32), + y=1 + (int(32 * (i / max_bg_flake_count)) % 32), radius=1, ) - background_flakes.append(snowflake) - background_flake_time.append(rn.random() / max_foreground_flakes) - background_flake_displ.append(rn.randrange(1, 3)) + bg_flakes.append(snowflake) + bg_flake_duration.append(rn.random() / max_fg_flake_count) + bg_flake_displacement.append(rn.randrange(1, 3)) display.show(center_group) -with open("/snowman_32_64.bmp", "rb") as f: +# Load landscape snowman bitmap +with open("/snowman_32_64.bmp", "rb") as snowman_bitmap: # Add and display the background snowflake layer. if STORM_INTENSITY != 0: - center_group.append(background_flakes) + center_group.append(bg_flakes) - # Retrieve and display the snowman bitmap graphic file. - snowman = displayio.OnDiskBitmap(f) + # Display the snowman bitmap graphic file. + snowman = displayio.OnDiskBitmap(snowman_bitmap) snowman = displayio.TileGrid(snowman, pixel_shader=snowman_faded.palette, x=-6) center_group.append(snowman) # Add and display the foreground snowflake layer. # If STORM_INTENSITY is zero, display the snowman forever. if STORM_INTENSITY != 0: - center_group.append(foreground_flakes) + center_group.append(fg_flakes) else: while True: pass @@ -106,22 +107,22 @@ # Animate the background and foreground snowflakes forever. while True: - flake = rn.randrange(0, max_foreground_flakes) - foreground_flakes[flake].x = ( - foreground_flakes[flake].x - foreground_flake_displ[i] + flake = rn.randrange(0, max_fg_flake_count) + fg_flakes[flake].x = ( + fg_flakes[flake].x - fg_flake_displacement[i] ) - if foreground_flakes[flake].x < -2: - foreground_flakes[flake].x = 66 - foreground_flake_time[flake] = rn.random() / max_foreground_flakes - foreground_flake_displ[flake] = rn.randrange(1, 3) - time.sleep(foreground_flake_time[flake]) - - flake = rn.randrange(0, max_background_flakes) - background_flakes[flake].x = ( - background_flakes[flake].x - background_flake_displ[i] + if fg_flakes[flake].x < -2: + fg_flakes[flake].x = 66 + fg_flake_duration[flake] = rn.random() / max_fg_flake_count + fg_flake_displacement[flake] = rn.randrange(1, 3) + time.sleep(fg_flake_duration[flake]) + + flake = rn.randrange(0, max_bg_flake_count) + bg_flakes[flake].x = ( + bg_flakes[flake].x - bg_flake_displacement[i] ) - if background_flakes[flake].x < 4: - background_flakes[flake].x = 66 - background_flake_time[flake] = rn.random() / max_background_flakes - background_flake_displ[flake] = rn.randrange(1, 3) - time.sleep(background_flake_time[flake]) + if bg_flakes[flake].x < 4: + bg_flakes[flake].x = 66 + bg_flake_duration[flake] = rn.random() / max_bg_flake_count + bg_flake_displacement[flake] = rn.randrange(1, 3) + time.sleep(bg_flake_duration[flake]) diff --git a/snowman_bundle/code.py b/snowman_bundle/code.py index 87ffab4..86aa42d 100755 --- a/snowman_bundle/code.py +++ b/snowman_bundle/code.py @@ -2,7 +2,7 @@ # SPDX-License-Identifier: MIT # snowman_code.py -# 2022-07-01 v1.2 +# 2022-07-24 v1.2 """A two-layer snowstorm animation with a snowman bitmap image. STORM_INTENSITY controls the maximum number of foreground and background snowflakes; 0 for @@ -17,25 +17,25 @@ from cedargrove_palettefader import PaletteFader # fmt: off -DISP_BRIGHTNESS = 0.5 # float: 0.1 to 1.0 +DISP_BRIGHTNESS = 0.1 # float: 0.1 to 1.0 STORM_INTENSITY = 1 # int: 0 to 3 STORM_INTENSITY = int(max(0, min(STORM_INTENSITY, 3))) -max_foreground_flakes = STORM_INTENSITY * 30 -max_background_flakes = STORM_INTENSITY * 10 +max_fg_flake_count = STORM_INTENSITY * 30 +max_bg_flake_count = STORM_INTENSITY * 10 # Set up a few lists to store animation parameters for each snowflake. -foreground_flake_time = [] -background_flake_time = [] -foreground_flake_displ = [] -background_flake_displ = [] +fg_flake_duration = [] +bg_flake_duration = [] +fg_flake_displacement = [] +bg_flake_displacement = [] display = Matrix(bit_depth=6).display display.rotation = 180 # Portrait orientation; MatrixPortal USB connect on bottom center_group = displayio.Group() # The primary display group -foreground_flakes = displayio.Group() -background_flakes = displayio.Group() +fg_flakes = displayio.Group() +bg_flakes = displayio.Group() # Define the snowman and snowflake color palettes. snowman_palette_source = displayio.Palette(5) @@ -58,45 +58,46 @@ # Build the foreground and background snowflake layers. if STORM_INTENSITY != 0: - for i in range(0, max_foreground_flakes): + for i in range(0, max_fg_flake_count): snowflake = vectorio.Circle( pixel_shader=fg_flake_faded.palette, x=rn.randrange(0, 63), - y=1 + (int(32 * (i / max_background_flakes)) % 32), + y=1 + (int(32 * (i / max_bg_flake_count)) % 32), radius=1, ) - foreground_flakes.append(snowflake) - foreground_flake_time.append(rn.random() / max_foreground_flakes) - foreground_flake_displ.append(rn.randrange(1, 3)) + fg_flakes.append(snowflake) + fg_flake_duration.append(rn.random() / max_fg_flake_count) + fg_flake_displacement.append(rn.randrange(1, 3)) - for i in range(0, max_background_flakes): + for i in range(0, max_bg_flake_count): snowflake = vectorio.Circle( pixel_shader=bk_flake_faded.palette, x=rn.randrange(3, 63), - y=1 + (int(32 * (i / max_background_flakes)) % 32), + y=1 + (int(32 * (i / max_bg_flake_count)) % 32), radius=1, ) - background_flakes.append(snowflake) - background_flake_time.append(rn.random() / max_foreground_flakes) - background_flake_displ.append(rn.randrange(1, 3)) + bg_flakes.append(snowflake) + bg_flake_duration.append(rn.random() / max_fg_flake_count) + bg_flake_displacement.append(rn.randrange(1, 3)) display.show(center_group) -with open("/snowman_32_64.bmp", "rb") as f: +# Load landscape snowman bitmap +with open("/snowman_32_64.bmp", "rb") as snowman_bitmap: # Add and display the background snowflake layer. if STORM_INTENSITY != 0: - center_group.append(background_flakes) + center_group.append(bg_flakes) - # Retrieve and display the snowman bitmap graphic file. - snowman = displayio.OnDiskBitmap(f) + # Display the snowman bitmap graphic file. + snowman = displayio.OnDiskBitmap(snowman_bitmap) snowman = displayio.TileGrid(snowman, pixel_shader=snowman_faded.palette, x=-6) center_group.append(snowman) # Add and display the foreground snowflake layer. # If STORM_INTENSITY is zero, display the snowman forever. if STORM_INTENSITY != 0: - center_group.append(foreground_flakes) + center_group.append(fg_flakes) else: while True: pass @@ -106,22 +107,22 @@ # Animate the background and foreground snowflakes forever. while True: - flake = rn.randrange(0, max_foreground_flakes) - foreground_flakes[flake].x = ( - foreground_flakes[flake].x - foreground_flake_displ[i] + flake = rn.randrange(0, max_fg_flake_count) + fg_flakes[flake].x = ( + fg_flakes[flake].x - fg_flake_displacement[i] ) - if foreground_flakes[flake].x < -2: - foreground_flakes[flake].x = 66 - foreground_flake_time[flake] = rn.random() / max_foreground_flakes - foreground_flake_displ[flake] = rn.randrange(1, 3) - time.sleep(foreground_flake_time[flake]) - - flake = rn.randrange(0, max_background_flakes) - background_flakes[flake].x = ( - background_flakes[flake].x - background_flake_displ[i] + if fg_flakes[flake].x < -2: + fg_flakes[flake].x = 66 + fg_flake_duration[flake] = rn.random() / max_fg_flake_count + fg_flake_displacement[flake] = rn.randrange(1, 3) + time.sleep(fg_flake_duration[flake]) + + flake = rn.randrange(0, max_bg_flake_count) + bg_flakes[flake].x = ( + bg_flakes[flake].x - bg_flake_displacement[i] ) - if background_flakes[flake].x < 4: - background_flakes[flake].x = 66 - background_flake_time[flake] = rn.random() / max_background_flakes - background_flake_displ[flake] = rn.randrange(1, 3) - time.sleep(background_flake_time[flake]) + if bg_flakes[flake].x < 4: + bg_flakes[flake].x = 66 + bg_flake_duration[flake] = rn.random() / max_bg_flake_count + bg_flake_displacement[flake] = rn.randrange(1, 3) + time.sleep(bg_flake_duration[flake])