Refactoring: Centralize TV screen material creation
This commit is contained in:
parent
c1383e0845
commit
272c4267a3
@ -1,5 +1,6 @@
|
|||||||
import * as THREE from 'three';
|
import * as THREE from 'three';
|
||||||
import { state } from '../state.js';
|
import { state } from '../state.js';
|
||||||
|
import { turnTvScreenOff, turnTvScreenOn } from '../scene/tv-set.js';
|
||||||
|
|
||||||
// --- Play video by index ---
|
// --- Play video by index ---
|
||||||
export function playVideoByIndex(index) {
|
export function playVideoByIndex(index) {
|
||||||
@ -15,13 +16,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.');
|
||||||
state.screenLight.intensity = 0.0;
|
state.screenLight.intensity = 0.0;
|
||||||
state.tvScreen.material.dispose();
|
turnTvScreenOff();
|
||||||
state.tvScreen.material = new THREE.MeshPhongMaterial({
|
|
||||||
color: 0x0a0a0a, // Deep black
|
|
||||||
shininess: 5,
|
|
||||||
specular: 0x111111
|
|
||||||
});
|
|
||||||
state.tvScreen.material.needsUpdate = true;
|
|
||||||
state.isVideoLoaded = false;
|
state.isVideoLoaded = false;
|
||||||
state.lastUpdateTime = -1; // force VCR to redraw
|
state.lastUpdateTime = -1; // force VCR to redraw
|
||||||
return;
|
return;
|
||||||
@ -44,10 +39,8 @@ export function playVideoByIndex(index) {
|
|||||||
state.videoTexture.needsUpdate = true;
|
state.videoTexture.needsUpdate = true;
|
||||||
|
|
||||||
// 2. Apply the video texture to the screen mesh
|
// 2. Apply the video texture to the screen mesh
|
||||||
state.tvScreen.material.dispose();
|
turnTvScreenOn();
|
||||||
state.tvScreen.material = new THREE.MeshBasicMaterial({ map: state.videoTexture });
|
|
||||||
state.tvScreen.material.needsUpdate = true;
|
|
||||||
|
|
||||||
// 3. Start playback
|
// 3. Start playback
|
||||||
state.videoElement.play().then(() => {
|
state.videoElement.play().then(() => {
|
||||||
state.isVideoLoaded = true;
|
state.isVideoLoaded = true;
|
||||||
|
|||||||
@ -136,12 +136,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);
|
||||||
state.tvScreen.material = new THREE.MeshPhongMaterial({
|
turnTvScreenOff();
|
||||||
color: 0x0a0a0a, // Deep black
|
|
||||||
shininess: 5,
|
|
||||||
specular: 0x111111
|
|
||||||
});
|
|
||||||
state.tvScreen.material.needsUpdate = true;
|
|
||||||
tvGroup.add(state.tvScreen);
|
tvGroup.add(state.tvScreen);
|
||||||
|
|
||||||
tvGroup.position.set(x, 0, z);
|
tvGroup.position.set(x, 0, z);
|
||||||
@ -164,4 +159,30 @@ export function createTvSet(x, z, rotY) {
|
|||||||
tvGroup.add(vcr);
|
tvGroup.add(vcr);
|
||||||
|
|
||||||
state.scene.add(tvGroup);
|
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;
|
||||||
}
|
}
|
||||||
Loading…
Reference in New Issue
Block a user