fix: close phase 2 journey blockers
This commit is contained in:
@@ -78,20 +78,28 @@ watch(
|
||||
watch(
|
||||
() => motion.policy.value.maximumTier,
|
||||
(tier, previous) => {
|
||||
if (tier !== previous) adaptive.setMaximum(tier, 'manual');
|
||||
if (tier !== previous) {
|
||||
adaptive.setMaximum(tier, controlsReady.value ? 'resize' : 'manual');
|
||||
}
|
||||
},
|
||||
{ flush: 'sync' },
|
||||
);
|
||||
|
||||
const setQuality = (tier: import('@/journey/motion-policy').QualityTier): void => {
|
||||
motion.setMaximumQuality(tier);
|
||||
adaptive.setMaximum(tier, 'manual');
|
||||
adaptive.setMaximum(motion.policy.value.maximumTier, 'manual');
|
||||
};
|
||||
|
||||
const enableMotion = (): void => {
|
||||
const tier = motion.maximumQuality.value === 'static' ? 'high' : motion.maximumQuality.value;
|
||||
motion.setMaximumQuality(tier);
|
||||
motion.setPaused(false);
|
||||
adaptive.setMaximum(tier, 'manual');
|
||||
adaptive.setMaximum(motion.policy.value.maximumTier, 'manual');
|
||||
};
|
||||
|
||||
const resumeMotion = (): void => {
|
||||
motion.setPaused(false);
|
||||
adaptive.setMaximum(motion.policy.value.maximumTier, 'manual');
|
||||
};
|
||||
|
||||
onMounted(() => {
|
||||
@@ -118,6 +126,7 @@ onUnmounted(() => removePageListeners());
|
||||
:policy="motion.policy.value"
|
||||
:quality="actualQuality"
|
||||
:scene-description="content.sceneDescription"
|
||||
:sample-frame="adaptive.sampleFrame"
|
||||
@state-change="sceneState = $event"
|
||||
/>
|
||||
<JourneyHud
|
||||
@@ -185,7 +194,7 @@ onUnmounted(() => removePageListeners());
|
||||
:audio-muted="audio.muted.value"
|
||||
:audio-volume="controlsReady ? motion.volume.value : 0.4"
|
||||
@pause="motion.setPaused(true)"
|
||||
@resume="motion.setPaused(false)"
|
||||
@resume="resumeMotion"
|
||||
@enable="enableMotion"
|
||||
@quality-change="setQuality"
|
||||
@audio-start="audio.startFromGesture"
|
||||
|
||||
@@ -9,6 +9,7 @@ const props = defineProps<{
|
||||
policy: MotionPolicy;
|
||||
quality: QualityTier;
|
||||
sceneDescription: string;
|
||||
sampleFrame?: (start: number, end: number) => unknown;
|
||||
}>();
|
||||
|
||||
const emit = defineEmits<{
|
||||
@@ -20,13 +21,16 @@ const clientReady = ref(false);
|
||||
const journey = toRef(props, 'journey');
|
||||
const policy = toRef(props, 'policy');
|
||||
const quality = toRef(props, 'quality');
|
||||
const scene = useSceneController({ canvas, journey, policy, quality });
|
||||
const scene = useSceneController({ canvas, journey, policy, quality, sampleFrame: props.sampleFrame });
|
||||
const sceneState = computed(() => scene.state.value);
|
||||
const sceneGeneration = computed(() => scene.snapshot.value?.currentGeneration ?? null);
|
||||
const showCanvas = computed(() => (
|
||||
clientReady.value
|
||||
&& policy.value.allowSceneRequest
|
||||
&& quality.value !== 'static'
|
||||
&& !scene.error.value
|
||||
&& (
|
||||
(policy.value.allowSceneRequest && quality.value !== 'static')
|
||||
|| (policy.value.reason === 'visitor-pause' && sceneGeneration.value !== null)
|
||||
)
|
||||
));
|
||||
|
||||
watch(scene.state, (state) => emit('stateChange', state), { immediate: true });
|
||||
@@ -35,7 +39,12 @@ onMounted(() => { clientReady.value = true; });
|
||||
|
||||
<template>
|
||||
<p id="journey-scene-description" class="visually-hidden">{{ sceneDescription }}</p>
|
||||
<div class="journey-world" aria-hidden="true" :data-scene-state="sceneState">
|
||||
<div
|
||||
class="journey-world"
|
||||
aria-hidden="true"
|
||||
:data-scene-state="sceneState"
|
||||
:data-scene-generation="sceneGeneration"
|
||||
>
|
||||
<img class="journey-poster" alt="" width="1600" height="900">
|
||||
<canvas v-if="showCanvas" ref="canvas" class="journey-canvas" aria-hidden="true" />
|
||||
</div>
|
||||
|
||||
Reference in New Issue
Block a user