feat: Implement collaboration features including user following and avatar management
This commit is contained in:
46
app/src/modules/collaboration/functions/setCameraView.ts
Normal file
46
app/src/modules/collaboration/functions/setCameraView.ts
Normal file
@@ -0,0 +1,46 @@
|
||||
import * as THREE from 'three';
|
||||
|
||||
interface SetCameraViewProps {
|
||||
controls: any;
|
||||
camera: THREE.Camera;
|
||||
position: THREE.Vector3 | { x: number; y: number; z: number };
|
||||
rotation: THREE.Euler | { x: number; y: number; z: number };
|
||||
username?: string;
|
||||
}
|
||||
|
||||
export default async function setCameraView({
|
||||
controls,
|
||||
camera,
|
||||
position,
|
||||
rotation,
|
||||
username,
|
||||
}: SetCameraViewProps) {
|
||||
if (!controls || !camera) return;
|
||||
|
||||
// Normalize position
|
||||
const newPosition = position instanceof THREE.Vector3
|
||||
? position
|
||||
: new THREE.Vector3(position.x, position.y, position.z);
|
||||
|
||||
// Normalize rotation
|
||||
const newRotation = rotation instanceof THREE.Euler
|
||||
? rotation
|
||||
: new THREE.Euler(rotation.x, rotation.y, rotation.z);
|
||||
|
||||
// Update camera position and rotation
|
||||
// camera.position.copy(newPosition);
|
||||
// camera.rotation.copy(newRotation);
|
||||
|
||||
// If your controls need to update the target, you can optionally adjust it too
|
||||
if (controls.setTarget) {
|
||||
// Setting a basic target slightly forward from new position based on rotation
|
||||
const cameraDirection = new THREE.Vector3(0, 0, -1).applyEuler(newRotation);
|
||||
const targetPosition = new THREE.Vector3().copy(newPosition).add(cameraDirection);
|
||||
|
||||
// controls.setTarget(targetPosition.x, targetPosition.y, targetPosition.z);
|
||||
controls?.setLookAt(...newPosition.toArray(), newPosition.x, 0, newPosition.z, true);
|
||||
}
|
||||
|
||||
// Optionally you can log
|
||||
console.log(`Camera view updated by ${username ?? 'unknown user'}`);
|
||||
}
|
||||
Reference in New Issue
Block a user