fix: close phase 2 journey blockers

This commit is contained in:
2026-09-02 06:04:20 +03:00
parent a86767cdc6
commit 77895c01ff
19 changed files with 378 additions and 26 deletions

View File

@@ -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"

View File

@@ -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>