diff --git a/frontend/src/components/FightViewer.vue b/frontend/src/components/FightViewer.vue index 4c2c680..5853014 100644 --- a/frontend/src/components/FightViewer.vue +++ b/frontend/src/components/FightViewer.vue @@ -441,8 +441,11 @@ async function _doReplay() { scene.showSpeechBubble('a', round.botAResponse.slice(0, 60), 8) scene.startTalking('a') } + // Ensure bubble stays visible for at least 400ms even if TTS resolves instantly + const minBubbleA = sleep(400).catch(() => {}) if (doTTS) await playAnswerNow(props.fight.botA!.name, round.botAResponse) - else await sleep(insanityMode.value ? 30 : 400) + await minBubbleA + if (!doTTS && !insanityMode.value) await sleep(400) scene?.stopTalking('a') scene?.hideSpeechBubble('a') } @@ -460,8 +463,10 @@ async function _doReplay() { scene.showSpeechBubble('b', round.botBResponse.slice(0, 60), 8) scene.startTalking('b') } + const minBubbleB = sleep(400).catch(() => {}) if (doTTS) await playAnswerNow(props.fight.botB!.name, round.botBResponse) - else await sleep(insanityMode.value ? 30 : 400) + await minBubbleB + if (!doTTS && !insanityMode.value) await sleep(400) scene?.stopTalking('b') scene?.hideSpeechBubble('b') } @@ -809,7 +814,11 @@ async function _doReplay() { :disabled="isReplaying" @click="replay" > - {{ isReplaying ? 'FIGHTING...' : 'VIDEO REPLAY' }} + FIGHTING... + + + REPLAY +