@rickosborne/hexgrid 2025.5.31
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/README.md +2141 -0
- package/axial-add.cjs +30 -0
- package/axial-add.cjs.map +6 -0
- package/axial-add.d.ts +6 -0
- package/axial-add.d.ts.map +1 -0
- package/axial-add.mjs +11 -0
- package/axial-add.mjs.map +6 -0
- package/axial-from-cube.cjs +33 -0
- package/axial-from-cube.cjs.map +6 -0
- package/axial-from-cube.d.ts +7 -0
- package/axial-from-cube.d.ts.map +1 -0
- package/axial-from-cube.mjs +14 -0
- package/axial-from-cube.mjs.map +6 -0
- package/axial-from-double.cjs +30 -0
- package/axial-from-double.cjs.map +6 -0
- package/axial-from-double.d.ts +5 -0
- package/axial-from-double.d.ts.map +1 -0
- package/axial-from-double.mjs +11 -0
- package/axial-from-double.mjs.map +6 -0
- package/axial-from-offset.cjs +64 -0
- package/axial-from-offset.cjs.map +6 -0
- package/axial-from-offset.d.ts +4 -0
- package/axial-from-offset.d.ts.map +1 -0
- package/axial-from-offset.mjs +45 -0
- package/axial-from-offset.mjs.map +6 -0
- package/axial-intersection.cjs +28 -0
- package/axial-intersection.cjs.map +6 -0
- package/axial-intersection.d.ts +3 -0
- package/axial-intersection.d.ts.map +1 -0
- package/axial-intersection.mjs +9 -0
- package/axial-intersection.mjs.map +6 -0
- package/axial-lerp.cjs +32 -0
- package/axial-lerp.cjs.map +6 -0
- package/axial-lerp.d.ts +3 -0
- package/axial-lerp.d.ts.map +1 -0
- package/axial-lerp.mjs +13 -0
- package/axial-lerp.mjs.map +6 -0
- package/axial-line-draw.cjs +39 -0
- package/axial-line-draw.cjs.map +6 -0
- package/axial-line-draw.d.ts +3 -0
- package/axial-line-draw.d.ts.map +1 -0
- package/axial-line-draw.mjs +20 -0
- package/axial-line-draw.mjs.map +6 -0
- package/axial-neighbor.cjs +27 -0
- package/axial-neighbor.cjs.map +6 -0
- package/axial-neighbor.d.ts +3 -0
- package/axial-neighbor.d.ts.map +1 -0
- package/axial-neighbor.mjs +8 -0
- package/axial-neighbor.mjs.map +6 -0
- package/axial-range.cjs +29 -0
- package/axial-range.cjs.map +6 -0
- package/axial-range.d.ts +3 -0
- package/axial-range.d.ts.map +1 -0
- package/axial-range.mjs +10 -0
- package/axial-range.mjs.map +6 -0
- package/axial-round.cjs +31 -0
- package/axial-round.cjs.map +6 -0
- package/axial-round.d.ts +3 -0
- package/axial-round.d.ts.map +1 -0
- package/axial-round.mjs +12 -0
- package/axial-round.mjs.map +6 -0
- package/axial-subtract.cjs +28 -0
- package/axial-subtract.cjs.map +6 -0
- package/axial-subtract.d.ts +6 -0
- package/axial-subtract.d.ts.map +1 -0
- package/axial-subtract.mjs +9 -0
- package/axial-subtract.mjs.map +6 -0
- package/axial.cjs +66 -0
- package/axial.cjs.map +6 -0
- package/axial.d.ts +83 -0
- package/axial.d.ts.map +1 -0
- package/axial.mjs +47 -0
- package/axial.mjs.map +6 -0
- package/covering-grid.cjs +78 -0
- package/covering-grid.cjs.map +6 -0
- package/covering-grid.d.ts +20 -0
- package/covering-grid.d.ts.map +1 -0
- package/covering-grid.mjs +59 -0
- package/covering-grid.mjs.map +6 -0
- package/cube-add.cjs +32 -0
- package/cube-add.cjs.map +6 -0
- package/cube-add.d.ts +6 -0
- package/cube-add.d.ts.map +1 -0
- package/cube-add.mjs +13 -0
- package/cube-add.mjs.map +6 -0
- package/cube-distance.cjs +30 -0
- package/cube-distance.cjs.map +6 -0
- package/cube-distance.d.ts +6 -0
- package/cube-distance.d.ts.map +1 -0
- package/cube-distance.mjs +11 -0
- package/cube-distance.mjs.map +6 -0
- package/cube-from-axial.cjs +34 -0
- package/cube-from-axial.cjs.map +6 -0
- package/cube-from-axial.d.ts +7 -0
- package/cube-from-axial.d.ts.map +1 -0
- package/cube-from-axial.mjs +15 -0
- package/cube-from-axial.mjs.map +6 -0
- package/cube-from-double.cjs +30 -0
- package/cube-from-double.cjs.map +6 -0
- package/cube-from-double.d.ts +5 -0
- package/cube-from-double.d.ts.map +1 -0
- package/cube-from-double.mjs +11 -0
- package/cube-from-double.mjs.map +6 -0
- package/cube-heading.cjs +54 -0
- package/cube-heading.cjs.map +6 -0
- package/cube-heading.d.ts +3 -0
- package/cube-heading.d.ts.map +1 -0
- package/cube-heading.mjs +35 -0
- package/cube-heading.mjs.map +6 -0
- package/cube-intersection.cjs +28 -0
- package/cube-intersection.cjs.map +6 -0
- package/cube-intersection.d.ts +3 -0
- package/cube-intersection.d.ts.map +1 -0
- package/cube-intersection.mjs +9 -0
- package/cube-intersection.mjs.map +6 -0
- package/cube-lerp.cjs +34 -0
- package/cube-lerp.cjs.map +6 -0
- package/cube-lerp.d.ts +3 -0
- package/cube-lerp.d.ts.map +1 -0
- package/cube-lerp.mjs +15 -0
- package/cube-lerp.mjs.map +6 -0
- package/cube-line-draw.cjs +41 -0
- package/cube-line-draw.cjs.map +6 -0
- package/cube-line-draw.d.ts +3 -0
- package/cube-line-draw.d.ts.map +1 -0
- package/cube-line-draw.mjs +22 -0
- package/cube-line-draw.mjs.map +6 -0
- package/cube-neighbor.cjs +27 -0
- package/cube-neighbor.cjs.map +6 -0
- package/cube-neighbor.d.ts +6 -0
- package/cube-neighbor.d.ts.map +1 -0
- package/cube-neighbor.mjs +8 -0
- package/cube-neighbor.mjs.map +6 -0
- package/cube-range.cjs +29 -0
- package/cube-range.cjs.map +6 -0
- package/cube-range.d.ts +3 -0
- package/cube-range.d.ts.map +1 -0
- package/cube-range.mjs +10 -0
- package/cube-range.mjs.map +6 -0
- package/cube-rotate.cjs +40 -0
- package/cube-rotate.cjs.map +6 -0
- package/cube-rotate.d.ts +4 -0
- package/cube-rotate.d.ts.map +1 -0
- package/cube-rotate.mjs +21 -0
- package/cube-rotate.mjs.map +6 -0
- package/cube-round.cjs +46 -0
- package/cube-round.cjs.map +6 -0
- package/cube-round.d.ts +3 -0
- package/cube-round.d.ts.map +1 -0
- package/cube-round.mjs +27 -0
- package/cube-round.mjs.map +6 -0
- package/cube-subtract.cjs +33 -0
- package/cube-subtract.cjs.map +6 -0
- package/cube-subtract.d.ts +3 -0
- package/cube-subtract.d.ts.map +1 -0
- package/cube-subtract.mjs +14 -0
- package/cube-subtract.mjs.map +6 -0
- package/cube.cjs +82 -0
- package/cube.cjs.map +6 -0
- package/cube.d.ts +155 -0
- package/cube.d.ts.map +1 -0
- package/cube.mjs +63 -0
- package/cube.mjs.map +6 -0
- package/double-add.cjs +37 -0
- package/double-add.cjs.map +6 -0
- package/double-add.d.ts +4 -0
- package/double-add.d.ts.map +1 -0
- package/double-add.mjs +18 -0
- package/double-add.mjs.map +6 -0
- package/double-distance.cjs +36 -0
- package/double-distance.cjs.map +6 -0
- package/double-distance.d.ts +4 -0
- package/double-distance.d.ts.map +1 -0
- package/double-distance.mjs +17 -0
- package/double-distance.mjs.map +6 -0
- package/double-from-qrs.cjs +37 -0
- package/double-from-qrs.cjs.map +6 -0
- package/double-from-qrs.d.ts +5 -0
- package/double-from-qrs.d.ts.map +1 -0
- package/double-from-qrs.mjs +18 -0
- package/double-from-qrs.mjs.map +6 -0
- package/double-neighbor.cjs +29 -0
- package/double-neighbor.cjs.map +6 -0
- package/double-neighbor.d.ts +4 -0
- package/double-neighbor.d.ts.map +1 -0
- package/double-neighbor.mjs +10 -0
- package/double-neighbor.mjs.map +6 -0
- package/double.cjs +48 -0
- package/double.cjs.map +6 -0
- package/double.d.ts +77 -0
- package/double.d.ts.map +1 -0
- package/double.mjs +28 -0
- package/double.mjs.map +6 -0
- package/hex-contains-point.cjs +99 -0
- package/hex-contains-point.cjs.map +6 -0
- package/hex-contains-point.d.ts +16 -0
- package/hex-contains-point.d.ts.map +1 -0
- package/hex-contains-point.mjs +80 -0
- package/hex-contains-point.mjs.map +6 -0
- package/hex-distance.cjs +36 -0
- package/hex-distance.cjs.map +6 -0
- package/hex-distance.d.ts +11 -0
- package/hex-distance.d.ts.map +1 -0
- package/hex-distance.mjs +17 -0
- package/hex-distance.mjs.map +6 -0
- package/hex-reachable.cjs +55 -0
- package/hex-reachable.cjs.map +6 -0
- package/hex-reachable.d.ts +14 -0
- package/hex-reachable.d.ts.map +1 -0
- package/hex-reachable.mjs +36 -0
- package/hex-reachable.mjs.map +6 -0
- package/hex-system.cjs +78 -0
- package/hex-system.cjs.map +6 -0
- package/hex-system.d.ts +44 -0
- package/hex-system.d.ts.map +1 -0
- package/hex-system.mjs +58 -0
- package/hex-system.mjs.map +6 -0
- package/hexes-within.cjs +31 -0
- package/hexes-within.cjs.map +6 -0
- package/hexes-within.d.ts +6 -0
- package/hexes-within.d.ts.map +1 -0
- package/hexes-within.mjs +12 -0
- package/hexes-within.mjs.map +6 -0
- package/index.cjs +74 -0
- package/index.cjs.map +6 -0
- package/index.d.ts +57 -0
- package/index.d.ts.map +1 -0
- package/index.mjs +57 -0
- package/index.mjs.map +6 -0
- package/lerp.cjs +28 -0
- package/lerp.cjs.map +6 -0
- package/lerp.d.ts +5 -0
- package/lerp.d.ts.map +1 -0
- package/lerp.mjs +9 -0
- package/lerp.mjs.map +6 -0
- package/offset-distance.cjs +33 -0
- package/offset-distance.cjs.map +6 -0
- package/offset-distance.d.ts +3 -0
- package/offset-distance.d.ts.map +1 -0
- package/offset-distance.mjs +14 -0
- package/offset-distance.mjs.map +6 -0
- package/offset-from-qrs.cjs +70 -0
- package/offset-from-qrs.cjs.map +6 -0
- package/offset-from-qrs.d.ts +7 -0
- package/offset-from-qrs.d.ts.map +1 -0
- package/offset-from-qrs.mjs +51 -0
- package/offset-from-qrs.mjs.map +6 -0
- package/offset-neighbor.cjs +54 -0
- package/offset-neighbor.cjs.map +6 -0
- package/offset-neighbor.d.ts +3 -0
- package/offset-neighbor.d.ts.map +1 -0
- package/offset-neighbor.mjs +35 -0
- package/offset-neighbor.mjs.map +6 -0
- package/offset.cjs +61 -0
- package/offset.cjs.map +6 -0
- package/offset.d.ts +34 -0
- package/offset.d.ts.map +1 -0
- package/offset.mjs +42 -0
- package/offset.mjs.map +6 -0
- package/orientation.cjs +54 -0
- package/orientation.cjs.map +6 -0
- package/orientation.d.ts +36 -0
- package/orientation.d.ts.map +1 -0
- package/orientation.mjs +34 -0
- package/orientation.mjs.map +6 -0
- package/package.json +398 -0
- package/pixel-from-qrs.cjs +66 -0
- package/pixel-from-qrs.cjs.map +6 -0
- package/pixel-from-qrs.d.ts +10 -0
- package/pixel-from-qrs.d.ts.map +1 -0
- package/pixel-from-qrs.mjs +47 -0
- package/pixel-from-qrs.mjs.map +6 -0
- package/point.cjs +17 -0
- package/point.cjs.map +6 -0
- package/point.d.ts +5 -0
- package/point.d.ts.map +1 -0
- package/point.mjs +1 -0
- package/point.mjs.map +6 -0
- package/qrs-eq.cjs +26 -0
- package/qrs-eq.cjs.map +6 -0
- package/qrs-eq.d.ts +3 -0
- package/qrs-eq.d.ts.map +1 -0
- package/qrs-eq.mjs +7 -0
- package/qrs-eq.mjs.map +6 -0
- package/qrs-from-double.cjs +36 -0
- package/qrs-from-double.cjs.map +6 -0
- package/qrs-from-double.d.ts +5 -0
- package/qrs-from-double.d.ts.map +1 -0
- package/qrs-from-double.mjs +17 -0
- package/qrs-from-double.mjs.map +6 -0
- package/qrs-from-pixel.cjs +50 -0
- package/qrs-from-pixel.cjs.map +6 -0
- package/qrs-from-pixel.d.ts +12 -0
- package/qrs-from-pixel.d.ts.map +1 -0
- package/qrs-from-pixel.mjs +31 -0
- package/qrs-from-pixel.mjs.map +6 -0
- package/qrs-hash-code.cjs +41 -0
- package/qrs-hash-code.cjs.map +6 -0
- package/qrs-hash-code.d.ts +7 -0
- package/qrs-hash-code.d.ts.map +1 -0
- package/qrs-hash-code.mjs +22 -0
- package/qrs-hash-code.mjs.map +6 -0
- package/qrs-intersection.cjs +44 -0
- package/qrs-intersection.cjs.map +6 -0
- package/qrs-intersection.d.ts +3 -0
- package/qrs-intersection.d.ts.map +1 -0
- package/qrs-intersection.mjs +25 -0
- package/qrs-intersection.mjs.map +6 -0
- package/qrs-range.cjs +38 -0
- package/qrs-range.cjs.map +6 -0
- package/qrs-range.d.ts +6 -0
- package/qrs-range.d.ts.map +1 -0
- package/qrs-range.mjs +19 -0
- package/qrs-range.mjs.map +6 -0
- package/qrs-ring.cjs +50 -0
- package/qrs-ring.cjs.map +6 -0
- package/qrs-ring.d.ts +3 -0
- package/qrs-ring.d.ts.map +1 -0
- package/qrs-ring.mjs +31 -0
- package/qrs-ring.mjs.map +6 -0
- package/qrs-scale.cjs +30 -0
- package/qrs-scale.cjs.map +6 -0
- package/qrs-scale.d.ts +4 -0
- package/qrs-scale.d.ts.map +1 -0
- package/qrs-scale.mjs +11 -0
- package/qrs-scale.mjs.map +6 -0
- package/qrs-spiral.cjs +36 -0
- package/qrs-spiral.cjs.map +6 -0
- package/qrs-spiral.d.ts +3 -0
- package/qrs-spiral.d.ts.map +1 -0
- package/qrs-spiral.mjs +17 -0
- package/qrs-spiral.mjs.map +6 -0
- package/qrs-subtract.cjs +31 -0
- package/qrs-subtract.cjs.map +6 -0
- package/qrs-subtract.d.ts +4 -0
- package/qrs-subtract.d.ts.map +1 -0
- package/qrs-subtract.mjs +12 -0
- package/qrs-subtract.mjs.map +6 -0
- package/qrs.cjs +28 -0
- package/qrs.cjs.map +6 -0
- package/qrs.d.ts +36 -0
- package/qrs.d.ts.map +1 -0
- package/qrs.mjs +9 -0
- package/qrs.mjs.map +6 -0
package/double.d.ts
ADDED
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
import { type DoubleHeight, type DoubleWidth } from "./hex-system.js";
|
|
2
|
+
import type { Point } from "./point.js";
|
|
3
|
+
export interface BareDouble {
|
|
4
|
+
col: number;
|
|
5
|
+
row: number;
|
|
6
|
+
}
|
|
7
|
+
export type DoubleSystem = DoubleWidth | DoubleHeight;
|
|
8
|
+
export interface DoublePoint<SystemT extends DoubleSystem> extends Point, BareDouble {
|
|
9
|
+
system: SystemT;
|
|
10
|
+
}
|
|
11
|
+
export interface DoubleHeightPoint extends DoublePoint<DoubleHeight> {
|
|
12
|
+
}
|
|
13
|
+
export interface DoubleWidthPoint extends DoublePoint<DoubleWidth> {
|
|
14
|
+
}
|
|
15
|
+
export declare const DOUBLE_H_N: Readonly<{
|
|
16
|
+
readonly col: 0;
|
|
17
|
+
readonly row: -2;
|
|
18
|
+
readonly system: "doubleH";
|
|
19
|
+
}>;
|
|
20
|
+
export declare const DOUBLE_H_NE: Readonly<{
|
|
21
|
+
readonly col: 1;
|
|
22
|
+
readonly row: -1;
|
|
23
|
+
readonly system: "doubleH";
|
|
24
|
+
}>;
|
|
25
|
+
export declare const DOUBLE_H_SE: Readonly<{
|
|
26
|
+
readonly col: 1;
|
|
27
|
+
readonly row: 1;
|
|
28
|
+
readonly system: "doubleH";
|
|
29
|
+
}>;
|
|
30
|
+
export declare const DOUBLE_H_S: Readonly<{
|
|
31
|
+
readonly col: 0;
|
|
32
|
+
readonly row: 2;
|
|
33
|
+
readonly system: "doubleH";
|
|
34
|
+
}>;
|
|
35
|
+
export declare const DOUBLE_H_SW: Readonly<{
|
|
36
|
+
readonly col: -1;
|
|
37
|
+
readonly row: 1;
|
|
38
|
+
readonly system: "doubleH";
|
|
39
|
+
}>;
|
|
40
|
+
export declare const DOUBLE_H_NW: Readonly<{
|
|
41
|
+
readonly col: -1;
|
|
42
|
+
readonly row: -1;
|
|
43
|
+
readonly system: "doubleH";
|
|
44
|
+
}>;
|
|
45
|
+
export type DoubleHeightDirection = typeof DOUBLE_H_N | typeof DOUBLE_H_NE | typeof DOUBLE_H_SE | typeof DOUBLE_H_S | typeof DOUBLE_H_SW | typeof DOUBLE_H_NW;
|
|
46
|
+
export declare const DOUBLE_W_E: Readonly<{
|
|
47
|
+
readonly col: 2;
|
|
48
|
+
readonly row: 0;
|
|
49
|
+
readonly system: "doubleW";
|
|
50
|
+
}>;
|
|
51
|
+
export declare const DOUBLE_W_SE: Readonly<{
|
|
52
|
+
readonly col: 1;
|
|
53
|
+
readonly row: 1;
|
|
54
|
+
readonly system: "doubleW";
|
|
55
|
+
}>;
|
|
56
|
+
export declare const DOUBLE_W_SW: Readonly<{
|
|
57
|
+
readonly col: -1;
|
|
58
|
+
readonly row: 1;
|
|
59
|
+
readonly system: "doubleW";
|
|
60
|
+
}>;
|
|
61
|
+
export declare const DOUBLE_W_W: Readonly<{
|
|
62
|
+
readonly col: -2;
|
|
63
|
+
readonly row: 0;
|
|
64
|
+
readonly system: "doubleW";
|
|
65
|
+
}>;
|
|
66
|
+
export declare const DOUBLE_W_NW: Readonly<{
|
|
67
|
+
readonly col: -1;
|
|
68
|
+
readonly row: 1;
|
|
69
|
+
readonly system: "doubleW";
|
|
70
|
+
}>;
|
|
71
|
+
export declare const DOUBLE_W_NE: Readonly<{
|
|
72
|
+
readonly col: 1;
|
|
73
|
+
readonly row: -1;
|
|
74
|
+
readonly system: "doubleW";
|
|
75
|
+
}>;
|
|
76
|
+
export type DoubleWidthDirection = typeof DOUBLE_W_E | typeof DOUBLE_W_SE | typeof DOUBLE_W_SW | typeof DOUBLE_W_W | typeof DOUBLE_W_NW | typeof DOUBLE_W_NE;
|
|
77
|
+
//# sourceMappingURL=double.d.ts.map
|
package/double.d.ts.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"double.d.ts","sourceRoot":"","sources":["../../../src/packages/hexgrid/double.ts"],"names":[],"mappings":"AAAA,OAAO,EAAsB,KAAK,YAAY,EAAE,KAAK,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAC1F,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAExC,MAAM,WAAW,UAAU;IAC1B,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC;CACZ;AAED,MAAM,MAAM,YAAY,GAAG,WAAW,GAAG,YAAY,CAAC;AAEtD,MAAM,WAAW,WAAW,CAAC,OAAO,SAAS,YAAY,CAAE,SAAQ,KAAK,EAAE,UAAU;IACnF,MAAM,EAAE,OAAO,CAAC;CAChB;AAED,MAAM,WAAW,iBAAkB,SAAQ,WAAW,CAAC,YAAY,CAAC;CAAG;AACvE,MAAM,WAAW,gBAAiB,SAAQ,WAAW,CAAC,WAAW,CAAC;CAAG;AAErE,eAAO,MAAM,UAAU;;;;EAA4F,CAAC;AACpH,eAAO,MAAM,WAAW;;;;EAA4F,CAAC;AACrH,eAAO,MAAM,WAAW;;;;EAA2F,CAAC;AACpH,eAAO,MAAM,UAAU;;;;EAA2F,CAAC;AACnH,eAAO,MAAM,WAAW;;;;EAA4F,CAAC;AACrH,eAAO,MAAM,WAAW;;;;EAA6F,CAAC;AAEtH,MAAM,MAAM,qBAAqB,GAAG,OAAO,UAAU,GAAG,OAAO,WAAW,GAAG,OAAO,WAAW,GAAG,OAAO,UAAU,GAAG,OAAO,WAAW,GAAG,OAAO,WAAW,CAAC;AAE9J,eAAO,MAAM,UAAU;;;;EAA0F,CAAC;AAClH,eAAO,MAAM,WAAW;;;;EAA0F,CAAC;AACnH,eAAO,MAAM,WAAW;;;;EAA2F,CAAC;AACpH,eAAO,MAAM,UAAU;;;;EAA2F,CAAC;AACnH,eAAO,MAAM,WAAW;;;;EAA2F,CAAC;AACpH,eAAO,MAAM,WAAW;;;;EAA2F,CAAC;AAEpH,MAAM,MAAM,oBAAoB,GAAG,OAAO,UAAU,GAAG,OAAO,WAAW,GAAG,OAAO,WAAW,GAAG,OAAO,UAAU,GAAG,OAAO,WAAW,GAAG,OAAO,WAAW,CAAC"}
|
package/double.mjs
ADDED
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { DOUBLE_H, DOUBLE_W } from "./hex-system.mjs";
|
|
2
|
+
const DOUBLE_H_N = Object.freeze({ col: 0, row: -2, system: DOUBLE_H });
|
|
3
|
+
const DOUBLE_H_NE = Object.freeze({ col: 1, row: -1, system: DOUBLE_H });
|
|
4
|
+
const DOUBLE_H_SE = Object.freeze({ col: 1, row: 1, system: DOUBLE_H });
|
|
5
|
+
const DOUBLE_H_S = Object.freeze({ col: 0, row: 2, system: DOUBLE_H });
|
|
6
|
+
const DOUBLE_H_SW = Object.freeze({ col: -1, row: 1, system: DOUBLE_H });
|
|
7
|
+
const DOUBLE_H_NW = Object.freeze({ col: -1, row: -1, system: DOUBLE_H });
|
|
8
|
+
const DOUBLE_W_E = Object.freeze({ col: 2, row: 0, system: DOUBLE_W });
|
|
9
|
+
const DOUBLE_W_SE = Object.freeze({ col: 1, row: 1, system: DOUBLE_W });
|
|
10
|
+
const DOUBLE_W_SW = Object.freeze({ col: -1, row: 1, system: DOUBLE_W });
|
|
11
|
+
const DOUBLE_W_W = Object.freeze({ col: -2, row: 0, system: DOUBLE_W });
|
|
12
|
+
const DOUBLE_W_NW = Object.freeze({ col: -1, row: 1, system: DOUBLE_W });
|
|
13
|
+
const DOUBLE_W_NE = Object.freeze({ col: 1, row: -1, system: DOUBLE_W });
|
|
14
|
+
export {
|
|
15
|
+
DOUBLE_H_N,
|
|
16
|
+
DOUBLE_H_NE,
|
|
17
|
+
DOUBLE_H_NW,
|
|
18
|
+
DOUBLE_H_S,
|
|
19
|
+
DOUBLE_H_SE,
|
|
20
|
+
DOUBLE_H_SW,
|
|
21
|
+
DOUBLE_W_E,
|
|
22
|
+
DOUBLE_W_NE,
|
|
23
|
+
DOUBLE_W_NW,
|
|
24
|
+
DOUBLE_W_SE,
|
|
25
|
+
DOUBLE_W_SW,
|
|
26
|
+
DOUBLE_W_W
|
|
27
|
+
};
|
|
28
|
+
//# sourceMappingURL=double.mjs.map
|
package/double.mjs.map
ADDED
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../src/packages/hexgrid/double.ts"],
|
|
4
|
+
"mappings": "AAAA,SAAS,UAAU,gBAAqD;AAiBjE,MAAM,aAAa,OAAO,OAAO,EAAE,KAAK,GAAG,KAAK,IAAI,QAAQ,SAAS,CAAsC;AAC3G,MAAM,cAAc,OAAO,OAAO,EAAE,KAAK,GAAG,KAAK,IAAI,QAAQ,SAAS,CAAsC;AAC5G,MAAM,cAAc,OAAO,OAAO,EAAE,KAAK,GAAG,KAAK,GAAG,QAAQ,SAAS,CAAsC;AAC3G,MAAM,aAAa,OAAO,OAAO,EAAE,KAAK,GAAG,KAAK,GAAG,QAAQ,SAAS,CAAsC;AAC1G,MAAM,cAAc,OAAO,OAAO,EAAE,KAAK,IAAI,KAAK,GAAG,QAAQ,SAAS,CAAsC;AAC5G,MAAM,cAAc,OAAO,OAAO,EAAE,KAAK,IAAI,KAAK,IAAI,QAAQ,SAAS,CAAsC;AAI7G,MAAM,aAAa,OAAO,OAAO,EAAE,KAAK,GAAG,KAAK,GAAG,QAAQ,SAAS,CAAqC;AACzG,MAAM,cAAc,OAAO,OAAO,EAAE,KAAK,GAAG,KAAK,GAAG,QAAQ,SAAS,CAAqC;AAC1G,MAAM,cAAc,OAAO,OAAO,EAAE,KAAK,IAAI,KAAK,GAAG,QAAQ,SAAS,CAAqC;AAC3G,MAAM,aAAa,OAAO,OAAO,EAAE,KAAK,IAAI,KAAK,GAAG,QAAQ,SAAS,CAAqC;AAC1G,MAAM,cAAc,OAAO,OAAO,EAAE,KAAK,IAAI,KAAK,GAAG,QAAQ,SAAS,CAAqC;AAC3G,MAAM,cAAc,OAAO,OAAO,EAAE,KAAK,GAAG,KAAK,IAAI,QAAQ,SAAS,CAAqC;",
|
|
5
|
+
"names": []
|
|
6
|
+
}
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
+
var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
|
|
7
|
+
var __export = (target, all) => {
|
|
8
|
+
for (var name in all)
|
|
9
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
10
|
+
};
|
|
11
|
+
var __copyProps = (to, from, except, desc) => {
|
|
12
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
13
|
+
for (let key of __getOwnPropNames(from))
|
|
14
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
15
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
16
|
+
}
|
|
17
|
+
return to;
|
|
18
|
+
};
|
|
19
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
20
|
+
var hex_contains_point_exports = {};
|
|
21
|
+
__export(hex_contains_point_exports, {
|
|
22
|
+
hexContainsChecker: () => hexContainsChecker,
|
|
23
|
+
hexCornersContainPoint: () => hexCornersContainPoint,
|
|
24
|
+
triangleContainsChecker: () => triangleContainsChecker,
|
|
25
|
+
triangleContainsPoint: () => triangleContainsPoint
|
|
26
|
+
});
|
|
27
|
+
module.exports = __toCommonJS(hex_contains_point_exports);
|
|
28
|
+
var import_foundation = require("@rickosborne/foundation");
|
|
29
|
+
const hexContainsChecker = /* @__PURE__ */ __name((corners) => {
|
|
30
|
+
const { maxX, maxY, minX, minY, xs } = corners.slice(1).reduce((p, { x: rx, y: ry }) => {
|
|
31
|
+
if (rx < p.minX) p.minX = rx;
|
|
32
|
+
if (rx > p.maxX) p.maxX = rx;
|
|
33
|
+
if (ry < p.minY) p.minY = ry;
|
|
34
|
+
if (ry > p.maxY) p.maxY = ry;
|
|
35
|
+
p.xs.upsert(rx, (e) => rx + (e ?? 0));
|
|
36
|
+
return p;
|
|
37
|
+
}, { minX: corners[0].x, maxX: corners[0].x, minY: corners[0].y, maxY: corners[0].y, xs: import_foundation.BetterMap.empty() });
|
|
38
|
+
const isFlat = xs.get(minX) === 1;
|
|
39
|
+
let rectMinX = isFlat ? Infinity : minX;
|
|
40
|
+
let rectMaxX = isFlat ? -Infinity : maxX;
|
|
41
|
+
let rectMinY = isFlat ? minY : Infinity;
|
|
42
|
+
let rectMaxY = isFlat ? maxY : -Infinity;
|
|
43
|
+
const triangleCheckers = [];
|
|
44
|
+
for (const corner of corners) {
|
|
45
|
+
const { x: cx, y: cy } = corner;
|
|
46
|
+
if (isFlat && (cy === minY || cy === maxY)) {
|
|
47
|
+
if (cx < rectMinX) rectMinX = cx;
|
|
48
|
+
if (cx > rectMaxX) rectMaxX = cx;
|
|
49
|
+
} else if (!isFlat && (cx === minX || cx === maxX)) {
|
|
50
|
+
if (cy < rectMinY) rectMinY = cy;
|
|
51
|
+
if (cy > rectMaxY) rectMaxY = cy;
|
|
52
|
+
} else if (cx < rectMinX) {
|
|
53
|
+
triangleCheckers.push(triangleContainsChecker([corner, { x: rectMinX, y: maxY }, { x: rectMinX, y: minY }]));
|
|
54
|
+
} else if (cx > rectMaxX) {
|
|
55
|
+
triangleCheckers.push(triangleContainsChecker([corner, { x: rectMaxX, y: maxY }, { x: rectMaxX, y: minY }]));
|
|
56
|
+
} else if (cy < rectMinY) {
|
|
57
|
+
triangleCheckers.push(triangleContainsChecker([corner, { x: rectMinX, y: rectMinY }, { x: rectMaxX, y: rectMinY }]));
|
|
58
|
+
} else if (cy > rectMaxY) {
|
|
59
|
+
triangleCheckers.push(triangleContainsChecker([corner, { x: rectMinX, y: rectMaxY }, { x: rectMaxX, y: rectMaxY }]));
|
|
60
|
+
} else {
|
|
61
|
+
throw new Error("Odd hex corners?");
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
return (xy) => {
|
|
65
|
+
const { x, y } = xy;
|
|
66
|
+
if (x < minX || x > maxX || y < minY || y > maxY) {
|
|
67
|
+
return false;
|
|
68
|
+
}
|
|
69
|
+
if (x >= rectMinX && x <= rectMaxX && y >= rectMinY && y <= rectMaxY) {
|
|
70
|
+
return true;
|
|
71
|
+
}
|
|
72
|
+
return triangleCheckers.some((checkTriangle) => checkTriangle(xy));
|
|
73
|
+
};
|
|
74
|
+
}, "hexContainsChecker");
|
|
75
|
+
const hexCornersContainPoint = /* @__PURE__ */ __name((corners, xy) => {
|
|
76
|
+
return hexContainsChecker(corners)(xy);
|
|
77
|
+
}, "hexCornersContainPoint");
|
|
78
|
+
const triangleContainsChecker = /* @__PURE__ */ __name((triangle) => {
|
|
79
|
+
const [{ x: x1, y: y1 }, { x: x2, y: y2 }, { x: x3, y: y3 }] = triangle;
|
|
80
|
+
const x1x3 = x1 - x3;
|
|
81
|
+
const x3x2 = x3 - x2;
|
|
82
|
+
const y2y3 = y2 - y3;
|
|
83
|
+
const y3y1 = y3 - y1;
|
|
84
|
+
const d = y2y3 * x1x3 + x3x2 * (y1 - y3);
|
|
85
|
+
const y2y3d = y2y3 / d;
|
|
86
|
+
const x3x2d = x3x2 / d;
|
|
87
|
+
const y3y1d = y3y1 / d;
|
|
88
|
+
const x1x3d = x1x3 / d;
|
|
89
|
+
return ({ x: px, y: py }) => {
|
|
90
|
+
const a = y2y3d * (px - x3) + x3x2d * (py - y3);
|
|
91
|
+
const b = y3y1d * (px - x3) + x1x3d * (py - y3);
|
|
92
|
+
const c = 1 - a - b;
|
|
93
|
+
return a >= 0 && a <= 1 && b >= 0 && b <= 1 && c >= 0 && c <= 1;
|
|
94
|
+
};
|
|
95
|
+
}, "triangleContainsChecker");
|
|
96
|
+
const triangleContainsPoint = /* @__PURE__ */ __name((triangle, point) => {
|
|
97
|
+
return triangleContainsChecker(triangle)(point);
|
|
98
|
+
}, "triangleContainsPoint");
|
|
99
|
+
//# sourceMappingURL=hex-contains-point.cjs.map
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../src/packages/hexgrid/hex-contains-point.ts"],
|
|
4
|
+
"mappings": "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",
|
|
5
|
+
"names": []
|
|
6
|
+
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { type PointXY } from "./orientation.js";
|
|
2
|
+
/**
|
|
3
|
+
* Build a function which can check to see if the given pixel coordinates
|
|
4
|
+
* would be contained by the hex described by the corners. To be useful,
|
|
5
|
+
* cache this function, and then call it with pixel coordinates translated
|
|
6
|
+
* to the original hex's center.
|
|
7
|
+
*/
|
|
8
|
+
export declare const hexContainsChecker: (corners: PointXY[]) => (xy: PointXY) => boolean;
|
|
9
|
+
export declare const hexCornersContainPoint: (corners: PointXY[], xy: PointXY) => boolean;
|
|
10
|
+
/**
|
|
11
|
+
* Generate a function which can check to see if a given point is inside
|
|
12
|
+
* the triangle described by the three points.
|
|
13
|
+
*/
|
|
14
|
+
export declare const triangleContainsChecker: (triangle: [PointXY, PointXY, PointXY]) => (xy: PointXY) => boolean;
|
|
15
|
+
export declare const triangleContainsPoint: (triangle: [PointXY, PointXY, PointXY], point: PointXY) => boolean;
|
|
16
|
+
//# sourceMappingURL=hex-contains-point.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hex-contains-point.d.ts","sourceRoot":"","sources":["../../../src/packages/hexgrid/hex-contains-point.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAEhD;;;;;GAKG;AACH,eAAO,MAAM,kBAAkB,GAAI,SAAS,OAAO,EAAE,KAAG,CAAC,EAAE,EAAE,OAAO,KAAK,OAoDxE,CAAC;AAEF,eAAO,MAAM,sBAAsB,GAAI,SAAS,OAAO,EAAE,EAAE,IAAI,OAAO,KAAG,OAExE,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,uBAAuB,GAAI,UAAU,CAAE,OAAO,EAAE,OAAO,EAAE,OAAO,CAAE,KAAG,CAAC,EAAE,EAAE,OAAO,KAAK,OAiBlG,CAAC;AAEF,eAAO,MAAM,qBAAqB,GAAI,UAAU,CAAE,OAAO,EAAE,OAAO,EAAE,OAAO,CAAE,EAAE,OAAO,OAAO,KAAG,OAG/F,CAAC"}
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
var __defProp = Object.defineProperty;
|
|
2
|
+
var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
|
|
3
|
+
import { BetterMap } from "@rickosborne/foundation";
|
|
4
|
+
const hexContainsChecker = /* @__PURE__ */ __name((corners) => {
|
|
5
|
+
const { maxX, maxY, minX, minY, xs } = corners.slice(1).reduce((p, { x: rx, y: ry }) => {
|
|
6
|
+
if (rx < p.minX) p.minX = rx;
|
|
7
|
+
if (rx > p.maxX) p.maxX = rx;
|
|
8
|
+
if (ry < p.minY) p.minY = ry;
|
|
9
|
+
if (ry > p.maxY) p.maxY = ry;
|
|
10
|
+
p.xs.upsert(rx, (e) => rx + (e ?? 0));
|
|
11
|
+
return p;
|
|
12
|
+
}, { minX: corners[0].x, maxX: corners[0].x, minY: corners[0].y, maxY: corners[0].y, xs: BetterMap.empty() });
|
|
13
|
+
const isFlat = xs.get(minX) === 1;
|
|
14
|
+
let rectMinX = isFlat ? Infinity : minX;
|
|
15
|
+
let rectMaxX = isFlat ? -Infinity : maxX;
|
|
16
|
+
let rectMinY = isFlat ? minY : Infinity;
|
|
17
|
+
let rectMaxY = isFlat ? maxY : -Infinity;
|
|
18
|
+
const triangleCheckers = [];
|
|
19
|
+
for (const corner of corners) {
|
|
20
|
+
const { x: cx, y: cy } = corner;
|
|
21
|
+
if (isFlat && (cy === minY || cy === maxY)) {
|
|
22
|
+
if (cx < rectMinX) rectMinX = cx;
|
|
23
|
+
if (cx > rectMaxX) rectMaxX = cx;
|
|
24
|
+
} else if (!isFlat && (cx === minX || cx === maxX)) {
|
|
25
|
+
if (cy < rectMinY) rectMinY = cy;
|
|
26
|
+
if (cy > rectMaxY) rectMaxY = cy;
|
|
27
|
+
} else if (cx < rectMinX) {
|
|
28
|
+
triangleCheckers.push(triangleContainsChecker([corner, { x: rectMinX, y: maxY }, { x: rectMinX, y: minY }]));
|
|
29
|
+
} else if (cx > rectMaxX) {
|
|
30
|
+
triangleCheckers.push(triangleContainsChecker([corner, { x: rectMaxX, y: maxY }, { x: rectMaxX, y: minY }]));
|
|
31
|
+
} else if (cy < rectMinY) {
|
|
32
|
+
triangleCheckers.push(triangleContainsChecker([corner, { x: rectMinX, y: rectMinY }, { x: rectMaxX, y: rectMinY }]));
|
|
33
|
+
} else if (cy > rectMaxY) {
|
|
34
|
+
triangleCheckers.push(triangleContainsChecker([corner, { x: rectMinX, y: rectMaxY }, { x: rectMaxX, y: rectMaxY }]));
|
|
35
|
+
} else {
|
|
36
|
+
throw new Error("Odd hex corners?");
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
return (xy) => {
|
|
40
|
+
const { x, y } = xy;
|
|
41
|
+
if (x < minX || x > maxX || y < minY || y > maxY) {
|
|
42
|
+
return false;
|
|
43
|
+
}
|
|
44
|
+
if (x >= rectMinX && x <= rectMaxX && y >= rectMinY && y <= rectMaxY) {
|
|
45
|
+
return true;
|
|
46
|
+
}
|
|
47
|
+
return triangleCheckers.some((checkTriangle) => checkTriangle(xy));
|
|
48
|
+
};
|
|
49
|
+
}, "hexContainsChecker");
|
|
50
|
+
const hexCornersContainPoint = /* @__PURE__ */ __name((corners, xy) => {
|
|
51
|
+
return hexContainsChecker(corners)(xy);
|
|
52
|
+
}, "hexCornersContainPoint");
|
|
53
|
+
const triangleContainsChecker = /* @__PURE__ */ __name((triangle) => {
|
|
54
|
+
const [{ x: x1, y: y1 }, { x: x2, y: y2 }, { x: x3, y: y3 }] = triangle;
|
|
55
|
+
const x1x3 = x1 - x3;
|
|
56
|
+
const x3x2 = x3 - x2;
|
|
57
|
+
const y2y3 = y2 - y3;
|
|
58
|
+
const y3y1 = y3 - y1;
|
|
59
|
+
const d = y2y3 * x1x3 + x3x2 * (y1 - y3);
|
|
60
|
+
const y2y3d = y2y3 / d;
|
|
61
|
+
const x3x2d = x3x2 / d;
|
|
62
|
+
const y3y1d = y3y1 / d;
|
|
63
|
+
const x1x3d = x1x3 / d;
|
|
64
|
+
return ({ x: px, y: py }) => {
|
|
65
|
+
const a = y2y3d * (px - x3) + x3x2d * (py - y3);
|
|
66
|
+
const b = y3y1d * (px - x3) + x1x3d * (py - y3);
|
|
67
|
+
const c = 1 - a - b;
|
|
68
|
+
return a >= 0 && a <= 1 && b >= 0 && b <= 1 && c >= 0 && c <= 1;
|
|
69
|
+
};
|
|
70
|
+
}, "triangleContainsChecker");
|
|
71
|
+
const triangleContainsPoint = /* @__PURE__ */ __name((triangle, point) => {
|
|
72
|
+
return triangleContainsChecker(triangle)(point);
|
|
73
|
+
}, "triangleContainsPoint");
|
|
74
|
+
export {
|
|
75
|
+
hexContainsChecker,
|
|
76
|
+
hexCornersContainPoint,
|
|
77
|
+
triangleContainsChecker,
|
|
78
|
+
triangleContainsPoint
|
|
79
|
+
};
|
|
80
|
+
//# sourceMappingURL=hex-contains-point.mjs.map
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../src/packages/hexgrid/hex-contains-point.ts"],
|
|
4
|
+
"mappings": "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",
|
|
5
|
+
"names": []
|
|
6
|
+
}
|
package/hex-distance.cjs
ADDED
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
+
var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
|
|
7
|
+
var __export = (target, all) => {
|
|
8
|
+
for (var name in all)
|
|
9
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
10
|
+
};
|
|
11
|
+
var __copyProps = (to, from, except, desc) => {
|
|
12
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
13
|
+
for (let key of __getOwnPropNames(from))
|
|
14
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
15
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
16
|
+
}
|
|
17
|
+
return to;
|
|
18
|
+
};
|
|
19
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
20
|
+
var hex_distance_exports = {};
|
|
21
|
+
__export(hex_distance_exports, {
|
|
22
|
+
hexDistance: () => hexDistance,
|
|
23
|
+
hexEuclidDistance: () => hexEuclidDistance
|
|
24
|
+
});
|
|
25
|
+
module.exports = __toCommonJS(hex_distance_exports);
|
|
26
|
+
const hexDistance = /* @__PURE__ */ __name((left, right) => {
|
|
27
|
+
const q = left.q - right.q;
|
|
28
|
+
const r = left.r - right.r;
|
|
29
|
+
return Math.max(Math.abs(q), Math.abs(r), Math.abs(q + r));
|
|
30
|
+
}, "hexDistance");
|
|
31
|
+
const hexEuclidDistance = /* @__PURE__ */ __name((left, right) => {
|
|
32
|
+
const q = left.q - right.q;
|
|
33
|
+
const r = left.r - right.r;
|
|
34
|
+
return Math.sqrt(q * q + r * r + q * r);
|
|
35
|
+
}, "hexEuclidDistance");
|
|
36
|
+
//# sourceMappingURL=hex-distance.cjs.map
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../src/packages/hexgrid/hex-distance.ts"],
|
|
4
|
+
"mappings": ";;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAKO,MAAM,cAAc,wBAAC,MAAoB,UAAgC;AAC/E,QAAM,IAAI,KAAK,IAAI,MAAM;AACzB,QAAM,IAAI,KAAK,IAAI,MAAM;AACzB,SAAO,KAAK,IAAI,KAAK,IAAI,CAAC,GAAG,KAAK,IAAI,CAAC,GAAG,KAAK,IAAI,IAAI,CAAC,CAAC;AAC1D,GAJ2B;AAUpB,MAAM,oBAAoB,wBAAC,MAAoB,UAAgC;AACrF,QAAM,IAAI,KAAK,IAAI,MAAM;AACzB,QAAM,IAAI,KAAK,IAAI,MAAM;AACzB,SAAO,KAAK,KAAM,IAAI,IAAM,IAAI,IAAM,IAAI,CAAE;AAC7C,GAJiC;",
|
|
5
|
+
"names": []
|
|
6
|
+
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { BareQRSPoint } from "./qrs.js";
|
|
2
|
+
/**
|
|
3
|
+
* Calculate the Manhattan distance between two hex points.
|
|
4
|
+
*/
|
|
5
|
+
export declare const hexDistance: (left: BareQRSPoint, right: BareQRSPoint) => number;
|
|
6
|
+
/**
|
|
7
|
+
* Euclidean distance between two hex points.
|
|
8
|
+
* @see {@link https://doi.org/10.1117/1.JEI.22.1.010502 | Storage and addressing scheme for practical hexagonal image processing}
|
|
9
|
+
*/
|
|
10
|
+
export declare const hexEuclidDistance: (left: BareQRSPoint, right: BareQRSPoint) => number;
|
|
11
|
+
//# sourceMappingURL=hex-distance.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hex-distance.d.ts","sourceRoot":"","sources":["../../../src/packages/hexgrid/hex-distance.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAE7C;;GAEG;AACH,eAAO,MAAM,WAAW,GAAI,MAAM,YAAY,EAAE,OAAO,YAAY,KAAG,MAIrE,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,iBAAiB,GAAI,MAAM,YAAY,EAAE,OAAO,YAAY,KAAG,MAI3E,CAAC"}
|
package/hex-distance.mjs
ADDED
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
var __defProp = Object.defineProperty;
|
|
2
|
+
var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
|
|
3
|
+
const hexDistance = /* @__PURE__ */ __name((left, right) => {
|
|
4
|
+
const q = left.q - right.q;
|
|
5
|
+
const r = left.r - right.r;
|
|
6
|
+
return Math.max(Math.abs(q), Math.abs(r), Math.abs(q + r));
|
|
7
|
+
}, "hexDistance");
|
|
8
|
+
const hexEuclidDistance = /* @__PURE__ */ __name((left, right) => {
|
|
9
|
+
const q = left.q - right.q;
|
|
10
|
+
const r = left.r - right.r;
|
|
11
|
+
return Math.sqrt(q * q + r * r + q * r);
|
|
12
|
+
}, "hexEuclidDistance");
|
|
13
|
+
export {
|
|
14
|
+
hexDistance,
|
|
15
|
+
hexEuclidDistance
|
|
16
|
+
};
|
|
17
|
+
//# sourceMappingURL=hex-distance.mjs.map
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../src/packages/hexgrid/hex-distance.ts"],
|
|
4
|
+
"mappings": ";;AAKO,MAAM,cAAc,wBAAC,MAAoB,UAAgC;AAC/E,QAAM,IAAI,KAAK,IAAI,MAAM;AACzB,QAAM,IAAI,KAAK,IAAI,MAAM;AACzB,SAAO,KAAK,IAAI,KAAK,IAAI,CAAC,GAAG,KAAK,IAAI,CAAC,GAAG,KAAK,IAAI,IAAI,CAAC,CAAC;AAC1D,GAJ2B;AAUpB,MAAM,oBAAoB,wBAAC,MAAoB,UAAgC;AACrF,QAAM,IAAI,KAAK,IAAI,MAAM;AACzB,QAAM,IAAI,KAAK,IAAI,MAAM;AACzB,SAAO,KAAK,KAAM,IAAI,IAAM,IAAI,IAAM,IAAI,CAAE;AAC7C,GAJiC;",
|
|
5
|
+
"names": []
|
|
6
|
+
}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
+
var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
|
|
7
|
+
var __export = (target, all) => {
|
|
8
|
+
for (var name in all)
|
|
9
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
10
|
+
};
|
|
11
|
+
var __copyProps = (to, from, except, desc) => {
|
|
12
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
13
|
+
for (let key of __getOwnPropNames(from))
|
|
14
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
15
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
16
|
+
}
|
|
17
|
+
return to;
|
|
18
|
+
};
|
|
19
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
20
|
+
var hex_reachable_exports = {};
|
|
21
|
+
__export(hex_reachable_exports, {
|
|
22
|
+
hexReachable: () => hexReachable
|
|
23
|
+
});
|
|
24
|
+
module.exports = __toCommonJS(hex_reachable_exports);
|
|
25
|
+
var import_foundation = require("@rickosborne/foundation");
|
|
26
|
+
const hexReachable = /* @__PURE__ */ __name((start, steps, directions, adder, identity, isBlocked, onPoint) => {
|
|
27
|
+
const visited = /* @__PURE__ */ new Set();
|
|
28
|
+
visited.add(identity(start));
|
|
29
|
+
const reachable = [];
|
|
30
|
+
reachable.push({ distance: 0, point: start });
|
|
31
|
+
const fringes = [];
|
|
32
|
+
fringes.push([start]);
|
|
33
|
+
const memoizedIsBlocked = (0, import_foundation.memoizeBinary)(isBlocked);
|
|
34
|
+
const memoizedIdentity = (0, import_foundation.memoizeUnary)(identity);
|
|
35
|
+
for (let distance = 1; distance <= steps; distance++) {
|
|
36
|
+
const out = [];
|
|
37
|
+
fringes.push(out);
|
|
38
|
+
for (let prior of fringes[distance - 1]) {
|
|
39
|
+
for (let direction of directions) {
|
|
40
|
+
const point = adder(prior, direction);
|
|
41
|
+
const id = memoizedIdentity(point);
|
|
42
|
+
if (!visited.has(id) && !memoizedIsBlocked(point, id)) {
|
|
43
|
+
visited.add(id);
|
|
44
|
+
out.push(point);
|
|
45
|
+
reachable.push({ direction, distance, point, prior });
|
|
46
|
+
if (onPoint != null) {
|
|
47
|
+
onPoint(point, distance, prior, direction);
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
return reachable;
|
|
54
|
+
}, "hexReachable");
|
|
55
|
+
//# sourceMappingURL=hex-reachable.cjs.map
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../src/packages/hexgrid/hex-reachable.ts"],
|
|
4
|
+
"mappings": ";;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,wBAA4C;AAerC,MAAM,eAAe,wBAC3B,OACA,OACA,YACA,OACA,UACA,WACA,YACuB;AACvB,QAAM,UAAU,oBAAI,IAAQ;AAC5B,UAAQ,IAAI,SAAS,KAAK,CAAC;AAC3B,QAAM,YAA+B,CAAC;AACtC,YAAU,KAAK,EAAE,UAAU,GAAG,OAAO,MAAM,CAAC;AAC5C,QAAM,UAAiB,CAAC;AACxB,UAAQ,KAAK,CAAE,KAAM,CAAC;AACtB,QAAM,wBAAoB,iCAAc,SAAS;AACjD,QAAM,uBAAmB,gCAAa,QAAQ;AAC9C,WAAS,WAAW,GAAG,YAAY,OAAO,YAAY;AACrD,UAAM,MAAW,CAAC;AAClB,YAAQ,KAAK,GAAG;AAChB,aAAS,SAAS,QAAQ,WAAW,CAAC,GAAI;AACzC,eAAS,aAAa,YAAY;AACjC,cAAM,QAAQ,MAAM,OAAO,SAAS;AACpC,cAAM,KAAK,iBAAiB,KAAK;AACjC,YAAI,CAAC,QAAQ,IAAI,EAAE,KAAK,CAAC,kBAAkB,OAAO,EAAE,GAAG;AACtD,kBAAQ,IAAI,EAAE;AACd,cAAI,KAAK,KAAK;AACd,oBAAU,KAAK,EAAE,WAAW,UAAU,OAAO,MAAM,CAAC;AACpD,cAAI,WAAW,MAAM;AACpB,oBAAQ,OAAO,UAAU,OAAO,SAAS;AAAA,UAC1C;AAAA,QACD;AAAA,MACD;AAAA,IACD;AAAA,EACD;AACA,SAAO;AACR,GApC4B;",
|
|
5
|
+
"names": []
|
|
6
|
+
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { Point } from "./point.js";
|
|
2
|
+
export type HexReachable<P extends Point> = {
|
|
3
|
+
direction?: undefined;
|
|
4
|
+
distance: 0;
|
|
5
|
+
point: P;
|
|
6
|
+
prior?: undefined;
|
|
7
|
+
} | {
|
|
8
|
+
direction: Readonly<P>;
|
|
9
|
+
distance: Exclude<number, 0>;
|
|
10
|
+
point: P;
|
|
11
|
+
prior: P;
|
|
12
|
+
};
|
|
13
|
+
export declare const hexReachable: <P extends Point, Id extends string | number>(start: P, steps: number, directions: Readonly<Readonly<P>[]>, adder: (left: P, right: P) => P, identity: (point: P) => Id, isBlocked: (point: P, id: Id) => boolean, onPoint?: ((point: P, distance: number, prior: P, direction: Readonly<P>) => void) | undefined) => HexReachable<P>[];
|
|
14
|
+
//# sourceMappingURL=hex-reachable.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hex-reachable.d.ts","sourceRoot":"","sources":["../../../src/packages/hexgrid/hex-reachable.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAExC,MAAM,MAAM,YAAY,CAAC,CAAC,SAAS,KAAK,IAAI;IAC3C,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB,QAAQ,EAAE,CAAC,CAAC;IACZ,KAAK,EAAE,CAAC,CAAC;IACT,KAAK,CAAC,EAAE,SAAS,CAAC;CAClB,GAAG;IACH,SAAS,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC;IACvB,QAAQ,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;IAC7B,KAAK,EAAE,CAAC,CAAC;IACT,KAAK,EAAE,CAAC,CAAC;CACT,CAAA;AAED,eAAO,MAAM,YAAY,GAAI,CAAC,SAAS,KAAK,EAAE,EAAE,SAAS,MAAM,GAAG,MAAM,EACvE,OAAO,CAAC,EACR,OAAO,MAAM,EACb,YAAY,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,EACnC,OAAO,CAAC,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,KAAK,CAAC,EAC/B,UAAU,CAAC,KAAK,EAAE,CAAC,KAAK,EAAE,EAC1B,WAAW,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,KAAK,OAAO,EACxC,UAAU,CAAC,CAAC,KAAK,EAAE,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,GAAG,SAAS,KAC5F,YAAY,CAAC,CAAC,CAAC,EA4BjB,CAAC"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
var __defProp = Object.defineProperty;
|
|
2
|
+
var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
|
|
3
|
+
import { memoizeBinary, memoizeUnary } from "@rickosborne/foundation";
|
|
4
|
+
const hexReachable = /* @__PURE__ */ __name((start, steps, directions, adder, identity, isBlocked, onPoint) => {
|
|
5
|
+
const visited = /* @__PURE__ */ new Set();
|
|
6
|
+
visited.add(identity(start));
|
|
7
|
+
const reachable = [];
|
|
8
|
+
reachable.push({ distance: 0, point: start });
|
|
9
|
+
const fringes = [];
|
|
10
|
+
fringes.push([start]);
|
|
11
|
+
const memoizedIsBlocked = memoizeBinary(isBlocked);
|
|
12
|
+
const memoizedIdentity = memoizeUnary(identity);
|
|
13
|
+
for (let distance = 1; distance <= steps; distance++) {
|
|
14
|
+
const out = [];
|
|
15
|
+
fringes.push(out);
|
|
16
|
+
for (let prior of fringes[distance - 1]) {
|
|
17
|
+
for (let direction of directions) {
|
|
18
|
+
const point = adder(prior, direction);
|
|
19
|
+
const id = memoizedIdentity(point);
|
|
20
|
+
if (!visited.has(id) && !memoizedIsBlocked(point, id)) {
|
|
21
|
+
visited.add(id);
|
|
22
|
+
out.push(point);
|
|
23
|
+
reachable.push({ direction, distance, point, prior });
|
|
24
|
+
if (onPoint != null) {
|
|
25
|
+
onPoint(point, distance, prior, direction);
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
return reachable;
|
|
32
|
+
}, "hexReachable");
|
|
33
|
+
export {
|
|
34
|
+
hexReachable
|
|
35
|
+
};
|
|
36
|
+
//# sourceMappingURL=hex-reachable.mjs.map
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../src/packages/hexgrid/hex-reachable.ts"],
|
|
4
|
+
"mappings": ";;AAAA,SAAS,eAAe,oBAAoB;AAerC,MAAM,eAAe,wBAC3B,OACA,OACA,YACA,OACA,UACA,WACA,YACuB;AACvB,QAAM,UAAU,oBAAI,IAAQ;AAC5B,UAAQ,IAAI,SAAS,KAAK,CAAC;AAC3B,QAAM,YAA+B,CAAC;AACtC,YAAU,KAAK,EAAE,UAAU,GAAG,OAAO,MAAM,CAAC;AAC5C,QAAM,UAAiB,CAAC;AACxB,UAAQ,KAAK,CAAE,KAAM,CAAC;AACtB,QAAM,oBAAoB,cAAc,SAAS;AACjD,QAAM,mBAAmB,aAAa,QAAQ;AAC9C,WAAS,WAAW,GAAG,YAAY,OAAO,YAAY;AACrD,UAAM,MAAW,CAAC;AAClB,YAAQ,KAAK,GAAG;AAChB,aAAS,SAAS,QAAQ,WAAW,CAAC,GAAI;AACzC,eAAS,aAAa,YAAY;AACjC,cAAM,QAAQ,MAAM,OAAO,SAAS;AACpC,cAAM,KAAK,iBAAiB,KAAK;AACjC,YAAI,CAAC,QAAQ,IAAI,EAAE,KAAK,CAAC,kBAAkB,OAAO,EAAE,GAAG;AACtD,kBAAQ,IAAI,EAAE;AACd,cAAI,KAAK,KAAK;AACd,oBAAU,KAAK,EAAE,WAAW,UAAU,OAAO,MAAM,CAAC;AACpD,cAAI,WAAW,MAAM;AACpB,oBAAQ,OAAO,UAAU,OAAO,SAAS;AAAA,UAC1C;AAAA,QACD;AAAA,MACD;AAAA,IACD;AAAA,EACD;AACA,SAAO;AACR,GApC4B;",
|
|
5
|
+
"names": []
|
|
6
|
+
}
|
package/hex-system.cjs
ADDED
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
+
var __export = (target, all) => {
|
|
7
|
+
for (var name in all)
|
|
8
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
9
|
+
};
|
|
10
|
+
var __copyProps = (to, from, except, desc) => {
|
|
11
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
12
|
+
for (let key of __getOwnPropNames(from))
|
|
13
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
14
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
15
|
+
}
|
|
16
|
+
return to;
|
|
17
|
+
};
|
|
18
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
|
+
var hex_system_exports = {};
|
|
20
|
+
__export(hex_system_exports, {
|
|
21
|
+
AXIAL: () => AXIAL,
|
|
22
|
+
CCW_120: () => CCW_120,
|
|
23
|
+
CCW_180: () => CCW_180,
|
|
24
|
+
CCW_240: () => CCW_240,
|
|
25
|
+
CCW_300: () => CCW_300,
|
|
26
|
+
CCW_60: () => CCW_60,
|
|
27
|
+
CUBE: () => CUBE,
|
|
28
|
+
CW_120: () => CW_120,
|
|
29
|
+
CW_180: () => CW_180,
|
|
30
|
+
CW_240: () => CW_240,
|
|
31
|
+
CW_300: () => CW_300,
|
|
32
|
+
CW_60: () => CW_60,
|
|
33
|
+
DOUBLE_H: () => DOUBLE_H,
|
|
34
|
+
DOUBLE_W: () => DOUBLE_W,
|
|
35
|
+
EVEN_Q: () => EVEN_Q,
|
|
36
|
+
EVEN_R: () => EVEN_R,
|
|
37
|
+
HEX_SYSTEMS: () => HEX_SYSTEMS,
|
|
38
|
+
ODD_Q: () => ODD_Q,
|
|
39
|
+
ODD_R: () => ODD_R,
|
|
40
|
+
SQRT_3: () => SQRT_3,
|
|
41
|
+
SQRT_3_2: () => SQRT_3_2,
|
|
42
|
+
SQRT_3_3: () => SQRT_3_3,
|
|
43
|
+
TWO_PI: () => TWO_PI
|
|
44
|
+
});
|
|
45
|
+
module.exports = __toCommonJS(hex_system_exports);
|
|
46
|
+
const AXIAL = "axial";
|
|
47
|
+
const CUBE = "cube";
|
|
48
|
+
const DOUBLE_H = "doubleH";
|
|
49
|
+
const DOUBLE_W = "doubleW";
|
|
50
|
+
const ODD_R = "oddR";
|
|
51
|
+
const ODD_Q = "oddQ";
|
|
52
|
+
const EVEN_R = "evenR";
|
|
53
|
+
const EVEN_Q = "evenQ";
|
|
54
|
+
const HEX_SYSTEMS = Object.freeze([
|
|
55
|
+
AXIAL,
|
|
56
|
+
CUBE,
|
|
57
|
+
DOUBLE_H,
|
|
58
|
+
DOUBLE_W,
|
|
59
|
+
EVEN_Q,
|
|
60
|
+
EVEN_R,
|
|
61
|
+
ODD_Q,
|
|
62
|
+
ODD_R
|
|
63
|
+
]);
|
|
64
|
+
const SQRT_3 = Math.sqrt(3);
|
|
65
|
+
const SQRT_3_2 = SQRT_3 / 2;
|
|
66
|
+
const SQRT_3_3 = SQRT_3 / 3;
|
|
67
|
+
const TWO_PI = Math.PI * 2;
|
|
68
|
+
const CW_60 = 60;
|
|
69
|
+
const CW_120 = 120;
|
|
70
|
+
const CW_180 = 180;
|
|
71
|
+
const CW_240 = 240;
|
|
72
|
+
const CW_300 = 300;
|
|
73
|
+
const CCW_60 = CW_300;
|
|
74
|
+
const CCW_120 = CW_240;
|
|
75
|
+
const CCW_180 = CW_180;
|
|
76
|
+
const CCW_240 = CW_120;
|
|
77
|
+
const CCW_300 = CW_60;
|
|
78
|
+
//# sourceMappingURL=hex-system.cjs.map
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../src/packages/hexgrid/hex-system.ts"],
|
|
4
|
+
"mappings": ";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAO,MAAM,QAAQ;AACd,MAAM,OAAO;AACb,MAAM,WAAW;AACjB,MAAM,WAAW;AACjB,MAAM,QAAQ;AACd,MAAM,QAAQ;AACd,MAAM,SAAS;AACf,MAAM,SAAS;AAwBf,MAAM,cAAoC,OAAO,OAAO;AAAA,EAC9D;AAAA,EAAO;AAAA,EAAM;AAAA,EAAU;AAAA,EAAU;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAAO;AACzD,CAAC;AAEM,MAAM,SAAS,KAAK,KAAK,CAAC;AAC1B,MAAM,WAAW,SAAS;AAC1B,MAAM,WAAW,SAAS;AAE1B,MAAM,SAAS,KAAK,KAAK;AAEzB,MAAM,QAAQ;AACd,MAAM,SAAS;AACf,MAAM,SAAS;AACf,MAAM,SAAS;AACf,MAAM,SAAS;AAEf,MAAM,SAAS;AACf,MAAM,UAAU;AAChB,MAAM,UAAU;AAChB,MAAM,UAAU;AAChB,MAAM,UAAU;",
|
|
5
|
+
"names": []
|
|
6
|
+
}
|