Buckets:
ktongue/docker_container / simsite /frontend /node_modules /three-stdlib /helpers /PositionalAudioHelper.cjs
| ; | |
| Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" }); | |
| const THREE = require("three"); | |
| class PositionalAudioHelper extends THREE.Line { | |
| constructor(audio, range = 1, divisionsInnerAngle = 16, divisionsOuterAngle = 2) { | |
| const geometry = new THREE.BufferGeometry(); | |
| const divisions = divisionsInnerAngle + divisionsOuterAngle * 2; | |
| const positions = new Float32Array((divisions * 3 + 3) * 3); | |
| geometry.setAttribute("position", new THREE.BufferAttribute(positions, 3)); | |
| const materialInnerAngle = new THREE.LineBasicMaterial({ color: 65280 }); | |
| const materialOuterAngle = new THREE.LineBasicMaterial({ color: 16776960 }); | |
| super(geometry, [materialOuterAngle, materialInnerAngle]); | |
| this.type = "PositionalAudioHelper"; | |
| this.audio = audio; | |
| this.range = range; | |
| this.divisionsInnerAngle = divisionsInnerAngle; | |
| this.divisionsOuterAngle = divisionsOuterAngle; | |
| this.update(); | |
| } | |
| update() { | |
| const audio = this.audio; | |
| const range = this.range; | |
| const divisionsInnerAngle = this.divisionsInnerAngle; | |
| const divisionsOuterAngle = this.divisionsOuterAngle; | |
| const coneInnerAngle = THREE.MathUtils.degToRad(audio.panner.coneInnerAngle); | |
| const coneOuterAngle = THREE.MathUtils.degToRad(audio.panner.coneOuterAngle); | |
| const halfConeInnerAngle = coneInnerAngle / 2; | |
| const halfConeOuterAngle = coneOuterAngle / 2; | |
| let start = 0; | |
| let count = 0; | |
| let i, stride; | |
| const geometry = this.geometry; | |
| const positionAttribute = geometry.attributes.position; | |
| geometry.clearGroups(); | |
| function generateSegment(from, to, divisions, materialIndex) { | |
| const step = (to - from) / divisions; | |
| positionAttribute.setXYZ(start, 0, 0, 0); | |
| count++; | |
| for (i = from; i < to; i += step) { | |
| stride = start + count; | |
| positionAttribute.setXYZ(stride, Math.sin(i) * range, 0, Math.cos(i) * range); | |
| positionAttribute.setXYZ( | |
| stride + 1, | |
| Math.sin(Math.min(i + step, to)) * range, | |
| 0, | |
| Math.cos(Math.min(i + step, to)) * range | |
| ); | |
| positionAttribute.setXYZ(stride + 2, 0, 0, 0); | |
| count += 3; | |
| } | |
| geometry.addGroup(start, count, materialIndex); | |
| start += count; | |
| count = 0; | |
| } | |
| generateSegment(-halfConeOuterAngle, -halfConeInnerAngle, divisionsOuterAngle, 0); | |
| generateSegment(-halfConeInnerAngle, halfConeInnerAngle, divisionsInnerAngle, 1); | |
| generateSegment(halfConeInnerAngle, halfConeOuterAngle, divisionsOuterAngle, 0); | |
| positionAttribute.needsUpdate = true; | |
| if (coneInnerAngle === coneOuterAngle) | |
| this.material[0].visible = false; | |
| } | |
| dispose() { | |
| this.geometry.dispose(); | |
| this.material[0].dispose(); | |
| this.material[1].dispose(); | |
| } | |
| } | |
| exports.PositionalAudioHelper = PositionalAudioHelper; | |
| //# sourceMappingURL=PositionalAudioHelper.cjs.map | |
Xet Storage Details
- Size:
- 2.9 kB
- Xet hash:
- 8f8f772b4d2b14de5382b21a910877860421a901e9efc61f4aa560033ebe23ed
·
Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.