@@ -74,36 +74,39 @@ animate() {
7474 frame_buffer=" "
7575 # Add a new ribbon every few frames
7676 if (( frame_counter % ribbon_spacing == 0 )) ; then
77- radii+=(1 )
77+ radii+=(" 1 $center_x $center_y " )
7878 fi
7979
8080 local -a next_radii=()
81- for r in " ${radii[@]} " ; do
81+ for ridge_data in " ${radii[@]} " ; do
82+ local r cx cy
83+ read -r r cx cy <<< " $ridge_data"
84+
8285 if [ $r -gt 0 ]; then
8386 local prev_r=$(( r- 1 ))
8487 # Erase the previous shape
8588 for (( i= 0 ; i < prev_r; i++ )) ; do
86- erase_point $(( center_x + i)) $(( center_y - prev_r + i))
87- erase_point $(( center_x + prev_r - i)) $(( center_y + i))
88- erase_point $(( center_x - i)) $(( center_y + prev_r - i))
89- erase_point $(( center_x - prev_r + i)) $(( center_y - i))
89+ erase_point $(( cx + i)) $(( cy - prev_r + i))
90+ erase_point $(( cx + prev_r - i)) $(( cy + i))
91+ erase_point $(( cx - i)) $(( cy + prev_r - i))
92+ erase_point $(( cx - prev_r + i)) $(( cy - i))
9093 done
9194 fi
9295
9396 local color=${COLORS[$((r % ${#COLORS[@]} ))]}
9497 local char=${CHARS[$((r % ${#CHARS[@]} ))]}
9598 # Draw a square/diamond shape
9699 for (( i= 0 ; i < r; i++ )) ; do
97- plot_point $(( center_x + i)) $(( center_y - r + i)) " $char " " $color "
98- plot_point $(( center_x + r - i)) $(( center_y + i)) " $char " " $color "
99- plot_point $(( center_x - i)) $(( center_y + r - i)) " $char " " $color "
100- plot_point $(( center_x - r + i)) $(( center_y - i)) " $char " " $color "
100+ plot_point $(( cx + i)) $(( cy - r + i)) " $char " " $color "
101+ plot_point $(( cx + r - i)) $(( cy + i)) " $char " " $color "
102+ plot_point $(( cx - i)) $(( cy + r - i)) " $char " " $color "
103+ plot_point $(( cx - r + i)) $(( cy - i)) " $char " " $color "
101104 done
102105
103106 # Increment radius for the next frame, and keep it if it's not too large
104107 local next_r=$(( r + 1 ))
105108 if (( next_r < max_radius )) ; then
106- next_radii+=($next_r )
109+ next_radii+=(" $next_r $cx $cy " )
107110 fi
108111 done
109112
0 commit comments