Fix: TV screen power on and off effect for multiple videos
This commit is contained in:
parent
293834b704
commit
50d755793d
@ -15,10 +15,7 @@ export function playVideoByIndex(index) {
|
|||||||
|
|
||||||
if (index < 0 || index >= state.videoUrls.length) {
|
if (index < 0 || index >= state.videoUrls.length) {
|
||||||
console.info('End of playlist reached. Reload tapes to start again.');
|
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.isVideoLoaded = false;
|
||||||
state.lastUpdateTime = -1; // force VCR to redraw
|
state.lastUpdateTime = -1; // force VCR to redraw
|
||||||
return;
|
return;
|
||||||
@ -44,7 +41,6 @@ export function playVideoByIndex(index) {
|
|||||||
turnTvScreenOn();
|
turnTvScreenOn();
|
||||||
|
|
||||||
// 3. Start playback and trigger the warm-up effect simultaneously
|
// 3. Start playback and trigger the warm-up effect simultaneously
|
||||||
setScreenEffect(1); // Trigger warm-up
|
|
||||||
state.videoElement.play().then(() => {
|
state.videoElement.play().then(() => {
|
||||||
state.isVideoLoaded = true;
|
state.isVideoLoaded = true;
|
||||||
// Use the defined base intensity for screen glow
|
// Use the defined base intensity for screen glow
|
||||||
|
|||||||
@ -137,7 +137,7 @@ export function createTvSet(x, z, rotY) {
|
|||||||
|
|
||||||
// Position the curved screen
|
// Position the curved screen
|
||||||
state.tvScreen.position.set(0.0, 1.5, -2.1);
|
state.tvScreen.position.set(0.0, 1.5, -2.1);
|
||||||
turnTvScreenOff();
|
setTvScreenOffMaterial();
|
||||||
tvGroup.add(state.tvScreen);
|
tvGroup.add(state.tvScreen);
|
||||||
|
|
||||||
tvGroup.position.set(x, 0, z);
|
tvGroup.position.set(x, 0, z);
|
||||||
@ -162,7 +162,7 @@ export function createTvSet(x, z, rotY) {
|
|||||||
state.scene.add(tvGroup);
|
state.scene.add(tvGroup);
|
||||||
}
|
}
|
||||||
|
|
||||||
export function turnTvScreenOff() {
|
function setTvScreenOffMaterial() {
|
||||||
if (state.tvScreen.material) {
|
if (state.tvScreen.material) {
|
||||||
state.tvScreen.material.dispose();
|
state.tvScreen.material.dispose();
|
||||||
}
|
}
|
||||||
@ -174,11 +174,20 @@ export function turnTvScreenOff() {
|
|||||||
state.tvScreen.material.needsUpdate = true;
|
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() {
|
export function turnTvScreenOn() {
|
||||||
if (state.tvScreen.material) {
|
if (state.tvScreen.material) {
|
||||||
state.tvScreen.material.dispose();
|
state.tvScreen.material.dispose();
|
||||||
}
|
}
|
||||||
|
|
||||||
state.tvScreen.material = new THREE.ShaderMaterial({
|
state.tvScreen.material = new THREE.ShaderMaterial({
|
||||||
uniforms: {
|
uniforms: {
|
||||||
videoTexture: { value: state.videoTexture },
|
videoTexture: { value: state.videoTexture },
|
||||||
@ -191,7 +200,11 @@ export function turnTvScreenOn() {
|
|||||||
});
|
});
|
||||||
|
|
||||||
state.tvScreen.material.needsUpdate = true;
|
state.tvScreen.material.needsUpdate = true;
|
||||||
|
|
||||||
|
if (!state.tvScreenPowered) {
|
||||||
|
state.tvScreenPowered = true;
|
||||||
setScreenEffect(1); // Trigger warm-up
|
setScreenEffect(1); // Trigger warm-up
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@ -10,6 +10,7 @@ export function initState() {
|
|||||||
renderer: null,
|
renderer: null,
|
||||||
clock: new THREE.Clock(),
|
clock: new THREE.Clock(),
|
||||||
tvScreen: null,
|
tvScreen: null,
|
||||||
|
tvScreenPowered: false,
|
||||||
videoTexture: null,
|
videoTexture: null,
|
||||||
screenLight: null,
|
screenLight: null,
|
||||||
lampLightPoint: null,
|
lampLightPoint: null,
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user