glbRepulsionSystem in transitionManager.js

This commit is contained in:
Anuj K 2025-09-04 09:14:12 +05:30
parent 6bd4a96e2d
commit bd2bccdcb2

View file

@ -25,6 +25,9 @@ export let mixer = null;
export let nextMixer = null; export let nextMixer = null;
export let autoRotationAngle = 0; export let autoRotationAngle = 0;
// GLB repulsion system reference (will be set by main.js)
export let glbRepulsionSystem = null;
// Setter functions to modify exported variables safely // Setter functions to modify exported variables safely
export function setCurrentModel(model) { export function setCurrentModel(model) {
currentModel = model; currentModel = model;
@ -42,6 +45,10 @@ export function setNextMixer(animMixer) {
nextMixer = animMixer; nextMixer = animMixer;
} }
export function setGLBRepulsionSystem(system) {
glbRepulsionSystem = system;
}
// Calculate camera-relative transition vectors for diagonal movement // Calculate camera-relative transition vectors for diagonal movement
export function calculateTransitionVectors(camera) { export function calculateTransitionVectors(camera) {
// Get camera's world direction // Get camera's world direction
@ -81,6 +88,7 @@ export function startTransition(direction = 1, preloadedModels, scene, camera, c
if (direction < 0 && currentScene <= 0) return; // Can't go backward from bold if (direction < 0 && currentScene <= 0) return; // Can't go backward from bold
console.log(`Starting diagonal transition: direction=${direction}, currentScene=${currentScene}`); console.log(`Starting diagonal transition: direction=${direction}, currentScene=${currentScene}`);
// Calculate camera-relative diagonal transition vectors // Calculate camera-relative diagonal transition vectors
calculateTransitionVectors(camera); calculateTransitionVectors(camera);
@ -126,6 +134,12 @@ export function startTransition(direction = 1, preloadedModels, scene, camera, c
nextModel.position.copy(transitionUpVector); nextModel.position.copy(transitionUpVector);
console.log(`Next model positioned at diagonal up vector (top-left): x=${nextModel.position.x}, y=${nextModel.position.y}, z=${nextModel.position.z}`); console.log(`Next model positioned at diagonal up vector (top-left): x=${nextModel.position.x}, y=${nextModel.position.y}, z=${nextModel.position.z}`);
} }
// Register next model with GLB repulsion system
if (glbRepulsionSystem) {
glbRepulsionSystem.originalPositions.set(nextModel, nextModel.position.clone());
}
// Add next model to scene without opacity changes - it will appear instantly when it enters the camera view // Add next model to scene without opacity changes - it will appear instantly when it enters the camera view
scene.add(nextModel); scene.add(nextModel);
} }
@ -137,6 +151,7 @@ export function updateTransition(deltaTime, scene) {
const elapsed = (performance.now() - transitionStartTime) / 1000; const elapsed = (performance.now() - transitionStartTime) / 1000;
const transitionProgress = Math.min(elapsed / transitionDuration, 1); const transitionProgress = Math.min(elapsed / transitionDuration, 1);
// Smooth easing function (ease-in-out) // Smooth easing function (ease-in-out)
const easeInOut = (t) => t * t * (3 - 2 * t); const easeInOut = (t) => t * t * (3 - 2 * t);
const easedProgress = easeInOut(transitionProgress); const easedProgress = easeInOut(transitionProgress);
@ -184,6 +199,11 @@ export function updateTransition(deltaTime, scene) {
}); });
// Clean up geometry user data completely // Clean up geometry user data completely
cleanupGeometryData(currentModel); cleanupGeometryData(currentModel);
// Remove from GLB repulsion system
if (glbRepulsionSystem) {
glbRepulsionSystem.originalPositions.delete(currentModel);
glbRepulsionSystem.currentTargets.delete(currentModel);
}
scene.remove(currentModel); scene.remove(currentModel);
console.log('Previous model removed from scene'); console.log('Previous model removed from scene');
} }
@ -194,6 +214,10 @@ export function updateTransition(deltaTime, scene) {
mixer = nextMixer; mixer = nextMixer;
// Reset position to center // Reset position to center
currentModel.position.set(0, 0, 0); currentModel.position.set(0, 0, 0);
// Update GLB repulsion system with new center position
if (glbRepulsionSystem) {
glbRepulsionSystem.originalPositions.set(currentModel, currentModel.position.clone());
}
} }
nextModel = null; nextModel = null;