diff --git a/tv-player/src/core/video-player.js b/tv-player/src/core/video-player.js index e1f596f..b37e984 100644 --- a/tv-player/src/core/video-player.js +++ b/tv-player/src/core/video-player.js @@ -15,10 +15,7 @@ export function playVideoByIndex(index) { if (index < 0 || index >= state.videoUrls.length) { console.info('End of playlist reached. Reload tapes to start again.'); - setScreenEffect(2, () => { // Power-down effect - state.screenLight.intensity = 0.0; - turnTvScreenOff(); - }); + turnTvScreenOff(); state.isVideoLoaded = false; state.lastUpdateTime = -1; // force VCR to redraw return; @@ -44,7 +41,6 @@ export function playVideoByIndex(index) { turnTvScreenOn(); // 3. Start playback and trigger the warm-up effect simultaneously - setScreenEffect(1); // Trigger warm-up state.videoElement.play().then(() => { state.isVideoLoaded = true; // Use the defined base intensity for screen glow diff --git a/tv-player/src/scene/tv-set.js b/tv-player/src/scene/tv-set.js index bd88eec..0c336b2 100644 --- a/tv-player/src/scene/tv-set.js +++ b/tv-player/src/scene/tv-set.js @@ -137,7 +137,7 @@ export function createTvSet(x, z, rotY) { // Position the curved screen state.tvScreen.position.set(0.0, 1.5, -2.1); - turnTvScreenOff(); + setTvScreenOffMaterial(); tvGroup.add(state.tvScreen); tvGroup.position.set(x, 0, z); @@ -162,7 +162,7 @@ export function createTvSet(x, z, rotY) { state.scene.add(tvGroup); } -export function turnTvScreenOff() { +function setTvScreenOffMaterial() { if (state.tvScreen.material) { state.tvScreen.material.dispose(); } @@ -174,11 +174,20 @@ export function turnTvScreenOff() { state.tvScreen.material.needsUpdate = true; } +export function turnTvScreenOff() { + if (state.tvScreenPowered) { + state.tvScreenPowered = false; + setScreenEffect(2, () => { + setTvScreenOffMaterial(); + state.screenLight.intensity = 0.0; + }); // Trigger power down + } +} + export function turnTvScreenOn() { if (state.tvScreen.material) { state.tvScreen.material.dispose(); } - state.tvScreen.material = new THREE.ShaderMaterial({ uniforms: { videoTexture: { value: state.videoTexture }, @@ -191,7 +200,11 @@ export function turnTvScreenOn() { }); state.tvScreen.material.needsUpdate = true; - setScreenEffect(1); // Trigger warm-up + + if (!state.tvScreenPowered) { + state.tvScreenPowered = true; + setScreenEffect(1); // Trigger warm-up + } } /** diff --git a/tv-player/src/state.js b/tv-player/src/state.js index 22db407..d577a91 100644 --- a/tv-player/src/state.js +++ b/tv-player/src/state.js @@ -10,6 +10,7 @@ export function initState() { renderer: null, clock: new THREE.Clock(), tvScreen: null, + tvScreenPowered: false, videoTexture: null, screenLight: null, lampLightPoint: null,