@galacean/engine-core 0.0.0-experimental-2.0-game.4 → 0.0.0-experimental-2.0-game.6
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/dist/main.js +221 -43
- package/dist/main.js.map +1 -1
- package/dist/module.js +221 -43
- package/dist/module.js.map +1 -1
- package/package.json +3 -3
- package/types/RenderPipeline/BasicRenderPipeline.d.ts +2 -1
- package/types/audio/AudioManager.d.ts +16 -1
package/dist/main.js
CHANGED
|
@@ -7826,7 +7826,6 @@ var ShaderLib = _extends({
|
|
|
7826
7826
|
normal_get: normal_get
|
|
7827
7827
|
}, ParticleShaderLib);
|
|
7828
7828
|
|
|
7829
|
-
console.log(123);
|
|
7830
7829
|
/**
|
|
7831
7830
|
* @internal
|
|
7832
7831
|
*/ var ShaderFactory = /*#__PURE__*/ function() {
|
|
@@ -26505,6 +26504,9 @@ Shader.create("FinalAntiAliasing", BlitVS, FinalAntiAliasingFS);
|
|
|
26505
26504
|
Utils._quickSort(this.elements, 0, this.elements.length, compareFunc);
|
|
26506
26505
|
this.batch(batcherManager);
|
|
26507
26506
|
};
|
|
26507
|
+
_proto.sort = function sort(compareFunc) {
|
|
26508
|
+
Utils._quickSort(this.elements, 0, this.elements.length, compareFunc);
|
|
26509
|
+
};
|
|
26508
26510
|
_proto.batch = function batch(batcherManager) {
|
|
26509
26511
|
batcherManager.batch(this);
|
|
26510
26512
|
};
|
|
@@ -27453,6 +27455,16 @@ CascadedShadowCasterPass._tempMatrix0 = new engineMath.Matrix();
|
|
|
27453
27455
|
this.alphaTestQueue.sortBatch(RenderQueue.compareForOpaque, batcherManager);
|
|
27454
27456
|
this.transparentQueue.sortBatch(RenderQueue.compareForTransparent, batcherManager);
|
|
27455
27457
|
};
|
|
27458
|
+
_proto.sort = function sort() {
|
|
27459
|
+
this.opaqueQueue.sort(RenderQueue.compareForOpaque);
|
|
27460
|
+
this.alphaTestQueue.sort(RenderQueue.compareForOpaque);
|
|
27461
|
+
this.transparentQueue.sort(RenderQueue.compareForTransparent);
|
|
27462
|
+
};
|
|
27463
|
+
_proto.batch = function batch(batcherManager) {
|
|
27464
|
+
this.opaqueQueue.batch(batcherManager);
|
|
27465
|
+
this.alphaTestQueue.batch(batcherManager);
|
|
27466
|
+
this.transparentQueue.batch(batcherManager);
|
|
27467
|
+
};
|
|
27456
27468
|
_proto.setRenderUpdateFlagTrue = function setRenderUpdateFlagTrue(rendererUpdateFlag) {
|
|
27457
27469
|
this.opaqueQueue.rendererUpdateFlag |= rendererUpdateFlag;
|
|
27458
27470
|
this.transparentQueue.rendererUpdateFlag |= rendererUpdateFlag;
|
|
@@ -27601,9 +27613,11 @@ CascadedShadowCasterPass._tempMatrix0 = new engineMath.Matrix();
|
|
|
27601
27613
|
// Depth use camera's view and projection matrix
|
|
27602
27614
|
this._cullingResults.setRenderUpdateFlagTrue(ContextRendererUpdateFlag.viewProjectionMatrix);
|
|
27603
27615
|
context.applyVirtualCamera(camera._virtualCamera, depthPassEnabled);
|
|
27604
|
-
this.
|
|
27616
|
+
this._prepareWorldRender(context);
|
|
27605
27617
|
var batcherManager = engine._batcherManager;
|
|
27606
|
-
cullingResults.
|
|
27618
|
+
cullingResults.sort();
|
|
27619
|
+
this._prepareUIRender(context);
|
|
27620
|
+
cullingResults.batch(batcherManager);
|
|
27607
27621
|
batcherManager.uploadBuffer();
|
|
27608
27622
|
if (depthPassEnabled) {
|
|
27609
27623
|
depthOnlyPass.onConfig(camera);
|
|
@@ -27849,10 +27863,10 @@ CascadedShadowCasterPass._tempMatrix0 = new engineMath.Matrix();
|
|
|
27849
27863
|
(pass._renderState || material.renderState)._applyStates(engine, false, pass._renderStateDataMap, material.shaderData);
|
|
27850
27864
|
rhi.drawPrimitive(mesh._primitive, mesh.subMesh, program);
|
|
27851
27865
|
};
|
|
27852
|
-
_proto.
|
|
27866
|
+
_proto._prepareWorldRender = function _prepareWorldRender(context) {
|
|
27853
27867
|
var camera = context.camera;
|
|
27854
27868
|
var engine = camera.engine, enableFrustumCulling = camera.enableFrustumCulling, cullingMask = camera.cullingMask, frustum = camera._frustum;
|
|
27855
|
-
var
|
|
27869
|
+
var renderers = camera.scene._componentsManager._renderers;
|
|
27856
27870
|
var rendererElements = renderers._elements;
|
|
27857
27871
|
for(var i = renderers.length - 1; i >= 0; --i){
|
|
27858
27872
|
var renderer = rendererElements[i];
|
|
@@ -27869,9 +27883,14 @@ CascadedShadowCasterPass._tempMatrix0 = new engineMath.Matrix();
|
|
|
27869
27883
|
renderer._prepareRender(context);
|
|
27870
27884
|
renderer._renderFrameCount = engine.time.frameCount;
|
|
27871
27885
|
}
|
|
27886
|
+
};
|
|
27887
|
+
_proto._prepareUIRender = function _prepareUIRender(context) {
|
|
27888
|
+
var camera = context.camera;
|
|
27889
|
+
var cullingMask = camera.cullingMask;
|
|
27890
|
+
var canvases = camera.scene._componentsManager._canvases;
|
|
27872
27891
|
var canvasesElements = canvases._elements;
|
|
27873
|
-
for(var
|
|
27874
|
-
var canvas = canvasesElements[
|
|
27892
|
+
for(var i = canvases.length - 1; i >= 0; i--){
|
|
27893
|
+
var canvas = canvasesElements[i];
|
|
27875
27894
|
// Filter by camera culling mask
|
|
27876
27895
|
if (!(cullingMask & canvas.entity.layer)) {
|
|
27877
27896
|
continue;
|
|
@@ -40350,6 +40369,7 @@ var cacheDir = new engineMath.Vector3();
|
|
|
40350
40369
|
* @returns A promise that resolves when the audio context is suspended
|
|
40351
40370
|
*/ AudioManager.suspend = function suspend() {
|
|
40352
40371
|
var _AudioManager__context;
|
|
40372
|
+
AudioManager._suspendActiveSourcesForInterruption();
|
|
40353
40373
|
var _AudioManager__context_suspend;
|
|
40354
40374
|
return (_AudioManager__context_suspend = (_AudioManager__context = AudioManager._context) == null ? void 0 : _AudioManager__context.suspend()) != null ? _AudioManager__context_suspend : Promise.resolve();
|
|
40355
40375
|
};
|
|
@@ -40359,12 +40379,21 @@ var cacheDir = new engineMath.Vector3();
|
|
|
40359
40379
|
* @returns A promise that resolves when the audio context is resumed
|
|
40360
40380
|
*/ AudioManager.resume = function resume() {
|
|
40361
40381
|
var context = AudioManager._context;
|
|
40362
|
-
if (!context
|
|
40382
|
+
if (!context) {
|
|
40383
|
+
return Promise.resolve();
|
|
40384
|
+
}
|
|
40385
|
+
if (context.state === "running") {
|
|
40386
|
+
AudioManager._clearForegroundRestore();
|
|
40387
|
+
AudioManager._needsUserGestureResume = false;
|
|
40388
|
+
AudioManager._resumePendingSources();
|
|
40389
|
+
AudioManager._resumeInterruptedSources();
|
|
40363
40390
|
return Promise.resolve();
|
|
40364
40391
|
}
|
|
40365
40392
|
return context.resume().then(function() {
|
|
40393
|
+
AudioManager._clearForegroundRestore();
|
|
40366
40394
|
AudioManager._needsUserGestureResume = false;
|
|
40367
40395
|
AudioManager._resumePendingSources();
|
|
40396
|
+
AudioManager._resumeInterruptedSources();
|
|
40368
40397
|
});
|
|
40369
40398
|
};
|
|
40370
40399
|
/** @internal */ AudioManager._registerPendingSource = function _registerPendingSource(source) {
|
|
@@ -40373,6 +40402,15 @@ var cacheDir = new engineMath.Vector3();
|
|
|
40373
40402
|
/** @internal */ AudioManager._unregisterPendingSource = function _unregisterPendingSource(source) {
|
|
40374
40403
|
AudioManager._pendingSources.delete(source);
|
|
40375
40404
|
};
|
|
40405
|
+
/** @internal */ AudioManager._registerPlayingSource = function _registerPlayingSource(source) {
|
|
40406
|
+
AudioManager._playingSources.add(source);
|
|
40407
|
+
};
|
|
40408
|
+
/** @internal */ AudioManager._unregisterPlayingSource = function _unregisterPlayingSource(source) {
|
|
40409
|
+
AudioManager._playingSources.delete(source);
|
|
40410
|
+
};
|
|
40411
|
+
/** @internal */ AudioManager._unregisterInterruptedSource = function _unregisterInterruptedSource(source) {
|
|
40412
|
+
AudioManager._interruptedSources.delete(source);
|
|
40413
|
+
};
|
|
40376
40414
|
/**
|
|
40377
40415
|
* @internal
|
|
40378
40416
|
*/ AudioManager.getContext = function getContext() {
|
|
@@ -40380,15 +40418,11 @@ var cacheDir = new engineMath.Vector3();
|
|
|
40380
40418
|
if (!context) {
|
|
40381
40419
|
AudioManager._context = context = new window.AudioContext();
|
|
40382
40420
|
context.onstatechange = AudioManager._onContextStateChange;
|
|
40383
|
-
|
|
40384
|
-
|
|
40385
|
-
|
|
40386
|
-
|
|
40387
|
-
}
|
|
40388
|
-
document.addEventListener("touchend", AudioManager._resumeAfterInterruption, {
|
|
40389
|
-
passive: true
|
|
40390
|
-
});
|
|
40391
|
-
document.addEventListener("click", AudioManager._resumeAfterInterruption);
|
|
40421
|
+
if (!AudioManager._eventsBound) {
|
|
40422
|
+
AudioManager._eventsBound = true;
|
|
40423
|
+
AudioManager._bindLifecycleEvents();
|
|
40424
|
+
AudioManager._bindGestureEvents();
|
|
40425
|
+
}
|
|
40392
40426
|
}
|
|
40393
40427
|
return context;
|
|
40394
40428
|
};
|
|
@@ -40411,8 +40445,12 @@ var cacheDir = new engineMath.Vector3();
|
|
|
40411
40445
|
AudioManager._onContextStateChange = function _onContextStateChange() {
|
|
40412
40446
|
var _AudioManager__context;
|
|
40413
40447
|
if (((_AudioManager__context = AudioManager._context) == null ? void 0 : _AudioManager__context.state) === "running") {
|
|
40448
|
+
if (AudioManager._hidden || AudioManager._needsUserGestureResume) {
|
|
40449
|
+
return;
|
|
40450
|
+
}
|
|
40414
40451
|
AudioManager._needsUserGestureResume = false;
|
|
40415
40452
|
AudioManager._resumePendingSources();
|
|
40453
|
+
AudioManager._resumeInterruptedSources();
|
|
40416
40454
|
}
|
|
40417
40455
|
};
|
|
40418
40456
|
AudioManager._resumePendingSources = function _resumePendingSources() {
|
|
@@ -40425,41 +40463,131 @@ var cacheDir = new engineMath.Vector3();
|
|
|
40425
40463
|
pendingSources[i]._resumePendingPlayback();
|
|
40426
40464
|
}
|
|
40427
40465
|
};
|
|
40428
|
-
AudioManager.
|
|
40429
|
-
|
|
40430
|
-
if (document.hidden || !context || AudioManager._playingCount === 0 && AudioManager._pendingSources.size === 0 || context.state === "running") {
|
|
40466
|
+
AudioManager._suspendActiveSourcesForInterruption = function _suspendActiveSourcesForInterruption() {
|
|
40467
|
+
if (!AudioManager._playingSources.size) {
|
|
40431
40468
|
return;
|
|
40432
40469
|
}
|
|
40433
|
-
|
|
40434
|
-
|
|
40435
|
-
|
|
40436
|
-
|
|
40470
|
+
var playingSources = Array.from(AudioManager._playingSources);
|
|
40471
|
+
for(var i = 0, n = playingSources.length; i < n; i++){
|
|
40472
|
+
var source = playingSources[i];
|
|
40473
|
+
if (source._suspendPlaybackForInterruption()) {
|
|
40474
|
+
AudioManager._interruptedSources.add(source);
|
|
40437
40475
|
}
|
|
40438
|
-
}
|
|
40439
|
-
|
|
40440
|
-
|
|
40476
|
+
}
|
|
40477
|
+
};
|
|
40478
|
+
AudioManager._resumeInterruptedSources = function _resumeInterruptedSources() {
|
|
40479
|
+
if (!AudioManager._interruptedSources.size || !AudioManager.isAudioContextRunning()) {
|
|
40480
|
+
return;
|
|
40481
|
+
}
|
|
40482
|
+
var interruptedSources = Array.from(AudioManager._interruptedSources);
|
|
40483
|
+
AudioManager._interruptedSources.clear();
|
|
40484
|
+
for(var i = 0, n = interruptedSources.length; i < n; i++){
|
|
40485
|
+
interruptedSources[i]._resumeInterruptedPlayback();
|
|
40486
|
+
}
|
|
40487
|
+
};
|
|
40488
|
+
AudioManager._bindLifecycleEvents = function _bindLifecycleEvents() {
|
|
40489
|
+
var hiddenProp = AudioManager._getHiddenProp();
|
|
40490
|
+
var visibilityEvents = [
|
|
40491
|
+
"visibilitychange",
|
|
40492
|
+
"mozvisibilitychange",
|
|
40493
|
+
"msvisibilitychange",
|
|
40494
|
+
"webkitvisibilitychange",
|
|
40495
|
+
"qbrowserVisibilityChange"
|
|
40496
|
+
];
|
|
40497
|
+
for(var i = 0, n = visibilityEvents.length; i < n; i++){
|
|
40498
|
+
document.addEventListener(visibilityEvents[i], function(event) {
|
|
40499
|
+
var hidden = hiddenProp ? Boolean(document[hiddenProp] || (event == null ? void 0 : event.hidden)) : document.hidden;
|
|
40500
|
+
hidden ? AudioManager._onHidden() : AudioManager._onShown();
|
|
40501
|
+
});
|
|
40502
|
+
}
|
|
40503
|
+
window.addEventListener("pagehide", AudioManager._onHidden);
|
|
40504
|
+
window.addEventListener("pageshow", AudioManager._onShown);
|
|
40505
|
+
document.addEventListener("pagehide", AudioManager._onHidden);
|
|
40506
|
+
document.addEventListener("pageshow", AudioManager._onShown);
|
|
40507
|
+
};
|
|
40508
|
+
AudioManager._bindGestureEvents = function _bindGestureEvents() {
|
|
40509
|
+
var gestureEvents = [
|
|
40510
|
+
"pointerdown",
|
|
40511
|
+
"pointerup",
|
|
40512
|
+
"touchstart",
|
|
40513
|
+
"touchend",
|
|
40514
|
+
"mouseup",
|
|
40515
|
+
"click"
|
|
40516
|
+
];
|
|
40517
|
+
for(var i = 0, n = gestureEvents.length; i < n; i++){
|
|
40518
|
+
document.addEventListener(gestureEvents[i], AudioManager._resumeAfterInterruption, {
|
|
40519
|
+
passive: true
|
|
40520
|
+
});
|
|
40521
|
+
}
|
|
40522
|
+
};
|
|
40523
|
+
AudioManager._getHiddenProp = function _getHiddenProp() {
|
|
40524
|
+
var doc = document;
|
|
40525
|
+
if (typeof doc.hidden !== "undefined") return "hidden";
|
|
40526
|
+
if (typeof doc.mozHidden !== "undefined") return "mozHidden";
|
|
40527
|
+
if (typeof doc.msHidden !== "undefined") return "msHidden";
|
|
40528
|
+
if (typeof doc.webkitHidden !== "undefined") return "webkitHidden";
|
|
40529
|
+
return "";
|
|
40530
|
+
};
|
|
40531
|
+
AudioManager._hasResumeWork = function _hasResumeWork() {
|
|
40532
|
+
return AudioManager._needsUserGestureResume || AudioManager._pendingSources.size > 0 || AudioManager._interruptedSources.size > 0;
|
|
40533
|
+
};
|
|
40534
|
+
AudioManager._onHidden = function _onHidden() {
|
|
40535
|
+
if (AudioManager._hidden) {
|
|
40536
|
+
return;
|
|
40537
|
+
}
|
|
40538
|
+
AudioManager._hidden = true;
|
|
40539
|
+
AudioManager._clearForegroundRestore();
|
|
40540
|
+
AudioManager.suspend().catch(function() {});
|
|
40541
|
+
};
|
|
40542
|
+
AudioManager._onShown = function _onShown() {
|
|
40543
|
+
if (!AudioManager._hidden) {
|
|
40544
|
+
return;
|
|
40545
|
+
}
|
|
40546
|
+
AudioManager._hidden = false;
|
|
40547
|
+
if (AudioManager._hasResumeWork()) {
|
|
40548
|
+
AudioManager._prepareGestureResume();
|
|
40549
|
+
AudioManager._scheduleForegroundRestore();
|
|
40550
|
+
}
|
|
40441
40551
|
};
|
|
40442
40552
|
AudioManager._resumeAfterInterruption = function _resumeAfterInterruption() {
|
|
40443
|
-
if (AudioManager.
|
|
40553
|
+
if (AudioManager._hasResumeWork()) {
|
|
40444
40554
|
AudioManager.resume().catch(function(e) {
|
|
40445
40555
|
console.warn("Failed to resume AudioContext:", e);
|
|
40446
40556
|
});
|
|
40447
40557
|
}
|
|
40448
40558
|
};
|
|
40559
|
+
AudioManager._scheduleForegroundRestore = function _scheduleForegroundRestore() {
|
|
40560
|
+
AudioManager._clearForegroundRestore();
|
|
40561
|
+
AudioManager._foregroundRestoreTimer = window.setTimeout(function() {
|
|
40562
|
+
AudioManager._foregroundRestoreTimer = undefined;
|
|
40563
|
+
AudioManager.resume().catch(function() {
|
|
40564
|
+
return AudioManager._prepareGestureResume();
|
|
40565
|
+
});
|
|
40566
|
+
}, AudioManager._foregroundRestoreDelay);
|
|
40567
|
+
};
|
|
40568
|
+
AudioManager._clearForegroundRestore = function _clearForegroundRestore() {
|
|
40569
|
+
if (AudioManager._foregroundRestoreTimer === undefined) {
|
|
40570
|
+
return;
|
|
40571
|
+
}
|
|
40572
|
+
window.clearTimeout(AudioManager._foregroundRestoreTimer);
|
|
40573
|
+
AudioManager._foregroundRestoreTimer = undefined;
|
|
40574
|
+
};
|
|
40449
40575
|
AudioManager._prepareGestureResume = function _prepareGestureResume() {
|
|
40450
|
-
// iOS WKWebView
|
|
40451
|
-
//
|
|
40452
|
-
|
|
40453
|
-
|
|
40454
|
-
return AudioManager.suspend().catch(function() {}).then(function() {
|
|
40455
|
-
AudioManager._needsUserGestureResume = true;
|
|
40456
|
-
});
|
|
40576
|
+
// iOS WKWebView may report a resumable state while rendering is still frozen.
|
|
40577
|
+
// Force a clean context edge, then let a gesture or foreground retry restore sources.
|
|
40578
|
+
AudioManager._needsUserGestureResume = true;
|
|
40579
|
+
return AudioManager.suspend().catch(function() {});
|
|
40457
40580
|
};
|
|
40458
40581
|
return AudioManager;
|
|
40459
40582
|
}();
|
|
40460
40583
|
/** @internal */ AudioManager._playingCount = 0;
|
|
40461
40584
|
AudioManager._needsUserGestureResume = false;
|
|
40462
40585
|
AudioManager._pendingSources = new Set();
|
|
40586
|
+
AudioManager._playingSources = new Set();
|
|
40587
|
+
AudioManager._interruptedSources = new Set();
|
|
40588
|
+
AudioManager._foregroundRestoreDelay = 300;
|
|
40589
|
+
AudioManager._hidden = false;
|
|
40590
|
+
AudioManager._eventsBound = false;
|
|
40463
40591
|
|
|
40464
40592
|
/**
|
|
40465
40593
|
* Audio Source Component.
|
|
@@ -40495,23 +40623,27 @@ AudioManager._pendingSources = new Set();
|
|
|
40495
40623
|
* Stops playing the clip.
|
|
40496
40624
|
*/ _proto.stop = function stop() {
|
|
40497
40625
|
this._cancelPendingPlayback();
|
|
40626
|
+
AudioManager._unregisterInterruptedSource(this);
|
|
40498
40627
|
if (this._isPlaying) {
|
|
40499
40628
|
this._clearSourceNode();
|
|
40500
40629
|
this._isPlaying = false;
|
|
40501
|
-
this._pausedTime = -1;
|
|
40502
|
-
this._playTime = -1;
|
|
40503
40630
|
AudioManager._playingCount--;
|
|
40631
|
+
AudioManager._unregisterPlayingSource(this);
|
|
40504
40632
|
}
|
|
40633
|
+
this._pausedTime = -1;
|
|
40634
|
+
this._playTime = -1;
|
|
40505
40635
|
};
|
|
40506
40636
|
/**
|
|
40507
40637
|
* Pauses playing the clip.
|
|
40508
40638
|
*/ _proto.pause = function pause() {
|
|
40509
40639
|
this._cancelPendingPlayback();
|
|
40640
|
+
AudioManager._unregisterInterruptedSource(this);
|
|
40510
40641
|
if (this._isPlaying) {
|
|
40511
40642
|
this._clearSourceNode();
|
|
40512
40643
|
this._pausedTime = AudioManager.getContext().currentTime;
|
|
40513
40644
|
this._isPlaying = false;
|
|
40514
40645
|
AudioManager._playingCount--;
|
|
40646
|
+
AudioManager._unregisterPlayingSource(this);
|
|
40515
40647
|
}
|
|
40516
40648
|
};
|
|
40517
40649
|
/**
|
|
@@ -40552,29 +40684,75 @@ AudioManager._pendingSources = new Set();
|
|
|
40552
40684
|
}
|
|
40553
40685
|
this._startPlayback();
|
|
40554
40686
|
};
|
|
40687
|
+
/** @internal */ _proto._suspendPlaybackForInterruption = function _suspendPlaybackForInterruption() {
|
|
40688
|
+
if (!this._isPlaying) {
|
|
40689
|
+
return false;
|
|
40690
|
+
}
|
|
40691
|
+
var pausedTime = AudioManager.getContext().currentTime;
|
|
40692
|
+
this._clearSourceNode();
|
|
40693
|
+
this._pausedTime = pausedTime;
|
|
40694
|
+
this._isPlaying = false;
|
|
40695
|
+
AudioManager._playingCount--;
|
|
40696
|
+
AudioManager._unregisterPlayingSource(this);
|
|
40697
|
+
return true;
|
|
40698
|
+
};
|
|
40699
|
+
/** @internal */ _proto._resumeInterruptedPlayback = function _resumeInterruptedPlayback() {
|
|
40700
|
+
var _this__clip;
|
|
40701
|
+
if (this._destroyed || !this.enabled || this._isPlaying || this._pendingPlay || !((_this__clip = this._clip) == null ? void 0 : _this__clip._getAudioSource()) || this._playTime < 0) {
|
|
40702
|
+
return;
|
|
40703
|
+
}
|
|
40704
|
+
if (AudioManager.isAudioContextRunning()) {
|
|
40705
|
+
this._startPlayback();
|
|
40706
|
+
} else {
|
|
40707
|
+
this._pendingPlay = true;
|
|
40708
|
+
AudioManager._registerPendingSource(this);
|
|
40709
|
+
}
|
|
40710
|
+
};
|
|
40555
40711
|
_proto._startPlayback = function _startPlayback() {
|
|
40556
40712
|
var startTime = this._pausedTime > 0 ? this._pausedTime - this._playTime : 0;
|
|
40557
|
-
this._initSourceNode(startTime)
|
|
40713
|
+
if (!this._initSourceNode(startTime)) {
|
|
40714
|
+
this._pausedTime = -1;
|
|
40715
|
+
this._playTime = -1;
|
|
40716
|
+
return;
|
|
40717
|
+
}
|
|
40558
40718
|
this._playTime = AudioManager.getContext().currentTime - startTime;
|
|
40559
40719
|
this._pausedTime = -1;
|
|
40560
40720
|
this._isPlaying = true;
|
|
40561
40721
|
AudioManager._playingCount++;
|
|
40722
|
+
AudioManager._registerPlayingSource(this);
|
|
40562
40723
|
};
|
|
40563
40724
|
_proto._initSourceNode = function _initSourceNode(startTime) {
|
|
40564
40725
|
var context = AudioManager.getContext();
|
|
40565
40726
|
var sourceNode = context.createBufferSource();
|
|
40566
|
-
|
|
40727
|
+
var audioBuffer = this._clip._getAudioSource();
|
|
40728
|
+
var duration = audioBuffer.duration;
|
|
40729
|
+
var offset = Math.max(0, startTime);
|
|
40730
|
+
if (duration > 0) {
|
|
40731
|
+
if (this._loop) {
|
|
40732
|
+
offset %= duration;
|
|
40733
|
+
} else if (offset >= duration) {
|
|
40734
|
+
return false;
|
|
40735
|
+
}
|
|
40736
|
+
}
|
|
40737
|
+
sourceNode.buffer = audioBuffer;
|
|
40567
40738
|
sourceNode.playbackRate.value = this._playbackRate;
|
|
40568
40739
|
sourceNode.loop = this._loop;
|
|
40569
40740
|
sourceNode.onended = this._onPlayEnd;
|
|
40570
40741
|
this._sourceNode = sourceNode;
|
|
40571
40742
|
sourceNode.connect(this._gainNode);
|
|
40572
|
-
sourceNode.start(0,
|
|
40743
|
+
sourceNode.start(0, offset);
|
|
40744
|
+
return true;
|
|
40573
40745
|
};
|
|
40574
40746
|
_proto._clearSourceNode = function _clearSourceNode() {
|
|
40575
|
-
this._sourceNode
|
|
40576
|
-
|
|
40577
|
-
|
|
40747
|
+
var sourceNode = this._sourceNode;
|
|
40748
|
+
if (!sourceNode) {
|
|
40749
|
+
return;
|
|
40750
|
+
}
|
|
40751
|
+
sourceNode.onended = null;
|
|
40752
|
+
try {
|
|
40753
|
+
sourceNode.stop();
|
|
40754
|
+
} catch (e) {}
|
|
40755
|
+
sourceNode.disconnect();
|
|
40578
40756
|
this._sourceNode = null;
|
|
40579
40757
|
};
|
|
40580
40758
|
_proto._cancelPendingPlayback = function _cancelPendingPlayback() {
|