@datamoc/mw_games 0.25.0 → 0.26.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/CHANGELOG.md +115 -0
- package/README.md +15 -0
- package/api-surface.json +14468 -0
- package/dist/actors/StatBlock.d.ts +2 -4
- package/dist/actors/StatBlock.d.ts.map +1 -1
- package/dist/actors/StatBlock.js +2 -4
- package/dist/actors/StatBlock.js.map +1 -1
- package/dist/ai/Heuristics.d.ts +1 -1
- package/dist/ai/Heuristics.js +1 -1
- package/dist/assets/index.d.ts +1 -0
- package/dist/assets/index.d.ts.map +1 -1
- package/dist/assets/index.js.map +1 -1
- package/dist/core/Blob.d.ts.map +1 -1
- package/dist/core/Blob.js +2 -8
- package/dist/core/Blob.js.map +1 -1
- package/dist/core/Grid.d.ts +115 -0
- package/dist/core/Grid.d.ts.map +1 -1
- package/dist/core/Grid.js +125 -0
- package/dist/core/Grid.js.map +1 -1
- package/dist/core/HttpTransport.d.ts +14 -0
- package/dist/core/HttpTransport.d.ts.map +1 -1
- package/dist/core/HttpTransport.js +14 -0
- package/dist/core/HttpTransport.js.map +1 -1
- package/dist/core/Random.d.ts +36 -13
- package/dist/core/Random.d.ts.map +1 -1
- package/dist/core/Random.js +28 -25
- package/dist/core/Random.js.map +1 -1
- package/dist/core/index.d.ts +6 -4
- package/dist/core/index.d.ts.map +1 -1
- package/dist/core/index.js +2 -1
- package/dist/core/index.js.map +1 -1
- package/dist/headless/index.d.ts +87 -0
- package/dist/headless/index.d.ts.map +1 -0
- package/dist/headless/index.js +87 -0
- package/dist/headless/index.js.map +1 -0
- package/dist/mw_games.global.js +113 -113
- package/dist/mwl/index.d.ts +1 -1
- package/dist/mwl/index.d.ts.map +1 -1
- package/dist/mwl/index.js.map +1 -1
- package/dist/roguelike/Level.d.ts +1 -1
- package/dist/roguelike/Level.d.ts.map +1 -1
- package/dist/roguelike/Level.js +3 -21
- package/dist/roguelike/Level.js.map +1 -1
- package/dist/roguelike/Targeting.d.ts.map +1 -1
- package/dist/roguelike/Targeting.js +2 -1
- package/dist/roguelike/Targeting.js.map +1 -1
- package/dist/rpg/index.d.ts +1 -1
- package/dist/rpg/index.d.ts.map +1 -1
- package/dist/two-d/pixi-interop.d.ts +24 -1
- package/dist/two-d/pixi-interop.d.ts.map +1 -1
- package/dist/two-d/pixi-interop.js +23 -1
- package/dist/two-d/pixi-interop.js.map +1 -1
- package/dist/two-d/render/index.d.ts +2 -2
- package/dist/two-d/render/index.d.ts.map +1 -1
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/package.json +16 -3
- package/sbom.cdx.json +6 -6
- package/tools/audit-adoptions.d.mts +65 -0
- package/tools/audit-adoptions.mjs +252 -0
- package/tools/browser-driver.d.mts +78 -0
- package/tools/browser-driver.mjs +642 -0
|
@@ -32,15 +32,13 @@ export interface StatBlockOptions {
|
|
|
32
32
|
derived?: DerivedStat[];
|
|
33
33
|
}
|
|
34
34
|
/**
|
|
35
|
-
* Resolves one stat's modifiers into a single number
|
|
35
|
+
* Resolves one stat's modifiers into a single number, in the framework's
|
|
36
|
+
* canonical add, multiply, then set composition.
|
|
36
37
|
*
|
|
37
38
|
* Every `add` modifier applies first (summed together), then every `multiply` (each
|
|
38
39
|
* scaling the running total), then every `set` (the last one wins) - a stated, fixed order,
|
|
39
40
|
* so a +10% ring and a cursed -2 sword combine the same way regardless of equip order, and
|
|
40
41
|
* a `set` modifier (a polymorph, a stat drained to exactly zero) always wins over the rest.
|
|
41
|
-
*/
|
|
42
|
-
/**
|
|
43
|
-
* Apply the framework's canonical add, multiply, then set composition.
|
|
44
42
|
*
|
|
45
43
|
* @example
|
|
46
44
|
* ```ts
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"StatBlock.d.ts","sourceRoot":"","sources":["../../src/actors/StatBlock.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,MAAM,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;AAE3C,0DAA0D;AAC1D,MAAM,MAAM,UAAU,GAAG,KAAK,GAAG,UAAU,GAAG,KAAK,CAAC;AAEpD,MAAM,WAAW,QAAQ;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,UAAU,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IAEd;;;OAGG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;IAEf,2FAA2F;IAC3F,MAAM,CAAC,EAAE,OAAO,CAAC;CACjB;AAED,MAAM,WAAW,WAAW;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,2FAA2F;IAC3F,IAAI,EAAE,CAAC,KAAK,EAAE,QAAQ,CAAC,KAAK,CAAC,KAAK,MAAM,CAAC;CACzC;AAED,MAAM,WAAW,gBAAgB;IAChC,IAAI,EAAE,KAAK,CAAC;IACZ,OAAO,CAAC,EAAE,WAAW,EAAE,CAAC;CACxB;AAED
|
|
1
|
+
{"version":3,"file":"StatBlock.d.ts","sourceRoot":"","sources":["../../src/actors/StatBlock.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,MAAM,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;AAE3C,0DAA0D;AAC1D,MAAM,MAAM,UAAU,GAAG,KAAK,GAAG,UAAU,GAAG,KAAK,CAAC;AAEpD,MAAM,WAAW,QAAQ;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,UAAU,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IAEd;;;OAGG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;IAEf,2FAA2F;IAC3F,MAAM,CAAC,EAAE,OAAO,CAAC;CACjB;AAED,MAAM,WAAW,WAAW;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,2FAA2F;IAC3F,IAAI,EAAE,CAAC,KAAK,EAAE,QAAQ,CAAC,KAAK,CAAC,KAAK,MAAM,CAAC;CACzC;AAED,MAAM,WAAW,gBAAgB;IAChC,IAAI,EAAE,KAAK,CAAC;IACZ,OAAO,CAAC,EAAE,WAAW,EAAE,CAAC;CACxB;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,SAAS,QAAQ,EAAE,GAAG,MAAM,CASrF;AAED,qBAAa,SAAS;IACrB,OAAO,CAAC,UAAU,CAAQ;IAC1B,OAAO,CAAC,OAAO,CAAgB;IAC/B,OAAO,CAAC,SAAS,CAAkB;IACnC,OAAO,CAAC,KAAK,CAAsB;IAEnC,YAAY,OAAO,EAAE,gBAAgB,EAGpC;IAED,uEAAuE;IACvE,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAEzB;IAED,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAGzC;IAED,WAAW,CAAC,QAAQ,EAAE,QAAQ,GAAG,IAAI,CAGpC;IAED,cAAc,CAAC,QAAQ,EAAE,QAAQ,GAAG,IAAI,CAIvC;IAED,qFAAqF;IACrF,mBAAmB,CAAC,MAAM,EAAE,OAAO,GAAG,IAAI,CAGzC;IAED,wFAAwF;IACxF,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAExB;IAED,OAAO,CAAC,UAAU;IAelB,OAAO,CAAC,YAAY;IAIpB;;;;;;;;;OASG;IACH,MAAM,IAAI;QAAE,IAAI,EAAE,KAAK,CAAA;KAAE,CAExB;IAED,MAAM,CAAC,QAAQ,CAAC,OAAO,EAAE,gBAAgB,EAAE,IAAI,EAAE;QAAE,IAAI,EAAE,KAAK,CAAA;KAAE,GAAG,SAAS,CAO3E;CACD"}
|
package/dist/actors/StatBlock.js
CHANGED
|
@@ -8,15 +8,13 @@
|
|
|
8
8
|
* modifiers are active, in a stated order, and keeps it correct as either side changes.
|
|
9
9
|
*/
|
|
10
10
|
/**
|
|
11
|
-
* Resolves one stat's modifiers into a single number
|
|
11
|
+
* Resolves one stat's modifiers into a single number, in the framework's
|
|
12
|
+
* canonical add, multiply, then set composition.
|
|
12
13
|
*
|
|
13
14
|
* Every `add` modifier applies first (summed together), then every `multiply` (each
|
|
14
15
|
* scaling the running total), then every `set` (the last one wins) - a stated, fixed order,
|
|
15
16
|
* so a +10% ring and a cursed -2 sword combine the same way regardless of equip order, and
|
|
16
17
|
* a `set` modifier (a polymorph, a stat drained to exactly zero) always wins over the rest.
|
|
17
|
-
*/
|
|
18
|
-
/**
|
|
19
|
-
* Apply the framework's canonical add, multiply, then set composition.
|
|
20
18
|
*
|
|
21
19
|
* @example
|
|
22
20
|
* ```ts
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"StatBlock.js","sourceRoot":"","sources":["../../src/actors/StatBlock.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAiCH
|
|
1
|
+
{"version":3,"file":"StatBlock.js","sourceRoot":"","sources":["../../src/actors/StatBlock.ts"],"names":[],"mappings":"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"}
|
package/dist/ai/Heuristics.d.ts
CHANGED
|
@@ -10,7 +10,7 @@ export interface AspectValues {
|
|
|
10
10
|
* wants, and a difficulty level overrides a few of them.
|
|
11
11
|
*
|
|
12
12
|
* Typed readers give a stage a usable number without every caller casting: a missing aspect reads
|
|
13
|
-
* as the fallback (`1` for a weight,
|
|
13
|
+
* as the fallback the caller passes (`1` for a neutral weight, `0` where an unset aspect should zero the score).
|
|
14
14
|
*
|
|
15
15
|
* @example
|
|
16
16
|
* ```ts
|
package/dist/ai/Heuristics.js
CHANGED
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
* wants, and a difficulty level overrides a few of them.
|
|
6
6
|
*
|
|
7
7
|
* Typed readers give a stage a usable number without every caller casting: a missing aspect reads
|
|
8
|
-
* as the fallback (`1` for a weight,
|
|
8
|
+
* as the fallback the caller passes (`1` for a neutral weight, `0` where an unset aspect should zero the score).
|
|
9
9
|
*
|
|
10
10
|
* @example
|
|
11
11
|
* ```ts
|
package/dist/assets/index.d.ts
CHANGED
|
@@ -13,6 +13,7 @@
|
|
|
13
13
|
export { setBase, setAssetMap, isCompiled, paths, has, resolve } from './paths.ts';
|
|
14
14
|
export type { AssetProgress } from './paths.ts';
|
|
15
15
|
export { load, texture, get, isLoaded, release } from './loader.ts';
|
|
16
|
+
export type { LoadAssetsOptions } from './loader.ts';
|
|
16
17
|
export { loadBinary, getBinary, isBinaryLoaded, releaseBinary } from './binary.ts';
|
|
17
18
|
export type { LoadBinaryOptions } from './binary.ts';
|
|
18
19
|
export { AssetStream } from './Streaming.ts';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/assets/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,KAAK,EAAE,GAAG,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AACnF,YAAY,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAEhD,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/assets/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,KAAK,EAAE,GAAG,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AACnF,YAAY,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAEhD,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AACpE,YAAY,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAErD,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AACnF,YAAY,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAErD,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC7C,YAAY,EAAE,WAAW,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AACtE,OAAO,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAC;AAC1D,YAAY,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC"}
|
package/dist/assets/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/assets/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,KAAK,EAAE,GAAG,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAGnF,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/assets/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,KAAK,EAAE,GAAG,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAGnF,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAGpE,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAGnF,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAE7C,OAAO,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAC"}
|
package/dist/core/Blob.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Blob.d.ts","sourceRoot":"","sources":["../../src/core/Blob.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"Blob.d.ts","sourceRoot":"","sources":["../../src/core/Blob.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AAEH,qBAAa,IAAI;IAChB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IAExB,OAAO,CAAC,MAAM,CAAe;IAE7B,YAAY,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAIxC;IAED,mEAAmE;IACnE,OAAO,CAAC,KAAK;IAKb,4DAA4D;IAC5D,QAAQ,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAGrC;IAED,iFAAiF;IACjF,KAAK,IAAI,MAAM,CAId;IAED,2EAA2E;IAC3E,IAAI,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,CAG/C;IAED,yFAAyF;IACzF,KAAK,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,IAAI,CAGhC;IAED;;;;;;;;;;OAUG;IACH,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,KAAK,OAAO,EAAE,MAAM,SAAO,EAAE,KAAK,SAAM,GAAG,KAAK,CAAC;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAsC3G;IAED,qFAAqF;IACrF,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,KAAK,CAAC;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC,CAS3E;IAED,MAAM,IAAI;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,EAAE,CAAA;KAAE,CAE5D;IAED,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,EAAE,CAAA;KAAE,GAAG,IAAI,CAI/E;CACD"}
|
package/dist/core/Blob.js
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { NEIGHBOURS4 } from './Grid.js';
|
|
1
2
|
/**
|
|
2
3
|
* A spreading volume field over a grid: a number per cell that creeps into its open
|
|
3
4
|
* neighbours and thins out over time. Fire, gas, caustic ooze, flood water - anything
|
|
@@ -29,13 +30,6 @@
|
|
|
29
30
|
* fire.clear(5, 5); // someone douses that one tile
|
|
30
31
|
* ```
|
|
31
32
|
*/
|
|
32
|
-
/** the four axial neighbours of a cell, same order as `roguelike`'s square topology */
|
|
33
|
-
const OFFSET_4 = [
|
|
34
|
-
[0, -1],
|
|
35
|
-
[1, 0],
|
|
36
|
-
[0, 1],
|
|
37
|
-
[-1, 0],
|
|
38
|
-
];
|
|
39
33
|
export class Blob {
|
|
40
34
|
constructor(width, height) {
|
|
41
35
|
this.width = width;
|
|
@@ -92,7 +86,7 @@ export class Blob {
|
|
|
92
86
|
if (amount <= 0)
|
|
93
87
|
continue;
|
|
94
88
|
const neighbours = [];
|
|
95
|
-
for (const [dx, dy] of
|
|
89
|
+
for (const [dx, dy] of NEIGHBOURS4) {
|
|
96
90
|
const nx = x + dx;
|
|
97
91
|
const ny = y + dy;
|
|
98
92
|
const i = this.index(nx, ny);
|
package/dist/core/Blob.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Blob.js","sourceRoot":"","sources":["../../src/core/Blob.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"Blob.js","sourceRoot":"","sources":["../../src/core/Blob.ts"],"names":[],"mappings":"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"}
|
package/dist/core/Grid.d.ts
CHANGED
|
@@ -16,6 +16,7 @@
|
|
|
16
16
|
* @example
|
|
17
17
|
* ```ts
|
|
18
18
|
* import { cellInside, cellIndex, cellX, cellY, cellKey, cellFromKey } from '@datamoc/mw_games/core';
|
|
19
|
+
* import { NEIGHBOURS4, NEIGHBOURS8, CIRCLE8, euclidean } from '@datamoc/mw_games/core';
|
|
19
20
|
*
|
|
20
21
|
* // a 4x3 board, row-major: y * width + x
|
|
21
22
|
* cellInside(4, 3, 3, 2); // true, the far corner
|
|
@@ -26,6 +27,11 @@
|
|
|
26
27
|
*
|
|
27
28
|
* const seen = new Set([cellKey(2, 1)]); // '2,1', for a Map or a Set
|
|
28
29
|
* cellFromKey('2,1'); // { x: 2, y: 1 }
|
|
30
|
+
*
|
|
31
|
+
* NEIGHBOURS8.length; // 8, the surrounding cells in row-major order
|
|
32
|
+
* CIRCLE8[0]; // [0, -1], the same ring clockwise from north
|
|
33
|
+
* NEIGHBOURS4.length; // 4, north/east/south/west
|
|
34
|
+
* euclidean({ x: 0, y: 0 }, { x: 3, y: 4 }); // 5
|
|
29
35
|
* ```
|
|
30
36
|
*/
|
|
31
37
|
/**
|
|
@@ -61,4 +67,113 @@ export declare function cellFromKey(key: string): {
|
|
|
61
67
|
x: number;
|
|
62
68
|
y: number;
|
|
63
69
|
} | null;
|
|
70
|
+
/**
|
|
71
|
+
* The four axial neighbours of a cell: north, east, south, west, in that order.
|
|
72
|
+
*
|
|
73
|
+
* One frozen table shared by every square-grid algorithm, so a flood fill and a
|
|
74
|
+
* diffusion field visit neighbours in the same sequence without each keeping its
|
|
75
|
+
* own copy: `roguelike`'s `neighbourOffsets(4)` returns this same table.
|
|
76
|
+
*/
|
|
77
|
+
export declare const NEIGHBOURS4: ReadonlyArray<readonly [number, number]>;
|
|
78
|
+
/**
|
|
79
|
+
* The eight cells surrounding a cell, in row-major (reading) order, centre skipped.
|
|
80
|
+
*
|
|
81
|
+
* The same eight cells `CIRCLE8` carries, only the visit order differs: reading order
|
|
82
|
+
* suits first-found-wins scans, the ring suits directional work like knockback cursors.
|
|
83
|
+
*/
|
|
84
|
+
export declare const NEIGHBOURS8: ReadonlyArray<readonly [number, number]>;
|
|
85
|
+
/**
|
|
86
|
+
* The eight cells surrounding a cell as a clockwise ring starting north.
|
|
87
|
+
*
|
|
88
|
+
* The same sequence `roguelike`'s `neighbourOffsets(8)` has always returned, now shared
|
|
89
|
+
* from here instead of copied there.
|
|
90
|
+
*/
|
|
91
|
+
export declare const CIRCLE8: ReadonlyArray<readonly [number, number]>;
|
|
92
|
+
/**
|
|
93
|
+
* Euclidean ruler distance between two cells.
|
|
94
|
+
*
|
|
95
|
+
* The counterpart to `roguelike`'s `chebyshevDistance`, which charges a diagonal the
|
|
96
|
+
* same as a step: use this one when the true straight-line distance matters (blast
|
|
97
|
+
* falloff, census radius) and that one for roguelike range and movement.
|
|
98
|
+
*
|
|
99
|
+
* @example
|
|
100
|
+
* ```ts
|
|
101
|
+
* import { euclidean } from '@datamoc/mw_games/core';
|
|
102
|
+
*
|
|
103
|
+
* euclidean({ x: 0, y: 0 }, { x: 3, y: 4 }); // 5
|
|
104
|
+
* ```
|
|
105
|
+
*/
|
|
106
|
+
export declare function euclidean(a: {
|
|
107
|
+
readonly x: number;
|
|
108
|
+
readonly y: number;
|
|
109
|
+
}, b: {
|
|
110
|
+
readonly x: number;
|
|
111
|
+
readonly y: number;
|
|
112
|
+
}): number;
|
|
113
|
+
/**
|
|
114
|
+
* Chebyshev ruler distance between two cells: the king-move count, a diagonal costing one step.
|
|
115
|
+
*
|
|
116
|
+
* The counterpart to `euclidean` above for grid movement and range, where a diagonal is a
|
|
117
|
+
* single step rather than 1.41 cells; `roguelike`
|
|
118
|
+
* `chebyshevDistance` is this same arithmetic through its own `Step` type.
|
|
119
|
+
*
|
|
120
|
+
* @example
|
|
121
|
+
* ```ts
|
|
122
|
+
* import { chebyshev } from '@datamoc/mw_games/core';
|
|
123
|
+
*
|
|
124
|
+
* chebyshev({ x: 0, y: 0 }, { x: 3, y: 4 }); // 4
|
|
125
|
+
* ```
|
|
126
|
+
*/
|
|
127
|
+
export declare function chebyshev(a: {
|
|
128
|
+
readonly x: number;
|
|
129
|
+
readonly y: number;
|
|
130
|
+
}, b: {
|
|
131
|
+
readonly x: number;
|
|
132
|
+
readonly y: number;
|
|
133
|
+
}): number;
|
|
134
|
+
/**
|
|
135
|
+
* Manhattan ruler distance between two cells: the orthogonal-step count, no diagonals.
|
|
136
|
+
*
|
|
137
|
+
* The counterpart to `euclidean` and `chebyshev` for four-way movement and range, where
|
|
138
|
+
* every step is axis-aligned.
|
|
139
|
+
*
|
|
140
|
+
* @example
|
|
141
|
+
* ```ts
|
|
142
|
+
* import { manhattan } from '@datamoc/mw_games/core';
|
|
143
|
+
*
|
|
144
|
+
* manhattan({ x: 0, y: 0 }, { x: 3, y: 4 }); // 7
|
|
145
|
+
* ```
|
|
146
|
+
*/
|
|
147
|
+
export declare function manhattan(a: {
|
|
148
|
+
readonly x: number;
|
|
149
|
+
readonly y: number;
|
|
150
|
+
}, b: {
|
|
151
|
+
readonly x: number;
|
|
152
|
+
readonly y: number;
|
|
153
|
+
}): number;
|
|
154
|
+
/**
|
|
155
|
+
* The ruler a rule measures with, chosen by name where the choice itself is data: a
|
|
156
|
+
* movement rule walks `chebyshev`, a blast falls off with `euclidean`, a four-way maze
|
|
157
|
+
* counts `manhattan`.
|
|
158
|
+
*/
|
|
159
|
+
export type DistanceMetric = 'euclidean' | 'manhattan' | 'chebyshev';
|
|
160
|
+
/**
|
|
161
|
+
* Measures `a` to `b` with the named ruler, so a rule authored as data (a table row, a
|
|
162
|
+
* authored profile) can pick its geometry without importing each ruler by name.
|
|
163
|
+
*
|
|
164
|
+
* @example
|
|
165
|
+
* ```ts
|
|
166
|
+
* import { distance } from '@datamoc/mw_games/core';
|
|
167
|
+
*
|
|
168
|
+
* distance('chebyshev', { x: 0, y: 0 }, { x: 3, y: 4 }); // 4
|
|
169
|
+
* distance('euclidean', { x: 0, y: 0 }, { x: 3, y: 4 }); // 5
|
|
170
|
+
* ```
|
|
171
|
+
*/
|
|
172
|
+
export declare function distance(metric: DistanceMetric, a: {
|
|
173
|
+
readonly x: number;
|
|
174
|
+
readonly y: number;
|
|
175
|
+
}, b: {
|
|
176
|
+
readonly x: number;
|
|
177
|
+
readonly y: number;
|
|
178
|
+
}): number;
|
|
64
179
|
//# sourceMappingURL=Grid.d.ts.map
|
package/dist/core/Grid.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Grid.d.ts","sourceRoot":"","sources":["../../src/core/Grid.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"Grid.d.ts","sourceRoot":"","sources":["../../src/core/Grid.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmCG;AAEH;;;;;GAKG;AACH,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,OAAO,CAEvF;AAED;;;;;;GAMG;AACH,wBAAgB,SAAS,CAAC,KAAK,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAErE;AAED,yEAAyE;AACzE,wBAAgB,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAE1D;AAED,yEAAyE;AACzE,wBAAgB,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAE1D;AAED;;;;;;;GAOG;AACH,wBAAgB,OAAO,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAEpD;AAED,wFAAwF;AACxF,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG;IAAE,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAIxE;AAED;;;;;;GAMG;AACH,eAAO,MAAM,WAAW,EAAE,aAAa,CAAC,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC,CAKhE,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,WAAW,EAAE,aAAa,CAAC,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC,CAShE,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,OAAO,EAAE,aAAa,CAAC,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC,CAS5D,CAAC;AAEF;;;;;;;;;;;;;GAaG;AACH,wBAAgB,SAAS,CACxB,CAAC,EAAE;IAAE,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAA;CAAE,EAC7C,CAAC,EAAE;IAAE,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAA;CAAE,GAC3C,MAAM,CAER;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,SAAS,CACxB,CAAC,EAAE;IAAE,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAA;CAAE,EAC7C,CAAC,EAAE;IAAE,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAA;CAAE,GAC3C,MAAM,CAER;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,SAAS,CACxB,CAAC,EAAE;IAAE,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAA;CAAE,EAC7C,CAAC,EAAE;IAAE,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAA;CAAE,GAC3C,MAAM,CAER;AAED;;;;GAIG;AACH,MAAM,MAAM,cAAc,GAAG,WAAW,GAAG,WAAW,GAAG,WAAW,CAAC;AAErE;;;;;;;;;;;GAWG;AACH,wBAAgB,QAAQ,CACvB,MAAM,EAAE,cAAc,EACtB,CAAC,EAAE;IAAE,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAA;CAAE,EAC7C,CAAC,EAAE;IAAE,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAA;CAAE,GAC3C,MAAM,CAWR"}
|
package/dist/core/Grid.js
CHANGED
|
@@ -16,6 +16,7 @@
|
|
|
16
16
|
* @example
|
|
17
17
|
* ```ts
|
|
18
18
|
* import { cellInside, cellIndex, cellX, cellY, cellKey, cellFromKey } from '@datamoc/mw_games/core';
|
|
19
|
+
* import { NEIGHBOURS4, NEIGHBOURS8, CIRCLE8, euclidean } from '@datamoc/mw_games/core';
|
|
19
20
|
*
|
|
20
21
|
* // a 4x3 board, row-major: y * width + x
|
|
21
22
|
* cellInside(4, 3, 3, 2); // true, the far corner
|
|
@@ -26,6 +27,11 @@
|
|
|
26
27
|
*
|
|
27
28
|
* const seen = new Set([cellKey(2, 1)]); // '2,1', for a Map or a Set
|
|
28
29
|
* cellFromKey('2,1'); // { x: 2, y: 1 }
|
|
30
|
+
*
|
|
31
|
+
* NEIGHBOURS8.length; // 8, the surrounding cells in row-major order
|
|
32
|
+
* CIRCLE8[0]; // [0, -1], the same ring clockwise from north
|
|
33
|
+
* NEIGHBOURS4.length; // 4, north/east/south/west
|
|
34
|
+
* euclidean({ x: 0, y: 0 }, { x: 3, y: 4 }); // 5
|
|
29
35
|
* ```
|
|
30
36
|
*/
|
|
31
37
|
/**
|
|
@@ -73,4 +79,123 @@ export function cellFromKey(key) {
|
|
|
73
79
|
return null;
|
|
74
80
|
return { x: Number(match[1]), y: Number(match[2]) };
|
|
75
81
|
}
|
|
82
|
+
/**
|
|
83
|
+
* The four axial neighbours of a cell: north, east, south, west, in that order.
|
|
84
|
+
*
|
|
85
|
+
* One frozen table shared by every square-grid algorithm, so a flood fill and a
|
|
86
|
+
* diffusion field visit neighbours in the same sequence without each keeping its
|
|
87
|
+
* own copy: `roguelike`'s `neighbourOffsets(4)` returns this same table.
|
|
88
|
+
*/
|
|
89
|
+
export const NEIGHBOURS4 = [
|
|
90
|
+
[0, -1],
|
|
91
|
+
[1, 0],
|
|
92
|
+
[0, 1],
|
|
93
|
+
[-1, 0],
|
|
94
|
+
];
|
|
95
|
+
/**
|
|
96
|
+
* The eight cells surrounding a cell, in row-major (reading) order, centre skipped.
|
|
97
|
+
*
|
|
98
|
+
* The same eight cells `CIRCLE8` carries, only the visit order differs: reading order
|
|
99
|
+
* suits first-found-wins scans, the ring suits directional work like knockback cursors.
|
|
100
|
+
*/
|
|
101
|
+
export const NEIGHBOURS8 = [
|
|
102
|
+
[-1, -1],
|
|
103
|
+
[0, -1],
|
|
104
|
+
[1, -1],
|
|
105
|
+
[-1, 0],
|
|
106
|
+
[1, 0],
|
|
107
|
+
[-1, 1],
|
|
108
|
+
[0, 1],
|
|
109
|
+
[1, 1],
|
|
110
|
+
];
|
|
111
|
+
/**
|
|
112
|
+
* The eight cells surrounding a cell as a clockwise ring starting north.
|
|
113
|
+
*
|
|
114
|
+
* The same sequence `roguelike`'s `neighbourOffsets(8)` has always returned, now shared
|
|
115
|
+
* from here instead of copied there.
|
|
116
|
+
*/
|
|
117
|
+
export const CIRCLE8 = [
|
|
118
|
+
[0, -1],
|
|
119
|
+
[1, -1],
|
|
120
|
+
[1, 0],
|
|
121
|
+
[1, 1],
|
|
122
|
+
[0, 1],
|
|
123
|
+
[-1, 1],
|
|
124
|
+
[-1, 0],
|
|
125
|
+
[-1, -1],
|
|
126
|
+
];
|
|
127
|
+
/**
|
|
128
|
+
* Euclidean ruler distance between two cells.
|
|
129
|
+
*
|
|
130
|
+
* The counterpart to `roguelike`'s `chebyshevDistance`, which charges a diagonal the
|
|
131
|
+
* same as a step: use this one when the true straight-line distance matters (blast
|
|
132
|
+
* falloff, census radius) and that one for roguelike range and movement.
|
|
133
|
+
*
|
|
134
|
+
* @example
|
|
135
|
+
* ```ts
|
|
136
|
+
* import { euclidean } from '@datamoc/mw_games/core';
|
|
137
|
+
*
|
|
138
|
+
* euclidean({ x: 0, y: 0 }, { x: 3, y: 4 }); // 5
|
|
139
|
+
* ```
|
|
140
|
+
*/
|
|
141
|
+
export function euclidean(a, b) {
|
|
142
|
+
return Math.hypot(a.x - b.x, a.y - b.y);
|
|
143
|
+
}
|
|
144
|
+
/**
|
|
145
|
+
* Chebyshev ruler distance between two cells: the king-move count, a diagonal costing one step.
|
|
146
|
+
*
|
|
147
|
+
* The counterpart to `euclidean` above for grid movement and range, where a diagonal is a
|
|
148
|
+
* single step rather than 1.41 cells; `roguelike`
|
|
149
|
+
* `chebyshevDistance` is this same arithmetic through its own `Step` type.
|
|
150
|
+
*
|
|
151
|
+
* @example
|
|
152
|
+
* ```ts
|
|
153
|
+
* import { chebyshev } from '@datamoc/mw_games/core';
|
|
154
|
+
*
|
|
155
|
+
* chebyshev({ x: 0, y: 0 }, { x: 3, y: 4 }); // 4
|
|
156
|
+
* ```
|
|
157
|
+
*/
|
|
158
|
+
export function chebyshev(a, b) {
|
|
159
|
+
return Math.max(Math.abs(a.x - b.x), Math.abs(a.y - b.y));
|
|
160
|
+
}
|
|
161
|
+
/**
|
|
162
|
+
* Manhattan ruler distance between two cells: the orthogonal-step count, no diagonals.
|
|
163
|
+
*
|
|
164
|
+
* The counterpart to `euclidean` and `chebyshev` for four-way movement and range, where
|
|
165
|
+
* every step is axis-aligned.
|
|
166
|
+
*
|
|
167
|
+
* @example
|
|
168
|
+
* ```ts
|
|
169
|
+
* import { manhattan } from '@datamoc/mw_games/core';
|
|
170
|
+
*
|
|
171
|
+
* manhattan({ x: 0, y: 0 }, { x: 3, y: 4 }); // 7
|
|
172
|
+
* ```
|
|
173
|
+
*/
|
|
174
|
+
export function manhattan(a, b) {
|
|
175
|
+
return Math.abs(a.x - b.x) + Math.abs(a.y - b.y);
|
|
176
|
+
}
|
|
177
|
+
/**
|
|
178
|
+
* Measures `a` to `b` with the named ruler, so a rule authored as data (a table row, a
|
|
179
|
+
* authored profile) can pick its geometry without importing each ruler by name.
|
|
180
|
+
*
|
|
181
|
+
* @example
|
|
182
|
+
* ```ts
|
|
183
|
+
* import { distance } from '@datamoc/mw_games/core';
|
|
184
|
+
*
|
|
185
|
+
* distance('chebyshev', { x: 0, y: 0 }, { x: 3, y: 4 }); // 4
|
|
186
|
+
* distance('euclidean', { x: 0, y: 0 }, { x: 3, y: 4 }); // 5
|
|
187
|
+
* ```
|
|
188
|
+
*/
|
|
189
|
+
export function distance(metric, a, b) {
|
|
190
|
+
switch (metric) {
|
|
191
|
+
case 'euclidean':
|
|
192
|
+
return euclidean(a, b);
|
|
193
|
+
case 'manhattan':
|
|
194
|
+
return manhattan(a, b);
|
|
195
|
+
case 'chebyshev':
|
|
196
|
+
return chebyshev(a, b);
|
|
197
|
+
default:
|
|
198
|
+
throw new RangeError(`unknown distance metric: ${metric}`);
|
|
199
|
+
}
|
|
200
|
+
}
|
|
76
201
|
//# sourceMappingURL=Grid.js.map
|
package/dist/core/Grid.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Grid.js","sourceRoot":"","sources":["../../src/core/Grid.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"Grid.js","sourceRoot":"","sources":["../../src/core/Grid.ts"],"names":[],"mappings":"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"}
|
|
@@ -22,6 +22,20 @@ export declare function assertSecureUrl(url: string, label: string, allowInsecur
|
|
|
22
22
|
* is aborted after `timeoutMs`. `label` names the concrete client in its own error messages
|
|
23
23
|
* ("feedback endpoint is required", not a generic one that would leave a game guessing which
|
|
24
24
|
* of several clients threw).
|
|
25
|
+
*
|
|
26
|
+
* @example
|
|
27
|
+
* ```ts
|
|
28
|
+
* import { HttpTransport, type HttpTransportOptions } from '@datamoc/mw_games/core';
|
|
29
|
+
*
|
|
30
|
+
* class ScoreClient extends HttpTransport {
|
|
31
|
+
* constructor(options: HttpTransportOptions) {
|
|
32
|
+
* super(options, 'score');
|
|
33
|
+
* }
|
|
34
|
+
* }
|
|
35
|
+
*
|
|
36
|
+
* const client = new ScoreClient({ endpoint: 'https://example.com/scores' });
|
|
37
|
+
* console.log(client instanceof HttpTransport); // true
|
|
38
|
+
* ```
|
|
25
39
|
*/
|
|
26
40
|
export declare abstract class HttpTransport {
|
|
27
41
|
protected readonly endpoint: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"HttpTransport.d.ts","sourceRoot":"","sources":["../../src/core/HttpTransport.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,oBAAoB;IACpC,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,OAAO,UAAU,CAAC,KAAK,CAAC;IAChC,8DAA8D;IAC9D,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,yEAAyE;IACzE,aAAa,CAAC,EAAE,OAAO,CAAC;CACxB;AAID;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,aAAa,UAAQ,GAAG,IAAI,CAQvF;AAED
|
|
1
|
+
{"version":3,"file":"HttpTransport.d.ts","sourceRoot":"","sources":["../../src/core/HttpTransport.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,oBAAoB;IACpC,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,OAAO,UAAU,CAAC,KAAK,CAAC;IAChC,8DAA8D;IAC9D,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,yEAAyE;IACzE,aAAa,CAAC,EAAE,OAAO,CAAC;CACxB;AAID;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,aAAa,UAAQ,GAAG,IAAI,CAQvF;AAED;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,8BAAsB,aAAa;IAClC,SAAS,CAAC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IACpC,SAAS,CAAC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IACrC,SAAS,CAAC,QAAQ,CAAC,OAAO,EAAE,OAAO,UAAU,CAAC,KAAK,CAAC;IACpD,SAAS,CAAC,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC;IAC5C,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAS;IAE/B,YAAY,OAAO,EAAE,oBAAoB,EAAE,KAAK,EAAE,MAAM,EAUvD;IAED,UAAgB,WAAW,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,MAAM,EAAE,WAAW,KAAK,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAQnF;IAED,uHAAuH;IACvH,UAAgB,QAAQ,CAAC,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAAC,MAAM,CAAC,CA8B5D;IAED,sCAAsC;IACtC,UAAgB,QAAQ,CAAC,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAK3E;CACD"}
|
|
@@ -24,6 +24,20 @@ export function assertSecureUrl(url, label, allowInsecure = false) {
|
|
|
24
24
|
* is aborted after `timeoutMs`. `label` names the concrete client in its own error messages
|
|
25
25
|
* ("feedback endpoint is required", not a generic one that would leave a game guessing which
|
|
26
26
|
* of several clients threw).
|
|
27
|
+
*
|
|
28
|
+
* @example
|
|
29
|
+
* ```ts
|
|
30
|
+
* import { HttpTransport, type HttpTransportOptions } from '@datamoc/mw_games/core';
|
|
31
|
+
*
|
|
32
|
+
* class ScoreClient extends HttpTransport {
|
|
33
|
+
* constructor(options: HttpTransportOptions) {
|
|
34
|
+
* super(options, 'score');
|
|
35
|
+
* }
|
|
36
|
+
* }
|
|
37
|
+
*
|
|
38
|
+
* const client = new ScoreClient({ endpoint: 'https://example.com/scores' });
|
|
39
|
+
* console.log(client instanceof HttpTransport); // true
|
|
40
|
+
* ```
|
|
27
41
|
*/
|
|
28
42
|
export class HttpTransport {
|
|
29
43
|
constructor(options, label) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"HttpTransport.js","sourceRoot":"","sources":["../../src/core/HttpTransport.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAYxD,MAAM,WAAW,GAAG,IAAI,GAAG,CAAC,CAAC,WAAW,EAAE,WAAW,EAAE,OAAO,CAAC,CAAC,CAAC;AAEjE;;;;;GAKG;AACH,MAAM,UAAU,eAAe,CAAC,GAAW,EAAE,KAAa,EAAE,aAAa,GAAG,KAAK;IAChF,IAAI,aAAa,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,GAAG,CAAC;QAAE,OAAO;IAC/D,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC;IAC5B,IAAI,MAAM,CAAC,QAAQ,KAAK,QAAQ,IAAI,MAAM,CAAC,QAAQ,KAAK,MAAM;QAAE,OAAO;IACvE,IAAI,CAAC,MAAM,CAAC,QAAQ,KAAK,OAAO,IAAI,MAAM,CAAC,QAAQ,KAAK,KAAK,CAAC,IAAI,WAAW,CAAC,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC;QAAE,OAAO;IAC3G,MAAM,IAAI,KAAK,CACd,GAAG,KAAK,qCAAqC,MAAM,CAAC,QAAQ,KAAK,MAAM,CAAC,IAAI,0CAA0C,CACtH,CAAC;AACH,CAAC;AAED
|
|
1
|
+
{"version":3,"file":"HttpTransport.js","sourceRoot":"","sources":["../../src/core/HttpTransport.ts"],"names":[],"mappings":"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"}
|
package/dist/core/Random.d.ts
CHANGED
|
@@ -60,6 +60,29 @@ export declare class Generator {
|
|
|
60
60
|
setState(state: readonly [number, number, number, number]): void;
|
|
61
61
|
private rotl;
|
|
62
62
|
}
|
|
63
|
+
/**
|
|
64
|
+
* The minimal draw surface the derived helpers (`chance`, `element`, `weighted`,
|
|
65
|
+
* `weightedKey`, `shuffle`, `int`, `range`, `normalRange`) need. `Generator` and
|
|
66
|
+
* `MersenneTwister` both satisfy it structurally, so a rule dispatched by a simulation
|
|
67
|
+
* runtime can pass its own injected, snapshot-able stream instead of touching the
|
|
68
|
+
* ambient one - the ambient stream stays the default when no source is given, and the
|
|
69
|
+
* null-reporting conventions are identical either way.
|
|
70
|
+
*
|
|
71
|
+
* @example
|
|
72
|
+
* ```ts
|
|
73
|
+
* import { Generator, Random } from '@datamoc/mw_games/core';
|
|
74
|
+
*
|
|
75
|
+
* // a journaled rule draws from its own stream, never the ambient one
|
|
76
|
+
* const stream = new Generator(99);
|
|
77
|
+
* const pick = Random.weightedKey(new Map([['a', 1], ['b', 2]]), stream);
|
|
78
|
+
* ```
|
|
79
|
+
*/
|
|
80
|
+
export interface RandomSource {
|
|
81
|
+
/** a float in [0, 1) */
|
|
82
|
+
float(): number;
|
|
83
|
+
/** an integer in [0, bound), without modulo bias */
|
|
84
|
+
int(bound: number): number;
|
|
85
|
+
}
|
|
63
86
|
/**
|
|
64
87
|
* The generator the free functions (`int`, `float`, `chance`, ...) draw from.
|
|
65
88
|
*
|
|
@@ -85,18 +108,18 @@ export declare function pop(): void;
|
|
|
85
108
|
export declare function withSeed<T>(seed: number, body: () => T): T;
|
|
86
109
|
export declare function reset(): void;
|
|
87
110
|
/** a float in [0, 1), or [0, max), or [min, max) */
|
|
88
|
-
export declare function float(min?: number, max?: number): number;
|
|
111
|
+
export declare function float(min?: number, max?: number, source?: RandomSource): number;
|
|
89
112
|
/** an integer in [0, max), or [min, max) */
|
|
90
|
-
export declare function int(min: number, max?: number): number;
|
|
113
|
+
export declare function int(min: number, max?: number, source?: RandomSource): number;
|
|
91
114
|
/** an integer in [min, max], both ends included (the usual shape for dice) */
|
|
92
|
-
export declare function range(min: number, max: number): number;
|
|
115
|
+
export declare function range(min: number, max: number, source?: RandomSource): number;
|
|
93
116
|
/**
|
|
94
117
|
* A triangular distribution over [min, max], peaking in the middle.
|
|
95
118
|
*
|
|
96
119
|
* Useful wherever a uniform roll feels wrong: damage, room sizes, item quality.
|
|
97
120
|
*/
|
|
98
|
-
export declare function normalRange(min: number, max: number): number;
|
|
99
|
-
export declare function chance(probability: number): boolean;
|
|
121
|
+
export declare function normalRange(min: number, max: number, source?: RandomSource): number;
|
|
122
|
+
export declare function chance(probability: number, source?: RandomSource): boolean;
|
|
100
123
|
/**
|
|
101
124
|
* Every "pick one" function here reports "there was nothing to pick" as `null`, never as
|
|
102
125
|
* `-1` or `undefined`.
|
|
@@ -105,14 +128,14 @@ export declare function chance(probability: number): boolean;
|
|
|
105
128
|
* which meant one call chain carried three different spellings of the same outcome and two
|
|
106
129
|
* separate hand-written translations between them. One sentinel, checked one way.
|
|
107
130
|
*/
|
|
108
|
-
/** a random element, or `null` for an empty list */
|
|
109
|
-
export declare function element<T>(items: readonly T[]): T | null;
|
|
110
|
-
/** an index into `weights` drawn in proportion to its weight, or `null` if nothing has any */
|
|
111
|
-
export declare function weighted(weights: readonly number[]): number | null;
|
|
112
|
-
/** a key from `weights`, drawn in proportion to the value it maps to, or `null` if none has any */
|
|
113
|
-
export declare function weightedKey<K>(weights: ReadonlyMap<K, number
|
|
114
|
-
/** Fisher-Yates, in place */
|
|
115
|
-
export declare function shuffle<T>(items: T[]): T[];
|
|
131
|
+
/** a random element, or `null` for an empty list; draws from `source` when given */
|
|
132
|
+
export declare function element<T>(items: readonly T[], source?: RandomSource): T | null;
|
|
133
|
+
/** an index into `weights` drawn in proportion to its weight, or `null` if nothing has any; draws from `source` when given */
|
|
134
|
+
export declare function weighted(weights: readonly number[], source?: RandomSource): number | null;
|
|
135
|
+
/** a key from `weights`, drawn in proportion to the value it maps to, or `null` if none has any; draws from `source` when given */
|
|
136
|
+
export declare function weightedKey<K>(weights: ReadonlyMap<K, number>, source?: RandomSource): K | null;
|
|
137
|
+
/** Fisher-Yates, in place; draws from `source` when given */
|
|
138
|
+
export declare function shuffle<T>(items: T[], source?: RandomSource): T[];
|
|
116
139
|
/** the engine state a `MersenneTwister` save or a named stream resumes from */
|
|
117
140
|
export interface MersenneTwisterState {
|
|
118
141
|
/** the value `seed()` was last given */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Random.d.ts","sourceRoot":"","sources":["../../src/core/Random.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AAEH;;;;;;;;;;;;GAYG;AACH,qBAAa,SAAS;IACrB,OAAO,CAAC,EAAE,CAAK;IACf,OAAO,CAAC,EAAE,CAAK;IACf,OAAO,CAAC,EAAE,CAAK;IACf,OAAO,CAAC,EAAE,CAAK;IAEf,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAEtB,YAAY,IAAI,CAAC,EAAE,MAAM,EAsBxB;IAED,yEAAyE;IACzE,UAAU,IAAI,MAAM,CAanB;IAED,oDAAoD;IACpD,KAAK,IAAI,MAAM,CAEd;IAED;;;;;OAKG;IACH,GAAG,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CASzB;IAED,8EAA8E;IAC9E,QAAQ,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAE3C;IAED,QAAQ,CAAC,KAAK,EAAE,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI,CAE/D;IAED,OAAO,CAAC,IAAI;CAGZ;AAMD;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,MAAM,IAAI,SAAS,CAElC;AAED,iEAAiE;AACjE,wBAAgB,IAAI,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAI7C;AAED,wBAAgB,GAAG,IAAI,IAAI,CAK1B;AAED,4EAA4E;AAC5E,wBAAgB,QAAQ,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,GAAG,CAAC,CAO1D;AAED,wBAAgB,KAAK,IAAI,IAAI,CAG5B;AAED,oDAAoD;AACpD,wBAAgB,KAAK,CAAC,GAAG,CAAC,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,MAAM,
|
|
1
|
+
{"version":3,"file":"Random.d.ts","sourceRoot":"","sources":["../../src/core/Random.ts"],"names":[],"mappings":"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"}
|