49 lines
1.4 KiB
JavaScript
49 lines
1.4 KiB
JavaScript
import * as THREE from 'three';
|
|
import { state } from '../state.js';
|
|
import { onResizePostprocessing } from './postprocessing.js';
|
|
import { updateScreenEffect } from '../scene/magic-mirror.js'
|
|
import sceneFeatureManager from '../scene/SceneFeatureManager.js';
|
|
|
|
function updateShaderTime() {
|
|
if (state.tvScreen && state.tvScreen.material.uniforms && state.tvScreen.material.uniforms.u_time) {
|
|
state.tvScreen.material.uniforms.u_time.value = state.clock.getElapsedTime();
|
|
}
|
|
}
|
|
|
|
// --- Animation Loop ---
|
|
let lastTime = -1;
|
|
export function animate() {
|
|
requestAnimationFrame(animate);
|
|
|
|
let deltaTime = 0;
|
|
if (lastTime === -1) {
|
|
lastTime = state.clock.getElapsedTime();
|
|
deltaTime = 1;
|
|
} else {
|
|
const newTime = state.clock.getElapsedTime();
|
|
deltaTime = newTime - lastTime;
|
|
lastTime = newTime;
|
|
}
|
|
|
|
if (deltaTime > 0) {
|
|
sceneFeatureManager.update(deltaTime);
|
|
state.effectsManager.update(deltaTime);
|
|
updateShaderTime();
|
|
updateScreenEffect();
|
|
}
|
|
|
|
// RENDER!
|
|
if (state.composer) {
|
|
state.composer.render();
|
|
} else {
|
|
state.renderer.render(state.scene, state.camera);
|
|
}
|
|
}
|
|
|
|
// --- Window Resize Handler ---
|
|
export function onWindowResize() {
|
|
state.camera.aspect = window.innerWidth / window.innerHeight;
|
|
state.camera.updateProjectionMatrix();
|
|
state.renderer.setSize(window.innerWidth, window.innerHeight);
|
|
onResizePostprocessing();
|
|
} |