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) {
|
||||
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
|
||||
|
||||
@ -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;
|
||||
|
||||
if (!state.tvScreenPowered) {
|
||||
state.tvScreenPowered = true;
|
||||
setScreenEffect(1); // Trigger warm-up
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@ -10,6 +10,7 @@ export function initState() {
|
||||
renderer: null,
|
||||
clock: new THREE.Clock(),
|
||||
tvScreen: null,
|
||||
tvScreenPowered: false,
|
||||
videoTexture: null,
|
||||
screenLight: null,
|
||||
lampLightPoint: null,
|
||||
|
||||
Loading…
Reference in New Issue
Block a user