music-video-gen/party-cathedral/src/core/animate.js
2025-11-23 20:33:32 +01:00

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();
}