@sadhaka/loom-engine 0.16.0 → 0.20.1
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/audio/cue-catalog.d.ts +5 -1
- package/dist/audio/cue-catalog.d.ts.map +1 -1
- package/dist/audio/cue-catalog.js +14 -9
- package/dist/audio/cue-catalog.js.map +1 -1
- package/dist/director/director-bridge.d.ts +5 -0
- package/dist/director/director-bridge.d.ts.map +1 -1
- package/dist/director/director-bridge.js.map +1 -1
- package/dist/director/director-system.d.ts.map +1 -1
- package/dist/director/director-system.js +4 -1
- package/dist/director/director-system.js.map +1 -1
- package/dist/director/mock-director-bridge.d.ts.map +1 -1
- package/dist/director/mock-director-bridge.js +5 -0
- package/dist/director/mock-director-bridge.js.map +1 -1
- package/dist/director/sse-director-bridge.d.ts +20 -0
- package/dist/director/sse-director-bridge.d.ts.map +1 -1
- package/dist/director/sse-director-bridge.js +251 -66
- package/dist/director/sse-director-bridge.js.map +1 -1
- package/dist/director/zone/mock-zone-bridge.d.ts.map +1 -1
- package/dist/director/zone/mock-zone-bridge.js +8 -0
- package/dist/director/zone/mock-zone-bridge.js.map +1 -1
- package/dist/director/zone/sse-zone-bridge.d.ts +5 -0
- package/dist/director/zone/sse-zone-bridge.d.ts.map +1 -1
- package/dist/director/zone/sse-zone-bridge.js +69 -6
- package/dist/director/zone/sse-zone-bridge.js.map +1 -1
- package/dist/director/zone/zone-event-bridge.d.ts +4 -0
- package/dist/director/zone/zone-event-bridge.d.ts.map +1 -1
- package/dist/director/zone/zone-event-bridge.js.map +1 -1
- package/dist/director/zone/zone-event-system.d.ts.map +1 -1
- package/dist/director/zone/zone-event-system.js +6 -2
- package/dist/director/zone/zone-event-system.js.map +1 -1
- package/dist/engine.d.ts +1 -0
- package/dist/engine.d.ts.map +1 -1
- package/dist/engine.js +6 -0
- package/dist/engine.js.map +1 -1
- package/dist/index.d.ts +6 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -1
- package/dist/index.js.map +1 -1
- package/dist/plugins/client-registry.d.ts +61 -0
- package/dist/plugins/client-registry.d.ts.map +1 -0
- package/dist/plugins/client-registry.js +994 -0
- package/dist/plugins/client-registry.js.map +1 -0
- package/dist/plugins/index.d.ts +5 -0
- package/dist/plugins/index.d.ts.map +1 -0
- package/dist/plugins/index.js +20 -0
- package/dist/plugins/index.js.map +1 -0
- package/dist/plugins/types.d.ts +105 -0
- package/dist/plugins/types.d.ts.map +1 -0
- package/dist/plugins/types.js +112 -0
- package/dist/plugins/types.js.map +1 -0
- package/dist/runtime/entropy.d.ts +22 -0
- package/dist/runtime/entropy.d.ts.map +1 -0
- package/dist/runtime/entropy.js +122 -0
- package/dist/runtime/entropy.js.map +1 -0
- package/dist/systems/attack-system.d.ts.map +1 -1
- package/dist/systems/attack-system.js +6 -2
- package/dist/systems/attack-system.js.map +1 -1
- package/dist/systems/damage-system.d.ts.map +1 -1
- package/dist/systems/damage-system.js +6 -1
- package/dist/systems/damage-system.js.map +1 -1
- package/dist/systems/particle-emitter-system.d.ts.map +1 -1
- package/dist/systems/particle-emitter-system.js +20 -6
- package/dist/systems/particle-emitter-system.js.map +1 -1
- package/dist/systems/peer-presence-system.d.ts.map +1 -1
- package/dist/systems/peer-presence-system.js +6 -1
- package/dist/systems/peer-presence-system.js.map +1 -1
- package/dist/systems/projectile-system.d.ts.map +1 -1
- package/dist/systems/projectile-system.js +5 -1
- package/dist/systems/projectile-system.js.map +1 -1
- package/dist/systems/pursue-system.d.ts.map +1 -1
- package/dist/systems/pursue-system.js +5 -1
- package/dist/systems/pursue-system.js.map +1 -1
- package/dist/systems/ranged-attack-system.d.ts.map +1 -1
- package/dist/systems/ranged-attack-system.js +5 -1
- package/dist/systems/ranged-attack-system.js.map +1 -1
- package/package.json +2 -2
|
@@ -22,7 +22,14 @@
|
|
|
22
22
|
import { POOL_TRANSFORM } from '../world.js';
|
|
23
23
|
import { EMITTER_FLAG_ACTIVE } from '../components/particle-emitter.js';
|
|
24
24
|
import { POOL_PARTICLE } from './particle-simulation-system.js';
|
|
25
|
+
import { RESOURCE_ENTROPY, createEntropy, } from '../runtime/entropy.js';
|
|
25
26
|
export const POOL_EMITTER = 'emitter';
|
|
27
|
+
// Fallback entropy for worlds that did not register one. The engine's
|
|
28
|
+
// own Engine.create always seeds RESOURCE_ENTROPY, but bare-bones
|
|
29
|
+
// World instances in tests / mini-demos may skip it. We never call
|
|
30
|
+
// Math.random() in src/ - that would break the seeded-replay
|
|
31
|
+
// contract.
|
|
32
|
+
const FALLBACK_ENTROPY = createEntropy(0xC0FFEE);
|
|
26
33
|
// Sample a random unit direction inside a cone of half-angle
|
|
27
34
|
// `coneHalf` around the axis (ax, ay, az). For coneHalf = 0 the
|
|
28
35
|
// returned vector equals the axis. For coneHalf = PI it's a random
|
|
@@ -32,7 +39,7 @@ export const POOL_EMITTER = 'emitter';
|
|
|
32
39
|
// azimuth theta in [0, 2*PI], and rotate that into the axis-aligned
|
|
33
40
|
// frame. We use a small-angle approximation that's exact for our
|
|
34
41
|
// 2.5D usage (the axis is mostly axis-aligned in iso space).
|
|
35
|
-
function sampleConeDirection(ax, ay, az, coneHalf, out) {
|
|
42
|
+
function sampleConeDirection(ax, ay, az, coneHalf, out, entropy) {
|
|
36
43
|
if (coneHalf <= 0) {
|
|
37
44
|
out.x = ax;
|
|
38
45
|
out.y = ay;
|
|
@@ -40,11 +47,12 @@ function sampleConeDirection(ax, ay, az, coneHalf, out) {
|
|
|
40
47
|
return;
|
|
41
48
|
}
|
|
42
49
|
// Random angle from axis (cosine-weighted for uniform sphere
|
|
43
|
-
// coverage as cone widens).
|
|
50
|
+
// coverage as cone widens). Routed through the seeded entropy
|
|
51
|
+
// resource so a replay produces the same particle directions.
|
|
44
52
|
const cosLimit = Math.cos(coneHalf);
|
|
45
|
-
const cosAngle = cosLimit + (1 - cosLimit) *
|
|
53
|
+
const cosAngle = cosLimit + (1 - cosLimit) * entropy.random();
|
|
46
54
|
const sinAngle = Math.sqrt(Math.max(0, 1 - cosAngle * cosAngle));
|
|
47
|
-
const azimuth =
|
|
55
|
+
const azimuth = entropy.random() * Math.PI * 2;
|
|
48
56
|
// Build a local frame around the axis.
|
|
49
57
|
const len = Math.sqrt(ax * ax + ay * ay + az * az) || 1;
|
|
50
58
|
const aux = ax / len;
|
|
@@ -91,6 +99,12 @@ export class ParticleEmitterSystem {
|
|
|
91
99
|
const particles = world.getPool(POOL_PARTICLE);
|
|
92
100
|
if (!transforms || !emitters || !particles)
|
|
93
101
|
return;
|
|
102
|
+
// Resolve entropy once per tick. Engine.create always registers
|
|
103
|
+
// one, but bare World instances may skip it - the fallback is a
|
|
104
|
+
// module-level deterministic stream so tests that exercise the
|
|
105
|
+
// emitter without wiring entropy still get reproducible output
|
|
106
|
+
// (just from a different seed).
|
|
107
|
+
const entropy = world.resources.get(RESOURCE_ENTROPY) ?? FALLBACK_ENTROPY;
|
|
94
108
|
const hwm = Math.min(transforms.getHighWaterMark(), emitters.getHighWaterMark());
|
|
95
109
|
for (let i = 1; i < hwm; i++) { // index 0 is NULL_ENTITY
|
|
96
110
|
const flags = emitters.flags[i] ?? 0;
|
|
@@ -123,8 +137,8 @@ export class ParticleEmitterSystem {
|
|
|
123
137
|
const startSize = emitters.startSize[i] ?? 4;
|
|
124
138
|
const endSize = emitters.endSize[i] ?? startSize;
|
|
125
139
|
for (let k = 0; k < total; k++) {
|
|
126
|
-
sampleConeDirection(dirX, dirY, dirZ, coneHalf, SCRATCH_DIR);
|
|
127
|
-
const speed = speedMin +
|
|
140
|
+
sampleConeDirection(dirX, dirY, dirZ, coneHalf, SCRATCH_DIR, entropy);
|
|
141
|
+
const speed = speedMin + entropy.random() * (speedMax - speedMin);
|
|
128
142
|
const slot = particles.spawn({
|
|
129
143
|
x, y, z,
|
|
130
144
|
vx: SCRATCH_DIR.x * speed,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"particle-emitter-system.js","sourceRoot":"","sources":["../../src/systems/particle-emitter-system.ts"],"names":[],"mappings":"AAAA,8DAA8D;AAC9D,kEAAkE;AAClE,gEAAgE;AAChE,2CAA2C;AAC3C,EAAE;AACF,sEAAsE;AACtE,qEAAqE;AACrE,cAAc;AACd,EAAE;AACF,cAAc;AACd,qEAAqE;AACrE,qEAAqE;AACrE,oEAAoE;AACpE,mEAAmE;AACnE,uDAAuD;AACvD,oDAAoD;AACpD,EAAE;AACF,qEAAqE;AACrE,qEAAqE;AACrE,qEAAqE;AACrE,uCAAuC;AAIvC,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAE7C,OAAO,EAAuB,mBAAmB,EAAE,MAAM,mCAAmC,CAAC;AAE7F,OAAO,EAAE,aAAa,EAAE,MAAM,iCAAiC,CAAC;
|
|
1
|
+
{"version":3,"file":"particle-emitter-system.js","sourceRoot":"","sources":["../../src/systems/particle-emitter-system.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"peer-presence-system.d.ts","sourceRoot":"","sources":["../../src/systems/peer-presence-system.ts"],"names":[],"mappings":"AA6BA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAC3C,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAiBzC,qBAAa,kBAAmB,YAAW,MAAM;IAC/C,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAmB;IAExC,MAAM,CAAC,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,GAAG,IAAI;CAwBxC;AAKD,qBAAa,gBAAiB,YAAW,MAAM;IAC7C,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAiB;IAGtC,OAAO,CAAC,gBAAgB,CAKtB;IACF,OAAO,CAAC,WAAW,CAEjB;IAMF,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAS;IACtC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAU;gBAExB,IAAI,GAAE;QAAE,YAAY,CAAC,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,OAAO,CAAA;KAAO;IAKrE,MAAM,CAAC,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,GAAG,IAAI;
|
|
1
|
+
{"version":3,"file":"peer-presence-system.d.ts","sourceRoot":"","sources":["../../src/systems/peer-presence-system.ts"],"names":[],"mappings":"AA6BA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAC3C,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAiBzC,qBAAa,kBAAmB,YAAW,MAAM;IAC/C,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAmB;IAExC,MAAM,CAAC,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,GAAG,IAAI;CAwBxC;AAKD,qBAAa,gBAAiB,YAAW,MAAM;IAC7C,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAiB;IAGtC,OAAO,CAAC,gBAAgB,CAKtB;IACF,OAAO,CAAC,WAAW,CAEjB;IAMF,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAS;IACtC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAU;gBAExB,IAAI,GAAE;QAAE,YAAY,CAAC,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,OAAO,CAAA;KAAO;IAKrE,MAAM,CAAC,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,GAAG,IAAI;CAqCxC"}
|
|
@@ -91,7 +91,12 @@ export class PeerRenderSystem {
|
|
|
91
91
|
if (!pool || !sprites || !device || !camera)
|
|
92
92
|
return;
|
|
93
93
|
device.setCamera(camera);
|
|
94
|
-
|
|
94
|
+
// Deterministic clock - TimeResource only. Earlier versions added
|
|
95
|
+
// performance.now() to mask Engine.tick callers that did not
|
|
96
|
+
// advance time; the HeadlessTicker advances it correctly. Adding
|
|
97
|
+
// wall-clock noise here was making peer interpolation diverge
|
|
98
|
+
// across replays.
|
|
99
|
+
const nowMs = time ? time.elapsed * 1000 : 0;
|
|
95
100
|
const frame = time ? time.frame : -1;
|
|
96
101
|
// Capture the values we need from each peer before drawing.
|
|
97
102
|
// forEachRendered's view is reused; we have to read fields out
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"peer-presence-system.js","sourceRoot":"","sources":["../../src/systems/peer-presence-system.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"peer-presence-system.js","sourceRoot":"","sources":["../../src/systems/peer-presence-system.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"projectile-system.d.ts","sourceRoot":"","sources":["../../src/systems/projectile-system.ts"],"names":[],"mappings":"AAkBA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAC3C,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"projectile-system.d.ts","sourceRoot":"","sources":["../../src/systems/projectile-system.ts"],"names":[],"mappings":"AAkBA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAC3C,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAQzC,qBAAa,gBAAiB,YAAW,MAAM;IAC7C,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAgB;IAErC,MAAM,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE,EAAE,MAAM,GAAG,IAAI;CA+FvC"}
|
|
@@ -19,6 +19,7 @@ import { POOL_PROJECTILE, PROJECTILE_FLAG_ALIVE, PROJECTILE_FLAG_HOMING, PROJECT
|
|
|
19
19
|
import { POOL_HEALTH } from '../components/health.js';
|
|
20
20
|
import { POOL_TRANSFORM } from '../world.js';
|
|
21
21
|
import { makeEntity } from '../entity.js';
|
|
22
|
+
import { RESOURCE_TIME } from '../resources.js';
|
|
22
23
|
export class ProjectileSystem {
|
|
23
24
|
name = 'projectile';
|
|
24
25
|
update(world, dt) {
|
|
@@ -32,7 +33,10 @@ export class ProjectileSystem {
|
|
|
32
33
|
const hwm = pool.getHighWaterMark();
|
|
33
34
|
if (hwm === 0)
|
|
34
35
|
return;
|
|
35
|
-
|
|
36
|
+
// Deterministic clock from TimeResource so projectile-impact
|
|
37
|
+
// damage timestamps reproduce across replays.
|
|
38
|
+
const time = world.resources.get(RESOURCE_TIME);
|
|
39
|
+
const now = time ? time.elapsed * 1000 : 0;
|
|
36
40
|
for (let i = 0; i < hwm; i++) {
|
|
37
41
|
const f = pool.flags[i] ?? 0;
|
|
38
42
|
if ((f & PROJECTILE_FLAG_ALIVE) === 0)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"projectile-system.js","sourceRoot":"","sources":["../../src/systems/projectile-system.ts"],"names":[],"mappings":"AAAA,mEAAmE;AACnE,yDAAyD;AACzD,EAAE;AACF,qBAAqB;AACrB,iCAAiC;AACjC,gDAAgD;AAChD,iEAAiE;AACjE,6CAA6C;AAC7C,mEAAmE;AACnE,6DAA6D;AAC7D,gEAAgE;AAChE,4BAA4B;AAC5B,EAAE;AACF,iEAAiE;AACjE,oEAAoE;AACpE,kEAAkE;AAClE,6CAA6C;AAI7C,OAAO,EAAkB,eAAe,EAAE,qBAAqB,EAAE,sBAAsB,EAAE,sBAAsB,EAAE,MAAM,2BAA2B,CAAC;AAEnJ,OAAO,EAAc,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAClE,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"projectile-system.js","sourceRoot":"","sources":["../../src/systems/projectile-system.ts"],"names":[],"mappings":"AAAA,mEAAmE;AACnE,yDAAyD;AACzD,EAAE;AACF,qBAAqB;AACrB,iCAAiC;AACjC,gDAAgD;AAChD,iEAAiE;AACjE,6CAA6C;AAC7C,mEAAmE;AACnE,6DAA6D;AAC7D,gEAAgE;AAChE,4BAA4B;AAC5B,EAAE;AACF,iEAAiE;AACjE,oEAAoE;AACpE,kEAAkE;AAClE,6CAA6C;AAI7C,OAAO,EAAkB,eAAe,EAAE,qBAAqB,EAAE,sBAAsB,EAAE,sBAAsB,EAAE,MAAM,2BAA2B,CAAC;AAEnJ,OAAO,EAAc,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAClE,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAqB,MAAM,iBAAiB,CAAC;AAEnE,MAAM,OAAO,gBAAgB;IAClB,IAAI,GAAW,YAAY,CAAC;IAErC,MAAM,CAAC,KAAY,EAAE,EAAU;QAC7B,MAAM,IAAI,GAAG,KAAK,CAAC,OAAO,CAAiB,eAAe,CAAC,CAAC;QAC5D,IAAI,CAAC,IAAI;YAAE,OAAO;QAClB,MAAM,UAAU,GAAG,KAAK,CAAC,OAAO,CAAgB,cAAc,CAAC,CAAC;QAChE,MAAM,MAAM,GAAG,KAAK,CAAC,OAAO,CAAa,WAAW,CAAC,CAAC;QACtD,IAAI,CAAC,UAAU,IAAI,CAAC,MAAM;YAAE,OAAO;QAEnC,MAAM,GAAG,GAAG,IAAI,CAAC,gBAAgB,EAAE,CAAC;QACpC,IAAI,GAAG,KAAK,CAAC;YAAE,OAAO;QACtB,6DAA6D;QAC7D,8CAA8C;QAC9C,MAAM,IAAI,GAAG,KAAK,CAAC,SAAS,CAAC,GAAG,CAAe,aAAa,CAAC,CAAC;QAC9D,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;QAE3C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;YAC7B,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;YAC7B,IAAI,CAAC,CAAC,GAAG,qBAAqB,CAAC,KAAK,CAAC;gBAAE,SAAS;YAEhD,cAAc;YACd,MAAM,SAAS,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,CAAC;YAC3C,IAAI,SAAS,IAAI,CAAC,EAAE,CAAC;gBACnB,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;gBACb,SAAS;YACX,CAAC;YACD,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC;YAEzB,mDAAmD;YACnD,IAAI,CAAC,CAAC,GAAG,sBAAsB,CAAC,KAAK,CAAC,EAAE,CAAC;gBACvC,MAAM,SAAS,GAAG,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;gBAC5C,IAAI,SAAS,IAAI,CAAC,EAAE,CAAC;oBACnB,MAAM,MAAM,GAAG,UAAU,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC;oBACxC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;wBAC3B,MAAM,EAAE,GAAG,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;wBACxC,MAAM,EAAE,GAAG,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;wBACxC,MAAM,EAAE,GAAG,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;wBACxC,MAAM,EAAE,GAAG,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;wBACjC,MAAM,EAAE,GAAG,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;wBACjC,MAAM,EAAE,GAAG,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;wBACjC,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC;wBACpD,IAAI,IAAI,GAAG,IAAI,EAAE,CAAC;4BAChB,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CACrB,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC;gCACtB,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC;gCACtB,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CACvB,CAAC;4BACF,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,GAAG,IAAI,CAAC,GAAG,KAAK,CAAC;4BACjC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,GAAG,IAAI,CAAC,GAAG,KAAK,CAAC;4BACjC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,GAAG,IAAI,CAAC,GAAG,KAAK,CAAC;wBACnC,CAAC;oBACH,CAAC;gBACH,CAAC;YACH,CAAC;YAED,sBAAsB;YACtB,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,CAAC;YACtD,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,CAAC;YACtD,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,CAAC;YAEtD,2DAA2D;YAC3D,2CAA2C;YAC3C,MAAM,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;YAC1B,MAAM,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;YAC1B,MAAM,KAAK,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;YACvC,MAAM,SAAS,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,CAAK,qCAAqC;YACvF,MAAM,WAAW,GAAG,SAAS,GAAG,SAAS,CAAC;YAC1C,MAAM,SAAS,GAAG,MAAM,CAAC,gBAAgB,EAAE,CAAC;YAC5C,IAAI,MAAM,GAAG,CAAC,CAAC,CAAC;YAChB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,EAAE,CAAC,EAAE,EAAE,CAAC;gBACnC,IAAI,CAAC,KAAK,KAAK;oBAAE,SAAS;gBAC1B,MAAM,MAAM,GAAG,UAAU,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;gBAChC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC;oBAAE,SAAS;gBACtC,MAAM,EAAE,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;gBAChC,MAAM,EAAE,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;gBAChC,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC;gBACnB,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC;gBACnB,4DAA4D;gBAC5D,yDAAyD;gBACzD,+CAA+C;gBAC/C,MAAM,SAAS,GAAG,GAAG,GAAG,GAAG,CAAC;gBAC5B,MAAM,MAAM,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC;gBACjC,IAAI,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,WAAW,EAAE,SAAS,CAAC,EAAE,CAAC;oBAC9C,MAAM,GAAG,CAAC,CAAC;oBACX,MAAM;gBACR,CAAC;YACH,CAAC;YAED,IAAI,MAAM,IAAI,CAAC,EAAE,CAAC;gBAChB,MAAM,MAAM,GAAG,UAAU,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;gBACrC,MAAM,CAAC,WAAW,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC;gBACrD,IAAI,CAAC,CAAC,GAAG,sBAAsB,CAAC,KAAK,CAAC,EAAE,CAAC;oBACvC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;gBACf,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;CACF"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pursue-system.d.ts","sourceRoot":"","sources":["../../src/systems/pursue-system.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAC3C,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"pursue-system.d.ts","sourceRoot":"","sources":["../../src/systems/pursue-system.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAC3C,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAQzC,qBAAa,YAAa,YAAW,MAAM;IACzC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAY;IAEjC,MAAM,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE,EAAE,MAAM,GAAG,IAAI;CAsEvC"}
|
|
@@ -13,6 +13,7 @@ import { POOL_TRANSFORM } from '../world.js';
|
|
|
13
13
|
import { POOL_PURSUE, PURSUE_FLAG_ACTIVE } from '../components/pursue.js';
|
|
14
14
|
import { POOL_HEALTH } from '../components/health.js';
|
|
15
15
|
import { makeEntity } from '../entity.js';
|
|
16
|
+
import { RESOURCE_TIME } from '../resources.js';
|
|
16
17
|
export class PursueSystem {
|
|
17
18
|
name = 'pursue';
|
|
18
19
|
update(world, dt) {
|
|
@@ -22,7 +23,10 @@ export class PursueSystem {
|
|
|
22
23
|
return;
|
|
23
24
|
const health = world.getPool(POOL_HEALTH);
|
|
24
25
|
const hwm = pursuit.getHighWaterMark();
|
|
25
|
-
|
|
26
|
+
// Deterministic clock - TimeResource not performance.now(). Pursue
|
|
27
|
+
// contact-damage cooldown checks reproduce across replays.
|
|
28
|
+
const time = world.resources.get(RESOURCE_TIME);
|
|
29
|
+
const now = time ? time.elapsed * 1000 : 0;
|
|
26
30
|
for (let i = 1; i < hwm; i++) {
|
|
27
31
|
const f = pursuit.flags[i] ?? 0;
|
|
28
32
|
if ((f & PURSUE_FLAG_ACTIVE) === 0)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pursue-system.js","sourceRoot":"","sources":["../../src/systems/pursue-system.ts"],"names":[],"mappings":"AAAA,4CAA4C;AAC5C,EAAE;AACF,gEAAgE;AAChE,gEAAgE;AAChE,gEAAgE;AAChE,8DAA8D;AAC9D,EAAE;AACF,+DAA+D;AAC/D,8DAA8D;AAC9D,8DAA8D;AAC9D,sDAAsD;AAItD,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAE7C,OAAO,EAAc,WAAW,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AACtF,OAAO,EAAc,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAClE,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"pursue-system.js","sourceRoot":"","sources":["../../src/systems/pursue-system.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ranged-attack-system.d.ts","sourceRoot":"","sources":["../../src/systems/ranged-attack-system.ts"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAC3C,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"ranged-attack-system.d.ts","sourceRoot":"","sources":["../../src/systems/ranged-attack-system.ts"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAC3C,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAczC,qBAAa,kBAAmB,YAAW,MAAM;IAC/C,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAmB;IAExC,MAAM,CAAC,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,GAAG,IAAI;CAgFxC"}
|
|
@@ -16,6 +16,7 @@ import { POOL_RANGED, RANGED_FLAG_ACTIVE, RANGED_FLAG_HOMING, } from '../compone
|
|
|
16
16
|
import { POOL_PROJECTILE } from '../vfx/projectile-pool.js';
|
|
17
17
|
import { POOL_HEALTH } from '../components/health.js';
|
|
18
18
|
import { makeEntity } from '../entity.js';
|
|
19
|
+
import { RESOURCE_TIME } from '../resources.js';
|
|
19
20
|
export class RangedAttackSystem {
|
|
20
21
|
name = 'ranged-attack';
|
|
21
22
|
update(world, _dt) {
|
|
@@ -28,7 +29,10 @@ export class RangedAttackSystem {
|
|
|
28
29
|
if (!transforms || !projectiles || !health)
|
|
29
30
|
return;
|
|
30
31
|
const hwm = ranged.getHighWaterMark();
|
|
31
|
-
|
|
32
|
+
// Deterministic clock - TimeResource so cooldowns + projectile
|
|
33
|
+
// spawn timestamps reproduce under trace replay.
|
|
34
|
+
const time = world.resources.get(RESOURCE_TIME);
|
|
35
|
+
const now = time ? time.elapsed * 1000 : 0;
|
|
32
36
|
for (let i = 1; i < hwm; i++) {
|
|
33
37
|
const f = ranged.flags[i] ?? 0;
|
|
34
38
|
if ((f & RANGED_FLAG_ACTIVE) === 0)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ranged-attack-system.js","sourceRoot":"","sources":["../../src/systems/ranged-attack-system.ts"],"names":[],"mappings":"AAAA,yDAAyD;AACzD,EAAE;AACF,0CAA0C;AAC1C,mEAAmE;AACnE,gEAAgE;AAChE,gEAAgE;AAChE,kCAAkC;AAClC,qCAAqC;AACrC,EAAE;AACF,kEAAkE;AAClE,iEAAiE;AACjE,mEAAmE;AACnE,+BAA+B;AAI/B,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAE7C,OAAO,EAEL,WAAW,EACX,kBAAkB,EAClB,kBAAkB,GACnB,MAAM,gCAAgC,CAAC;AACxC,OAAO,EAAkB,eAAe,EAAE,MAAM,2BAA2B,CAAC;AAC5E,OAAO,EAAc,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAClE,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"ranged-attack-system.js","sourceRoot":"","sources":["../../src/systems/ranged-attack-system.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@sadhaka/loom-engine",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.20.1",
|
|
4
4
|
"description": "Browser-first 2D / 2.5D game engine. Canvas2D, ECS, render-graph stages, Director-bridge SSE integration. Built from scratch in TypeScript for TheWorldTable.ai.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.js",
|
|
@@ -47,7 +47,7 @@
|
|
|
47
47
|
"build:all": "npm run build && npm run build:demos",
|
|
48
48
|
"watch": "tsc --watch",
|
|
49
49
|
"clean": "rm -rf dist demo/*.js demo/*.js.map demo/*/main.js demo/*/main.js.map",
|
|
50
|
-
"test": "tsx --test tests/smoke.test.ts tests/world.test.ts tests/asset-loader.test.ts tests/animation.test.ts tests/vfx.test.ts tests/audio-input.test.ts tests/director.test.ts tests/combat.test.ts tests/projectile.test.ts tests/arpg.test.ts tests/snapshot-recovery.test.ts tests/touch-input.test.ts tests/webgl2-device.test.ts tests/multiplayer.test.ts tests/zone-event-envelope.test.ts tests/mock-zone-bridge.test.ts tests/zone-event-system.test.ts tests/zone-state-resource.test.ts tests/ai-plugin-registry.test.ts tests/ai-plugin-error-isolation.test.ts tests/mock-ai-plugin.test.ts tests/plugin-context.test.ts tests/spatial-audio-bus.test.ts tests/audio-listener-resource.test.ts tests/spatial-audio-system.test.ts tests/spatial-falloff-math.test.ts tests/audio-asset-cache.test.ts tests/audio-asset-loader.test.ts tests/cue-catalog.test.ts tests/music-director.test.ts tests/cue-stop-all.test.ts tests/zone-audio-system.test.ts tests/zone-boss-entity-resource.test.ts tests/zone-boss-entity-system.test.ts",
|
|
50
|
+
"test": "tsx --test tests/smoke.test.ts tests/world.test.ts tests/asset-loader.test.ts tests/animation.test.ts tests/vfx.test.ts tests/audio-input.test.ts tests/director.test.ts tests/combat.test.ts tests/projectile.test.ts tests/arpg.test.ts tests/snapshot-recovery.test.ts tests/touch-input.test.ts tests/webgl2-device.test.ts tests/multiplayer.test.ts tests/zone-event-envelope.test.ts tests/mock-zone-bridge.test.ts tests/zone-event-system.test.ts tests/zone-state-resource.test.ts tests/ai-plugin-registry.test.ts tests/ai-plugin-error-isolation.test.ts tests/mock-ai-plugin.test.ts tests/plugin-context.test.ts tests/spatial-audio-bus.test.ts tests/audio-listener-resource.test.ts tests/spatial-audio-system.test.ts tests/spatial-falloff-math.test.ts tests/audio-asset-cache.test.ts tests/audio-asset-loader.test.ts tests/cue-catalog.test.ts tests/music-director.test.ts tests/cue-stop-all.test.ts tests/zone-audio-system.test.ts tests/zone-boss-entity-resource.test.ts tests/zone-boss-entity-system.test.ts tests/headless-tick-harness.test.ts tests/trace-replay/replay.test.ts tests/entropy.test.ts tests/fuzzer/fuzzer.test.ts tests/zone-event-system-determinism.test.ts tests/no-nondeterminism.test.ts tests/replay-snapshot.test.ts tests/determinism-smoke.test.ts tests/plugins/client-registry.test.ts tests/plugins/example-hud-plugin.test.ts tests/director/sse-director-bridge-networking.test.ts tests/director/sse-zone-bridge-networking.test.ts",
|
|
51
51
|
"bench": "npm run build && node --expose-gc --import=tsx tools/perf-bench.ts",
|
|
52
52
|
"bench:fast": "npm run build && node --expose-gc --import=tsx tools/perf-bench.ts --no-write",
|
|
53
53
|
"bench:browser": "npm run build && tsc -p tools/tsconfig.bench.json",
|