comic-bubbles
Version:
Animated comic bubbles - what else?
72 lines (55 loc) • 1.91 kB
JavaScript
import { incCounter, resetCharsDrawn, resetCounter } from './javascript/heartbeat.mjs'
import { cacheFontDesc, drawWord } from './javascript/fontMapper.mjs'
import { injectBubbles, getRandomPhraseId } from './javascript/phrases.mjs'
import { injectScenePrefs } from './javascript/scenePrefs.mjs'
import { wait, fixParents } from './javascript/helperFunctions.mjs'
import { paintBubbles } from './javascript/painter.mjs'
import { getScene, deleteScene, hasScene } from './javascript/sceneCache.mjs'
import {
generateBubbleDeviations,
randomizeBubbleDeviations,
injectBubbleDeviations,
} from './javascript/deviations.mjs'
export let stopRequested = new Map()
export async function settingScene(sceneId) {
await wait(50)
resetCharsDrawn()
resetCounter()
deleteScene(sceneId)
let scene = getScene(sceneId)
await cacheFontDesc('font-6')
await injectScenePrefs(sceneId)
generateBubbleDeviations(sceneId)
randomizeBubbleDeviations(sceneId)
scene.calcBounds()
let randomPhraseId = await getRandomPhraseId()
// Animate
for (let i = 0; i < 10000; i++) {
await wait((1000 / 60) * 4)
if (stopRequested.has(sceneId)) {
await wait(300)
stopRequested.delete(sceneId)
return
}
requestAnimationFrame(async function () {
incCounter()
const startTime = performance.now()
scene.bubCon.clearBubbles()
await injectBubbles(sceneId, randomPhraseId)
fixParents(sceneId)
await injectScenePrefs(sceneId)
injectBubbleDeviations(sceneId)
paintBubbles(sceneId)
const endTime = performance.now()
const elapsedTime = endTime - startTime
//drawWord('' + elapsedTime.toFixed(2) + ' ' + counter, 'font-6', false, false, 80, 95)
})
}
}
export async function stopScene(sceneId) {
if (hasScene(sceneId)) {
stopRequested.set(sceneId)
await wait(50)
deleteScene(sceneId)
}
}