| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102 | import {	Object3D} from '../../../build/three.module.js';import {	XRHandPrimitiveModel} from './XRHandPrimitiveModel.js';import {	XRHandMeshModel} from './XRHandMeshModel.js';class XRHandModel extends Object3D {	constructor( controller ) {		super();		this.controller = controller;		this.motionController = null;		this.envMap = null;		this.mesh = null;	}	updateMatrixWorld( force ) {		super.updateMatrixWorld( force );		if ( this.motionController ) {			this.motionController.updateMesh();		}	}}class XRHandModelFactory {	constructor() {		this.path = null;	}	setPath( path ) {		this.path = path;		return this;	}	createHandModel( controller, profile ) {		const handModel = new XRHandModel( controller );		controller.addEventListener( 'connected', ( event ) => {			const xrInputSource = event.data;			if ( xrInputSource.hand && ! handModel.motionController ) {				handModel.xrInputSource = xrInputSource;				// @todo Detect profile if not provided				if ( profile === undefined || profile === 'spheres' ) {					handModel.motionController = new XRHandPrimitiveModel( handModel, controller, this.path, xrInputSource.handedness, { primitive: 'sphere' } );				} else if ( profile === 'boxes' ) {					handModel.motionController = new XRHandPrimitiveModel( handModel, controller, this.path, xrInputSource.handedness, { primitive: 'box' } );				} else if ( profile === 'mesh' ) {					handModel.motionController = new XRHandMeshModel( handModel, controller, this.path, xrInputSource.handedness );				}			}		} );		controller.addEventListener( 'disconnected', () => {			// handModel.motionController = null;			// handModel.remove( scene );			// scene = null;		} );		return handModel;	}}export { XRHandModelFactory };
 |