Examples/Road.ps1
#Requires -Modules DynamicTitle # Suppress this for $initializationScript [Diagnostics.CodeAnalysis.SuppressMessageAttribute('PSUseDeclaredVarsMoreThanAssignments', '')] param() $modulePath = Join-Path (Get-Module DynamicTitle).ModuleBase 'DynamicTitle.psd1' $promptJob = Start-DTJobPromptCallback { if ($null -eq $script:roadPromptFrame) { $script:roadPromptFrame = 0 } $script:roadPromptFrame++ $isInError = $false if ($global:Error[0]) { $isInError = -not ($global:Error[0].Equals($script:roadLastError)) $script:roadLastError = $global:Error[0] } $isInError, $script:roadPromptFrame } $initializationScript = { param ($modulePath) Import-Module $modulePath $mainTitle = ' PowerShell ' $characters = @( '🚴' '🚴♂️' '🚴♀️' '🚙' '🚓' '🐈' '🐩' '🚚' '🚎' '🚕' '🚌' '🚒' '🚛' '🚁' '🛸' ) $caution = '❗' $streetParts = @( '_._._.' '_.-._' ) $streetLength = 2 function GetCharacter { $characters | Get-Random } function GetStreet { $street = '' foreach ($i in 1..$streetLength) { $street += $streetParts | Get-Random } $street } function GetWaitFrame { Get-Random -Minimum 0 -Maximum 100 } $character = GetCharacter $streetL = GetStreet $streetR = GetStreet $waitFrame = GetWaitFrame $characterPos = 1 $lastPromptFrame = 0 $isCaution = $false } $scriptBlock = { param($promptJob) $isInError, $promptFrame = Get-DTJobLatestOutput $promptJob if ($isInError -and ($promptFrame -ne $script:lastPromptFrame)) { $script:isCaution = $true } if (-not $isInError) { $script:isCaution = $false } $script:lastPromptFrame = $promptFrame $title = $streetL + $mainTitle + $streetR if ($script:waitFrame -gt 0) { $script:waitFrame-- $script:isCaution = $false $title return } $stringInfo = [System.Globalization.StringInfo]::new($title) $length = $stringInfo.LengthInTextElements $characterIndex = $length - 1 - $script:characterPos if ($script:isCaution) { if ($characterIndex -ge 1) { $characterIndex -= 1 $character = $caution + $character } else { $character = $character + $caution } $title = $stringInfo.SubstringByTextElements(0, $characterIndex) + $character + $stringInfo.SubstringByTextElements($characterIndex + 2) } else { $title = $stringInfo.SubstringByTextElements(0, $characterIndex) + $character + $stringInfo.SubstringByTextElements($characterIndex + 1) $script:characterPos += 1 if ($script:characterPos -ge $length) { $script:characterPos = 1 $script:waitFrame = GetWaitFrame $script:character = GetCharacter } } $title } $params = @{ ScriptBlock = $scriptBlock ArgumentList = $promptJob InitializationScript = $initializationScript InitializationArgumentList = $modulePath } Start-DTTitle @params |