Scripts/rainbow-spiral.ps1

# Rainbow Spiral - Static spiral pattern with rainbow colors

$esc = [char]27
$width = 120
$height = 30
$centerX = $width / 2
$centerY = $height / 2

function HSVtoRGB($h, $s, $v) {
    $h = $h % 1
    $i = [math]::Floor($h * 6)
    $f = $h * 6 - $i
    $p = $v * (1 - $s)
    $q = $v * (1 - $f * $s)
    $t = $v * (1 - (1 - $f) * $s)

    switch ($i % 6) {
        0 { $r = $v; $g = $t; $b = $p }
        1 { $r = $q; $g = $v; $b = $p }
        2 { $r = $p; $g = $v; $b = $t }
        3 { $r = $p; $g = $q; $b = $v }
        4 { $r = $t; $g = $p; $b = $v }
        default { $r = $v; $g = $p; $b = $q }
    }

    return @([int]($r * 255), [int]($g * 255), [int]($b * 255))
}

# Static frame (no animation loop)
$frame = 90

Write-Host ""
for ($y = 0; $y -lt $height; $y++) {
    for ($x = 0; $x -lt $width; $x++) {
        $dx = $x - $centerX
        $dy = $y - $centerY
        $distance = [math]::Sqrt($dx * $dx + $dy * $dy)
        $angle = [math]::Atan2($dy, $dx)

        # Create spiral pattern
        $spiral = $angle + $distance * 0.1 + $frame * 0.05
        $hue = ($spiral / (2 * [math]::PI)) % 1

        # Add some variation
        $wave = [math]::Sin($distance * 0.2 + $frame * 0.1) * 0.1
        $hue = ($hue + $wave) % 1

        # Vary saturation and brightness
        $saturation = 0.8 + 0.2 * [math]::Sin($distance * 0.05)
        $value = 0.4 + 0.6 * [math]::Sin($angle * 2 + $frame * 0.02)

        $rgb = HSVtoRGB -h $hue -s $saturation -v $value

        Write-Host "$esc[38;2;$($rgb[0]);$($rgb[1]);$($rgb[2])m█$esc[0m" -NoNewline
    }
    Write-Host ""
}
Write-Host ""