@esotericsoftware/spine-core 4.2.45 → 4.2.46

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.
@@ -4462,6 +4462,11 @@ var spine = (() => {
4462
4462
  wasApplied() {
4463
4463
  return this.nextTrackLast != -1;
4464
4464
  }
4465
+ /** Returns true if there is a {@link #getNext()} track entry and it will become the current track entry during the next
4466
+ * {@link AnimationState#update(float)}. */
4467
+ isNextReady() {
4468
+ return this.next != null && this.nextTrackLast - this.next.delay >= 0;
4469
+ }
4465
4470
  };
4466
4471
  var EventQueue = class {
4467
4472
  objects = [];
@@ -8098,7 +8103,7 @@ var spine = (() => {
8098
8103
  }
8099
8104
  if (vertices && triangles) {
8100
8105
  if (clipper != null && clipper.isClipping()) {
8101
- clipper.clipTriangles(vertices, verticesLength, triangles, triangles.length);
8106
+ clipper.clipTriangles(vertices, triangles, triangles.length);
8102
8107
  vertices = clipper.clippedVertices;
8103
8108
  verticesLength = clipper.clippedVertices.length;
8104
8109
  }
@@ -10303,74 +10308,70 @@ var spine = (() => {
10303
10308
  isClipping() {
10304
10309
  return this.clipAttachment != null;
10305
10310
  }
10306
- clipTriangles(vertices, verticesLength, triangles, trianglesLength, uvs, light, dark, twoColor) {
10311
+ clipTriangles(vertices, triangles, trianglesLength, uvs, light, dark, twoColor) {
10307
10312
  if (uvs && light && dark && typeof twoColor === "boolean")
10308
- this.clipTrianglesRender(vertices, verticesLength, triangles, trianglesLength, uvs, light, dark, twoColor);
10313
+ this.clipTrianglesRender(vertices, triangles, trianglesLength, uvs, light, dark, twoColor);
10309
10314
  else
10310
- this.clipTrianglesNoRender(vertices, verticesLength, triangles, trianglesLength);
10315
+ this.clipTrianglesNoRender(vertices, triangles, trianglesLength);
10311
10316
  }
10312
- clipTrianglesNoRender(vertices, verticesLength, triangles, trianglesLength) {
10317
+ clipTrianglesNoRender(vertices, triangles, trianglesLength) {
10313
10318
  let clipOutput = this.clipOutput, clippedVertices = this.clippedVertices;
10314
10319
  let clippedTriangles = this.clippedTriangles;
10315
10320
  let polygons = this.clippingPolygons;
10316
10321
  let polygonsCount = polygons.length;
10317
- let vertexSize = 2;
10318
10322
  let index = 0;
10319
10323
  clippedVertices.length = 0;
10320
10324
  clippedTriangles.length = 0;
10321
- outer:
10322
- for (let i = 0; i < trianglesLength; i += 3) {
10323
- let vertexOffset = triangles[i] << 1;
10324
- let x1 = vertices[vertexOffset], y1 = vertices[vertexOffset + 1];
10325
- vertexOffset = triangles[i + 1] << 1;
10326
- let x2 = vertices[vertexOffset], y2 = vertices[vertexOffset + 1];
10327
- vertexOffset = triangles[i + 2] << 1;
10328
- let x3 = vertices[vertexOffset], y3 = vertices[vertexOffset + 1];
10329
- for (let p = 0; p < polygonsCount; p++) {
10330
- let s = clippedVertices.length;
10331
- if (this.clip(x1, y1, x2, y2, x3, y3, polygons[p], clipOutput)) {
10332
- let clipOutputLength = clipOutput.length;
10333
- if (clipOutputLength == 0)
10334
- continue;
10335
- let clipOutputCount = clipOutputLength >> 1;
10336
- let clipOutputItems = this.clipOutput;
10337
- let clippedVerticesItems = Utils.setArraySize(clippedVertices, s + clipOutputCount * vertexSize);
10338
- for (let ii = 0; ii < clipOutputLength; ii += 2) {
10339
- let x = clipOutputItems[ii], y = clipOutputItems[ii + 1];
10340
- clippedVerticesItems[s] = x;
10341
- clippedVerticesItems[s + 1] = y;
10342
- s += 2;
10343
- }
10344
- s = clippedTriangles.length;
10345
- let clippedTrianglesItems = Utils.setArraySize(clippedTriangles, s + 3 * (clipOutputCount - 2));
10346
- clipOutputCount--;
10347
- for (let ii = 1; ii < clipOutputCount; ii++) {
10348
- clippedTrianglesItems[s] = index;
10349
- clippedTrianglesItems[s + 1] = index + ii;
10350
- clippedTrianglesItems[s + 2] = index + ii + 1;
10351
- s += 3;
10352
- }
10353
- index += clipOutputCount + 1;
10354
- } else {
10355
- let clippedVerticesItems = Utils.setArraySize(clippedVertices, s + 3 * vertexSize);
10356
- clippedVerticesItems[s] = x1;
10357
- clippedVerticesItems[s + 1] = y1;
10358
- clippedVerticesItems[s + 2] = x2;
10359
- clippedVerticesItems[s + 3] = y2;
10360
- clippedVerticesItems[s + 4] = x3;
10361
- clippedVerticesItems[s + 5] = y3;
10362
- s = clippedTriangles.length;
10363
- let clippedTrianglesItems = Utils.setArraySize(clippedTriangles, s + 3);
10325
+ for (let i = 0; i < trianglesLength; i += 3) {
10326
+ let vertexOffset = triangles[i] << 1;
10327
+ let x1 = vertices[vertexOffset], y1 = vertices[vertexOffset + 1];
10328
+ vertexOffset = triangles[i + 1] << 1;
10329
+ let x2 = vertices[vertexOffset], y2 = vertices[vertexOffset + 1];
10330
+ vertexOffset = triangles[i + 2] << 1;
10331
+ let x3 = vertices[vertexOffset], y3 = vertices[vertexOffset + 1];
10332
+ for (let p = 0; p < polygonsCount; p++) {
10333
+ let s = clippedVertices.length;
10334
+ if (this.clip(x1, y1, x2, y2, x3, y3, polygons[p], clipOutput)) {
10335
+ let clipOutputLength = clipOutput.length;
10336
+ if (clipOutputLength == 0)
10337
+ continue;
10338
+ let clipOutputCount = clipOutputLength >> 1;
10339
+ let clipOutputItems = this.clipOutput;
10340
+ let clippedVerticesItems = Utils.setArraySize(clippedVertices, s + clipOutputCount * 2);
10341
+ for (let ii = 0; ii < clipOutputLength; ii += 2, s += 2) {
10342
+ let x = clipOutputItems[ii], y = clipOutputItems[ii + 1];
10343
+ clippedVerticesItems[s] = x;
10344
+ clippedVerticesItems[s + 1] = y;
10345
+ }
10346
+ s = clippedTriangles.length;
10347
+ let clippedTrianglesItems = Utils.setArraySize(clippedTriangles, s + 3 * (clipOutputCount - 2));
10348
+ clipOutputCount--;
10349
+ for (let ii = 1; ii < clipOutputCount; ii++, s += 3) {
10364
10350
  clippedTrianglesItems[s] = index;
10365
- clippedTrianglesItems[s + 1] = index + 1;
10366
- clippedTrianglesItems[s + 2] = index + 2;
10367
- index += 3;
10368
- continue outer;
10351
+ clippedTrianglesItems[s + 1] = index + ii;
10352
+ clippedTrianglesItems[s + 2] = index + ii + 1;
10369
10353
  }
10354
+ index += clipOutputCount + 1;
10355
+ } else {
10356
+ let clippedVerticesItems = Utils.setArraySize(clippedVertices, s + 3 * 2);
10357
+ clippedVerticesItems[s] = x1;
10358
+ clippedVerticesItems[s + 1] = y1;
10359
+ clippedVerticesItems[s + 2] = x2;
10360
+ clippedVerticesItems[s + 3] = y2;
10361
+ clippedVerticesItems[s + 4] = x3;
10362
+ clippedVerticesItems[s + 5] = y3;
10363
+ s = clippedTriangles.length;
10364
+ let clippedTrianglesItems = Utils.setArraySize(clippedTriangles, s + 3);
10365
+ clippedTrianglesItems[s] = index;
10366
+ clippedTrianglesItems[s + 1] = index + 1;
10367
+ clippedTrianglesItems[s + 2] = index + 2;
10368
+ index += 3;
10369
+ break;
10370
10370
  }
10371
10371
  }
10372
+ }
10372
10373
  }
10373
- clipTrianglesRender(vertices, verticesLength, triangles, trianglesLength, uvs, light, dark, twoColor) {
10374
+ clipTrianglesRender(vertices, triangles, trianglesLength, uvs, light, dark, twoColor) {
10374
10375
  let clipOutput = this.clipOutput, clippedVertices = this.clippedVertices;
10375
10376
  let clippedTriangles = this.clippedTriangles;
10376
10377
  let polygons = this.clippingPolygons;
@@ -10379,129 +10380,126 @@ var spine = (() => {
10379
10380
  let index = 0;
10380
10381
  clippedVertices.length = 0;
10381
10382
  clippedTriangles.length = 0;
10382
- outer:
10383
- for (let i = 0; i < trianglesLength; i += 3) {
10384
- let vertexOffset = triangles[i] << 1;
10385
- let x1 = vertices[vertexOffset], y1 = vertices[vertexOffset + 1];
10386
- let u1 = uvs[vertexOffset], v1 = uvs[vertexOffset + 1];
10387
- vertexOffset = triangles[i + 1] << 1;
10388
- let x2 = vertices[vertexOffset], y2 = vertices[vertexOffset + 1];
10389
- let u2 = uvs[vertexOffset], v2 = uvs[vertexOffset + 1];
10390
- vertexOffset = triangles[i + 2] << 1;
10391
- let x3 = vertices[vertexOffset], y3 = vertices[vertexOffset + 1];
10392
- let u3 = uvs[vertexOffset], v3 = uvs[vertexOffset + 1];
10393
- for (let p = 0; p < polygonsCount; p++) {
10394
- let s = clippedVertices.length;
10395
- if (this.clip(x1, y1, x2, y2, x3, y3, polygons[p], clipOutput)) {
10396
- let clipOutputLength = clipOutput.length;
10397
- if (clipOutputLength == 0)
10398
- continue;
10399
- let d0 = y2 - y3, d1 = x3 - x2, d2 = x1 - x3, d4 = y3 - y1;
10400
- let d = 1 / (d0 * d2 + d1 * (y1 - y3));
10401
- let clipOutputCount = clipOutputLength >> 1;
10402
- let clipOutputItems = this.clipOutput;
10403
- let clippedVerticesItems = Utils.setArraySize(clippedVertices, s + clipOutputCount * vertexSize);
10404
- for (let ii = 0; ii < clipOutputLength; ii += 2) {
10405
- let x = clipOutputItems[ii], y = clipOutputItems[ii + 1];
10406
- clippedVerticesItems[s] = x;
10407
- clippedVerticesItems[s + 1] = y;
10408
- clippedVerticesItems[s + 2] = light.r;
10409
- clippedVerticesItems[s + 3] = light.g;
10410
- clippedVerticesItems[s + 4] = light.b;
10411
- clippedVerticesItems[s + 5] = light.a;
10412
- let c0 = x - x3, c1 = y - y3;
10413
- let a = (d0 * c0 + d1 * c1) * d;
10414
- let b = (d4 * c0 + d2 * c1) * d;
10415
- let c = 1 - a - b;
10416
- clippedVerticesItems[s + 6] = u1 * a + u2 * b + u3 * c;
10417
- clippedVerticesItems[s + 7] = v1 * a + v2 * b + v3 * c;
10418
- if (twoColor) {
10419
- clippedVerticesItems[s + 8] = dark.r;
10420
- clippedVerticesItems[s + 9] = dark.g;
10421
- clippedVerticesItems[s + 10] = dark.b;
10422
- clippedVerticesItems[s + 11] = dark.a;
10423
- }
10424
- s += vertexSize;
10425
- }
10426
- s = clippedTriangles.length;
10427
- let clippedTrianglesItems = Utils.setArraySize(clippedTriangles, s + 3 * (clipOutputCount - 2));
10428
- clipOutputCount--;
10429
- for (let ii = 1; ii < clipOutputCount; ii++) {
10430
- clippedTrianglesItems[s] = index;
10431
- clippedTrianglesItems[s + 1] = index + ii;
10432
- clippedTrianglesItems[s + 2] = index + ii + 1;
10433
- s += 3;
10434
- }
10435
- index += clipOutputCount + 1;
10436
- } else {
10437
- let clippedVerticesItems = Utils.setArraySize(clippedVertices, s + 3 * vertexSize);
10438
- clippedVerticesItems[s] = x1;
10439
- clippedVerticesItems[s + 1] = y1;
10383
+ for (let i = 0; i < trianglesLength; i += 3) {
10384
+ let vertexOffset = triangles[i] << 1;
10385
+ let x1 = vertices[vertexOffset], y1 = vertices[vertexOffset + 1];
10386
+ let u1 = uvs[vertexOffset], v1 = uvs[vertexOffset + 1];
10387
+ vertexOffset = triangles[i + 1] << 1;
10388
+ let x2 = vertices[vertexOffset], y2 = vertices[vertexOffset + 1];
10389
+ let u2 = uvs[vertexOffset], v2 = uvs[vertexOffset + 1];
10390
+ vertexOffset = triangles[i + 2] << 1;
10391
+ let x3 = vertices[vertexOffset], y3 = vertices[vertexOffset + 1];
10392
+ let u3 = uvs[vertexOffset], v3 = uvs[vertexOffset + 1];
10393
+ for (let p = 0; p < polygonsCount; p++) {
10394
+ let s = clippedVertices.length;
10395
+ if (this.clip(x1, y1, x2, y2, x3, y3, polygons[p], clipOutput)) {
10396
+ let clipOutputLength = clipOutput.length;
10397
+ if (clipOutputLength == 0)
10398
+ continue;
10399
+ let d0 = y2 - y3, d1 = x3 - x2, d2 = x1 - x3, d4 = y3 - y1;
10400
+ let d = 1 / (d0 * d2 + d1 * (y1 - y3));
10401
+ let clipOutputCount = clipOutputLength >> 1;
10402
+ let clipOutputItems = this.clipOutput;
10403
+ let clippedVerticesItems = Utils.setArraySize(clippedVertices, s + clipOutputCount * vertexSize);
10404
+ for (let ii = 0; ii < clipOutputLength; ii += 2, s += vertexSize) {
10405
+ let x = clipOutputItems[ii], y = clipOutputItems[ii + 1];
10406
+ clippedVerticesItems[s] = x;
10407
+ clippedVerticesItems[s + 1] = y;
10440
10408
  clippedVerticesItems[s + 2] = light.r;
10441
10409
  clippedVerticesItems[s + 3] = light.g;
10442
10410
  clippedVerticesItems[s + 4] = light.b;
10443
10411
  clippedVerticesItems[s + 5] = light.a;
10444
- if (!twoColor) {
10445
- clippedVerticesItems[s + 6] = u1;
10446
- clippedVerticesItems[s + 7] = v1;
10447
- clippedVerticesItems[s + 8] = x2;
10448
- clippedVerticesItems[s + 9] = y2;
10449
- clippedVerticesItems[s + 10] = light.r;
10450
- clippedVerticesItems[s + 11] = light.g;
10451
- clippedVerticesItems[s + 12] = light.b;
10452
- clippedVerticesItems[s + 13] = light.a;
10453
- clippedVerticesItems[s + 14] = u2;
10454
- clippedVerticesItems[s + 15] = v2;
10455
- clippedVerticesItems[s + 16] = x3;
10456
- clippedVerticesItems[s + 17] = y3;
10457
- clippedVerticesItems[s + 18] = light.r;
10458
- clippedVerticesItems[s + 19] = light.g;
10459
- clippedVerticesItems[s + 20] = light.b;
10460
- clippedVerticesItems[s + 21] = light.a;
10461
- clippedVerticesItems[s + 22] = u3;
10462
- clippedVerticesItems[s + 23] = v3;
10463
- } else {
10464
- clippedVerticesItems[s + 6] = u1;
10465
- clippedVerticesItems[s + 7] = v1;
10412
+ let c0 = x - x3, c1 = y - y3;
10413
+ let a = (d0 * c0 + d1 * c1) * d;
10414
+ let b = (d4 * c0 + d2 * c1) * d;
10415
+ let c = 1 - a - b;
10416
+ clippedVerticesItems[s + 6] = u1 * a + u2 * b + u3 * c;
10417
+ clippedVerticesItems[s + 7] = v1 * a + v2 * b + v3 * c;
10418
+ if (twoColor) {
10466
10419
  clippedVerticesItems[s + 8] = dark.r;
10467
10420
  clippedVerticesItems[s + 9] = dark.g;
10468
10421
  clippedVerticesItems[s + 10] = dark.b;
10469
10422
  clippedVerticesItems[s + 11] = dark.a;
10470
- clippedVerticesItems[s + 12] = x2;
10471
- clippedVerticesItems[s + 13] = y2;
10472
- clippedVerticesItems[s + 14] = light.r;
10473
- clippedVerticesItems[s + 15] = light.g;
10474
- clippedVerticesItems[s + 16] = light.b;
10475
- clippedVerticesItems[s + 17] = light.a;
10476
- clippedVerticesItems[s + 18] = u2;
10477
- clippedVerticesItems[s + 19] = v2;
10478
- clippedVerticesItems[s + 20] = dark.r;
10479
- clippedVerticesItems[s + 21] = dark.g;
10480
- clippedVerticesItems[s + 22] = dark.b;
10481
- clippedVerticesItems[s + 23] = dark.a;
10482
- clippedVerticesItems[s + 24] = x3;
10483
- clippedVerticesItems[s + 25] = y3;
10484
- clippedVerticesItems[s + 26] = light.r;
10485
- clippedVerticesItems[s + 27] = light.g;
10486
- clippedVerticesItems[s + 28] = light.b;
10487
- clippedVerticesItems[s + 29] = light.a;
10488
- clippedVerticesItems[s + 30] = u3;
10489
- clippedVerticesItems[s + 31] = v3;
10490
- clippedVerticesItems[s + 32] = dark.r;
10491
- clippedVerticesItems[s + 33] = dark.g;
10492
- clippedVerticesItems[s + 34] = dark.b;
10493
- clippedVerticesItems[s + 35] = dark.a;
10494
10423
  }
10495
- s = clippedTriangles.length;
10496
- let clippedTrianglesItems = Utils.setArraySize(clippedTriangles, s + 3);
10424
+ }
10425
+ s = clippedTriangles.length;
10426
+ let clippedTrianglesItems = Utils.setArraySize(clippedTriangles, s + 3 * (clipOutputCount - 2));
10427
+ clipOutputCount--;
10428
+ for (let ii = 1; ii < clipOutputCount; ii++, s += 3) {
10497
10429
  clippedTrianglesItems[s] = index;
10498
- clippedTrianglesItems[s + 1] = index + 1;
10499
- clippedTrianglesItems[s + 2] = index + 2;
10500
- index += 3;
10501
- continue outer;
10430
+ clippedTrianglesItems[s + 1] = index + ii;
10431
+ clippedTrianglesItems[s + 2] = index + ii + 1;
10502
10432
  }
10433
+ index += clipOutputCount + 1;
10434
+ } else {
10435
+ let clippedVerticesItems = Utils.setArraySize(clippedVertices, s + 3 * vertexSize);
10436
+ clippedVerticesItems[s] = x1;
10437
+ clippedVerticesItems[s + 1] = y1;
10438
+ clippedVerticesItems[s + 2] = light.r;
10439
+ clippedVerticesItems[s + 3] = light.g;
10440
+ clippedVerticesItems[s + 4] = light.b;
10441
+ clippedVerticesItems[s + 5] = light.a;
10442
+ if (!twoColor) {
10443
+ clippedVerticesItems[s + 6] = u1;
10444
+ clippedVerticesItems[s + 7] = v1;
10445
+ clippedVerticesItems[s + 8] = x2;
10446
+ clippedVerticesItems[s + 9] = y2;
10447
+ clippedVerticesItems[s + 10] = light.r;
10448
+ clippedVerticesItems[s + 11] = light.g;
10449
+ clippedVerticesItems[s + 12] = light.b;
10450
+ clippedVerticesItems[s + 13] = light.a;
10451
+ clippedVerticesItems[s + 14] = u2;
10452
+ clippedVerticesItems[s + 15] = v2;
10453
+ clippedVerticesItems[s + 16] = x3;
10454
+ clippedVerticesItems[s + 17] = y3;
10455
+ clippedVerticesItems[s + 18] = light.r;
10456
+ clippedVerticesItems[s + 19] = light.g;
10457
+ clippedVerticesItems[s + 20] = light.b;
10458
+ clippedVerticesItems[s + 21] = light.a;
10459
+ clippedVerticesItems[s + 22] = u3;
10460
+ clippedVerticesItems[s + 23] = v3;
10461
+ } else {
10462
+ clippedVerticesItems[s + 6] = u1;
10463
+ clippedVerticesItems[s + 7] = v1;
10464
+ clippedVerticesItems[s + 8] = dark.r;
10465
+ clippedVerticesItems[s + 9] = dark.g;
10466
+ clippedVerticesItems[s + 10] = dark.b;
10467
+ clippedVerticesItems[s + 11] = dark.a;
10468
+ clippedVerticesItems[s + 12] = x2;
10469
+ clippedVerticesItems[s + 13] = y2;
10470
+ clippedVerticesItems[s + 14] = light.r;
10471
+ clippedVerticesItems[s + 15] = light.g;
10472
+ clippedVerticesItems[s + 16] = light.b;
10473
+ clippedVerticesItems[s + 17] = light.a;
10474
+ clippedVerticesItems[s + 18] = u2;
10475
+ clippedVerticesItems[s + 19] = v2;
10476
+ clippedVerticesItems[s + 20] = dark.r;
10477
+ clippedVerticesItems[s + 21] = dark.g;
10478
+ clippedVerticesItems[s + 22] = dark.b;
10479
+ clippedVerticesItems[s + 23] = dark.a;
10480
+ clippedVerticesItems[s + 24] = x3;
10481
+ clippedVerticesItems[s + 25] = y3;
10482
+ clippedVerticesItems[s + 26] = light.r;
10483
+ clippedVerticesItems[s + 27] = light.g;
10484
+ clippedVerticesItems[s + 28] = light.b;
10485
+ clippedVerticesItems[s + 29] = light.a;
10486
+ clippedVerticesItems[s + 30] = u3;
10487
+ clippedVerticesItems[s + 31] = v3;
10488
+ clippedVerticesItems[s + 32] = dark.r;
10489
+ clippedVerticesItems[s + 33] = dark.g;
10490
+ clippedVerticesItems[s + 34] = dark.b;
10491
+ clippedVerticesItems[s + 35] = dark.a;
10492
+ }
10493
+ s = clippedTriangles.length;
10494
+ let clippedTrianglesItems = Utils.setArraySize(clippedTriangles, s + 3);
10495
+ clippedTrianglesItems[s] = index;
10496
+ clippedTrianglesItems[s + 1] = index + 1;
10497
+ clippedTrianglesItems[s + 2] = index + 2;
10498
+ index += 3;
10499
+ break;
10503
10500
  }
10504
10501
  }
10502
+ }
10505
10503
  }
10506
10504
  /** Clips the input triangle against the convex, clockwise clipping area. If the triangle lies entirely within the clipping
10507
10505
  * area, false is returned. The clipping area must duplicate the first vertex at the end of the vertices list. */
@@ -10524,47 +10522,46 @@ var spine = (() => {
10524
10522
  input.push(x1);
10525
10523
  input.push(y1);
10526
10524
  output.length = 0;
10527
- let clippingVertices = clippingArea;
10528
10525
  let clippingVerticesLast = clippingArea.length - 4;
10526
+ let clippingVertices = clippingArea;
10529
10527
  for (let i = 0; ; i += 2) {
10530
10528
  let edgeX = clippingVertices[i], edgeY = clippingVertices[i + 1];
10531
- let edgeX2 = clippingVertices[i + 2], edgeY2 = clippingVertices[i + 3];
10532
- let deltaX = edgeX - edgeX2, deltaY = edgeY - edgeY2;
10529
+ let ex = edgeX - clippingVertices[i + 2], ey = edgeY - clippingVertices[i + 3];
10530
+ let outputStart = output.length;
10533
10531
  let inputVertices = input;
10534
- let inputVerticesLength = input.length - 2, outputStart = output.length;
10535
- for (let ii = 0; ii < inputVerticesLength; ii += 2) {
10532
+ for (let ii = 0, nn = input.length - 2; ii < nn; ) {
10536
10533
  let inputX = inputVertices[ii], inputY = inputVertices[ii + 1];
10537
- let inputX2 = inputVertices[ii + 2], inputY2 = inputVertices[ii + 3];
10538
- let side2 = deltaX * (inputY2 - edgeY2) - deltaY * (inputX2 - edgeX2) > 0;
10539
- if (deltaX * (inputY - edgeY2) - deltaY * (inputX - edgeX2) > 0) {
10540
- if (side2) {
10534
+ ii += 2;
10535
+ let inputX2 = inputVertices[ii], inputY2 = inputVertices[ii + 1];
10536
+ let s2 = ey * (edgeX - inputX2) > ex * (edgeY - inputY2);
10537
+ let s1 = ey * (edgeX - inputX) - ex * (edgeY - inputY);
10538
+ if (s1 > 0) {
10539
+ if (s2) {
10541
10540
  output.push(inputX2);
10542
10541
  output.push(inputY2);
10543
10542
  continue;
10544
10543
  }
10545
- let c0 = inputY2 - inputY, c2 = inputX2 - inputX;
10546
- let s = c0 * (edgeX2 - edgeX) - c2 * (edgeY2 - edgeY);
10547
- if (Math.abs(s) > 1e-6) {
10548
- let ua = (c2 * (edgeY - inputY) - c0 * (edgeX - inputX)) / s;
10549
- output.push(edgeX + (edgeX2 - edgeX) * ua);
10550
- output.push(edgeY + (edgeY2 - edgeY) * ua);
10544
+ let ix = inputX2 - inputX, iy = inputY2 - inputY, t = s1 / (ix * ey - iy * ex);
10545
+ if (t >= 0 && t <= 1) {
10546
+ output.push(inputX + ix * t);
10547
+ output.push(inputY + iy * t);
10551
10548
  } else {
10552
- output.push(edgeX);
10553
- output.push(edgeY);
10549
+ output.push(inputX2);
10550
+ output.push(inputY2);
10551
+ continue;
10554
10552
  }
10555
- } else if (side2) {
10556
- let c0 = inputY2 - inputY, c2 = inputX2 - inputX;
10557
- let s = c0 * (edgeX2 - edgeX) - c2 * (edgeY2 - edgeY);
10558
- if (Math.abs(s) > 1e-6) {
10559
- let ua = (c2 * (edgeY - inputY) - c0 * (edgeX - inputX)) / s;
10560
- output.push(edgeX + (edgeX2 - edgeX) * ua);
10561
- output.push(edgeY + (edgeY2 - edgeY) * ua);
10553
+ } else if (s2) {
10554
+ let ix = inputX2 - inputX, iy = inputY2 - inputY, t = s1 / (ix * ey - iy * ex);
10555
+ if (t >= 0 && t <= 1) {
10556
+ output.push(inputX + ix * t);
10557
+ output.push(inputY + iy * t);
10558
+ output.push(inputX2);
10559
+ output.push(inputY2);
10562
10560
  } else {
10563
- output.push(edgeX);
10564
- output.push(edgeY);
10561
+ output.push(inputX2);
10562
+ output.push(inputY2);
10563
+ continue;
10565
10564
  }
10566
- output.push(inputX2);
10567
- output.push(inputY2);
10568
10565
  }
10569
10566
  clipped = true;
10570
10567
  }