From 272c4267a369da6f6ee025ae8a002a4eab496aa5 Mon Sep 17 00:00:00 2001 From: Dejvino Date: Mon, 17 Nov 2025 13:31:53 +0100 Subject: [PATCH] Refactoring: Centralize TV screen material creation --- tv-player/src/core/video-player.js | 15 ++++---------- tv-player/src/scene/tv-set.js | 33 ++++++++++++++++++++++++------ 2 files changed, 31 insertions(+), 17 deletions(-) diff --git a/tv-player/src/core/video-player.js b/tv-player/src/core/video-player.js index 4b2c364..4b028fc 100644 --- a/tv-player/src/core/video-player.js +++ b/tv-player/src/core/video-player.js @@ -1,5 +1,6 @@ import * as THREE from 'three'; import { state } from '../state.js'; +import { turnTvScreenOff, turnTvScreenOn } from '../scene/tv-set.js'; // --- Play video by index --- export function playVideoByIndex(index) { @@ -15,13 +16,7 @@ export function playVideoByIndex(index) { if (index < 0 || index >= state.videoUrls.length) { console.info('End of playlist reached. Reload tapes to start again.'); state.screenLight.intensity = 0.0; - state.tvScreen.material.dispose(); - state.tvScreen.material = new THREE.MeshPhongMaterial({ - color: 0x0a0a0a, // Deep black - shininess: 5, - specular: 0x111111 - }); - state.tvScreen.material.needsUpdate = true; + turnTvScreenOff(); state.isVideoLoaded = false; state.lastUpdateTime = -1; // force VCR to redraw return; @@ -44,10 +39,8 @@ export function playVideoByIndex(index) { state.videoTexture.needsUpdate = true; // 2. Apply the video texture to the screen mesh - state.tvScreen.material.dispose(); - state.tvScreen.material = new THREE.MeshBasicMaterial({ map: state.videoTexture }); - state.tvScreen.material.needsUpdate = true; - + turnTvScreenOn(); + // 3. Start playback state.videoElement.play().then(() => { state.isVideoLoaded = true; diff --git a/tv-player/src/scene/tv-set.js b/tv-player/src/scene/tv-set.js index a0ba50d..6232c3a 100644 --- a/tv-player/src/scene/tv-set.js +++ b/tv-player/src/scene/tv-set.js @@ -136,12 +136,7 @@ export function createTvSet(x, z, rotY) { // Position the curved screen state.tvScreen.position.set(0.0, 1.5, -2.1); - state.tvScreen.material = new THREE.MeshPhongMaterial({ - color: 0x0a0a0a, // Deep black - shininess: 5, - specular: 0x111111 - }); - state.tvScreen.material.needsUpdate = true; + turnTvScreenOff(); tvGroup.add(state.tvScreen); tvGroup.position.set(x, 0, z); @@ -164,4 +159,30 @@ export function createTvSet(x, z, rotY) { tvGroup.add(vcr); state.scene.add(tvGroup); +} + +export function turnTvScreenOff() { + if (state.tvScreen.material) { + state.tvScreen.material.dispose(); + } + state.tvScreen.material = new THREE.MeshPhongMaterial({ + color: 0x203530, + shininess: 45, + specular: 0x111111, + }); + state.tvScreen.material.needsUpdate = true; +} + +export function turnTvScreenOn() { + if (state.tvScreen.material) { + state.tvScreen.material.dispose(); + } + state.tvScreen.material = new THREE.MeshBasicMaterial({ + color: 0xffffff, + map: state.videoTexture, + fog: false, + lightMapIntensity: 0, + reflectivity: 0 + }); + state.tvScreen.material.needsUpdate = true; } \ No newline at end of file