@adatechnology/game-destruction-three 0.8.2 → 0.9.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.
@@ -8620,6 +8620,9 @@ void main(){vec2 d=gl_PointCoord-.5;float r=length(d)*2.;if(r>1.)discard;float a
8620
8620
  }
8621
8621
 
8622
8622
  // src/fragments.ts
8623
+ var SHEET_MAX = 4e-3;
8624
+ var SHEET_AIR = 2.5;
8625
+ var SHEET_SWAY = 3;
8623
8626
  var FragmentSystem = class {
8624
8627
  constructor(THREE, o) {
8625
8628
  __publicField(this, "THREE", THREE);
@@ -8725,7 +8728,8 @@ void main(){vec2 d=gl_PointCoord-.5;float r=length(d)*2.;if(r>1.)discard;float a
8725
8728
  asleep: false,
8726
8729
  rest: 0,
8727
8730
  fade: 1,
8728
- dying: false
8731
+ dying: false,
8732
+ air: f.shape === "scrap" && sz[2] <= SHEET_MAX ? SHEET_AIR : 0
8729
8733
  };
8730
8734
  this.list.push(live);
8731
8735
  let alive = this.list.reduce((n, l) => n + (l.dying ? 0 : 1), 0);
@@ -8809,6 +8813,7 @@ void main(){vec2 d=gl_PointCoord-.5;float r=length(d)*2.;if(r>1.)discard;float a
8809
8813
  }
8810
8814
  } else {
8811
8815
  f.ang.multiplyScalar(Math.exp(-0.15 * dt));
8816
+ if (f.air > 0) this.flutter(f, dt);
8812
8817
  }
8813
8818
  if (contact && f.vel.lengthSq() < 4) this.settle(f, dt);
8814
8819
  const slow = f.vel.lengthSq() < 0.012 && f.ang.lengthSq() < 0.2;
@@ -8823,6 +8828,14 @@ void main(){vec2 d=gl_PointCoord-.5;float r=length(d)*2.;if(r>1.)discard;float a
8823
8828
  f.still = 0;
8824
8829
  }
8825
8830
  }
8831
+ /** A sheet in the air: drag slows it to a slow fall, and it sways and turns over as it goes. */
8832
+ flutter(f, dt) {
8833
+ f.vel.multiplyScalar(Math.exp(-f.air * dt));
8834
+ f.vel.x += (this.rng() - 0.5) * SHEET_SWAY * dt;
8835
+ f.vel.z += (this.rng() - 0.5) * SHEET_SWAY * dt;
8836
+ f.ang.x += (this.rng() - 0.5) * SHEET_SWAY * 4 * dt;
8837
+ f.ang.z += (this.rng() - 0.5) * SHEET_SWAY * 4 * dt;
8838
+ }
8826
8839
  /** Tip the fragment towards lying on its flattest face. */
8827
8840
  settle(f, dt) {
8828
8841
  const mesh2 = f.mesh;
@@ -10147,6 +10160,7 @@ void main(){vec2 d=gl_PointCoord-.5;float r=length(d)*2.;if(r>1.)discard;float a
10147
10160
  0.03,
10148
10161
  0.15
10149
10162
  ],
10163
+ sheet: 1e-3,
10150
10164
  damageScale: {
10151
10165
  slash: 3
10152
10166
  },
@@ -10162,7 +10176,8 @@ void main(){vec2 d=gl_PointCoord-.5;float r=length(d)*2.;if(r>1.)discard;float a
10162
10176
  smoke: "grey"
10163
10177
  },
10164
10178
  visual: {
10165
- charColor: 1709072
10179
+ charColor: 1709072,
10180
+ innerColor: 15524048
10166
10181
  },
10167
10182
  tags: [
10168
10183
  "fabric",
@@ -12273,6 +12288,7 @@ void main(){vec2 d=gl_PointCoord-.5;float r=length(d)*2.;if(r>1.)discard;float a
12273
12288
  const def = pv ? this.world.materials.get(pv.material) : void 0;
12274
12289
  if (kind === "smoke") return { color: SMOKE_TONES[def?.thermal.smoke ?? "grey"] };
12275
12290
  if (kind === "fibers" || kind === "leaves") {
12291
+ if (def?.visual?.innerColor !== void 0) return { color: def.visual.innerColor };
12276
12292
  const c = pv ? this.visuals.baseColorHex(pv.meshes[0] ?? {}) : -1;
12277
12293
  return c >= 0 ? { color: c } : void 0;
12278
12294
  }
@@ -12421,7 +12437,8 @@ void main(){vec2 d=gl_PointCoord-.5;float r=length(d)*2.;if(r>1.)discard;float a
12421
12437
  for (let i = 0; i < ev.fragments.length; i += step) {
12422
12438
  const fr = ev.fragments[i];
12423
12439
  const fdef = this.world.materials.get(fr.material);
12424
- const mat = this.fragments.materialFor(fr.material, fdef === def || !fdef ? color : fallbackColor(fr.material, fdef), transparent || fdef?.visual?.transparent === true, opacity);
12440
+ const tone = fr.inner && fdef?.visual?.innerColor !== void 0 ? fdef.visual.innerColor : fdef === def || !fdef ? color : fallbackColor(fr.material, fdef);
12441
+ const mat = this.fragments.materialFor(fr.material, tone, transparent || fdef?.visual?.transparent === true, opacity);
12425
12442
  this.fragments.spawn(fr, mat, ev.object, maxAlive);
12426
12443
  }
12427
12444
  const up = [0, 1, 0];
@@ -12439,7 +12456,7 @@ void main(){vec2 d=gl_PointCoord-.5;float r=length(d)*2.;if(r>1.)discard;float a
12439
12456
  this.vfx.burst("dust", ev.point, up, 5, 0.8, { color: 11901556 });
12440
12457
  break;
12441
12458
  case "tear":
12442
- this.vfx.burst("fibers", ev.point, up, 12 * sizeK, 1.6, { color });
12459
+ this.vfx.burst("fibers", ev.point, up, 12 * sizeK, 1.6, { color: def?.visual?.innerColor ?? color });
12443
12460
  break;
12444
12461
  case "snap":
12445
12462
  this.vfx.burst("chips", ev.point, up, 8 * sizeK, 3);