diff --git a/hyfetch/pride_month.py b/hyfetch/pride_month.py new file mode 100644 index 00000000..27ae8622 --- /dev/null +++ b/hyfetch/pride_month.py @@ -0,0 +1,94 @@ +from time import sleep + +from hyfetch import presets +from hyfetch.color_util import RGB, color +from hyfetch.neofetch_util import term_size +from hyfetch.presets import PRESETS + + +def start_animation(): + text = r""" + .======================================================. + | . . .__ . . . , . | | + | |__| _.._ ._ . [__)._.* _| _ |\/| _ ._ -+-|_ | | + | | |(_][_)[_)\_| | [ |(_](/, | |(_)[ ) | [ ) * | + | | | ._| | + '======================================================' """.strip("\n") + text_lines = text.split("\n") + text_height = len(text_lines) + text_width = len(text_lines[0]) + + speed = 2 + frame_delay = 1 / 25 + + colors: list[RGB] = [] + frame = 0 + + w, h = term_size() + blocks = 9 + block_width = w // blocks + + text_start_y = h // 2 - text_height // 2 + text_end_y = text_start_y + text_height + text_start_x = w // 2 - text_width // 2 + text_end_x = text_start_x + text_width + + for i in range(blocks): + colors += PRESETS['rainbow'].colors + colors += PRESETS['transgender'].colors + + black = RGB(0, 0, 0) + white = RGB(255, 255, 255) + + def draw_frame(): + buf = "" + + # Loop over the height + for y in range(h): + # Print the starting color + buf += colors[((frame + y) // block_width) % len(colors)].to_ansi_rgb(foreground=False) + buf += white.to_ansi_rgb(foreground=True) + + # Loop over the width + x = 0 + while x < w: + is_text = text_start_y <= y < text_end_y and text_start_x <= x < text_end_x + + # If it's a switching point + if (frame + x + y) % block_width == 0 or x == text_start_x or x == text_end_x: + # Print the color at the current frame + c = colors[((frame + x + y) // block_width) % len(colors)] + if is_text: + # buf += c.set_light(0.3).to_ansi_rgb(foreground=False) + buf += c.overlay(black, 0.5).to_ansi_rgb(foreground=False) + else: + buf += c.to_ansi_rgb(foreground=False) + + # If text should be printed, print text + if text_start_y <= y < text_end_y and text_start_x <= x < text_end_x: + # Add white background + # buf += RGB(255, 255, 255).to_ansi_rgb(foreground=False) + buf += text_lines[y - text_start_y][x - text_start_x] + else: + buf += ' ' + + x += 1 + + # New line if it isn't the last line + if y != h - 1: + buf += color('&r\n') + + print(buf, end='', flush=True) + + while 1: + # Clear the screen + print("\033[2J\033[H", end="") + draw_frame() + frame += speed + sleep(frame_delay) + + +if __name__ == '__main__': + start_animation() + +