melonjs 20.0.0 → 20.1.0

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.
@@ -1 +1 @@
1
- {"version":3,"file":"fade_effect.d.ts","sourceRoot":"","sources":["../../../src/camera/effects/fade_effect.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,qBAAqB,CAAC;AAEjD,OAAO,KAAK,KAAK,MAAM,uBAAuB,CAAC;AAE/C,OAAO,KAAK,QAAQ,MAAM,yBAAyB,CAAC;AACpD,OAAO,KAAK,QAAQ,MAAM,gBAAgB,CAAC;AAC3C,OAAO,YAAY,MAAM,oBAAoB,CAAC;AAE9C;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,CAAC,OAAO,OAAO,UAAW,SAAQ,YAAY;IACnD;;OAEG;IACH,KAAK,EAAE,KAAK,CAAC;IAEb;;OAEG;IACH,KAAK,EAAE,KAAK,CAAC;IAEb;;OAEG;IACH,SAAS,EAAE,IAAI,GAAG,KAAK,CAAC;IAExB;;;OAGG;IACH,YAAY,EAAE,MAAM,CAAC;IAErB;;;;;;;OAOG;gBAEF,MAAM,EAAE,QAAQ,EAChB,OAAO,EAAE;QACR,KAAK,EAAE,KAAK,GAAG,MAAM,CAAC;QACtB,QAAQ,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;QAC9B,SAAS,CAAC,EAAE,IAAI,GAAG,KAAK,GAAG,SAAS,CAAC;QACrC,UAAU,CAAC,EAAE,CAAC,MAAM,IAAI,CAAC,GAAG,SAAS,CAAC;KACtC;IA4BO,IAAI,CAAC,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI;IAY7D,MAAM,IAAI,IAAI;IASd,OAAO,IAAI,IAAI;CAKxB"}
1
+ {"version":3,"file":"fade_effect.d.ts","sourceRoot":"","sources":["../../../src/camera/effects/fade_effect.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,qBAAqB,CAAC;AAEjD,OAAO,KAAK,KAAK,MAAM,uBAAuB,CAAC;AAE/C,OAAO,KAAK,QAAQ,MAAM,yBAAyB,CAAC;AACpD,OAAO,KAAK,QAAQ,MAAM,gBAAgB,CAAC;AAC3C,OAAO,YAAY,MAAM,oBAAoB,CAAC;AAE9C;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,CAAC,OAAO,OAAO,UAAW,SAAQ,YAAY;IACnD;;OAEG;IACH,KAAK,EAAE,KAAK,CAAC;IAEb;;OAEG;IACH,KAAK,EAAE,KAAK,CAAC;IAEb;;OAEG;IACH,SAAS,EAAE,IAAI,GAAG,KAAK,CAAC;IAExB;;;OAGG;IACH,YAAY,EAAE,MAAM,CAAC;IAErB;;;;;;;OAOG;gBAEF,MAAM,EAAE,QAAQ,EAChB,OAAO,EAAE;QACR,KAAK,EAAE,KAAK,GAAG,MAAM,CAAC;QACtB,QAAQ,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;QAC9B,SAAS,CAAC,EAAE,IAAI,GAAG,KAAK,GAAG,SAAS,CAAC;QACrC,UAAU,CAAC,EAAE,CAAC,MAAM,IAAI,CAAC,GAAG,SAAS,CAAC;KACtC;IA4BO,IAAI,CAAC,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI;IAY7D,MAAM,IAAI,IAAI;IASd,OAAO,IAAI,IAAI;CAiBxB"}
@@ -1 +1 @@
1
- {"version":3,"file":"mask_effect.d.ts","sourceRoot":"","sources":["../../../src/camera/effects/mask_effect.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAe,MAAM,6BAA6B,CAAC;AACnE,OAAO,EAAE,OAAO,EAAe,MAAM,6BAA6B,CAAC;AACnE,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,qBAAqB,CAAC;AAEjD,OAAO,KAAK,KAAK,MAAM,uBAAuB,CAAC;AAE/C,OAAO,KAAK,QAAQ,MAAM,yBAAyB,CAAC;AACpD,OAAO,KAAK,QAAQ,MAAM,gBAAgB,CAAC;AAC3C,OAAO,YAAY,MAAM,oBAAoB,CAAC;AAE9C,KAAK,SAAS,GAAG,OAAO,GAAG,OAAO,CAAC;AAEnC;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,MAAM,CAAC,OAAO,OAAO,UAAW,SAAQ,YAAY;IACnD;;OAEG;IACH,KAAK,EAAE,KAAK,CAAC;IAEb;;OAEG;IACH,KAAK,EAAE,SAAS,CAAC;IAEjB;;OAEG;IACH,QAAQ,EAAE;QAAE,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;IAE5B;;OAEG;IACH,KAAK,EAAE,KAAK,CAAC;IAEb;;OAEG;IACH,SAAS,EAAE,MAAM,GAAG,QAAQ,CAAC;IAE7B;;OAEG;IACH,UAAU,EAAE,CAAC,MAAM,IAAI,CAAC,GAAG,SAAS,CAAC;IAErC;;;OAGG;IACH,UAAU,EAAE,SAAS,CAAC;IAEtB;;;;;;;;OAQG;gBAEF,MAAM,EAAE,QAAQ,EAChB,OAAO,EAAE;QACR,KAAK,EAAE,SAAS,CAAC;QACjB,KAAK,EAAE,KAAK,GAAG,MAAM,CAAC;QACtB,QAAQ,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;QAC9B,SAAS,CAAC,EAAE,MAAM,GAAG,QAAQ,GAAG,SAAS,CAAC;QAC1C,UAAU,CAAC,EAAE,CAAC,MAAM,IAAI,CAAC,GAAG,SAAS,CAAC;KACtC;IA+BO,MAAM,IAAI,IAAI;IAmCd,IAAI,CAAC,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI;IAwB7D,OAAO,IAAI,IAAI;CAUxB"}
1
+ {"version":3,"file":"mask_effect.d.ts","sourceRoot":"","sources":["../../../src/camera/effects/mask_effect.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAe,MAAM,6BAA6B,CAAC;AACnE,OAAO,EAAE,OAAO,EAAe,MAAM,6BAA6B,CAAC;AACnE,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,qBAAqB,CAAC;AAEjD,OAAO,KAAK,KAAK,MAAM,uBAAuB,CAAC;AAE/C,OAAO,KAAK,QAAQ,MAAM,yBAAyB,CAAC;AACpD,OAAO,KAAK,QAAQ,MAAM,gBAAgB,CAAC;AAC3C,OAAO,YAAY,MAAM,oBAAoB,CAAC;AAE9C,KAAK,SAAS,GAAG,OAAO,GAAG,OAAO,CAAC;AAEnC;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,MAAM,CAAC,OAAO,OAAO,UAAW,SAAQ,YAAY;IACnD;;OAEG;IACH,KAAK,EAAE,KAAK,CAAC;IAEb;;OAEG;IACH,KAAK,EAAE,SAAS,CAAC;IAEjB;;OAEG;IACH,QAAQ,EAAE;QAAE,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;IAE5B;;OAEG;IACH,KAAK,EAAE,KAAK,CAAC;IAEb;;OAEG;IACH,SAAS,EAAE,MAAM,GAAG,QAAQ,CAAC;IAE7B;;OAEG;IACH,UAAU,EAAE,CAAC,MAAM,IAAI,CAAC,GAAG,SAAS,CAAC;IAErC;;;OAGG;IACH,UAAU,EAAE,SAAS,CAAC;IAEtB;;;;;;;;OAQG;gBAEF,MAAM,EAAE,QAAQ,EAChB,OAAO,EAAE;QACR,KAAK,EAAE,SAAS,CAAC;QACjB,KAAK,EAAE,KAAK,GAAG,MAAM,CAAC;QACtB,QAAQ,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;QAC9B,SAAS,CAAC,EAAE,MAAM,GAAG,QAAQ,GAAG,SAAS,CAAC;QAC1C,UAAU,CAAC,EAAE,CAAC,MAAM,IAAI,CAAC,GAAG,SAAS,CAAC;KACtC;IA+BO,MAAM,IAAI,IAAI;IAmCd,IAAI,CAAC,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI;IAwB7D,OAAO,IAAI,IAAI;CAqBxB"}
package/build/index.d.ts CHANGED
@@ -125,7 +125,7 @@ export { ObservableVector2d } from "./math/observableVector2d.ts";
125
125
  export { ObservableVector3d } from "./math/observableVector3d.ts";
126
126
  export { Vector2d } from "./math/vector2d.ts";
127
127
  export { Vector3d } from "./math/vector3d.ts";
128
- export type { AdapterCapabilities, AdapterOptions, BodyDefinition, BodyShape, BodyType, CollisionResponse, PhysicsAdapter, PhysicsBody, RaycastHit, RaycastHit3d, } from "./physics/adapter.ts";
128
+ export type { AdapterCapabilities, AdapterOptions, BodyDefinition, BodyShape, BodyType, CollisionResponse, PhysicsAdapter, PhysicsBody, RaycastHit, RaycastHit3d, ShapeCollisionContact, } from "./physics/adapter.ts";
129
129
  export { Bounds } from "./physics/bounds.ts";
130
130
  export { AABB3d } from "./physics/broadphase/aabb3d.ts";
131
131
  export { default as BuiltinAdapter } from "./physics/builtin/builtin-adapter.ts";
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/build/index.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * melonJS Game Engine - 20.0.0
2
+ * melonJS Game Engine - 20.1.0
3
3
  * http://www.melonjs.org
4
4
  * melonjs is licensed under the MIT License.
5
5
  * http://www.opensource.org/licenses/mit-license
@@ -6665,8 +6665,8 @@ function resetGUID(base, index = 0) {
6665
6665
  GUID_base = toHex(base.toUpperCase());
6666
6666
  GUID_index = index;
6667
6667
  }
6668
- function createGUID(index = 1) {
6669
- GUID_index += index;
6668
+ function createGUID(index) {
6669
+ GUID_index++;
6670
6670
  return `${GUID_base}-${index || GUID_index}`;
6671
6671
  }
6672
6672
  var isStringArray = (value) => {
@@ -13193,9 +13193,15 @@ var FadeEffect = class extends CameraEffect {
13193
13193
  }
13194
13194
  }
13195
13195
  destroy() {
13196
- this.tween.stop();
13197
- tweenPool.release(this.tween);
13198
- colorPool.release(this.color);
13196
+ if (this.tween !== void 0) {
13197
+ this.tween.stop();
13198
+ tweenPool.release(this.tween);
13199
+ this.tween = void 0;
13200
+ }
13201
+ if (this.color !== void 0) {
13202
+ colorPool.release(this.color);
13203
+ this.color = void 0;
13204
+ }
13199
13205
  }
13200
13206
  };
13201
13207
 
@@ -13594,13 +13600,22 @@ var MaskEffect = class extends CameraEffect {
13594
13600
  r.restore();
13595
13601
  }
13596
13602
  destroy() {
13597
- this.tween.stop();
13598
- tweenPool.release(this.tween);
13599
- colorPool.release(this.color);
13600
- if (this._maskShape.type === "Ellipse") {
13601
- ellipsePool.release(this._maskShape);
13602
- } else {
13603
- polygonPool.release(this._maskShape);
13603
+ if (this.tween !== void 0) {
13604
+ this.tween.stop();
13605
+ tweenPool.release(this.tween);
13606
+ this.tween = void 0;
13607
+ }
13608
+ if (this.color !== void 0) {
13609
+ colorPool.release(this.color);
13610
+ this.color = void 0;
13611
+ }
13612
+ if (this._maskShape !== void 0) {
13613
+ if (this._maskShape.type === "Ellipse") {
13614
+ ellipsePool.release(this._maskShape);
13615
+ } else {
13616
+ polygonPool.release(this._maskShape);
13617
+ }
13618
+ this._maskShape = void 0;
13604
13619
  }
13605
13620
  }
13606
13621
  };
@@ -16678,6 +16693,7 @@ var collision = {
16678
16693
  };
16679
16694
 
16680
16695
  // src/physics/builtin/body.js
16696
+ var shapeContactIdCounter = 0;
16681
16697
  var Body = class {
16682
16698
  /**
16683
16699
  * @param {Renderable|Container|Entity|Sprite|NineSliceSprite} ancestor - the parent object this body is attached to
@@ -17046,6 +17062,9 @@ var Body = class {
17046
17062
  * @private
17047
17063
  */
17048
17064
  _initShapeCollision(stored, source) {
17065
+ if (stored._contactId === void 0) {
17066
+ stored._contactId = ++shapeContactIdCounter;
17067
+ }
17049
17068
  if (source === void 0) {
17050
17069
  stored.collisionType = void 0;
17051
17070
  stored.collisionMask = void 0;
@@ -17502,6 +17521,7 @@ var Body = class {
17502
17521
  shape.collisionMask = void 0;
17503
17522
  shape.isTrigger = false;
17504
17523
  shape.isActive = true;
17524
+ shape._contactId = void 0;
17505
17525
  if (shape instanceof Point) {
17506
17526
  pointPool.release(shape);
17507
17527
  } else if (shape instanceof Line) {
@@ -47811,6 +47831,56 @@ var Detector = class {
47811
47831
  isTriggerContact: false
47812
47832
  }
47813
47833
  ];
47834
+ this._activeShapePairs = /* @__PURE__ */ new Map();
47835
+ this._frameShapeSeen = /* @__PURE__ */ new Map();
47836
+ this._shapeViews = [
47837
+ {
47838
+ a: null,
47839
+ b: null,
47840
+ shapeA: null,
47841
+ shapeB: null,
47842
+ overlap: 0,
47843
+ overlapN: { x: 0, y: 0 },
47844
+ overlapV: { x: 0, y: 0 },
47845
+ normal: { x: 0, y: 0 },
47846
+ depth: 0,
47847
+ overlapNZ: 0,
47848
+ overlapZ: 0,
47849
+ normalZ: 0,
47850
+ indexShapeA: -1,
47851
+ indexShapeB: -1,
47852
+ isTrigger: false
47853
+ },
47854
+ {
47855
+ a: null,
47856
+ b: null,
47857
+ shapeA: null,
47858
+ shapeB: null,
47859
+ overlap: 0,
47860
+ overlapN: { x: 0, y: 0 },
47861
+ overlapV: { x: 0, y: 0 },
47862
+ normal: { x: 0, y: 0 },
47863
+ depth: 0,
47864
+ overlapNZ: 0,
47865
+ overlapZ: 0,
47866
+ normalZ: 0,
47867
+ indexShapeA: -1,
47868
+ indexShapeB: -1,
47869
+ isTrigger: false
47870
+ }
47871
+ ];
47872
+ this._contactObjA = null;
47873
+ this._contactObjB = null;
47874
+ this._onShapeContact = (shapeA, indexA, shapeB, indexB, isTrigger, res) => {
47875
+ this._dispatchShapeContact(
47876
+ shapeA,
47877
+ indexA,
47878
+ shapeB,
47879
+ indexB,
47880
+ isTrigger,
47881
+ res
47882
+ );
47883
+ };
47814
47884
  }
47815
47885
  /**
47816
47886
  * Populate one of the pooled symmetric views from a SAT response.
@@ -47869,6 +47939,7 @@ var Detector = class {
47869
47939
  */
47870
47940
  beginFrame() {
47871
47941
  this._frameSeen.clear();
47942
+ this._frameShapeSeen.clear();
47872
47943
  }
47873
47944
  /**
47874
47945
  * Called by the adapter at the end of a physics step. Diffs the
@@ -47895,9 +47966,58 @@ var Detector = class {
47895
47966
  b.onCollisionEnd(void 0, a);
47896
47967
  }
47897
47968
  }
47969
+ for (const [key, entry2] of this._activeShapePairs) {
47970
+ if (this._frameShapeSeen.has(key)) {
47971
+ continue;
47972
+ }
47973
+ const [a, b, shapeA, shapeB] = entry2;
47974
+ const aAttached = a.ancestor != null;
47975
+ const bAttached = b.ancestor != null;
47976
+ if (!aAttached && !bAttached) {
47977
+ continue;
47978
+ }
47979
+ if (aAttached && typeof a.onShapeCollisionEnd === "function") {
47980
+ a.onShapeCollisionEnd(this._fillEndedView(0, a, b, shapeA, shapeB), b);
47981
+ }
47982
+ if (bAttached && typeof b.onShapeCollisionEnd === "function") {
47983
+ b.onShapeCollisionEnd(this._fillEndedView(1, b, a, shapeB, shapeA), a);
47984
+ }
47985
+ }
47898
47986
  const prev = this._activePairs;
47899
47987
  this._activePairs = this._frameSeen;
47900
47988
  this._frameSeen = prev;
47989
+ const prevShapes = this._activeShapePairs;
47990
+ this._activeShapePairs = this._frameShapeSeen;
47991
+ this._frameShapeSeen = prevShapes;
47992
+ this._frameShapeSeen.clear();
47993
+ }
47994
+ /**
47995
+ * Identity-only shape-contact view for `onShapeCollisionEnd`: the shapes
47996
+ * have separated, so every geometric field is zeroed rather than left
47997
+ * holding the last overlap, which would read as a live contact.
47998
+ * @ignore
47999
+ */
48000
+ _fillEndedView(slot, receiver, partner, ownShape, otherShape) {
48001
+ const view = this._shapeViews[slot];
48002
+ view.a = receiver;
48003
+ view.b = partner;
48004
+ view.shapeA = ownShape;
48005
+ view.shapeB = otherShape;
48006
+ view.indexShapeA = receiver.body?.shapes.indexOf(ownShape) ?? -1;
48007
+ view.indexShapeB = partner.body?.shapes.indexOf(otherShape) ?? -1;
48008
+ view.isTrigger = ownShape?.isTrigger === true || otherShape?.isTrigger === true;
48009
+ view.overlap = 0;
48010
+ view.depth = 0;
48011
+ view.overlapN.x = 0;
48012
+ view.overlapN.y = 0;
48013
+ view.overlapV.x = 0;
48014
+ view.overlapV.y = 0;
48015
+ view.normal.x = 0;
48016
+ view.normal.y = 0;
48017
+ view.overlapNZ = 0;
48018
+ view.overlapZ = 0;
48019
+ view.normalZ = 0;
48020
+ return view;
47901
48021
  }
47902
48022
  /**
47903
48023
  * Build a stable order-independent key for a pair of renderables,
@@ -47913,6 +48033,188 @@ var Detector = class {
47913
48033
  }
47914
48034
  return ga < gb ? `${ga}|${gb}` : `${gb}|${ga}`;
47915
48035
  }
48036
+ /**
48037
+ * Re-run the narrowphase for a remembered shape pair and repopulate
48038
+ * `response` from it.
48039
+ *
48040
+ * The scan clears `response` on every test, so whichever pair won has to be
48041
+ * measured again before handlers and the solver read it. Indices are looked
48042
+ * up here rather than carried from the scan because an enumeration handler
48043
+ * may have mutated either body in between: `removeShape()` re-indexes, and
48044
+ * `destroy()` empties the array outright. A shape that is no longer on its
48045
+ * body has no contact left to resolve, so this reports failure and the
48046
+ * caller falls through instead of throwing.
48047
+ * @ignore
48048
+ * @returns {boolean} true when the pair was re-measured
48049
+ */
48050
+ _retest(bodyA, bodyB, shapeA, shapeB, response) {
48051
+ const indexA = bodyA.shapes.indexOf(shapeA);
48052
+ const indexB = bodyB.shapes.indexOf(shapeB);
48053
+ if (indexA < 0 || indexB < 0) {
48054
+ return false;
48055
+ }
48056
+ const test = SAT_LOOKUP[shapeA.type + shapeB.type];
48057
+ if (test === void 0) {
48058
+ return false;
48059
+ }
48060
+ test.call(
48061
+ this,
48062
+ bodyA.ancestor,
48063
+ shapeA,
48064
+ bodyB.ancestor,
48065
+ shapeB,
48066
+ response.clear()
48067
+ );
48068
+ response.indexShapeA = indexA;
48069
+ response.indexShapeB = indexB;
48070
+ return true;
48071
+ }
48072
+ /**
48073
+ * Stable, order-independent key for one SHAPE pair (#1596).
48074
+ *
48075
+ * The renderable GUIDs order the pair, exactly as `_pairKey` does, and the
48076
+ * two shape ids MUST swap alongside them: keying `guidA|guidB|idA|idB`
48077
+ * without that swap gives the same physical contact two different keys
48078
+ * depending on which object the outer loop visited first, and the contact
48079
+ * would then End and Start every step.
48080
+ *
48081
+ * Shape identity is `_contactId`, stamped once in `Body#addShape` and never
48082
+ * derived from array position, because `removeShape()` re-indexes every
48083
+ * surviving shape.
48084
+ * @ignore
48085
+ */
48086
+ _shapePairKey(a, b, shapeA, shapeB) {
48087
+ const ga = a.GUID;
48088
+ const gb = b.GUID;
48089
+ const sa = shapeA?._contactId;
48090
+ const sb = shapeB?._contactId;
48091
+ if (ga === void 0 || gb === void 0 || sa === void 0 || sb === void 0) {
48092
+ return void 0;
48093
+ }
48094
+ const left = `${ga}#${sa}`;
48095
+ const right = `${gb}#${sb}`;
48096
+ return left < right ? `${left}|${right}` : `${right}|${left}`;
48097
+ }
48098
+ /**
48099
+ * True when an object subscribes to any shape-contact event.
48100
+ *
48101
+ * This is the opt-in gate: `collides()` only runs the full M x N scan when
48102
+ * this returns true for one of the two objects, so an application that
48103
+ * never declares these handlers performs exactly the narrowphase work it
48104
+ * did before the feature existed.
48105
+ * @ignore
48106
+ */
48107
+ _wantsShapeContacts(obj) {
48108
+ return typeof obj.onShapeCollisionStart === "function" || typeof obj.onShapeCollisionActive === "function" || typeof obj.onShapeCollisionEnd === "function";
48109
+ }
48110
+ /**
48111
+ * Populate a pooled shape-contact view, same flip convention as
48112
+ * `_fillSymView`: `flip=false` builds the view for `response.a`'s side,
48113
+ * `flip=true` for `response.b`'s, so `shapeA` is always the receiver's.
48114
+ * @ignore
48115
+ */
48116
+ _fillShapeView(slot, satResponse, flip, shapeA, shapeB, isTrigger) {
48117
+ const view = this._shapeViews[slot];
48118
+ const oN = satResponse.overlapN;
48119
+ const oV = satResponse.overlapV;
48120
+ const oNZ = satResponse.overlapNZ;
48121
+ const oZ = satResponse.overlapZ;
48122
+ view.overlap = satResponse.overlap;
48123
+ view.depth = satResponse.overlap;
48124
+ view.isTrigger = isTrigger === true;
48125
+ if (flip) {
48126
+ view.a = satResponse.b;
48127
+ view.b = satResponse.a;
48128
+ view.shapeA = shapeB;
48129
+ view.shapeB = shapeA;
48130
+ view.indexShapeA = satResponse.indexShapeB;
48131
+ view.indexShapeB = satResponse.indexShapeA;
48132
+ view.overlapN.x = -oN.x;
48133
+ view.overlapN.y = -oN.y;
48134
+ view.overlapV.x = -oV.x;
48135
+ view.overlapV.y = -oV.y;
48136
+ view.overlapNZ = -oNZ;
48137
+ view.overlapZ = -oZ;
48138
+ view.normal.x = oN.x;
48139
+ view.normal.y = oN.y;
48140
+ view.normalZ = oNZ;
48141
+ } else {
48142
+ view.a = satResponse.a;
48143
+ view.b = satResponse.b;
48144
+ view.shapeA = shapeA;
48145
+ view.shapeB = shapeB;
48146
+ view.indexShapeA = satResponse.indexShapeA;
48147
+ view.indexShapeB = satResponse.indexShapeB;
48148
+ view.overlapN.x = oN.x;
48149
+ view.overlapN.y = oN.y;
48150
+ view.overlapV.x = oV.x;
48151
+ view.overlapV.y = oV.y;
48152
+ view.overlapNZ = oNZ;
48153
+ view.overlapZ = oZ;
48154
+ view.normal.x = -oN.x;
48155
+ view.normal.y = -oN.y;
48156
+ view.normalZ = -oNZ;
48157
+ }
48158
+ return view;
48159
+ }
48160
+ /**
48161
+ * Fire Start / Active for one overlapping shape pair. Called back from
48162
+ * `collides()` once per pair, in scan order.
48163
+ * @ignore
48164
+ */
48165
+ _dispatchShapeContact(shapeA, shapeB, isTrigger, response) {
48166
+ const objA = this._contactObjA;
48167
+ const objB = this._contactObjB;
48168
+ const key = this._shapePairKey(objA, objB, shapeA, shapeB);
48169
+ if (key === void 0 || this._frameShapeSeen.has(key)) {
48170
+ return;
48171
+ }
48172
+ this._frameShapeSeen.set(key, [objA, objB, shapeA, shapeB]);
48173
+ const isEntry = !this._activeShapePairs.has(key);
48174
+ const viewA = this._fillShapeView(
48175
+ 0,
48176
+ response,
48177
+ false,
48178
+ shapeA,
48179
+ shapeB,
48180
+ isTrigger
48181
+ );
48182
+ const viewB = this._fillShapeView(
48183
+ 1,
48184
+ response,
48185
+ true,
48186
+ shapeA,
48187
+ shapeB,
48188
+ isTrigger
48189
+ );
48190
+ if (isEntry) {
48191
+ if (typeof objA.onShapeCollisionStart === "function") {
48192
+ objA.onShapeCollisionStart(viewA, objB);
48193
+ }
48194
+ if (typeof objB.onShapeCollisionStart === "function") {
48195
+ objB.onShapeCollisionStart(viewB, objA);
48196
+ }
48197
+ }
48198
+ if (typeof objA.onShapeCollisionActive === "function") {
48199
+ objA.onShapeCollisionActive(viewA, objB);
48200
+ }
48201
+ if (typeof objB.onShapeCollisionActive === "function") {
48202
+ objB.onShapeCollisionActive(viewB, objA);
48203
+ }
48204
+ }
48205
+ /**
48206
+ * Drop the references the enumeration callback reads.
48207
+ *
48208
+ * They are plain fields rather than a per-pair closure so the hot path
48209
+ * allocates nothing, which means they outlive the pair unless cleared, and
48210
+ * would hold two renderables (and everything they reach) against garbage
48211
+ * collection until the next subscribed pair happened to overwrite them.
48212
+ * @ignore
48213
+ */
48214
+ _clearContactPair() {
48215
+ this._contactObjA = null;
48216
+ this._contactObjB = null;
48217
+ }
47916
48218
  /**
47917
48219
  * determine if two objects should collide (based on both respective objects body collision mask and type).<br>
47918
48220
  * you can redefine this function if you need any specific rules over what should collide with what.
@@ -47931,9 +48233,12 @@ var Detector = class {
47931
48233
  * @param {Body} bodyB - a reference to body B.
47932
48234
  * @returns {boolean} true if colliding
47933
48235
  */
47934
- collides(bodyA, bodyB, response = this.response) {
47935
- let triggerIndexA = -1;
47936
- let triggerIndexB = -1;
48236
+ collides(bodyA, bodyB, response = this.response, onContact = void 0) {
48237
+ const enumerate = onContact !== void 0;
48238
+ let solidShapeA = null;
48239
+ let solidShapeB = null;
48240
+ let triggerShapeA = null;
48241
+ let triggerShapeB = null;
47937
48242
  for (let indexA = bodyA.shapes.length, shapeA; indexA--, shapeA = bodyA.shapes[indexA]; ) {
47938
48243
  for (let indexB = bodyB.shapes.length, shapeB; indexB--, shapeB = bodyB.shapes[indexB]; ) {
47939
48244
  if (shapeA.isActive === false || shapeB.isActive === false) {
@@ -47968,10 +48273,24 @@ var Detector = class {
47968
48273
  // clear response object before reusing
47969
48274
  response.clear()
47970
48275
  ) === true) {
47971
- if (shapeA.isTrigger === true || shapeB.isTrigger === true) {
47972
- if (triggerIndexA < 0) {
47973
- triggerIndexA = indexA;
47974
- triggerIndexB = indexB;
48276
+ const pairIsTrigger = shapeA.isTrigger === true || shapeB.isTrigger === true;
48277
+ if (enumerate === true) {
48278
+ response.indexShapeA = indexA;
48279
+ response.indexShapeB = indexB;
48280
+ response.isTriggerContact = pairIsTrigger;
48281
+ onContact(shapeA, shapeB, pairIsTrigger, response);
48282
+ }
48283
+ if (pairIsTrigger) {
48284
+ if (triggerShapeA === null) {
48285
+ triggerShapeA = shapeA;
48286
+ triggerShapeB = shapeB;
48287
+ }
48288
+ continue;
48289
+ }
48290
+ if (enumerate === true) {
48291
+ if (solidShapeA === null) {
48292
+ solidShapeA = shapeA;
48293
+ solidShapeB = shapeB;
47975
48294
  }
47976
48295
  continue;
47977
48296
  }
@@ -47981,22 +48300,15 @@ var Detector = class {
47981
48300
  }
47982
48301
  }
47983
48302
  }
47984
- if (triggerIndexA >= 0) {
47985
- const shapeA = bodyA.shapes[triggerIndexA];
47986
- const shapeB = bodyB.shapes[triggerIndexB];
47987
- SAT_LOOKUP[shapeA.type + shapeB.type].call(
47988
- this,
47989
- bodyA.ancestor,
47990
- shapeA,
47991
- bodyB.ancestor,
47992
- shapeB,
47993
- response.clear()
47994
- );
47995
- response.indexShapeA = triggerIndexA;
47996
- response.indexShapeB = triggerIndexB;
47997
- response.isTriggerContact = true;
48303
+ if (solidShapeA !== null && this._retest(bodyA, bodyB, solidShapeA, solidShapeB, response)) {
47998
48304
  return true;
47999
48305
  }
48306
+ if (triggerShapeA !== null) {
48307
+ if (this._retest(bodyA, bodyB, triggerShapeA, triggerShapeB, response)) {
48308
+ response.isTriggerContact = true;
48309
+ return true;
48310
+ }
48311
+ }
48000
48312
  return false;
48001
48313
  }
48002
48314
  /**
@@ -48016,7 +48328,23 @@ var Detector = class {
48016
48328
  boundsB.addBounds(objB.getBounds(), true);
48017
48329
  boundsB.addBounds(objB.body.getBounds());
48018
48330
  if (boundsA.overlaps(boundsB)) {
48019
- if (this.collides(objA.body, objB.body)) {
48331
+ const wantsContacts = this._wantsShapeContacts(objA) || this._wantsShapeContacts(objB);
48332
+ let onContact;
48333
+ if (wantsContacts === true) {
48334
+ this._contactObjA = objA;
48335
+ this._contactObjB = objB;
48336
+ onContact = this._onShapeContact;
48337
+ }
48338
+ const didCollide = this.collides(
48339
+ objA.body,
48340
+ objB.body,
48341
+ this.response,
48342
+ onContact
48343
+ );
48344
+ if (wantsContacts === true) {
48345
+ this._clearContactPair();
48346
+ }
48347
+ if (didCollide) {
48020
48348
  collisionCounter++;
48021
48349
  const pairKey = this._pairKey(objA, objB);
48022
48350
  const firstVisitThisFrame = pairKey !== void 0 && !this._frameSeen.has(pairKey);
@@ -50064,7 +50392,7 @@ var Trigger = class extends Renderable {
50064
50392
  };
50065
50393
 
50066
50394
  // src/version.ts
50067
- var version = "20.0.0";
50395
+ var version = "20.1.0";
50068
50396
 
50069
50397
  // src/system/bootstrap.ts
50070
50398
  var initialized = false;