Not that anyone wants or needs it, but here is a custom progress bar!
It has two modes. Loop and step. And is called like below.
PS> 0..99 | ForEach-Object{"Processing, current step $_";Start-Sleep -Milliseconds 200;.\epicship.ps1 -step $_};"Installation complete!"
.\epicship.ps1 -loop
The Loop has more functions, such as a sun shining and getting obscured by the ship (notice the reflections dissapearing as the sunrays are blocked by the ship).
Param(
[int]$step,
[Switch]$Loop,
[string]$FlagMsg,
[int]$speed = 500,
$condition = $False
)
$ErrorActionPreference = "SilentlyContinue"
if($step -gt 100){Write-Error "Step cannot exceed 100";Break}
[int]$step = $step/100*77
if($step -le 0){$step++}
#[console]::CursorVisible = $False
Function Animatrix{
Param(
[switch]$Loop,
[int]$step
)
if($Loop){$action = "Loop"}
Elseif($step){$action = "Step"}
$ship = " "
if(!($FlagMsg)) { $FlagMsg = "LOADING.-" } else {
$FlagMsg = "$FlagMsg-."
if($flagmsg.length -gt 22) {
write-error "Flag text is too long .. max 20 characters!!"
Break
}
}
# Add padding to left
while($FlagMsg.length -lt 22) {
$FlagMsg = " $FlagMsg"
}
# Add padding to right
while($FlagMsg.length -lt 116) {
$FlagMsg += ' '
}
$ship += $FlagMsg
$ship += @'
|
Ya...___|__..ab. . .
Y88b##\88b##\88b ( )
Y88b##:88b##:88b `.oo'
:888##|888##|888 ( (`-'
.-. d88P##;88P##;88P `.`.
//._) d8P-"""|"""'-Y8P `.`.
(o(` .-. .-. |.-. .-. .-. )oo)
\o`---(-O-)(-O-)(-O)(-O-)(-O-)-'//
~~`.~~~~`-'~~`-'~~`-'~~`-'~~`-'~~.'~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
`----------------------------'
'@
$arrship = $ship.Split("`n")
$saveY = [console]::CursorTop
$saveX = [console]::CursorLeft
Switch($action){
"Loop"{
0..109 | ForEach-Object{
$i = 0
$arrship | ForEach-Object{
If($i -eq $arrship.count-2){
$arrship[$i] = "~" + $arrship[$i].Substring(0,$arrship[$i].Length-1)
}
else{$arrship[$i] = " " + $arrship[$i].Substring(0,$arrship[$i].Length-1)}
$i++
}
$n = 0
$chance = 0
$sunpos = 60,75
$sunMultiplier = 0.28
$arrship | ForEach-Object{
$nChar = 0
If($n -eq $arrship.Count-5){
[char[]]$arrship[$n] | ForEach-Object{
If(($nChar -ge $sunpos[0]+5) -and ($nChar -le $sunpos[1]-5)){
If($_ -eq " "){Write-Host $_ -BackgroundColor Yellow -NoNewline;$chance += $sunMultiplier}
Else{Write-Host $_ -ForegroundColor Yellow -NoNewline}
}
Elseif($nChar -lt 116){Write-Host $_ -ForegroundColor DarkGray -NoNewline}
Else{Write-Host $_ -ForegroundColor DarkGray}
$nChar++
}
}
ElseIf($n -eq $arrship.Count-4){
[char[]]$arrship[$n] | ForEach-Object{
If(($nChar -ge $sunpos[0]+2) -and ($nChar -le $sunpos[1]-2)){
If($_ -eq " "){Write-Host $_ -BackgroundColor Yellow -NoNewline;$chance += $sunMultiplier}
Else{Write-Host $_ -ForegroundColor Yellow -NoNewline}
}
Elseif($nChar -lt 116){Write-Host $_ -ForegroundColor DarkGray -NoNewline}
Else{Write-Host $_ -ForegroundColor DarkGray}
$nChar++
}
}
ElseIf($n -eq $arrship.Count-3){
[char[]]$arrship[$n] | ForEach-Object{
If(($nChar -ge $sunpos[0]) -and ($nChar -le $sunpos[1]) -and ($_ -eq " ")){Write-Host $_ -BackgroundColor Yellow -NoNewline;$chance += $sunMultiplier}
Elseif($nChar -lt 116){Write-Host $_ -ForegroundColor DarkGray -NoNewline}
Else{Write-Host $_ -ForegroundColor DarkGray}
$nChar++
}
}
ElseIf($n -eq $arrship.count-2){Write-Host $arrship[$n] -ForegroundColor Blue}
Elseif($n -eq $arrship.count-1){Write-Host $arrship[$n] -ForegroundColor Cyan}
Else{Write-host $arrship[$n] -ForegroundColor DarkGray}
$n++
}
wavegen -modulus 3 -SunXY $sunpos -chance $chance
wavegen -modulus 10 -SunXY $sunpos -chance $chance
wavegen -modulus 30 -SunXY $sunpos -chance $chance
wavegen -modulus 200 -SunXY $sunpos -chance $chance
$refchance = $chance*10
"chance of reflection is: $refchance%"
Start-Sleep -Milliseconds $speed
[console]::setcursorposition($saveX,$saveY)
}
}
"Step"{
Clear-Host
$i = 0
$arrship | ForEach-Object{
If($i -eq $arrship.count-2){$arrship[$i] = "~"*$step + $arrship[$i].Substring(0,$arrship[$i].Length-1*$step)}
else{$arrship[$i] = " "*$step + $arrship[$i].Substring(0,$arrship[$i].Length-1*$step)}
$i++
}
$n = 0
$arrship | ForEach-Object{
If($n -eq $arrship.count-2){Write-Host $arrship[$n] -ForegroundColor Blue}
elseif($n -eq $arrship.count-1){Write-Host $arrship[$n] -ForegroundColor Cyan}
Else{Write-host $arrship[$n] -ForegroundColor Yellow}
$n++
}
$chance = 7
$sun = 30,45
wavegen -modulus 3 -SunXY $sun -chance $chance
wavegen -modulus 10 -SunXY $sun -chance $chance
wavegen -modulus 30 -SunXY $sun -chance $chance
wavegen -modulus 200 -SunXY $sun -chance $chance
}
}
}
function wavegen{
Param(
[int]$modulus,
[array]$SunXY,
[int]$chance
)
$test = 0
0..115 | ForEach-Object{
$test++
$rand = get-random -Maximum 1000
$rand%$modulus
} | ForEach-Object{
$i = Get-random -maximum 5
If(($test -ge $SunXY[0]) -and ($test -le $SunXY[1]) -and ((Get-Random -Maximum 10) -lt $chance)){
$color = "Yellow"
}Else{
If($i%2 -eq 0){$color = "DarkBlue"}
else{$color = "blue"}
}
if($_ -eq 1){
write-host -foregroundcolor $color "~" -NoNewline
}
elseif($_ -eq 2){
Write-Host -ForegroundColor $color "-" -NoNewline
}
elseif($_ -eq 3){
Write-Host -ForegroundColor $color "_" -NoNewline
}
else{Write-host " " -NoNewline}
}
Write-host " "
}
If($Loop){
Animatrix
While($condition -eq $False){
Animatrix -Loop
}
}
Elseif($step){
Animatrix -step $step
[console]::setcursorposition($saveX,$saveY)
}
Else{
Write-Warning "You're doing it wrong!"
}




