@babylonjs/loaders 5.0.0-rc.5 → 5.0.0-rc.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/OBJ/index.d.ts +4 -4
- package/OBJ/index.js +4 -4
- package/OBJ/mtlFileLoader.d.ts +41 -41
- package/OBJ/mtlFileLoader.js +232 -232
- package/OBJ/objFileLoader.d.ts +126 -126
- package/OBJ/objFileLoader.js +296 -296
- package/OBJ/objLoadingOptions.d.ts +43 -43
- package/OBJ/objLoadingOptions.js +1 -1
- package/OBJ/solidParser.d.ts +154 -154
- package/OBJ/solidParser.js +693 -693
- package/STL/index.d.ts +1 -1
- package/STL/index.js +1 -1
- package/STL/stlFileLoader.d.ts +64 -64
- package/STL/stlFileLoader.js +233 -233
- package/glTF/1.0/glTFBinaryExtension.d.ts +13 -13
- package/glTF/1.0/glTFBinaryExtension.js +60 -60
- package/glTF/1.0/glTFLoader.d.ts +136 -136
- package/glTF/1.0/glTFLoader.js +1815 -1815
- package/glTF/1.0/glTFLoaderInterfaces.d.ts +412 -412
- package/glTF/1.0/glTFLoaderInterfaces.js +95 -95
- package/glTF/1.0/glTFLoaderUtils.d.ts +62 -62
- package/glTF/1.0/glTFLoaderUtils.js +250 -250
- package/glTF/1.0/glTFMaterialsCommonExtension.d.ts +10 -10
- package/glTF/1.0/glTFMaterialsCommonExtension.js +129 -129
- package/glTF/1.0/index.d.ts +5 -5
- package/glTF/1.0/index.js +5 -5
- package/glTF/2.0/Extensions/EXT_lights_image_based.d.ts +43 -43
- package/glTF/2.0/Extensions/EXT_lights_image_based.js +117 -117
- package/glTF/2.0/Extensions/EXT_mesh_gpu_instancing.d.ts +36 -36
- package/glTF/2.0/Extensions/EXT_mesh_gpu_instancing.js +88 -88
- package/glTF/2.0/Extensions/EXT_meshopt_compression.d.ts +34 -34
- package/glTF/2.0/Extensions/EXT_meshopt_compression.js +49 -49
- package/glTF/2.0/Extensions/EXT_texture_webp.d.ts +29 -29
- package/glTF/2.0/Extensions/EXT_texture_webp.js +40 -40
- package/glTF/2.0/Extensions/ExtrasAsMetadata.d.ts +50 -50
- package/glTF/2.0/Extensions/ExtrasAsMetadata.js +73 -73
- package/glTF/2.0/Extensions/KHR_draco_mesh_compression.d.ts +39 -39
- package/glTF/2.0/Extensions/KHR_draco_mesh_compression.js +112 -112
- package/glTF/2.0/Extensions/KHR_lights_punctual.d.ts +36 -36
- package/glTF/2.0/Extensions/KHR_lights_punctual.js +89 -89
- package/glTF/2.0/Extensions/KHR_materials_clearcoat.d.ts +39 -39
- package/glTF/2.0/Extensions/KHR_materials_clearcoat.js +94 -94
- package/glTF/2.0/Extensions/KHR_materials_emissive_strength.d.ts +38 -38
- package/glTF/2.0/Extensions/KHR_materials_emissive_strength.js +53 -53
- package/glTF/2.0/Extensions/KHR_materials_ior.d.ts +42 -42
- package/glTF/2.0/Extensions/KHR_materials_ior.js +62 -62
- package/glTF/2.0/Extensions/KHR_materials_pbrSpecularGlossiness.d.ts +38 -38
- package/glTF/2.0/Extensions/KHR_materials_pbrSpecularGlossiness.js +80 -80
- package/glTF/2.0/Extensions/KHR_materials_sheen.d.ts +39 -39
- package/glTF/2.0/Extensions/KHR_materials_sheen.js +84 -84
- package/glTF/2.0/Extensions/KHR_materials_specular.d.ts +38 -38
- package/glTF/2.0/Extensions/KHR_materials_specular.js +74 -74
- package/glTF/2.0/Extensions/KHR_materials_translucency.d.ts +39 -39
- package/glTF/2.0/Extensions/KHR_materials_translucency.js +83 -83
- package/glTF/2.0/Extensions/KHR_materials_transmission.d.ts +38 -38
- package/glTF/2.0/Extensions/KHR_materials_transmission.js +288 -288
- package/glTF/2.0/Extensions/KHR_materials_unlit.d.ts +38 -38
- package/glTF/2.0/Extensions/KHR_materials_unlit.js +73 -73
- package/glTF/2.0/Extensions/KHR_materials_variants.d.ts +87 -87
- package/glTF/2.0/Extensions/KHR_materials_variants.js +254 -254
- package/glTF/2.0/Extensions/KHR_materials_volume.d.ts +39 -39
- package/glTF/2.0/Extensions/KHR_materials_volume.js +85 -85
- package/glTF/2.0/Extensions/KHR_mesh_quantization.d.ts +22 -22
- package/glTF/2.0/Extensions/KHR_mesh_quantization.js +23 -23
- package/glTF/2.0/Extensions/KHR_texture_basisu.d.ts +29 -29
- package/glTF/2.0/Extensions/KHR_texture_basisu.js +40 -40
- package/glTF/2.0/Extensions/KHR_texture_transform.d.ts +33 -33
- package/glTF/2.0/Extensions/KHR_texture_transform.js +61 -61
- package/glTF/2.0/Extensions/KHR_xmp_json_ld.d.ts +32 -32
- package/glTF/2.0/Extensions/KHR_xmp_json_ld.js +49 -49
- package/glTF/2.0/Extensions/MSFT_audio_emitter.d.ts +54 -54
- package/glTF/2.0/Extensions/MSFT_audio_emitter.js +240 -240
- package/glTF/2.0/Extensions/MSFT_lod.d.ts +109 -109
- package/glTF/2.0/Extensions/MSFT_lod.js +369 -369
- package/glTF/2.0/Extensions/MSFT_minecraftMesh.d.ts +14 -14
- package/glTF/2.0/Extensions/MSFT_minecraftMesh.js +36 -36
- package/glTF/2.0/Extensions/MSFT_sRGBFactors.d.ts +14 -14
- package/glTF/2.0/Extensions/MSFT_sRGBFactors.js +36 -36
- package/glTF/2.0/Extensions/index.d.ts +26 -26
- package/glTF/2.0/Extensions/index.js +26 -26
- package/glTF/2.0/glTFLoader.d.ts +405 -405
- package/glTF/2.0/glTFLoader.js +2366 -2366
- package/glTF/2.0/glTFLoaderExtension.d.ts +152 -152
- package/glTF/2.0/glTFLoaderExtension.js +1 -1
- package/glTF/2.0/glTFLoaderInterfaces.d.ts +211 -211
- package/glTF/2.0/glTFLoaderInterfaces.js +1 -1
- package/glTF/2.0/index.d.ts +4 -4
- package/glTF/2.0/index.js +4 -4
- package/glTF/glTFFileLoader.d.ts +433 -433
- package/glTF/glTFFileLoader.js +927 -927
- package/glTF/glTFValidation.d.ts +29 -29
- package/glTF/glTFValidation.js +123 -123
- package/glTF/index.d.ts +5 -5
- package/glTF/index.js +5 -5
- package/index.d.ts +3 -3
- package/index.js +3 -3
- package/legacy/legacy-glTF.d.ts +2 -2
- package/legacy/legacy-glTF.js +18 -18
- package/legacy/legacy-glTF1.d.ts +2 -2
- package/legacy/legacy-glTF1.js +14 -14
- package/legacy/legacy-glTF1FileLoader.d.ts +2 -2
- package/legacy/legacy-glTF1FileLoader.js +3 -3
- package/legacy/legacy-glTF2.d.ts +2 -2
- package/legacy/legacy-glTF2.js +32 -32
- package/legacy/legacy-glTF2FileLoader.d.ts +2 -2
- package/legacy/legacy-glTF2FileLoader.js +3 -3
- package/legacy/legacy-glTFFileLoader.d.ts +3 -3
- package/legacy/legacy-glTFFileLoader.js +4 -4
- package/legacy/legacy-objFileLoader.d.ts +1 -1
- package/legacy/legacy-objFileLoader.js +12 -12
- package/legacy/legacy-stlFileLoader.d.ts +1 -1
- package/legacy/legacy-stlFileLoader.js +12 -12
- package/legacy/legacy.d.ts +6 -6
- package/legacy/legacy.js +7 -7
- package/package.json +3 -3
|
@@ -1,241 +1,241 @@
|
|
|
1
|
-
import { Vector3 } from "@babylonjs/core/Maths/math.vector.js";
|
|
2
|
-
import { Tools } from "@babylonjs/core/Misc/tools.js";
|
|
3
|
-
import { AnimationEvent } from "@babylonjs/core/Animations/animationEvent.js";
|
|
4
|
-
import { Sound } from "@babylonjs/core/Audio/sound.js";
|
|
5
|
-
import { WeightedSound } from "@babylonjs/core/Audio/weightedsound.js";
|
|
6
|
-
import { GLTFLoader, ArrayItem } from "../glTFLoader
|
|
7
|
-
var NAME = "MSFT_audio_emitter";
|
|
8
|
-
/**
|
|
9
|
-
* [Specification](https://github.com/najadojo/glTF/tree/MSFT_audio_emitter/extensions/2.0/Vendor/MSFT_audio_emitter)
|
|
10
|
-
*/
|
|
11
|
-
var MSFT_audio_emitter = /** @class */ (function () {
|
|
12
|
-
/**
|
|
13
|
-
* @param loader
|
|
14
|
-
* @hidden
|
|
15
|
-
*/
|
|
16
|
-
function MSFT_audio_emitter(loader) {
|
|
17
|
-
/**
|
|
18
|
-
* The name of this extension.
|
|
19
|
-
*/
|
|
20
|
-
this.name = NAME;
|
|
21
|
-
this._loader = loader;
|
|
22
|
-
this.enabled = this._loader.isExtensionUsed(NAME);
|
|
23
|
-
}
|
|
24
|
-
/** @hidden */
|
|
25
|
-
MSFT_audio_emitter.prototype.dispose = function () {
|
|
26
|
-
this._loader = null;
|
|
27
|
-
this._clips = null;
|
|
28
|
-
this._emitters = null;
|
|
29
|
-
};
|
|
30
|
-
/** @hidden */
|
|
31
|
-
MSFT_audio_emitter.prototype.onLoading = function () {
|
|
32
|
-
var extensions = this._loader.gltf.extensions;
|
|
33
|
-
if (extensions && extensions[this.name]) {
|
|
34
|
-
var extension = extensions[this.name];
|
|
35
|
-
this._clips = extension.clips;
|
|
36
|
-
this._emitters = extension.emitters;
|
|
37
|
-
ArrayItem.Assign(this._clips);
|
|
38
|
-
ArrayItem.Assign(this._emitters);
|
|
39
|
-
}
|
|
40
|
-
};
|
|
41
|
-
/**
|
|
42
|
-
* @param context
|
|
43
|
-
* @param scene
|
|
44
|
-
* @hidden
|
|
45
|
-
*/
|
|
46
|
-
MSFT_audio_emitter.prototype.loadSceneAsync = function (context, scene) {
|
|
47
|
-
var _this = this;
|
|
48
|
-
return GLTFLoader.LoadExtensionAsync(context, scene, this.name, function (extensionContext, extension) {
|
|
49
|
-
var promises = new Array();
|
|
50
|
-
promises.push(_this._loader.loadSceneAsync(context, scene));
|
|
51
|
-
for (var _i = 0, _a = extension.emitters; _i < _a.length; _i++) {
|
|
52
|
-
var emitterIndex = _a[_i];
|
|
53
|
-
var emitter = ArrayItem.Get("".concat(extensionContext, "/emitters"), _this._emitters, emitterIndex);
|
|
54
|
-
if (emitter.refDistance != undefined ||
|
|
55
|
-
emitter.maxDistance != undefined ||
|
|
56
|
-
emitter.rolloffFactor != undefined ||
|
|
57
|
-
emitter.distanceModel != undefined ||
|
|
58
|
-
emitter.innerAngle != undefined ||
|
|
59
|
-
emitter.outerAngle != undefined) {
|
|
60
|
-
throw new Error("".concat(extensionContext, ": Direction or Distance properties are not allowed on emitters attached to a scene"));
|
|
61
|
-
}
|
|
62
|
-
promises.push(_this._loadEmitterAsync("".concat(extensionContext, "/emitters/").concat(emitter.index), emitter));
|
|
63
|
-
}
|
|
64
|
-
return Promise.all(promises).then(function () { });
|
|
65
|
-
});
|
|
66
|
-
};
|
|
67
|
-
/**
|
|
68
|
-
* @param context
|
|
69
|
-
* @param node
|
|
70
|
-
* @param assign
|
|
71
|
-
* @hidden
|
|
72
|
-
*/
|
|
73
|
-
MSFT_audio_emitter.prototype.loadNodeAsync = function (context, node, assign) {
|
|
74
|
-
var _this = this;
|
|
75
|
-
return GLTFLoader.LoadExtensionAsync(context, node, this.name, function (extensionContext, extension) {
|
|
76
|
-
var promises = new Array();
|
|
77
|
-
return _this._loader
|
|
78
|
-
.loadNodeAsync(extensionContext, node, function (babylonMesh) {
|
|
79
|
-
var _loop_1 = function (emitterIndex) {
|
|
80
|
-
var emitter = ArrayItem.Get("".concat(extensionContext, "/emitters"), _this._emitters, emitterIndex);
|
|
81
|
-
promises.push(_this._loadEmitterAsync("".concat(extensionContext, "/emitters/").concat(emitter.index), emitter).then(function () {
|
|
82
|
-
for (var _i = 0, _a = emitter._babylonSounds; _i < _a.length; _i++) {
|
|
83
|
-
var sound = _a[_i];
|
|
84
|
-
sound.attachToMesh(babylonMesh);
|
|
85
|
-
if (emitter.innerAngle != undefined || emitter.outerAngle != undefined) {
|
|
86
|
-
sound.setLocalDirectionToMesh(Vector3.Forward());
|
|
87
|
-
sound.setDirectionalCone(2 * Tools.ToDegrees(emitter.innerAngle == undefined ? Math.PI : emitter.innerAngle), 2 * Tools.ToDegrees(emitter.outerAngle == undefined ? Math.PI : emitter.outerAngle), 0);
|
|
88
|
-
}
|
|
89
|
-
}
|
|
90
|
-
}));
|
|
91
|
-
};
|
|
92
|
-
for (var _i = 0, _a = extension.emitters; _i < _a.length; _i++) {
|
|
93
|
-
var emitterIndex = _a[_i];
|
|
94
|
-
_loop_1(emitterIndex);
|
|
95
|
-
}
|
|
96
|
-
assign(babylonMesh);
|
|
97
|
-
})
|
|
98
|
-
.then(function (babylonMesh) {
|
|
99
|
-
return Promise.all(promises).then(function () {
|
|
100
|
-
return babylonMesh;
|
|
101
|
-
});
|
|
102
|
-
});
|
|
103
|
-
});
|
|
104
|
-
};
|
|
105
|
-
/**
|
|
106
|
-
* @param context
|
|
107
|
-
* @param animation
|
|
108
|
-
* @hidden
|
|
109
|
-
*/
|
|
110
|
-
MSFT_audio_emitter.prototype.loadAnimationAsync = function (context, animation) {
|
|
111
|
-
var _this = this;
|
|
112
|
-
return GLTFLoader.LoadExtensionAsync(context, animation, this.name, function (extensionContext, extension) {
|
|
113
|
-
return _this._loader.loadAnimationAsync(context, animation).then(function (babylonAnimationGroup) {
|
|
114
|
-
var promises = new Array();
|
|
115
|
-
ArrayItem.Assign(extension.events);
|
|
116
|
-
for (var _i = 0, _a = extension.events; _i < _a.length; _i++) {
|
|
117
|
-
var event_1 = _a[_i];
|
|
118
|
-
promises.push(_this._loadAnimationEventAsync("".concat(extensionContext, "/events/").concat(event_1.index), context, animation, event_1, babylonAnimationGroup));
|
|
119
|
-
}
|
|
120
|
-
return Promise.all(promises).then(function () {
|
|
121
|
-
return babylonAnimationGroup;
|
|
122
|
-
});
|
|
123
|
-
});
|
|
124
|
-
});
|
|
125
|
-
};
|
|
126
|
-
MSFT_audio_emitter.prototype._loadClipAsync = function (context, clip) {
|
|
127
|
-
if (clip._objectURL) {
|
|
128
|
-
return clip._objectURL;
|
|
129
|
-
}
|
|
130
|
-
var promise;
|
|
131
|
-
if (clip.uri) {
|
|
132
|
-
promise = this._loader.loadUriAsync(context, clip, clip.uri);
|
|
133
|
-
}
|
|
134
|
-
else {
|
|
135
|
-
var bufferView = ArrayItem.Get("".concat(context, "/bufferView"), this._loader.gltf.bufferViews, clip.bufferView);
|
|
136
|
-
promise = this._loader.loadBufferViewAsync("/bufferViews/".concat(bufferView.index), bufferView);
|
|
137
|
-
}
|
|
138
|
-
clip._objectURL = promise.then(function (data) {
|
|
139
|
-
return URL.createObjectURL(new Blob([data], { type: clip.mimeType }));
|
|
140
|
-
});
|
|
141
|
-
return clip._objectURL;
|
|
142
|
-
};
|
|
143
|
-
MSFT_audio_emitter.prototype._loadEmitterAsync = function (context, emitter) {
|
|
144
|
-
var _this = this;
|
|
145
|
-
emitter._babylonSounds = emitter._babylonSounds || [];
|
|
146
|
-
if (!emitter._babylonData) {
|
|
147
|
-
var clipPromises = new Array();
|
|
148
|
-
var name_1 = emitter.name || "emitter".concat(emitter.index);
|
|
149
|
-
var options_1 = {
|
|
150
|
-
loop: false,
|
|
151
|
-
autoplay: false,
|
|
152
|
-
volume: emitter.volume == undefined ? 1 : emitter.volume,
|
|
153
|
-
};
|
|
154
|
-
var _loop_2 = function (i) {
|
|
155
|
-
var clipContext = "/extensions/".concat(this_1.name, "/clips");
|
|
156
|
-
var clip = ArrayItem.Get(clipContext, this_1._clips, emitter.clips[i].clip);
|
|
157
|
-
clipPromises.push(this_1._loadClipAsync("".concat(clipContext, "/").concat(emitter.clips[i].clip), clip).then(function (objectURL) {
|
|
158
|
-
var sound = (emitter._babylonSounds[i] = new Sound(name_1, objectURL, _this._loader.babylonScene, null, options_1));
|
|
159
|
-
sound.refDistance = emitter.refDistance || 1;
|
|
160
|
-
sound.maxDistance = emitter.maxDistance || 256;
|
|
161
|
-
sound.rolloffFactor = emitter.rolloffFactor || 1;
|
|
162
|
-
sound.distanceModel = emitter.distanceModel || "exponential";
|
|
163
|
-
}));
|
|
164
|
-
};
|
|
165
|
-
var this_1 = this;
|
|
166
|
-
for (var i = 0; i < emitter.clips.length; i++) {
|
|
167
|
-
_loop_2(i);
|
|
168
|
-
}
|
|
169
|
-
var promise = Promise.all(clipPromises).then(function () {
|
|
170
|
-
var weights = emitter.clips.map(function (clip) {
|
|
171
|
-
return clip.weight || 1;
|
|
172
|
-
});
|
|
173
|
-
var weightedSound = new WeightedSound(emitter.loop || false, emitter._babylonSounds, weights);
|
|
174
|
-
if (emitter.innerAngle) {
|
|
175
|
-
weightedSound.directionalConeInnerAngle = 2 * Tools.ToDegrees(emitter.innerAngle);
|
|
176
|
-
}
|
|
177
|
-
if (emitter.outerAngle) {
|
|
178
|
-
weightedSound.directionalConeOuterAngle = 2 * Tools.ToDegrees(emitter.outerAngle);
|
|
179
|
-
}
|
|
180
|
-
if (emitter.volume) {
|
|
181
|
-
weightedSound.volume = emitter.volume;
|
|
182
|
-
}
|
|
183
|
-
emitter._babylonData.sound = weightedSound;
|
|
184
|
-
});
|
|
185
|
-
emitter._babylonData = {
|
|
186
|
-
loaded: promise,
|
|
187
|
-
};
|
|
188
|
-
}
|
|
189
|
-
return emitter._babylonData.loaded;
|
|
190
|
-
};
|
|
191
|
-
MSFT_audio_emitter.prototype._getEventAction = function (context, sound, action, time, startOffset) {
|
|
192
|
-
switch (action) {
|
|
193
|
-
case "play" /* play */: {
|
|
194
|
-
return function (currentFrame) {
|
|
195
|
-
var frameOffset = (startOffset || 0) + (currentFrame - time);
|
|
196
|
-
sound.play(frameOffset);
|
|
197
|
-
};
|
|
198
|
-
}
|
|
199
|
-
case "stop" /* stop */: {
|
|
200
|
-
return function () {
|
|
201
|
-
sound.stop();
|
|
202
|
-
};
|
|
203
|
-
}
|
|
204
|
-
case "pause" /* pause */: {
|
|
205
|
-
return function () {
|
|
206
|
-
sound.pause();
|
|
207
|
-
};
|
|
208
|
-
}
|
|
209
|
-
default: {
|
|
210
|
-
throw new Error("".concat(context, ": Unsupported action ").concat(action));
|
|
211
|
-
}
|
|
212
|
-
}
|
|
213
|
-
};
|
|
214
|
-
MSFT_audio_emitter.prototype._loadAnimationEventAsync = function (context, animationContext, animation, event, babylonAnimationGroup) {
|
|
215
|
-
var _this = this;
|
|
216
|
-
if (babylonAnimationGroup.targetedAnimations.length == 0) {
|
|
217
|
-
return Promise.resolve();
|
|
218
|
-
}
|
|
219
|
-
var babylonAnimation = babylonAnimationGroup.targetedAnimations[0];
|
|
220
|
-
var emitterIndex = event.emitter;
|
|
221
|
-
var emitter = ArrayItem.Get("/extensions/".concat(this.name, "/emitters"), this._emitters, emitterIndex);
|
|
222
|
-
return this._loadEmitterAsync(context, emitter).then(function () {
|
|
223
|
-
var sound = emitter._babylonData.sound;
|
|
224
|
-
if (sound) {
|
|
225
|
-
var babylonAnimationEvent = new AnimationEvent(event.time, _this._getEventAction(context, sound, event.action, event.time, event.startOffset));
|
|
226
|
-
babylonAnimation.animation.addEvent(babylonAnimationEvent);
|
|
227
|
-
// Make sure all started audio stops when this animation is terminated.
|
|
228
|
-
babylonAnimationGroup.onAnimationGroupEndObservable.add(function () {
|
|
229
|
-
sound.stop();
|
|
230
|
-
});
|
|
231
|
-
babylonAnimationGroup.onAnimationGroupPauseObservable.add(function () {
|
|
232
|
-
sound.pause();
|
|
233
|
-
});
|
|
234
|
-
}
|
|
235
|
-
});
|
|
236
|
-
};
|
|
237
|
-
return MSFT_audio_emitter;
|
|
238
|
-
}());
|
|
239
|
-
export { MSFT_audio_emitter };
|
|
240
|
-
GLTFLoader.RegisterExtension(NAME, function (loader) { return new MSFT_audio_emitter(loader); });
|
|
1
|
+
import { Vector3 } from "@babylonjs/core/Maths/math.vector.js";
|
|
2
|
+
import { Tools } from "@babylonjs/core/Misc/tools.js";
|
|
3
|
+
import { AnimationEvent } from "@babylonjs/core/Animations/animationEvent.js";
|
|
4
|
+
import { Sound } from "@babylonjs/core/Audio/sound.js";
|
|
5
|
+
import { WeightedSound } from "@babylonjs/core/Audio/weightedsound.js";
|
|
6
|
+
import { GLTFLoader, ArrayItem } from "../glTFLoader";
|
|
7
|
+
var NAME = "MSFT_audio_emitter";
|
|
8
|
+
/**
|
|
9
|
+
* [Specification](https://github.com/najadojo/glTF/tree/MSFT_audio_emitter/extensions/2.0/Vendor/MSFT_audio_emitter)
|
|
10
|
+
*/
|
|
11
|
+
var MSFT_audio_emitter = /** @class */ (function () {
|
|
12
|
+
/**
|
|
13
|
+
* @param loader
|
|
14
|
+
* @hidden
|
|
15
|
+
*/
|
|
16
|
+
function MSFT_audio_emitter(loader) {
|
|
17
|
+
/**
|
|
18
|
+
* The name of this extension.
|
|
19
|
+
*/
|
|
20
|
+
this.name = NAME;
|
|
21
|
+
this._loader = loader;
|
|
22
|
+
this.enabled = this._loader.isExtensionUsed(NAME);
|
|
23
|
+
}
|
|
24
|
+
/** @hidden */
|
|
25
|
+
MSFT_audio_emitter.prototype.dispose = function () {
|
|
26
|
+
this._loader = null;
|
|
27
|
+
this._clips = null;
|
|
28
|
+
this._emitters = null;
|
|
29
|
+
};
|
|
30
|
+
/** @hidden */
|
|
31
|
+
MSFT_audio_emitter.prototype.onLoading = function () {
|
|
32
|
+
var extensions = this._loader.gltf.extensions;
|
|
33
|
+
if (extensions && extensions[this.name]) {
|
|
34
|
+
var extension = extensions[this.name];
|
|
35
|
+
this._clips = extension.clips;
|
|
36
|
+
this._emitters = extension.emitters;
|
|
37
|
+
ArrayItem.Assign(this._clips);
|
|
38
|
+
ArrayItem.Assign(this._emitters);
|
|
39
|
+
}
|
|
40
|
+
};
|
|
41
|
+
/**
|
|
42
|
+
* @param context
|
|
43
|
+
* @param scene
|
|
44
|
+
* @hidden
|
|
45
|
+
*/
|
|
46
|
+
MSFT_audio_emitter.prototype.loadSceneAsync = function (context, scene) {
|
|
47
|
+
var _this = this;
|
|
48
|
+
return GLTFLoader.LoadExtensionAsync(context, scene, this.name, function (extensionContext, extension) {
|
|
49
|
+
var promises = new Array();
|
|
50
|
+
promises.push(_this._loader.loadSceneAsync(context, scene));
|
|
51
|
+
for (var _i = 0, _a = extension.emitters; _i < _a.length; _i++) {
|
|
52
|
+
var emitterIndex = _a[_i];
|
|
53
|
+
var emitter = ArrayItem.Get("".concat(extensionContext, "/emitters"), _this._emitters, emitterIndex);
|
|
54
|
+
if (emitter.refDistance != undefined ||
|
|
55
|
+
emitter.maxDistance != undefined ||
|
|
56
|
+
emitter.rolloffFactor != undefined ||
|
|
57
|
+
emitter.distanceModel != undefined ||
|
|
58
|
+
emitter.innerAngle != undefined ||
|
|
59
|
+
emitter.outerAngle != undefined) {
|
|
60
|
+
throw new Error("".concat(extensionContext, ": Direction or Distance properties are not allowed on emitters attached to a scene"));
|
|
61
|
+
}
|
|
62
|
+
promises.push(_this._loadEmitterAsync("".concat(extensionContext, "/emitters/").concat(emitter.index), emitter));
|
|
63
|
+
}
|
|
64
|
+
return Promise.all(promises).then(function () { });
|
|
65
|
+
});
|
|
66
|
+
};
|
|
67
|
+
/**
|
|
68
|
+
* @param context
|
|
69
|
+
* @param node
|
|
70
|
+
* @param assign
|
|
71
|
+
* @hidden
|
|
72
|
+
*/
|
|
73
|
+
MSFT_audio_emitter.prototype.loadNodeAsync = function (context, node, assign) {
|
|
74
|
+
var _this = this;
|
|
75
|
+
return GLTFLoader.LoadExtensionAsync(context, node, this.name, function (extensionContext, extension) {
|
|
76
|
+
var promises = new Array();
|
|
77
|
+
return _this._loader
|
|
78
|
+
.loadNodeAsync(extensionContext, node, function (babylonMesh) {
|
|
79
|
+
var _loop_1 = function (emitterIndex) {
|
|
80
|
+
var emitter = ArrayItem.Get("".concat(extensionContext, "/emitters"), _this._emitters, emitterIndex);
|
|
81
|
+
promises.push(_this._loadEmitterAsync("".concat(extensionContext, "/emitters/").concat(emitter.index), emitter).then(function () {
|
|
82
|
+
for (var _i = 0, _a = emitter._babylonSounds; _i < _a.length; _i++) {
|
|
83
|
+
var sound = _a[_i];
|
|
84
|
+
sound.attachToMesh(babylonMesh);
|
|
85
|
+
if (emitter.innerAngle != undefined || emitter.outerAngle != undefined) {
|
|
86
|
+
sound.setLocalDirectionToMesh(Vector3.Forward());
|
|
87
|
+
sound.setDirectionalCone(2 * Tools.ToDegrees(emitter.innerAngle == undefined ? Math.PI : emitter.innerAngle), 2 * Tools.ToDegrees(emitter.outerAngle == undefined ? Math.PI : emitter.outerAngle), 0);
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
}));
|
|
91
|
+
};
|
|
92
|
+
for (var _i = 0, _a = extension.emitters; _i < _a.length; _i++) {
|
|
93
|
+
var emitterIndex = _a[_i];
|
|
94
|
+
_loop_1(emitterIndex);
|
|
95
|
+
}
|
|
96
|
+
assign(babylonMesh);
|
|
97
|
+
})
|
|
98
|
+
.then(function (babylonMesh) {
|
|
99
|
+
return Promise.all(promises).then(function () {
|
|
100
|
+
return babylonMesh;
|
|
101
|
+
});
|
|
102
|
+
});
|
|
103
|
+
});
|
|
104
|
+
};
|
|
105
|
+
/**
|
|
106
|
+
* @param context
|
|
107
|
+
* @param animation
|
|
108
|
+
* @hidden
|
|
109
|
+
*/
|
|
110
|
+
MSFT_audio_emitter.prototype.loadAnimationAsync = function (context, animation) {
|
|
111
|
+
var _this = this;
|
|
112
|
+
return GLTFLoader.LoadExtensionAsync(context, animation, this.name, function (extensionContext, extension) {
|
|
113
|
+
return _this._loader.loadAnimationAsync(context, animation).then(function (babylonAnimationGroup) {
|
|
114
|
+
var promises = new Array();
|
|
115
|
+
ArrayItem.Assign(extension.events);
|
|
116
|
+
for (var _i = 0, _a = extension.events; _i < _a.length; _i++) {
|
|
117
|
+
var event_1 = _a[_i];
|
|
118
|
+
promises.push(_this._loadAnimationEventAsync("".concat(extensionContext, "/events/").concat(event_1.index), context, animation, event_1, babylonAnimationGroup));
|
|
119
|
+
}
|
|
120
|
+
return Promise.all(promises).then(function () {
|
|
121
|
+
return babylonAnimationGroup;
|
|
122
|
+
});
|
|
123
|
+
});
|
|
124
|
+
});
|
|
125
|
+
};
|
|
126
|
+
MSFT_audio_emitter.prototype._loadClipAsync = function (context, clip) {
|
|
127
|
+
if (clip._objectURL) {
|
|
128
|
+
return clip._objectURL;
|
|
129
|
+
}
|
|
130
|
+
var promise;
|
|
131
|
+
if (clip.uri) {
|
|
132
|
+
promise = this._loader.loadUriAsync(context, clip, clip.uri);
|
|
133
|
+
}
|
|
134
|
+
else {
|
|
135
|
+
var bufferView = ArrayItem.Get("".concat(context, "/bufferView"), this._loader.gltf.bufferViews, clip.bufferView);
|
|
136
|
+
promise = this._loader.loadBufferViewAsync("/bufferViews/".concat(bufferView.index), bufferView);
|
|
137
|
+
}
|
|
138
|
+
clip._objectURL = promise.then(function (data) {
|
|
139
|
+
return URL.createObjectURL(new Blob([data], { type: clip.mimeType }));
|
|
140
|
+
});
|
|
141
|
+
return clip._objectURL;
|
|
142
|
+
};
|
|
143
|
+
MSFT_audio_emitter.prototype._loadEmitterAsync = function (context, emitter) {
|
|
144
|
+
var _this = this;
|
|
145
|
+
emitter._babylonSounds = emitter._babylonSounds || [];
|
|
146
|
+
if (!emitter._babylonData) {
|
|
147
|
+
var clipPromises = new Array();
|
|
148
|
+
var name_1 = emitter.name || "emitter".concat(emitter.index);
|
|
149
|
+
var options_1 = {
|
|
150
|
+
loop: false,
|
|
151
|
+
autoplay: false,
|
|
152
|
+
volume: emitter.volume == undefined ? 1 : emitter.volume,
|
|
153
|
+
};
|
|
154
|
+
var _loop_2 = function (i) {
|
|
155
|
+
var clipContext = "/extensions/".concat(this_1.name, "/clips");
|
|
156
|
+
var clip = ArrayItem.Get(clipContext, this_1._clips, emitter.clips[i].clip);
|
|
157
|
+
clipPromises.push(this_1._loadClipAsync("".concat(clipContext, "/").concat(emitter.clips[i].clip), clip).then(function (objectURL) {
|
|
158
|
+
var sound = (emitter._babylonSounds[i] = new Sound(name_1, objectURL, _this._loader.babylonScene, null, options_1));
|
|
159
|
+
sound.refDistance = emitter.refDistance || 1;
|
|
160
|
+
sound.maxDistance = emitter.maxDistance || 256;
|
|
161
|
+
sound.rolloffFactor = emitter.rolloffFactor || 1;
|
|
162
|
+
sound.distanceModel = emitter.distanceModel || "exponential";
|
|
163
|
+
}));
|
|
164
|
+
};
|
|
165
|
+
var this_1 = this;
|
|
166
|
+
for (var i = 0; i < emitter.clips.length; i++) {
|
|
167
|
+
_loop_2(i);
|
|
168
|
+
}
|
|
169
|
+
var promise = Promise.all(clipPromises).then(function () {
|
|
170
|
+
var weights = emitter.clips.map(function (clip) {
|
|
171
|
+
return clip.weight || 1;
|
|
172
|
+
});
|
|
173
|
+
var weightedSound = new WeightedSound(emitter.loop || false, emitter._babylonSounds, weights);
|
|
174
|
+
if (emitter.innerAngle) {
|
|
175
|
+
weightedSound.directionalConeInnerAngle = 2 * Tools.ToDegrees(emitter.innerAngle);
|
|
176
|
+
}
|
|
177
|
+
if (emitter.outerAngle) {
|
|
178
|
+
weightedSound.directionalConeOuterAngle = 2 * Tools.ToDegrees(emitter.outerAngle);
|
|
179
|
+
}
|
|
180
|
+
if (emitter.volume) {
|
|
181
|
+
weightedSound.volume = emitter.volume;
|
|
182
|
+
}
|
|
183
|
+
emitter._babylonData.sound = weightedSound;
|
|
184
|
+
});
|
|
185
|
+
emitter._babylonData = {
|
|
186
|
+
loaded: promise,
|
|
187
|
+
};
|
|
188
|
+
}
|
|
189
|
+
return emitter._babylonData.loaded;
|
|
190
|
+
};
|
|
191
|
+
MSFT_audio_emitter.prototype._getEventAction = function (context, sound, action, time, startOffset) {
|
|
192
|
+
switch (action) {
|
|
193
|
+
case "play" /* play */: {
|
|
194
|
+
return function (currentFrame) {
|
|
195
|
+
var frameOffset = (startOffset || 0) + (currentFrame - time);
|
|
196
|
+
sound.play(frameOffset);
|
|
197
|
+
};
|
|
198
|
+
}
|
|
199
|
+
case "stop" /* stop */: {
|
|
200
|
+
return function () {
|
|
201
|
+
sound.stop();
|
|
202
|
+
};
|
|
203
|
+
}
|
|
204
|
+
case "pause" /* pause */: {
|
|
205
|
+
return function () {
|
|
206
|
+
sound.pause();
|
|
207
|
+
};
|
|
208
|
+
}
|
|
209
|
+
default: {
|
|
210
|
+
throw new Error("".concat(context, ": Unsupported action ").concat(action));
|
|
211
|
+
}
|
|
212
|
+
}
|
|
213
|
+
};
|
|
214
|
+
MSFT_audio_emitter.prototype._loadAnimationEventAsync = function (context, animationContext, animation, event, babylonAnimationGroup) {
|
|
215
|
+
var _this = this;
|
|
216
|
+
if (babylonAnimationGroup.targetedAnimations.length == 0) {
|
|
217
|
+
return Promise.resolve();
|
|
218
|
+
}
|
|
219
|
+
var babylonAnimation = babylonAnimationGroup.targetedAnimations[0];
|
|
220
|
+
var emitterIndex = event.emitter;
|
|
221
|
+
var emitter = ArrayItem.Get("/extensions/".concat(this.name, "/emitters"), this._emitters, emitterIndex);
|
|
222
|
+
return this._loadEmitterAsync(context, emitter).then(function () {
|
|
223
|
+
var sound = emitter._babylonData.sound;
|
|
224
|
+
if (sound) {
|
|
225
|
+
var babylonAnimationEvent = new AnimationEvent(event.time, _this._getEventAction(context, sound, event.action, event.time, event.startOffset));
|
|
226
|
+
babylonAnimation.animation.addEvent(babylonAnimationEvent);
|
|
227
|
+
// Make sure all started audio stops when this animation is terminated.
|
|
228
|
+
babylonAnimationGroup.onAnimationGroupEndObservable.add(function () {
|
|
229
|
+
sound.stop();
|
|
230
|
+
});
|
|
231
|
+
babylonAnimationGroup.onAnimationGroupPauseObservable.add(function () {
|
|
232
|
+
sound.pause();
|
|
233
|
+
});
|
|
234
|
+
}
|
|
235
|
+
});
|
|
236
|
+
};
|
|
237
|
+
return MSFT_audio_emitter;
|
|
238
|
+
}());
|
|
239
|
+
export { MSFT_audio_emitter };
|
|
240
|
+
GLTFLoader.RegisterExtension(NAME, function (loader) { return new MSFT_audio_emitter(loader); });
|
|
241
241
|
//# sourceMappingURL=MSFT_audio_emitter.js.map
|