diff options
| author | stonedDiscord <Tukz@gmx.de> | 2026-02-03 20:13:24 +0100 |
|---|---|---|
| committer | stonedDiscord <Tukz@gmx.de> | 2026-02-03 20:13:24 +0100 |
| commit | 8681daf84b118a3760900bb8781c45a94339c685 (patch) | |
| tree | 05ee5ebf2b48694b9aec38447c063476ad4e4da3 | |
| parent | 7391a61b881af5a515abfbf5905f65e749814fa4 (diff) | |
p
| -rw-r--r-- | webAO/viewport/viewport.ts | 29 |
1 files changed, 27 insertions, 2 deletions
diff --git a/webAO/viewport/viewport.ts b/webAO/viewport/viewport.ts index c03d750..b02828c 100644 --- a/webAO/viewport/viewport.ts +++ b/webAO/viewport/viewport.ts @@ -176,10 +176,17 @@ const viewport = (): Viewport => { gamewindow.style.removeProperty("animation"); }; + const pause = async (digits?: string) => { + // Default to 100ms if no number specified + const multiplier = !digits || digits === "" ? 1 : parseInt(digits, 10) || 1; + await delay(multiplier * 100); + }; + const commands = new Map( Object.entries({ s: shake, f: flash, + p: pause, }), ); const textSpeeds = new Set(["{", "}"]); @@ -208,10 +215,28 @@ const viewport = (): Viewport => { if ( characterElement.innerHTML === COMMAND_IDENTIFIER && - commands.has(nextCharacterElement?.innerHTML) + (commands.has(nextCharacterElement?.innerHTML) || + nextCharacterElement?.innerHTML === "p") ) { textnow = chatmsg.content.substring(0, textnow.length + 1); - await commands.get(nextCharacterElement.innerHTML)(); + const commandChar = nextCharacterElement.innerHTML; + + if (commandChar === "p") { + // Collect digits after \p for pause duration + let digits = ""; + let offset = 1; + while ( + textnow.length + offset <= chatmsg.content.length && + /\d/.test(chatmsg.parsed[textnow.length + offset - 1]?.innerHTML || "") + ) { + digits += chatmsg.parsed[textnow.length + offset - 1].innerHTML; + textnow = chatmsg.content.substring(0, textnow.length + 1); + offset++; + } + await pause(digits); + } else { + await commands.get(commandChar)(); + } } else { chatBoxInner.appendChild(chatmsg.parsed[textnow.length - 1]); } |
