excalibur 0.26.0-alpha.411 → 0.26.0-alpha.412

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/CHANGELOG.md CHANGED
@@ -15,7 +15,7 @@ This project adheres to [Semantic Versioning](http://semver.org/).
15
15
 
16
16
  ### Added
17
17
 
18
- -
18
+ Added arbitrary non-convex polygon support (only non-self intersecting) with `ex.PolygonCollider(...).triangulate()` which builds a new `ex.CompositeCollider` composed of triangles.
19
19
 
20
20
  ### Fixed
21
21
 
@@ -165,7 +165,7 @@ export class ColliderComponent extends Component {
165
165
  * By default, the box is center is at (0, 0) which means it is centered around the actors anchor.
166
166
  */
167
167
  usePolygonCollider(points, center = Vector.Zero) {
168
- const poly = Shape.Polygon(points, false, center);
168
+ const poly = Shape.Polygon(points, center);
169
169
  return (this.set(poly));
170
170
  }
171
171
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"ColliderComponent.js","sourceRoot":"","sources":["../../../src/engine/Collision/ColliderComponent.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ColliderComponent.js","sourceRoot":"","sources":["../../../src/engine/Collision/ColliderComponent.ts"],"names":[],"mappings":"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"}
@@ -8,6 +8,7 @@ import { Ray } from '../../Math/ray';
8
8
  import { Transform } from '../../EntityComponentSystem';
9
9
  import { Collider } from './Collider';
10
10
  import { ExcaliburGraphicsContext } from '../..';
11
+ import { CompositeCollider } from './CompositeCollider';
11
12
  export interface PolygonColliderOptions {
12
13
  /**
13
14
  * Pixel offset relative to a collider's body transform position.
@@ -17,21 +18,19 @@ export interface PolygonColliderOptions {
17
18
  * Points in the polygon in order around the perimeter in local coordinates. These are relative from the body transform position.
18
19
  */
19
20
  points: Vector[];
20
- /**
21
- * Whether points are specified in clockwise or counter clockwise order, default counter-clockwise
22
- */
23
- clockwiseWinding?: boolean;
24
21
  }
25
22
  /**
26
23
  * Polygon collider for detecting collisions
27
24
  */
28
25
  export declare class PolygonCollider extends Collider {
26
+ private _logger;
29
27
  /**
30
28
  * Pixel offset relative to a collider's body transform position.
31
29
  */
32
30
  offset: Vector;
33
31
  /**
34
32
  * Points in the polygon in order around the perimeter in local coordinates. These are relative from the body transform position.
33
+ * Excalibur stores these in clockwise order
35
34
  */
36
35
  points: Vector[];
37
36
  private _transform;
@@ -40,6 +39,21 @@ export declare class PolygonCollider extends Collider {
40
39
  private _sides;
41
40
  private _localSides;
42
41
  constructor(options: PolygonColliderOptions);
42
+ private _isClockwiseWinding;
43
+ /**
44
+ * Returns if the polygon collider is convex, Excalibur does not handle non-convex collision shapes.
45
+ * Call [[Polygon.triangulate]] to generate a [[CompositeCollider]] from this non-convex shape
46
+ */
47
+ isConvex(): boolean;
48
+ /**
49
+ * Tessellates the polygon into a triangle fan as a [[CompositeCollider]] of triangle polygons
50
+ */
51
+ tessellate(): CompositeCollider;
52
+ /**
53
+ * Triangulate the polygon collider using the "Ear Clipping" algorithm.
54
+ * Returns a new [[CompositeCollider]] made up of smaller triangles.
55
+ */
56
+ triangulate(): CompositeCollider;
43
57
  /**
44
58
  * Returns a clone of this ConvexPolygon, not associated with any collider
45
59
  */
@@ -9,23 +9,188 @@ import { Vector } from '../../Math/vector';
9
9
  import { Ray } from '../../Math/ray';
10
10
  import { ClosestLineJumpTable } from './ClosestLineJumpTable';
11
11
  import { Collider } from './Collider';
12
+ import { Logger, range } from '../..';
13
+ import { CompositeCollider } from './CompositeCollider';
14
+ import { Shape } from './Shape';
12
15
  /**
13
16
  * Polygon collider for detecting collisions
14
17
  */
15
18
  export class PolygonCollider extends Collider {
16
19
  constructor(options) {
17
- var _a;
20
+ var _a, _b;
18
21
  super();
22
+ this._logger = Logger.getInstance();
19
23
  this._transformedPoints = [];
20
24
  this._axes = [];
21
25
  this._sides = [];
22
26
  this._localSides = [];
23
27
  this.offset = (_a = options.offset) !== null && _a !== void 0 ? _a : Vector.Zero;
24
- const winding = !!options.clockwiseWinding;
25
- this.points = (winding ? options.points.reverse() : options.points) || [];
28
+ this.points = (_b = options.points) !== null && _b !== void 0 ? _b : [];
29
+ const clockwise = this._isClockwiseWinding(this.points);
30
+ if (!clockwise) {
31
+ this.points.reverse();
32
+ }
33
+ if (!this.isConvex()) {
34
+ this._logger.warn('Excalibur only supports convex polygon colliders and will not behave properly.' +
35
+ 'Call PolygonCollider.triangulate() to build a new collider composed of smaller convex triangles');
36
+ }
26
37
  // calculate initial transformation
27
38
  this._calculateTransformation();
28
39
  }
40
+ _isClockwiseWinding(points) {
41
+ // https://stackoverflow.com/a/1165943
42
+ let sum = 0;
43
+ for (let i = 0; i < points.length; i++) {
44
+ sum += (points[(i + 1) % points.length].x - points[i].x) * (points[(i + 1) % points.length].y + points[i].y);
45
+ }
46
+ return sum < 0;
47
+ }
48
+ /**
49
+ * Returns if the polygon collider is convex, Excalibur does not handle non-convex collision shapes.
50
+ * Call [[Polygon.triangulate]] to generate a [[CompositeCollider]] from this non-convex shape
51
+ */
52
+ isConvex() {
53
+ // From SO: https://stackoverflow.com/a/45372025
54
+ if (this.points.length < 3) {
55
+ return false;
56
+ }
57
+ let oldPoint = this.points[this.points.length - 2];
58
+ let newPoint = this.points[this.points.length - 1];
59
+ let direction = Math.atan2(newPoint.y - oldPoint.y, newPoint.x - oldPoint.x);
60
+ let oldDirection = 0;
61
+ let orientation = 0;
62
+ let angleSum = 0;
63
+ for (const [i, point] of this.points.entries()) {
64
+ oldPoint = newPoint;
65
+ oldDirection = direction;
66
+ newPoint = point;
67
+ direction = Math.atan2(newPoint.y - oldPoint.y, newPoint.x - oldPoint.x);
68
+ if (oldPoint.equals(newPoint)) {
69
+ return false; // repeat point
70
+ }
71
+ let angle = direction - oldDirection;
72
+ if (angle <= -Math.PI) {
73
+ angle += Math.PI * 2;
74
+ }
75
+ else if (angle > Math.PI) {
76
+ angle -= Math.PI * 2;
77
+ }
78
+ if (i === 0) {
79
+ if (angle === 0.0) {
80
+ return false;
81
+ }
82
+ orientation = angle > 0 ? 1 : -1;
83
+ }
84
+ else {
85
+ if (orientation * angle <= 0) {
86
+ return false;
87
+ }
88
+ }
89
+ angleSum += angle;
90
+ }
91
+ return Math.abs(Math.round(angleSum / (Math.PI * 2))) === 1;
92
+ }
93
+ /**
94
+ * Tessellates the polygon into a triangle fan as a [[CompositeCollider]] of triangle polygons
95
+ */
96
+ tessellate() {
97
+ const polygons = [];
98
+ for (let i = 1; i < this.points.length - 2; i++) {
99
+ polygons.push([this.points[0], this.points[i + 1], this.points[i + 2]]);
100
+ }
101
+ polygons.push([this.points[0], this.points[1], this.points[2]]);
102
+ return new CompositeCollider(polygons.map(points => Shape.Polygon(points)));
103
+ }
104
+ /**
105
+ * Triangulate the polygon collider using the "Ear Clipping" algorithm.
106
+ * Returns a new [[CompositeCollider]] made up of smaller triangles.
107
+ */
108
+ triangulate() {
109
+ // https://www.youtube.com/watch?v=hTJFcHutls8
110
+ if (this.points.length < 3) {
111
+ throw Error('Invalid polygon');
112
+ }
113
+ // Helper to get a vertex in the list
114
+ /**
115
+ *
116
+ */
117
+ function getItem(index, list) {
118
+ if (index >= list.length) {
119
+ return list[index % list.length];
120
+ }
121
+ else if (index < 0) {
122
+ return list[index % list.length + list.length];
123
+ }
124
+ else {
125
+ return list[index];
126
+ }
127
+ }
128
+ // Quick test for point in triangle
129
+ /**
130
+ *
131
+ */
132
+ function isPointInTriangle(point, a, b, c) {
133
+ const ab = b.sub(a);
134
+ const bc = c.sub(b);
135
+ const ca = a.sub(c);
136
+ const ap = point.sub(a);
137
+ const bp = point.sub(b);
138
+ const cp = point.sub(c);
139
+ const cross1 = ab.cross(ap);
140
+ const cross2 = bc.cross(bp);
141
+ const cross3 = ca.cross(cp);
142
+ if (cross1 > 0 || cross2 > 0 || cross3 > 0) {
143
+ return false;
144
+ }
145
+ return true;
146
+ }
147
+ const triangles = [];
148
+ const vertices = [...this.points];
149
+ const indices = range(0, this.points.length - 1);
150
+ // 1. Loop through vertices clockwise
151
+ // if the vertex is convex (interior angle is < 180) (cross product positive)
152
+ // if the polygon formed by it's edges doesn't contain the points
153
+ // it's an ear add it to our list of triangles, and restart
154
+ while (indices.length > 3) {
155
+ for (let i = 0; i < indices.length; i++) {
156
+ const a = indices[i];
157
+ const b = getItem(i - 1, indices);
158
+ const c = getItem(i + 1, indices);
159
+ const va = vertices[a];
160
+ const vb = vertices[b];
161
+ const vc = vertices[c];
162
+ // Check convexity
163
+ const leftArm = vb.sub(va);
164
+ const rightArm = vc.sub(va);
165
+ const isConvex = rightArm.cross(leftArm) > 0; // positive cross means convex
166
+ if (!isConvex) {
167
+ continue;
168
+ }
169
+ let isEar = true;
170
+ // Check that if any vertices are in the triangle a, b, c
171
+ for (let j = 0; j < indices.length; j++) {
172
+ const vertIndex = indices[j];
173
+ // We can skip these
174
+ if (vertIndex === a || vertIndex === b || vertIndex === c) {
175
+ continue;
176
+ }
177
+ const point = vertices[vertIndex];
178
+ if (isPointInTriangle(point, vb, va, vc)) {
179
+ isEar = false;
180
+ break;
181
+ }
182
+ }
183
+ // Add ear to polygon list and remove from list
184
+ if (isEar) {
185
+ triangles.push([vb, va, vc]);
186
+ indices.splice(i, 1);
187
+ break;
188
+ }
189
+ }
190
+ }
191
+ triangles.push([vertices[indices[0]], vertices[indices[1]], vertices[indices[2]]]);
192
+ return new CompositeCollider(triangles.map(points => Shape.Polygon(points)));
193
+ }
29
194
  /**
30
195
  * Returns a clone of this ConvexPolygon, not associated with any collider
31
196
  */
@@ -1 +1 @@
1
- {"version":3,"file":"PolygonCollider.js","sourceRoot":"","sources":["../../../../src/engine/Collision/Colliders/PolygonCollider.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"PolygonCollider.js","sourceRoot":"","sources":["../../../../src/engine/Collision/Colliders/PolygonCollider.ts"],"names":[],"mappings":"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"}
@@ -20,10 +20,9 @@ export declare class Shape {
20
20
  *
21
21
  * PolygonColliders are useful for creating convex polygon shapes
22
22
  * @param points Points specified in counter clockwise
23
- * @param clockwiseWinding Optionally changed the winding of points, by default false meaning counter-clockwise winding.
24
23
  * @param offset Optional offset relative to the collider in local coordinates
25
24
  */
26
- static Polygon(points: Vector[], clockwiseWinding?: boolean, offset?: Vector): PolygonCollider;
25
+ static Polygon(points: Vector[], offset?: Vector): PolygonCollider;
27
26
  /**
28
27
  * Creates a new [[CircleCollider|circle]] collider
29
28
  *
@@ -27,14 +27,12 @@ export class Shape {
27
27
  *
28
28
  * PolygonColliders are useful for creating convex polygon shapes
29
29
  * @param points Points specified in counter clockwise
30
- * @param clockwiseWinding Optionally changed the winding of points, by default false meaning counter-clockwise winding.
31
30
  * @param offset Optional offset relative to the collider in local coordinates
32
31
  */
33
- static Polygon(points, clockwiseWinding = false, offset = Vector.Zero) {
32
+ static Polygon(points, offset = Vector.Zero) {
34
33
  return new PolygonCollider({
35
34
  points: points,
36
- offset: offset,
37
- clockwiseWinding: clockwiseWinding
35
+ offset: offset
38
36
  });
39
37
  }
40
38
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"Shape.js","sourceRoot":"","sources":["../../../../src/engine/Collision/Colliders/Shape.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Shape.js","sourceRoot":"","sources":["../../../../src/engine/Collision/Colliders/Shape.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * excalibur - 0.26.0-alpha.411+1410248 - 2022-2-12
2
+ * excalibur - 0.26.0-alpha.412+2441285 - 2022-2-12
3
3
  * https://github.com/excaliburjs/Excalibur
4
4
  * Copyright (c) 2022 Excalibur.js <https://github.com/excaliburjs/Excalibur/graphs/contributors>
5
5
  * Licensed BSD-2-Clause
@@ -15047,23 +15047,188 @@ class EdgeCollider extends Collider {
15047
15047
 
15048
15048
 
15049
15049
 
15050
+
15051
+
15052
+
15050
15053
  /**
15051
15054
  * Polygon collider for detecting collisions
15052
15055
  */
15053
15056
  class PolygonCollider extends Collider {
15054
15057
  constructor(options) {
15055
- var _a;
15058
+ var _a, _b;
15056
15059
  super();
15060
+ this._logger = Logger.getInstance();
15057
15061
  this._transformedPoints = [];
15058
15062
  this._axes = [];
15059
15063
  this._sides = [];
15060
15064
  this._localSides = [];
15061
15065
  this.offset = (_a = options.offset) !== null && _a !== void 0 ? _a : Vector.Zero;
15062
- const winding = !!options.clockwiseWinding;
15063
- this.points = (winding ? options.points.reverse() : options.points) || [];
15066
+ this.points = (_b = options.points) !== null && _b !== void 0 ? _b : [];
15067
+ const clockwise = this._isClockwiseWinding(this.points);
15068
+ if (!clockwise) {
15069
+ this.points.reverse();
15070
+ }
15071
+ if (!this.isConvex()) {
15072
+ this._logger.warn('Excalibur only supports convex polygon colliders and will not behave properly.' +
15073
+ 'Call PolygonCollider.triangulate() to build a new collider composed of smaller convex triangles');
15074
+ }
15064
15075
  // calculate initial transformation
15065
15076
  this._calculateTransformation();
15066
15077
  }
15078
+ _isClockwiseWinding(points) {
15079
+ // https://stackoverflow.com/a/1165943
15080
+ let sum = 0;
15081
+ for (let i = 0; i < points.length; i++) {
15082
+ sum += (points[(i + 1) % points.length].x - points[i].x) * (points[(i + 1) % points.length].y + points[i].y);
15083
+ }
15084
+ return sum < 0;
15085
+ }
15086
+ /**
15087
+ * Returns if the polygon collider is convex, Excalibur does not handle non-convex collision shapes.
15088
+ * Call [[Polygon.triangulate]] to generate a [[CompositeCollider]] from this non-convex shape
15089
+ */
15090
+ isConvex() {
15091
+ // From SO: https://stackoverflow.com/a/45372025
15092
+ if (this.points.length < 3) {
15093
+ return false;
15094
+ }
15095
+ let oldPoint = this.points[this.points.length - 2];
15096
+ let newPoint = this.points[this.points.length - 1];
15097
+ let direction = Math.atan2(newPoint.y - oldPoint.y, newPoint.x - oldPoint.x);
15098
+ let oldDirection = 0;
15099
+ let orientation = 0;
15100
+ let angleSum = 0;
15101
+ for (const [i, point] of this.points.entries()) {
15102
+ oldPoint = newPoint;
15103
+ oldDirection = direction;
15104
+ newPoint = point;
15105
+ direction = Math.atan2(newPoint.y - oldPoint.y, newPoint.x - oldPoint.x);
15106
+ if (oldPoint.equals(newPoint)) {
15107
+ return false; // repeat point
15108
+ }
15109
+ let angle = direction - oldDirection;
15110
+ if (angle <= -Math.PI) {
15111
+ angle += Math.PI * 2;
15112
+ }
15113
+ else if (angle > Math.PI) {
15114
+ angle -= Math.PI * 2;
15115
+ }
15116
+ if (i === 0) {
15117
+ if (angle === 0.0) {
15118
+ return false;
15119
+ }
15120
+ orientation = angle > 0 ? 1 : -1;
15121
+ }
15122
+ else {
15123
+ if (orientation * angle <= 0) {
15124
+ return false;
15125
+ }
15126
+ }
15127
+ angleSum += angle;
15128
+ }
15129
+ return Math.abs(Math.round(angleSum / (Math.PI * 2))) === 1;
15130
+ }
15131
+ /**
15132
+ * Tessellates the polygon into a triangle fan as a [[CompositeCollider]] of triangle polygons
15133
+ */
15134
+ tessellate() {
15135
+ const polygons = [];
15136
+ for (let i = 1; i < this.points.length - 2; i++) {
15137
+ polygons.push([this.points[0], this.points[i + 1], this.points[i + 2]]);
15138
+ }
15139
+ polygons.push([this.points[0], this.points[1], this.points[2]]);
15140
+ return new CompositeCollider(polygons.map(points => Shape.Polygon(points)));
15141
+ }
15142
+ /**
15143
+ * Triangulate the polygon collider using the "Ear Clipping" algorithm.
15144
+ * Returns a new [[CompositeCollider]] made up of smaller triangles.
15145
+ */
15146
+ triangulate() {
15147
+ // https://www.youtube.com/watch?v=hTJFcHutls8
15148
+ if (this.points.length < 3) {
15149
+ throw Error('Invalid polygon');
15150
+ }
15151
+ // Helper to get a vertex in the list
15152
+ /**
15153
+ *
15154
+ */
15155
+ function getItem(index, list) {
15156
+ if (index >= list.length) {
15157
+ return list[index % list.length];
15158
+ }
15159
+ else if (index < 0) {
15160
+ return list[index % list.length + list.length];
15161
+ }
15162
+ else {
15163
+ return list[index];
15164
+ }
15165
+ }
15166
+ // Quick test for point in triangle
15167
+ /**
15168
+ *
15169
+ */
15170
+ function isPointInTriangle(point, a, b, c) {
15171
+ const ab = b.sub(a);
15172
+ const bc = c.sub(b);
15173
+ const ca = a.sub(c);
15174
+ const ap = point.sub(a);
15175
+ const bp = point.sub(b);
15176
+ const cp = point.sub(c);
15177
+ const cross1 = ab.cross(ap);
15178
+ const cross2 = bc.cross(bp);
15179
+ const cross3 = ca.cross(cp);
15180
+ if (cross1 > 0 || cross2 > 0 || cross3 > 0) {
15181
+ return false;
15182
+ }
15183
+ return true;
15184
+ }
15185
+ const triangles = [];
15186
+ const vertices = [...this.points];
15187
+ const indices = range(0, this.points.length - 1);
15188
+ // 1. Loop through vertices clockwise
15189
+ // if the vertex is convex (interior angle is < 180) (cross product positive)
15190
+ // if the polygon formed by it's edges doesn't contain the points
15191
+ // it's an ear add it to our list of triangles, and restart
15192
+ while (indices.length > 3) {
15193
+ for (let i = 0; i < indices.length; i++) {
15194
+ const a = indices[i];
15195
+ const b = getItem(i - 1, indices);
15196
+ const c = getItem(i + 1, indices);
15197
+ const va = vertices[a];
15198
+ const vb = vertices[b];
15199
+ const vc = vertices[c];
15200
+ // Check convexity
15201
+ const leftArm = vb.sub(va);
15202
+ const rightArm = vc.sub(va);
15203
+ const isConvex = rightArm.cross(leftArm) > 0; // positive cross means convex
15204
+ if (!isConvex) {
15205
+ continue;
15206
+ }
15207
+ let isEar = true;
15208
+ // Check that if any vertices are in the triangle a, b, c
15209
+ for (let j = 0; j < indices.length; j++) {
15210
+ const vertIndex = indices[j];
15211
+ // We can skip these
15212
+ if (vertIndex === a || vertIndex === b || vertIndex === c) {
15213
+ continue;
15214
+ }
15215
+ const point = vertices[vertIndex];
15216
+ if (isPointInTriangle(point, vb, va, vc)) {
15217
+ isEar = false;
15218
+ break;
15219
+ }
15220
+ }
15221
+ // Add ear to polygon list and remove from list
15222
+ if (isEar) {
15223
+ triangles.push([vb, va, vc]);
15224
+ indices.splice(i, 1);
15225
+ break;
15226
+ }
15227
+ }
15228
+ }
15229
+ triangles.push([vertices[indices[0]], vertices[indices[1]], vertices[indices[2]]]);
15230
+ return new CompositeCollider(triangles.map(points => Shape.Polygon(points)));
15231
+ }
15067
15232
  /**
15068
15233
  * Returns a clone of this ConvexPolygon, not associated with any collider
15069
15234
  */
@@ -15455,14 +15620,12 @@ class Shape {
15455
15620
  *
15456
15621
  * PolygonColliders are useful for creating convex polygon shapes
15457
15622
  * @param points Points specified in counter clockwise
15458
- * @param clockwiseWinding Optionally changed the winding of points, by default false meaning counter-clockwise winding.
15459
15623
  * @param offset Optional offset relative to the collider in local coordinates
15460
15624
  */
15461
- static Polygon(points, clockwiseWinding = false, offset = Vector.Zero) {
15625
+ static Polygon(points, offset = Vector.Zero) {
15462
15626
  return new PolygonCollider({
15463
15627
  points: points,
15464
- offset: offset,
15465
- clockwiseWinding: clockwiseWinding
15628
+ offset: offset
15466
15629
  });
15467
15630
  }
15468
15631
  /**
@@ -15696,7 +15859,7 @@ class ColliderComponent extends Component {
15696
15859
  * By default, the box is center is at (0, 0) which means it is centered around the actors anchor.
15697
15860
  */
15698
15861
  usePolygonCollider(points, center = Vector.Zero) {
15699
- const poly = Shape.Polygon(points, false, center);
15862
+ const poly = Shape.Polygon(points, center);
15700
15863
  return (this.set(poly));
15701
15864
  }
15702
15865
  /**
@@ -30200,7 +30363,7 @@ Promises_Promise = Promise_1 = Promises_decorate([
30200
30363
  * The current Excalibur version string
30201
30364
  * @description `process.env.__EX_VERSION` gets replaced by Webpack on build
30202
30365
  */
30203
- const EX_VERSION = "0.26.0-alpha.411+1410248";
30366
+ const EX_VERSION = "0.26.0-alpha.412+2441285";
30204
30367
 
30205
30368
  polyfill();
30206
30369
  // This file is used as the bundle entry point and exports everything