Skip to content

Commit e742239

Browse files
authored
Merge pull request #78 from attogram/feature/animated-tunnel
Fix: Lock tunnel ridges to their creation point
2 parents 554171f + 6b39133 commit e742239

File tree

1 file changed

+14
-11
lines changed

1 file changed

+14
-11
lines changed

gallery/tunnel/tunnel.sh

Lines changed: 14 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)