Enforce explicit WebGL book playback timeline
This commit is contained in:
@@ -71,7 +71,6 @@ class UIDisplayHandlerModule extends BaseModule {
|
||||
'isWebGLMode',
|
||||
'playWebGLBookSentence',
|
||||
'prepareWebGLBookReveal',
|
||||
'waitForWebGLPageFlip',
|
||||
'renderStoryBlock',
|
||||
'prepareRenderableBlock',
|
||||
'prepareTextRenderable',
|
||||
@@ -1070,47 +1069,6 @@ class UIDisplayHandlerModule extends BaseModule {
|
||||
return timeline.prepareSentence(sentence, { immediate: true });
|
||||
}
|
||||
|
||||
waitForWebGLPageFlip(detail = {}) {
|
||||
return new Promise((resolve) => {
|
||||
let resolved = false;
|
||||
const cleanup = () => {
|
||||
window.clearTimeout(timeout);
|
||||
document.removeEventListener('webgl-book:page-flip-started', onStarted);
|
||||
document.removeEventListener('webgl-book:page-flip-finished', onFinished);
|
||||
};
|
||||
const finish = (result) => {
|
||||
if (resolved) return;
|
||||
resolved = true;
|
||||
cleanup();
|
||||
resolve(result);
|
||||
};
|
||||
const requestedTargetSpread = Number.isFinite(Number(detail.targetSpread))
|
||||
? Math.max(0, Math.round(Number(detail.targetSpread)))
|
||||
: null;
|
||||
const matchesTarget = (eventDetail = {}) => requestedTargetSpread == null
|
||||
|| Math.max(0, Math.round(Number(eventDetail.targetSpread || 0))) === requestedTargetSpread;
|
||||
const onStarted = (event) => {
|
||||
if (!matchesTarget(event.detail || {})) return;
|
||||
document.documentElement.dataset.webglLastStartedPageFlip = JSON.stringify(event.detail || {});
|
||||
};
|
||||
const onFinished = (event) => {
|
||||
if (!matchesTarget(event.detail || {})) return;
|
||||
finish(true);
|
||||
};
|
||||
const timeout = window.setTimeout(() => finish(false), 2400);
|
||||
document.addEventListener('webgl-book:page-flip-started', onStarted);
|
||||
document.addEventListener('webgl-book:page-flip-finished', onFinished);
|
||||
document.dispatchEvent(new CustomEvent('webgl-book:request-page-flip', {
|
||||
detail: {
|
||||
direction: Math.sign(Number(detail.direction || 1)) || 1,
|
||||
reason: detail.reason || 'pending-block-overflow',
|
||||
force: true,
|
||||
targetSpread: requestedTargetSpread
|
||||
}
|
||||
}));
|
||||
});
|
||||
}
|
||||
|
||||
async rerenderStory() {
|
||||
if (!this.paragraphContainer || this.renderedItems.length === 0) return;
|
||||
console.log('UIDisplayHandler: Re-typesetting story after page resize');
|
||||
|
||||
Reference in New Issue
Block a user