|
@@ -8,6 +8,9 @@ import { Clock } from '../core/Clock.js';
|
|
|
import { Object3D } from '../core/Object3D.js';
|
|
|
import { AudioContext } from './AudioContext.js';
|
|
|
|
|
|
+var _position, _quaternion, _scale;
|
|
|
+var _orientation;
|
|
|
+
|
|
|
function AudioListener() {
|
|
|
|
|
|
Object3D.call( this );
|
|
@@ -23,6 +26,10 @@ function AudioListener() {
|
|
|
|
|
|
this.timeDelta = 0;
|
|
|
|
|
|
+ // private
|
|
|
+
|
|
|
+ this._clock = new Clock();
|
|
|
+
|
|
|
}
|
|
|
|
|
|
AudioListener.prototype = Object.assign( Object.create( Object3D.prototype ), {
|
|
@@ -91,54 +98,52 @@ AudioListener.prototype = Object.assign( Object.create( Object3D.prototype ), {
|
|
|
|
|
|
},
|
|
|
|
|
|
- updateMatrixWorld: ( function () {
|
|
|
-
|
|
|
- var position = new Vector3();
|
|
|
- var quaternion = new Quaternion();
|
|
|
- var scale = new Vector3();
|
|
|
+ updateMatrixWorld: function ( force ) {
|
|
|
|
|
|
- var orientation = new Vector3();
|
|
|
- var clock = new Clock();
|
|
|
+ Object3D.prototype.updateMatrixWorld.call( this, force );
|
|
|
|
|
|
- return function updateMatrixWorld( force ) {
|
|
|
+ if ( _position === undefined ) {
|
|
|
|
|
|
- Object3D.prototype.updateMatrixWorld.call( this, force );
|
|
|
+ _position = new Vector3();
|
|
|
+ _quaternion = new Quaternion();
|
|
|
+ _scale = new Vector3();
|
|
|
+ _orientation = new Vector3();
|
|
|
|
|
|
- var listener = this.context.listener;
|
|
|
- var up = this.up;
|
|
|
+ }
|
|
|
|
|
|
- this.timeDelta = clock.getDelta();
|
|
|
+ var listener = this.context.listener;
|
|
|
+ var up = this.up;
|
|
|
|
|
|
- this.matrixWorld.decompose( position, quaternion, scale );
|
|
|
+ this.timeDelta = this._clock.getDelta();
|
|
|
|
|
|
- orientation.set( 0, 0, - 1 ).applyQuaternion( quaternion );
|
|
|
+ this.matrixWorld.decompose( _position, _quaternion, _scale );
|
|
|
|
|
|
- if ( listener.positionX ) {
|
|
|
+ _orientation.set( 0, 0, - 1 ).applyQuaternion( _quaternion );
|
|
|
|
|
|
- // code path for Chrome (see #14393)
|
|
|
+ if ( listener.positionX ) {
|
|
|
|
|
|
- var endTime = this.context.currentTime + this.timeDelta;
|
|
|
+ // code path for Chrome (see #14393)
|
|
|
|
|
|
- listener.positionX.linearRampToValueAtTime( position.x, endTime );
|
|
|
- listener.positionY.linearRampToValueAtTime( position.y, endTime );
|
|
|
- listener.positionZ.linearRampToValueAtTime( position.z, endTime );
|
|
|
- listener.forwardX.linearRampToValueAtTime( orientation.x, endTime );
|
|
|
- listener.forwardY.linearRampToValueAtTime( orientation.y, endTime );
|
|
|
- listener.forwardZ.linearRampToValueAtTime( orientation.z, endTime );
|
|
|
- listener.upX.linearRampToValueAtTime( up.x, endTime );
|
|
|
- listener.upY.linearRampToValueAtTime( up.y, endTime );
|
|
|
- listener.upZ.linearRampToValueAtTime( up.z, endTime );
|
|
|
+ var endTime = this.context.currentTime + this.timeDelta;
|
|
|
|
|
|
- } else {
|
|
|
+ listener.positionX.linearRampToValueAtTime( _position.x, endTime );
|
|
|
+ listener.positionY.linearRampToValueAtTime( _position.y, endTime );
|
|
|
+ listener.positionZ.linearRampToValueAtTime( _position.z, endTime );
|
|
|
+ listener.forwardX.linearRampToValueAtTime( _orientation.x, endTime );
|
|
|
+ listener.forwardY.linearRampToValueAtTime( _orientation.y, endTime );
|
|
|
+ listener.forwardZ.linearRampToValueAtTime( _orientation.z, endTime );
|
|
|
+ listener.upX.linearRampToValueAtTime( up.x, endTime );
|
|
|
+ listener.upY.linearRampToValueAtTime( up.y, endTime );
|
|
|
+ listener.upZ.linearRampToValueAtTime( up.z, endTime );
|
|
|
|
|
|
- listener.setPosition( position.x, position.y, position.z );
|
|
|
- listener.setOrientation( orientation.x, orientation.y, orientation.z, up.x, up.y, up.z );
|
|
|
+ } else {
|
|
|
|
|
|
- }
|
|
|
+ listener.setPosition( _position.x, _position.y, _position.z );
|
|
|
+ listener.setOrientation( _orientation.x, _orientation.y, _orientation.z, up.x, up.y, up.z );
|
|
|
|
|
|
- };
|
|
|
+ }
|
|
|
|
|
|
- } )()
|
|
|
+ }
|
|
|
|
|
|
} );
|
|
|
|