aboutsummaryrefslogtreecommitdiff
path: root/fun/rain
diff options
context:
space:
mode:
Diffstat (limited to 'fun/rain')
-rwxr-xr-xfun/rain100
1 files changed, 0 insertions, 100 deletions
diff --git a/fun/rain b/fun/rain
deleted file mode 100755
index 8a8d8f6..0000000
--- a/fun/rain
+++ /dev/null
@@ -1,100 +0,0 @@
-#!/bin/bash
-RAINS=("|" "│" "┃" "┆" "┇" "┊" "┋" "╽" "╿")
-COLORS=("\e[37m" "\e[37;1m")
-# More from 256 color mode
-for i in {244..255}; do
- COLORS=("${COLORS[@]}" "\e[38;5;${i}m")
-done
-NRAINS=${#RAINS[@]}
-NCOLORS=${#COLORS[@]}
-NUM_RAIN_METADATA=5
-
-
-sigwinch() {
- TERM_WIDTH=$(tput cols)
- TERM_HEIGHT=$(tput lines)
- STEP_DURATION=0.025
- ((MAX_RAINS = TERM_WIDTH * TERM_HEIGHT / 4))
- ((MAX_RAIN_LENGTH = TERM_HEIGHT < 10 ? 1 : TERM_HEIGHT / 10))
- # In percentage
- ((NEW_RAIN_ODD = TERM_HEIGHT > 50 ? 100 : TERM_HEIGHT * 2))
- ((NEW_RAIN_ODD = NEW_RAIN_ODD * 75 / 100))
- ((FALLING_ODD = TERM_HEIGHT > 25 ? 100 : TERM_HEIGHT * 4))
- ((FALLING_ODD = FALLING_ODD * 90 / 100))
- }
-
-do_exit() {
- echo -ne "\e[${TERM_HEIGHT};1H\e[0K"
-
- # Show cursor and echo stdin
- echo -ne "\e[?25h"
- stty echo
- exit 0
- }
-
-do_render() {
- # Clean screen first
- for ((idx = 0; idx < num_rains * NUM_RAIN_METADATA; idx += NUM_RAIN_METADATA)); do
- X=${rains[idx]}
- Y=${rains[idx + 1]}
- LENGTH=${rains[idx + 4]}
- for ((y = Y; y < Y + LENGTH; y++)); do
- (( y < 1 || y > TERM_HEIGHT )) && continue
- echo -ne "\e[${y};${X}H "
- done
- done
-
- for ((idx = 0; idx < num_rains * NUM_RAIN_METADATA; idx += NUM_RAIN_METADATA)); do
- if ((100 * RANDOM / 32768 < FALLING_ODD)); then
- # Falling
- if ((++rains[idx + 1] > TERM_HEIGHT)); then
- # Out of screen, bye sweet <3
- rains=("${rains[@]:0:idx}"
- "${rains[@]:idx+NUM_RAIN_METADATA:num_rains*NUM_RAIN_METADATA}")
- ((num_rains--))
- continue
- fi
- fi
- X=${rains[idx]}
- Y=${rains[idx + 1]}
- RAIN=${rains[idx + 2]}
- COLOR=${rains[idx + 3]}
- LENGTH=${rains[idx + 4]}
- for ((y = Y; y < Y + LENGTH; y++)); do
- (( y < 1 || y > TERM_HEIGHT )) && continue
- echo -ne "\e[${y};${X}H${COLOR}${RAIN}"
- done
- done
- }
-
-trap do_exit TERM INT
-trap sigwinch WINCH
-# No echo stdin and hide the cursor
-stty -echo
-echo -ne "\e[?25l"
-
-echo -ne "\e[2J"
-rains=()
-sigwinch
-while :; do
- read -n 1 -t $STEP_DURATION ch
- case "$ch" in
- q|Q)
- do_exit
- ;;
- esac
-
- if ((num_rains < MAX_RAINS)) && ((100 * RANDOM / 32768 < NEW_RAIN_ODD)); then
- # Need new |, 1-based
- RAIN="${RAINS[NRAINS * RANDOM / 32768]}"
- COLOR="${COLORS[NCOLORS * RANDOM / 32768]}"
- LENGTH=$((MAX_RAIN_LENGTH * RANDOM / 32768 + 1))
- X=$((TERM_WIDTH * RANDOM / 32768 + 1))
- Y=$((1 - LENGTH))
- rains=("${rains[@]}" "$X" "$Y" "$RAIN" "$COLOR" "$LENGTH")
- ((num_rains++))
- fi
-
- # Let rain fall!
- do_render
-done \ No newline at end of file