Fix: TV screen power on and off effect for multiple videos

This commit is contained in:
Dejvino 2025-11-17 14:50:12 +01:00
parent 293834b704
commit 50d755793d
3 changed files with 19 additions and 9 deletions

View File

@ -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();
});
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

View File

@ -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,8 +200,12 @@ export function turnTvScreenOn() {
});
state.tvScreen.material.needsUpdate = true;
if (!state.tvScreenPowered) {
state.tvScreenPowered = true;
setScreenEffect(1); // Trigger warm-up
}
}
/**
* Controls the warm-up and power-down effects on the TV screen.

View File

@ -10,6 +10,7 @@ export function initState() {
renderer: null,
clock: new THREE.Clock(),
tvScreen: null,
tvScreenPowered: false,
videoTexture: null,
screenLight: null,
lampLightPoint: null,