-
-
Save mdgrs-mei/11121aceb7e147dbe6ab4ab8d2abcd35 to your computer and use it in GitHub Desktop.
| #Requires -Modules DynamicTitle | |
| $promptJob = Start-DTJobPromptCallback { | |
| if ($null -eq $script:terminalCatPromptFrame) { | |
| $script:terminalCatPromptFrame = 0 | |
| } | |
| $script:terminalCatPromptFrame++ | |
| $isInError = $false | |
| if ($Error[0]) { | |
| $isInError = -not ($Error[0].Equals($script:terminalCatLastError)) | |
| $script:terminalCatLastError = $Error[0] | |
| } | |
| $isInError, $script:terminalCatPromptFrame | |
| } | |
| $initializationScript = { | |
| $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 = @{ | |
| InitializationScript = $initializationScript | |
| ScriptBlock = $scriptBlock | |
| ArgumentList = $promptJob | |
| } | |
| Start-DTTitle @params |
@joshua-russell
I didn't do anything about the color. There are actually two cat emoji codes, the orange one and the black one.
I see, the black cat was introduced in Win11. In Win10 it is rendered as a cat with a square next to it haha!
Win10 users might change the caution cat to something like 😿or🙀. I think this would work:
IF ([System.Environment]::OSVersion.Version.Major -eq 10) {$catB = '🙀'}I wanted to experiment with adding some terrain along the road. Something like this:
$roadLength = 6
function makeRoad {
$list = '.','🌵','🌳'
1..10 | % {$list += '_'}
$segment = $null
1..3 | % {$segment += $list[$(Get-Random -Minimum 0 -Maximum $list.count)]}
$segment
}
1..$($roadlength*.5) | % {$road1+=makeroad}
1..$($roadlength*.5) | % {$road2+=makeroad}
# Then set the title up like this:
$title = $road1 + $mainTitle + $road2However, when the cat is next to one of the emojis, it becomes the � symbol. I'm unsure why that happens, or how to fix it.
@joshua-russell
Oh, I was not sure the black cat was not available on Win10. Thank you!
Currently, the road and the main title are assumed to be 2 byte characters, but those emojis are 4 bytes. That is the reason for the � symbol you saw. I think I can add emoji support for the road.
Adding terrain is a great idea by the way!
This is cute, thanks
@HotCakeX Glad you liked it!
@joshua-russell I've updated the code to support emojis for the street. You can add emojis to $streetParts, but I recommend that we only use ascii characters because the animation is more stable.
Amazing!


Nice!
In your example how are you colorizing the emoji?