@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.
- package/dist/index.global.js +21 -4
- package/dist/index.global.js.map +1 -1
- package/dist/index.js +18 -3
- package/dist/index.js.map +1 -1
- package/package.json +6 -6
package/dist/index.js
CHANGED
|
@@ -45,6 +45,9 @@ function mixHex(a, b, t) {
|
|
|
45
45
|
}
|
|
46
46
|
|
|
47
47
|
// src/fragments.ts
|
|
48
|
+
var SHEET_MAX = 4e-3;
|
|
49
|
+
var SHEET_AIR = 2.5;
|
|
50
|
+
var SHEET_SWAY = 3;
|
|
48
51
|
var FragmentSystem = class {
|
|
49
52
|
constructor(THREE, o) {
|
|
50
53
|
__publicField(this, "THREE", THREE);
|
|
@@ -150,7 +153,8 @@ var FragmentSystem = class {
|
|
|
150
153
|
asleep: false,
|
|
151
154
|
rest: 0,
|
|
152
155
|
fade: 1,
|
|
153
|
-
dying: false
|
|
156
|
+
dying: false,
|
|
157
|
+
air: f.shape === "scrap" && sz[2] <= SHEET_MAX ? SHEET_AIR : 0
|
|
154
158
|
};
|
|
155
159
|
this.list.push(live);
|
|
156
160
|
let alive = this.list.reduce((n, l) => n + (l.dying ? 0 : 1), 0);
|
|
@@ -234,6 +238,7 @@ var FragmentSystem = class {
|
|
|
234
238
|
}
|
|
235
239
|
} else {
|
|
236
240
|
f.ang.multiplyScalar(Math.exp(-0.15 * dt));
|
|
241
|
+
if (f.air > 0) this.flutter(f, dt);
|
|
237
242
|
}
|
|
238
243
|
if (contact && f.vel.lengthSq() < 4) this.settle(f, dt);
|
|
239
244
|
const slow = f.vel.lengthSq() < 0.012 && f.ang.lengthSq() < 0.2;
|
|
@@ -248,6 +253,14 @@ var FragmentSystem = class {
|
|
|
248
253
|
f.still = 0;
|
|
249
254
|
}
|
|
250
255
|
}
|
|
256
|
+
/** A sheet in the air: drag slows it to a slow fall, and it sways and turns over as it goes. */
|
|
257
|
+
flutter(f, dt) {
|
|
258
|
+
f.vel.multiplyScalar(Math.exp(-f.air * dt));
|
|
259
|
+
f.vel.x += (this.rng() - 0.5) * SHEET_SWAY * dt;
|
|
260
|
+
f.vel.z += (this.rng() - 0.5) * SHEET_SWAY * dt;
|
|
261
|
+
f.ang.x += (this.rng() - 0.5) * SHEET_SWAY * 4 * dt;
|
|
262
|
+
f.ang.z += (this.rng() - 0.5) * SHEET_SWAY * 4 * dt;
|
|
263
|
+
}
|
|
251
264
|
/** Tip the fragment towards lying on its flattest face. */
|
|
252
265
|
settle(f, dt) {
|
|
253
266
|
const mesh = f.mesh;
|
|
@@ -2550,6 +2563,7 @@ var Renderer = class {
|
|
|
2550
2563
|
const def = pv ? this.world.materials.get(pv.material) : void 0;
|
|
2551
2564
|
if (kind === "smoke") return { color: SMOKE_TONES[def?.thermal.smoke ?? "grey"] };
|
|
2552
2565
|
if (kind === "fibers" || kind === "leaves") {
|
|
2566
|
+
if (def?.visual?.innerColor !== void 0) return { color: def.visual.innerColor };
|
|
2553
2567
|
const c = pv ? this.visuals.baseColorHex(pv.meshes[0] ?? {}) : -1;
|
|
2554
2568
|
return c >= 0 ? { color: c } : void 0;
|
|
2555
2569
|
}
|
|
@@ -2698,7 +2712,8 @@ var Renderer = class {
|
|
|
2698
2712
|
for (let i = 0; i < ev.fragments.length; i += step) {
|
|
2699
2713
|
const fr = ev.fragments[i];
|
|
2700
2714
|
const fdef = this.world.materials.get(fr.material);
|
|
2701
|
-
const
|
|
2715
|
+
const tone2 = fr.inner && fdef?.visual?.innerColor !== void 0 ? fdef.visual.innerColor : fdef === def || !fdef ? color : fallbackColor(fr.material, fdef);
|
|
2716
|
+
const mat = this.fragments.materialFor(fr.material, tone2, transparent || fdef?.visual?.transparent === true, opacity);
|
|
2702
2717
|
this.fragments.spawn(fr, mat, ev.object, maxAlive);
|
|
2703
2718
|
}
|
|
2704
2719
|
const up = [0, 1, 0];
|
|
@@ -2716,7 +2731,7 @@ var Renderer = class {
|
|
|
2716
2731
|
this.vfx.burst("dust", ev.point, up, 5, 0.8, { color: 11901556 });
|
|
2717
2732
|
break;
|
|
2718
2733
|
case "tear":
|
|
2719
|
-
this.vfx.burst("fibers", ev.point, up, 12 * sizeK, 1.6, { color });
|
|
2734
|
+
this.vfx.burst("fibers", ev.point, up, 12 * sizeK, 1.6, { color: def?.visual?.innerColor ?? color });
|
|
2720
2735
|
break;
|
|
2721
2736
|
case "snap":
|
|
2722
2737
|
this.vfx.burst("chips", ev.point, up, 8 * sizeK, 3);
|