@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 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._prepareRender(context);
27616
+ this._prepareWorldRender(context);
27605
27617
  var batcherManager = engine._batcherManager;
27606
- cullingResults.sortBatch(batcherManager);
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._prepareRender = function _prepareRender(context) {
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 _camera_scene__componentsManager = camera.scene._componentsManager, renderers = _camera_scene__componentsManager._renderers, canvases = _camera_scene__componentsManager._canvases;
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 i1 = canvases.length - 1; i1 >= 0; i1--){
27874
- var canvas = canvasesElements[i1];
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 || context.state === "running") {
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
- document.addEventListener("visibilitychange", AudioManager._onVisibilityChange);
40384
- // iOS Safari requires user gesture to resume AudioContext
40385
- document.addEventListener("touchstart", AudioManager._resumeAfterInterruption, {
40386
- passive: true
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._onVisibilityChange = function _onVisibilityChange() {
40429
- var context = AudioManager._context;
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
- AudioManager.resume().then(function() {
40434
- var _AudioManager__context;
40435
- if (((_AudioManager__context = AudioManager._context) == null ? void 0 : _AudioManager__context.state) !== "running") {
40436
- return AudioManager._prepareGestureResume();
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
- }).catch(function() {
40439
- return AudioManager._prepareGestureResume();
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._needsUserGestureResume || AudioManager._pendingSources.size > 0) {
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 WebKit bug(Triggered in LingGuang App): AudioContext may be in a "zombie" state where
40451
- // state reports "suspended" but resume() alone won't restart audio rendering.
40452
- // Calling suspend() first forces a clean internal state reset before user gesture triggers resume.
40453
- // Related: https://bugs.webkit.org/show_bug.cgi?id=263627
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
- sourceNode.buffer = this._clip._getAudioSource();
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, startTime);
40743
+ sourceNode.start(0, offset);
40744
+ return true;
40573
40745
  };
40574
40746
  _proto._clearSourceNode = function _clearSourceNode() {
40575
- this._sourceNode.stop();
40576
- this._sourceNode.disconnect();
40577
- this._sourceNode.onended = null;
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() {