@lagless/2d-map-generator 0.0.48

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.
Files changed (124) hide show
  1. package/LICENSE +26 -0
  2. package/README.md +373 -0
  3. package/dist/index.d.ts +31 -0
  4. package/dist/index.d.ts.map +1 -0
  5. package/dist/index.js +27 -0
  6. package/dist/lib/collision/rapier-provider.d.ts +54 -0
  7. package/dist/lib/collision/rapier-provider.d.ts.map +1 -0
  8. package/dist/lib/collision/rapier-provider.js +67 -0
  9. package/dist/lib/collision/spatial-grid-provider.d.ts +19 -0
  10. package/dist/lib/collision/spatial-grid-provider.d.ts.map +1 -0
  11. package/dist/lib/collision/spatial-grid-provider.js +127 -0
  12. package/dist/lib/core/generated-map.d.ts +14 -0
  13. package/dist/lib/core/generated-map.d.ts.map +1 -0
  14. package/dist/lib/core/generated-map.js +17 -0
  15. package/dist/lib/core/map-dimensions.d.ts +8 -0
  16. package/dist/lib/core/map-dimensions.d.ts.map +1 -0
  17. package/dist/lib/core/map-dimensions.js +7 -0
  18. package/dist/lib/core/map-generator.d.ts +14 -0
  19. package/dist/lib/core/map-generator.d.ts.map +1 -0
  20. package/dist/lib/core/map-generator.js +124 -0
  21. package/dist/lib/core/terrain-query.d.ts +17 -0
  22. package/dist/lib/core/terrain-query.d.ts.map +1 -0
  23. package/dist/lib/core/terrain-query.js +54 -0
  24. package/dist/lib/features/biome-feature.d.ts +10 -0
  25. package/dist/lib/features/biome-feature.d.ts.map +1 -0
  26. package/dist/lib/features/biome-feature.js +9 -0
  27. package/dist/lib/features/bridge-feature.d.ts +10 -0
  28. package/dist/lib/features/bridge-feature.d.ts.map +1 -0
  29. package/dist/lib/features/bridge-feature.js +55 -0
  30. package/dist/lib/features/grass-feature.d.ts +10 -0
  31. package/dist/lib/features/grass-feature.d.ts.map +1 -0
  32. package/dist/lib/features/grass-feature.js +36 -0
  33. package/dist/lib/features/ground-patch-feature.d.ts +10 -0
  34. package/dist/lib/features/ground-patch-feature.d.ts.map +1 -0
  35. package/dist/lib/features/ground-patch-feature.js +57 -0
  36. package/dist/lib/features/lake-feature.d.ts +10 -0
  37. package/dist/lib/features/lake-feature.d.ts.map +1 -0
  38. package/dist/lib/features/lake-feature.js +65 -0
  39. package/dist/lib/features/object-placement-feature.d.ts +18 -0
  40. package/dist/lib/features/object-placement-feature.d.ts.map +1 -0
  41. package/dist/lib/features/object-placement-feature.js +229 -0
  42. package/dist/lib/features/places-feature.d.ts +10 -0
  43. package/dist/lib/features/places-feature.d.ts.map +1 -0
  44. package/dist/lib/features/places-feature.js +14 -0
  45. package/dist/lib/features/river-feature.d.ts +10 -0
  46. package/dist/lib/features/river-feature.d.ts.map +1 -0
  47. package/dist/lib/features/river-feature.js +122 -0
  48. package/dist/lib/features/shore-feature.d.ts +10 -0
  49. package/dist/lib/features/shore-feature.d.ts.map +1 -0
  50. package/dist/lib/features/shore-feature.js +20 -0
  51. package/dist/lib/math/catmull-rom.d.ts +12 -0
  52. package/dist/lib/math/catmull-rom.d.ts.map +1 -0
  53. package/dist/lib/math/catmull-rom.js +42 -0
  54. package/dist/lib/math/collision-test.d.ts +14 -0
  55. package/dist/lib/math/collision-test.d.ts.map +1 -0
  56. package/dist/lib/math/collision-test.js +29 -0
  57. package/dist/lib/math/jagged-aabb.d.ts +12 -0
  58. package/dist/lib/math/jagged-aabb.d.ts.map +1 -0
  59. package/dist/lib/math/jagged-aabb.js +47 -0
  60. package/dist/lib/math/polygon-utils.d.ts +19 -0
  61. package/dist/lib/math/polygon-utils.d.ts.map +1 -0
  62. package/dist/lib/math/polygon-utils.js +79 -0
  63. package/dist/lib/math/river-polygon.d.ts +12 -0
  64. package/dist/lib/math/river-polygon.d.ts.map +1 -0
  65. package/dist/lib/math/river-polygon.js +84 -0
  66. package/dist/lib/math/spline.d.ts +15 -0
  67. package/dist/lib/math/spline.d.ts.map +1 -0
  68. package/dist/lib/math/spline.js +127 -0
  69. package/dist/lib/physics/canopy-sensor-tag.d.ts +2 -0
  70. package/dist/lib/physics/canopy-sensor-tag.d.ts.map +1 -0
  71. package/dist/lib/physics/canopy-sensor-tag.js +1 -0
  72. package/dist/lib/physics/create-map-colliders.d.ts +12 -0
  73. package/dist/lib/physics/create-map-colliders.d.ts.map +1 -0
  74. package/dist/lib/physics/create-map-colliders.js +29 -0
  75. package/dist/lib/presets/standard-biome.d.ts +3 -0
  76. package/dist/lib/presets/standard-biome.d.ts.map +1 -0
  77. package/dist/lib/presets/standard-biome.js +9 -0
  78. package/dist/lib/presets/standard-map.d.ts +6 -0
  79. package/dist/lib/presets/standard-map.d.ts.map +1 -0
  80. package/dist/lib/presets/standard-map.js +61 -0
  81. package/dist/lib/presets/standard-objects.d.ts +6 -0
  82. package/dist/lib/presets/standard-objects.d.ts.map +1 -0
  83. package/dist/lib/presets/standard-objects.js +25 -0
  84. package/dist/lib/types/collision-provider.d.ts +8 -0
  85. package/dist/lib/types/collision-provider.d.ts.map +1 -0
  86. package/dist/lib/types/collision-provider.js +1 -0
  87. package/dist/lib/types/feature-configs.d.ts +139 -0
  88. package/dist/lib/types/feature-configs.d.ts.map +1 -0
  89. package/dist/lib/types/feature-configs.js +8 -0
  90. package/dist/lib/types/feature.d.ts +31 -0
  91. package/dist/lib/types/feature.d.ts.map +1 -0
  92. package/dist/lib/types/feature.js +12 -0
  93. package/dist/lib/types/generated-map.d.ts +10 -0
  94. package/dist/lib/types/generated-map.d.ts.map +1 -0
  95. package/dist/lib/types/generated-map.js +1 -0
  96. package/dist/lib/types/generated-river.d.ts +23 -0
  97. package/dist/lib/types/generated-river.d.ts.map +1 -0
  98. package/dist/lib/types/generated-river.js +1 -0
  99. package/dist/lib/types/geometry.d.ts +30 -0
  100. package/dist/lib/types/geometry.d.ts.map +1 -0
  101. package/dist/lib/types/geometry.js +5 -0
  102. package/dist/lib/types/index.d.ts +16 -0
  103. package/dist/lib/types/index.d.ts.map +1 -0
  104. package/dist/lib/types/index.js +5 -0
  105. package/dist/lib/types/map-generator-config.d.ts +8 -0
  106. package/dist/lib/types/map-generator-config.d.ts.map +1 -0
  107. package/dist/lib/types/map-generator-config.js +1 -0
  108. package/dist/lib/types/object-def.d.ts +58 -0
  109. package/dist/lib/types/object-def.d.ts.map +1 -0
  110. package/dist/lib/types/object-def.js +5 -0
  111. package/dist/lib/types/placed-object.d.ts +19 -0
  112. package/dist/lib/types/placed-object.d.ts.map +1 -0
  113. package/dist/lib/types/placed-object.js +10 -0
  114. package/dist/lib/types/prng-interface.d.ts +14 -0
  115. package/dist/lib/types/prng-interface.d.ts.map +1 -0
  116. package/dist/lib/types/prng-interface.js +1 -0
  117. package/dist/lib/utils/extract-canopy-zones.d.ts +22 -0
  118. package/dist/lib/utils/extract-canopy-zones.d.ts.map +1 -0
  119. package/dist/lib/utils/extract-canopy-zones.js +34 -0
  120. package/dist/lib/utils/sort-placed-objects.d.ts +3 -0
  121. package/dist/lib/utils/sort-placed-objects.d.ts.map +1 -0
  122. package/dist/lib/utils/sort-placed-objects.js +3 -0
  123. package/dist/tsconfig.lib.tsbuildinfo +1 -0
  124. package/package.json +42 -0
@@ -0,0 +1,139 @@
1
+ import type { ReadonlyVec2, Polygon, AABB } from './geometry.js';
2
+ import type { PlacedObject, TerrainZone } from './placed-object.js';
3
+ import type { MapObjectRegistry, GroundPatchDef } from './object-def.js';
4
+ import type { GeneratedRiver, GeneratedGroundPatch } from './generated-river.js';
5
+ export interface BiomeConfig {
6
+ background: number;
7
+ water: number;
8
+ waterRipple: number;
9
+ beach: number;
10
+ riverbank: number;
11
+ grass: number;
12
+ underground: number;
13
+ custom?: Record<string, number>;
14
+ }
15
+ export type BiomeOutput = BiomeConfig;
16
+ export interface ShoreConfig {
17
+ inset: number;
18
+ divisions: number;
19
+ variation: number;
20
+ }
21
+ export interface ShoreOutput {
22
+ readonly polygon: Polygon;
23
+ readonly bounds: AABB;
24
+ }
25
+ export interface GrassConfig {
26
+ inset: number;
27
+ variation: number;
28
+ }
29
+ export interface GrassOutput {
30
+ readonly polygon: Polygon;
31
+ readonly bounds: AABB;
32
+ readonly area: number;
33
+ }
34
+ export interface RiverConfig {
35
+ weights: Array<{
36
+ weight: number;
37
+ widths: number[];
38
+ }>;
39
+ subdivisionPasses: number;
40
+ masks: Array<{
41
+ pos?: ReadonlyVec2;
42
+ rad: number;
43
+ }>;
44
+ }
45
+ export interface RiverOutput {
46
+ readonly rivers: ReadonlyArray<GeneratedRiver>;
47
+ readonly normalRivers: ReadonlyArray<GeneratedRiver>;
48
+ }
49
+ export interface LakeConfig {
50
+ lakes: Array<{
51
+ odds: number;
52
+ innerRad: number;
53
+ outerRad: number;
54
+ spawnBound: {
55
+ pos: ReadonlyVec2;
56
+ rad: number;
57
+ };
58
+ }>;
59
+ }
60
+ export interface LakeOutput {
61
+ readonly lakes: ReadonlyArray<GeneratedRiver>;
62
+ }
63
+ export interface BridgeConfig {
64
+ bridgeTypes: {
65
+ medium: number;
66
+ large: number;
67
+ xlarge: number;
68
+ };
69
+ maxPerSize: {
70
+ medium: number;
71
+ large: number;
72
+ xlarge: number;
73
+ };
74
+ }
75
+ export interface BridgeOutput {
76
+ readonly bridges: ReadonlyArray<PlacedObject>;
77
+ }
78
+ export declare enum PlacementKind {
79
+ Location = 0,
80
+ Fixed = 1,
81
+ Random = 2,
82
+ Density = 3
83
+ }
84
+ export interface LocationStage {
85
+ kind: PlacementKind.Location;
86
+ typeId: number;
87
+ pos: ReadonlyVec2;
88
+ rad: number;
89
+ optional: boolean;
90
+ maxAttempts?: number;
91
+ }
92
+ export interface FixedStage {
93
+ kind: PlacementKind.Fixed;
94
+ typeId: number;
95
+ count: number;
96
+ important?: boolean;
97
+ terrainZone?: TerrainZone;
98
+ }
99
+ export interface RandomStage {
100
+ kind: PlacementKind.Random;
101
+ spawns: number[];
102
+ choose: number;
103
+ terrainZone?: TerrainZone;
104
+ }
105
+ export interface DensityStage {
106
+ kind: PlacementKind.Density;
107
+ typeId: number;
108
+ density: number;
109
+ terrainZone?: TerrainZone;
110
+ }
111
+ export type PlacementStage = LocationStage | FixedStage | RandomStage | DensityStage;
112
+ export interface ObjectPlacementConfig {
113
+ registry: MapObjectRegistry;
114
+ stages: PlacementStage[];
115
+ }
116
+ export interface ObjectPlacementOutput {
117
+ readonly objects: ReadonlyArray<PlacedObject>;
118
+ }
119
+ export interface GroundPatchConfig {
120
+ registry?: MapObjectRegistry;
121
+ extraPatches?: GroundPatchDef[];
122
+ }
123
+ export interface GroundPatchOutput {
124
+ readonly patches: ReadonlyArray<GeneratedGroundPatch>;
125
+ }
126
+ export interface PlacesConfig {
127
+ places: Array<{
128
+ name: string;
129
+ pos: ReadonlyVec2;
130
+ }>;
131
+ }
132
+ export interface PlacesOutput {
133
+ readonly places: ReadonlyArray<{
134
+ name: string;
135
+ x: number;
136
+ y: number;
137
+ }>;
138
+ }
139
+ //# sourceMappingURL=feature-configs.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"feature-configs.d.ts","sourceRoot":"","sources":["../../../src/lib/types/feature-configs.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ // --- Object Placement ---
2
+ export var PlacementKind;
3
+ (function (PlacementKind) {
4
+ PlacementKind[PlacementKind["Location"] = 0] = "Location";
5
+ PlacementKind[PlacementKind["Fixed"] = 1] = "Fixed";
6
+ PlacementKind[PlacementKind["Random"] = 2] = "Random";
7
+ PlacementKind[PlacementKind["Density"] = 3] = "Density";
8
+ })(PlacementKind || (PlacementKind = {}));
@@ -0,0 +1,31 @@
1
+ import type { ReadonlyVec2 } from './geometry.js';
2
+ import type { ISeededRandom } from './prng-interface.js';
3
+ import type { ICollisionProvider } from './collision-provider.js';
4
+ export declare enum FeatureId {
5
+ Biome = 0,
6
+ Shore = 1,
7
+ Grass = 2,
8
+ River = 3,
9
+ Lake = 4,
10
+ Bridge = 5,
11
+ ObjectPlacement = 6,
12
+ GroundPatch = 7,
13
+ Places = 8
14
+ }
15
+ export interface IMapFeature<TConfig = unknown, TOutput = unknown> {
16
+ readonly id: FeatureId;
17
+ readonly requires: readonly FeatureId[];
18
+ generate(ctx: GenerationContext, config: TConfig): TOutput;
19
+ }
20
+ export interface GenerationContext {
21
+ readonly width: number;
22
+ readonly height: number;
23
+ readonly center: ReadonlyVec2;
24
+ readonly random: ISeededRandom;
25
+ readonly collision: ICollisionProvider;
26
+ get<T>(feature: {
27
+ readonly id: FeatureId;
28
+ }): T;
29
+ hasFeature(featureId: FeatureId): boolean;
30
+ }
31
+ //# sourceMappingURL=feature.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"feature.d.ts","sourceRoot":"","sources":["../../../src/lib/types/feature.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAClD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAElE,oBAAY,SAAS;IACnB,KAAK,IAAI;IACT,KAAK,IAAI;IACT,KAAK,IAAI;IACT,KAAK,IAAI;IACT,IAAI,IAAI;IACR,MAAM,IAAI;IACV,eAAe,IAAI;IACnB,WAAW,IAAI;IACf,MAAM,IAAI;CACX;AAED,MAAM,WAAW,WAAW,CAAC,OAAO,GAAG,OAAO,EAAE,OAAO,GAAG,OAAO;IAC/D,QAAQ,CAAC,EAAE,EAAE,SAAS,CAAC;IACvB,QAAQ,CAAC,QAAQ,EAAE,SAAS,SAAS,EAAE,CAAC;IACxC,QAAQ,CAAC,GAAG,EAAE,iBAAiB,EAAE,MAAM,EAAE,OAAO,GAAG,OAAO,CAAC;CAC5D;AAED,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,MAAM,EAAE,YAAY,CAAC;IAC9B,QAAQ,CAAC,MAAM,EAAE,aAAa,CAAC;IAC/B,QAAQ,CAAC,SAAS,EAAE,kBAAkB,CAAC;IAEvC,GAAG,CAAC,CAAC,EAAE,OAAO,EAAE;QAAE,QAAQ,CAAC,EAAE,EAAE,SAAS,CAAA;KAAE,GAAG,CAAC,CAAC;IAC/C,UAAU,CAAC,SAAS,EAAE,SAAS,GAAG,OAAO,CAAC;CAC3C"}
@@ -0,0 +1,12 @@
1
+ export var FeatureId;
2
+ (function (FeatureId) {
3
+ FeatureId[FeatureId["Biome"] = 0] = "Biome";
4
+ FeatureId[FeatureId["Shore"] = 1] = "Shore";
5
+ FeatureId[FeatureId["Grass"] = 2] = "Grass";
6
+ FeatureId[FeatureId["River"] = 3] = "River";
7
+ FeatureId[FeatureId["Lake"] = 4] = "Lake";
8
+ FeatureId[FeatureId["Bridge"] = 5] = "Bridge";
9
+ FeatureId[FeatureId["ObjectPlacement"] = 6] = "ObjectPlacement";
10
+ FeatureId[FeatureId["GroundPatch"] = 7] = "GroundPatch";
11
+ FeatureId[FeatureId["Places"] = 8] = "Places";
12
+ })(FeatureId || (FeatureId = {}));
@@ -0,0 +1,10 @@
1
+ import { FeatureId } from './feature.js';
2
+ export interface IGeneratedMap {
3
+ readonly width: number;
4
+ readonly height: number;
5
+ readonly gridSize: number;
6
+ get<T>(feature: {
7
+ readonly id: FeatureId;
8
+ }): T | undefined;
9
+ }
10
+ //# sourceMappingURL=generated-map.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generated-map.d.ts","sourceRoot":"","sources":["../../../src/lib/types/generated-map.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAEzC,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,GAAG,CAAC,CAAC,EAAE,OAAO,EAAE;QAAE,QAAQ,CAAC,EAAE,EAAE,SAAS,CAAA;KAAE,GAAG,CAAC,GAAG,SAAS,CAAC;CAC5D"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,23 @@
1
+ import type { ReadonlyVec2, AABB, Polygon } from './geometry.js';
2
+ export interface GeneratedRiver {
3
+ readonly splinePoints: ReadonlyVec2[];
4
+ readonly waterWidth: number;
5
+ readonly shoreWidth: number;
6
+ readonly looped: boolean;
7
+ readonly center: ReadonlyVec2;
8
+ readonly waterPoly: Polygon;
9
+ readonly shorePoly: Polygon;
10
+ readonly aabb: AABB;
11
+ }
12
+ export interface GeneratedGroundPatch {
13
+ readonly minX: number;
14
+ readonly minY: number;
15
+ readonly maxX: number;
16
+ readonly maxY: number;
17
+ readonly color: number;
18
+ readonly roughness: number;
19
+ readonly offsetDist: number;
20
+ readonly order: 0 | 1;
21
+ readonly useAsMapShape: boolean;
22
+ }
23
+ //# sourceMappingURL=generated-river.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generated-river.d.ts","sourceRoot":"","sources":["../../../src/lib/types/generated-river.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAEjE,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,YAAY,EAAE,YAAY,EAAE,CAAC;IACtC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;IACzB,QAAQ,CAAC,MAAM,EAAE,YAAY,CAAC;IAC9B,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;IAC5B,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;IAC5B,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC;CACrB;AAED,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,CAAC;IACtB,QAAQ,CAAC,aAAa,EAAE,OAAO,CAAC;CACjC"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,30 @@
1
+ /**
2
+ * Immutable 2D vector for output types. Prevents accidental mutation
3
+ * of shared polygon data between features.
4
+ * Accepts IVector2Like from @lagless/math via structural typing.
5
+ */
6
+ export type ReadonlyVec2 = {
7
+ readonly x: number;
8
+ readonly y: number;
9
+ };
10
+ export interface AABB {
11
+ readonly min: ReadonlyVec2;
12
+ readonly max: ReadonlyVec2;
13
+ }
14
+ export interface Polygon {
15
+ readonly points: ReadonlyVec2[];
16
+ readonly count: number;
17
+ }
18
+ export declare enum ShapeType {
19
+ Circle = 0,
20
+ Cuboid = 1
21
+ }
22
+ export type MapCollisionShape = {
23
+ type: ShapeType.Circle;
24
+ radius: number;
25
+ } | {
26
+ type: ShapeType.Cuboid;
27
+ halfWidth: number;
28
+ halfHeight: number;
29
+ };
30
+ //# sourceMappingURL=geometry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"geometry.d.ts","sourceRoot":"","sources":["../../../src/lib/types/geometry.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,MAAM,MAAM,YAAY,GAAG;IAAE,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC;AAEtE,MAAM,WAAW,IAAI;IACnB,QAAQ,CAAC,GAAG,EAAE,YAAY,CAAC;IAC3B,QAAQ,CAAC,GAAG,EAAE,YAAY,CAAC;CAC5B;AAED,MAAM,WAAW,OAAO;IACtB,QAAQ,CAAC,MAAM,EAAE,YAAY,EAAE,CAAC;IAChC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;CACxB;AAED,oBAAY,SAAS;IAAG,MAAM,IAAI;IAAE,MAAM,IAAI;CAAE;AAEhD,MAAM,MAAM,iBAAiB,GACzB;IAAE,IAAI,EAAE,SAAS,CAAC,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GAC1C;IAAE,IAAI,EAAE,SAAS,CAAC,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAE,CAAC"}
@@ -0,0 +1,5 @@
1
+ export var ShapeType;
2
+ (function (ShapeType) {
3
+ ShapeType[ShapeType["Circle"] = 0] = "Circle";
4
+ ShapeType[ShapeType["Cuboid"] = 1] = "Cuboid";
5
+ })(ShapeType || (ShapeType = {}));
@@ -0,0 +1,16 @@
1
+ export type { ReadonlyVec2, AABB, Polygon, MapCollisionShape } from './geometry.js';
2
+ export { ShapeType } from './geometry.js';
3
+ export type { ISeededRandom } from './prng-interface.js';
4
+ export type { ICollisionProvider } from './collision-provider.js';
5
+ export type { IMapFeature, GenerationContext } from './feature.js';
6
+ export { FeatureId } from './feature.js';
7
+ export type { IGeneratedMap } from './generated-map.js';
8
+ export { TerrainZone } from './placed-object.js';
9
+ export type { PlacedObject } from './placed-object.js';
10
+ export { RenderLayer } from './object-def.js';
11
+ export type { MapObjectDef, MapColliderDef, MapVisualDef, ChildObjectDef, GroundPatchDef, MapDisplayDef, MapObjectRegistry, } from './object-def.js';
12
+ export type { MapGeneratorConfig } from './map-generator-config.js';
13
+ export type { GeneratedRiver, GeneratedGroundPatch } from './generated-river.js';
14
+ export { PlacementKind } from './feature-configs.js';
15
+ export type { BiomeConfig, BiomeOutput, ShoreConfig, ShoreOutput, GrassConfig, GrassOutput, RiverConfig, RiverOutput, LakeConfig, LakeOutput, BridgeConfig, BridgeOutput, LocationStage, FixedStage, RandomStage, DensityStage, PlacementStage, ObjectPlacementConfig, ObjectPlacementOutput, GroundPatchConfig, GroundPatchOutput, PlacesConfig, PlacesOutput, } from './feature-configs.js';
16
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/lib/types/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,YAAY,EAAE,IAAI,EAAE,OAAO,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AACpF,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAC1C,YAAY,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACzD,YAAY,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAClE,YAAY,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AACnE,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACzC,YAAY,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACxD,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,YAAY,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAC9C,YAAY,EACV,YAAY,EACZ,cAAc,EACd,YAAY,EACZ,cAAc,EACd,cAAc,EACd,aAAa,EACb,iBAAiB,GAClB,MAAM,iBAAiB,CAAC;AACzB,YAAY,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AACpE,YAAY,EAAE,cAAc,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AACjF,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,YAAY,EACV,WAAW,EACX,WAAW,EACX,WAAW,EACX,WAAW,EACX,WAAW,EACX,WAAW,EACX,WAAW,EACX,WAAW,EACX,UAAU,EACV,UAAU,EACV,YAAY,EACZ,YAAY,EACZ,aAAa,EACb,UAAU,EACV,WAAW,EACX,YAAY,EACZ,cAAc,EACd,qBAAqB,EACrB,qBAAqB,EACrB,iBAAiB,EACjB,iBAAiB,EACjB,YAAY,EACZ,YAAY,GACb,MAAM,sBAAsB,CAAC"}
@@ -0,0 +1,5 @@
1
+ export { ShapeType } from './geometry.js';
2
+ export { FeatureId } from './feature.js';
3
+ export { TerrainZone } from './placed-object.js';
4
+ export { RenderLayer } from './object-def.js';
5
+ export { PlacementKind } from './feature-configs.js';
@@ -0,0 +1,8 @@
1
+ export interface MapGeneratorConfig {
2
+ baseWidth: number;
3
+ baseHeight: number;
4
+ scale: number;
5
+ extension: number;
6
+ gridSize?: number;
7
+ }
8
+ //# sourceMappingURL=map-generator-config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"map-generator-config.d.ts","sourceRoot":"","sources":["../../../src/lib/types/map-generator-config.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,kBAAkB;IACjC,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,58 @@
1
+ import type { ReadonlyVec2, MapCollisionShape } from './geometry.js';
2
+ export declare enum RenderLayer {
3
+ Ground = 0,
4
+ Canopy = 1
5
+ }
6
+ export interface MapColliderDef {
7
+ shape: MapCollisionShape;
8
+ offsetX?: number;
9
+ offsetY?: number;
10
+ isSensor?: boolean;
11
+ tag?: number;
12
+ collisionGroup?: number;
13
+ }
14
+ export interface MapVisualDef {
15
+ texture: string;
16
+ layer: RenderLayer;
17
+ offsetX?: number;
18
+ offsetY?: number;
19
+ anchorX?: number;
20
+ anchorY?: number;
21
+ }
22
+ export interface MapObjectDef {
23
+ typeId: number;
24
+ colliders: MapColliderDef[];
25
+ visuals: MapVisualDef[];
26
+ scaleRange: [number, number];
27
+ orientations?: number[];
28
+ groundPatches?: GroundPatchDef[];
29
+ mapDisplay?: MapDisplayDef;
30
+ children?: ChildObjectDef[];
31
+ /** When true, sensor colliders are included in placement AABB computation. */
32
+ includeSensorsInBounds?: boolean;
33
+ }
34
+ export interface ChildObjectDef {
35
+ typeId: number;
36
+ offset: ReadonlyVec2;
37
+ scale: number;
38
+ ori: number;
39
+ inheritOri?: boolean;
40
+ }
41
+ export interface GroundPatchDef {
42
+ offset: ReadonlyVec2;
43
+ halfExtents: ReadonlyVec2;
44
+ color: number;
45
+ roughness: number;
46
+ offsetDist: number;
47
+ order: 0 | 1;
48
+ useAsMapShape: boolean;
49
+ }
50
+ export interface MapDisplayDef {
51
+ shapes: Array<{
52
+ collider: MapCollisionShape;
53
+ color: number;
54
+ scale: number;
55
+ }>;
56
+ }
57
+ export type MapObjectRegistry = ReadonlyMap<number, MapObjectDef>;
58
+ //# sourceMappingURL=object-def.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"object-def.d.ts","sourceRoot":"","sources":["../../../src/lib/types/object-def.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAErE,oBAAY,WAAW;IAAG,MAAM,IAAI;IAAE,MAAM,IAAI;CAAE;AAElD,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,iBAAiB,CAAC;IACzB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,WAAW,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,cAAc,EAAE,CAAC;IAC5B,OAAO,EAAE,YAAY,EAAE,CAAC;IACxB,UAAU,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC7B,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,aAAa,CAAC,EAAE,cAAc,EAAE,CAAC;IACjC,UAAU,CAAC,EAAE,aAAa,CAAC;IAC3B,QAAQ,CAAC,EAAE,cAAc,EAAE,CAAC;IAC5B,8EAA8E;IAC9E,sBAAsB,CAAC,EAAE,OAAO,CAAC;CAClC;AAED,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,YAAY,CAAC;IACrB,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;IACZ,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;AAED,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,YAAY,CAAC;IACrB,WAAW,EAAE,YAAY,CAAC;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,CAAC,GAAG,CAAC,CAAC;IACb,aAAa,EAAE,OAAO,CAAC;CACxB;AAED,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,KAAK,CAAC;QAAE,QAAQ,EAAE,iBAAiB,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CAC9E;AAED,MAAM,MAAM,iBAAiB,GAAG,WAAW,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC"}
@@ -0,0 +1,5 @@
1
+ export var RenderLayer;
2
+ (function (RenderLayer) {
3
+ RenderLayer[RenderLayer["Ground"] = 0] = "Ground";
4
+ RenderLayer[RenderLayer["Canopy"] = 1] = "Canopy";
5
+ })(RenderLayer || (RenderLayer = {}));
@@ -0,0 +1,19 @@
1
+ export declare enum TerrainZone {
2
+ Grass = 0,
3
+ Beach = 1,
4
+ RiverShore = 2,
5
+ River = 3,
6
+ Lake = 4,
7
+ Bridge = 5,
8
+ WaterEdge = 6
9
+ }
10
+ export interface PlacedObject {
11
+ readonly typeId: number;
12
+ readonly posX: number;
13
+ readonly posY: number;
14
+ readonly rotation: number;
15
+ readonly scale: number;
16
+ readonly terrainZone: TerrainZone;
17
+ readonly children: ReadonlyArray<PlacedObject>;
18
+ }
19
+ //# sourceMappingURL=placed-object.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"placed-object.d.ts","sourceRoot":"","sources":["../../../src/lib/types/placed-object.ts"],"names":[],"mappings":"AAAA,oBAAY,WAAW;IACrB,KAAK,IAAI;IACT,KAAK,IAAI;IACT,UAAU,IAAI;IACd,KAAK,IAAI;IACT,IAAI,IAAI;IACR,MAAM,IAAI;IACV,SAAS,IAAI;CACd;AAED,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,WAAW,EAAE,WAAW,CAAC;IAClC,QAAQ,CAAC,QAAQ,EAAE,aAAa,CAAC,YAAY,CAAC,CAAC;CAChD"}
@@ -0,0 +1,10 @@
1
+ export var TerrainZone;
2
+ (function (TerrainZone) {
3
+ TerrainZone[TerrainZone["Grass"] = 0] = "Grass";
4
+ TerrainZone[TerrainZone["Beach"] = 1] = "Beach";
5
+ TerrainZone[TerrainZone["RiverShore"] = 2] = "RiverShore";
6
+ TerrainZone[TerrainZone["River"] = 3] = "River";
7
+ TerrainZone[TerrainZone["Lake"] = 4] = "Lake";
8
+ TerrainZone[TerrainZone["Bridge"] = 5] = "Bridge";
9
+ TerrainZone[TerrainZone["WaterEdge"] = 6] = "WaterEdge";
10
+ })(TerrainZone || (TerrainZone = {}));
@@ -0,0 +1,14 @@
1
+ /**
2
+ * Minimal seeded random interface.
3
+ * Intentionally minimal — @lagless/core PRNG has additional methods (getFloat53)
4
+ * that satisfy this interface via structural typing.
5
+ */
6
+ export interface ISeededRandom {
7
+ /** Returns a float in [0, 1) */
8
+ getFloat(): number;
9
+ /** Returns an integer in [from, to) */
10
+ getRandomInt(from: number, to: number): number;
11
+ /** Returns an integer in [from, to] */
12
+ getRandomIntInclusive(from: number, to: number): number;
13
+ }
14
+ //# sourceMappingURL=prng-interface.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prng-interface.d.ts","sourceRoot":"","sources":["../../../src/lib/types/prng-interface.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,MAAM,WAAW,aAAa;IAC5B,gCAAgC;IAChC,QAAQ,IAAI,MAAM,CAAC;IACnB,uCAAuC;IACvC,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,MAAM,CAAC;IAC/C,uCAAuC;IACvC,qBAAqB,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,MAAM,CAAC;CACzD"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,22 @@
1
+ import type { PlacedObject } from '../types/placed-object.js';
2
+ import type { MapObjectRegistry } from '../types/object-def.js';
3
+ import { ShapeType } from '../types/geometry.js';
4
+ export interface CanopyZoneCircle {
5
+ type: ShapeType.Circle;
6
+ x: number;
7
+ y: number;
8
+ radiusSq: number;
9
+ objectIndex: number;
10
+ }
11
+ export interface CanopyZoneCuboid {
12
+ type: ShapeType.Cuboid;
13
+ x: number;
14
+ y: number;
15
+ halfW: number;
16
+ halfH: number;
17
+ objectIndex: number;
18
+ }
19
+ export type CanopyZone = CanopyZoneCircle | CanopyZoneCuboid;
20
+ export declare function extractCanopyZones(objects: readonly PlacedObject[], registry: MapObjectRegistry, tag?: number): CanopyZone[];
21
+ export declare function isInsideCanopyZone(zone: CanopyZone, px: number, py: number): boolean;
22
+ //# sourceMappingURL=extract-canopy-zones.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"extract-canopy-zones.d.ts","sourceRoot":"","sources":["../../../src/lib/utils/extract-canopy-zones.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAC9D,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAChE,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAIjD,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,SAAS,CAAC,MAAM,CAAC;IACvB,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,SAAS,CAAC,MAAM,CAAC;IACvB,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,MAAM,UAAU,GAAG,gBAAgB,GAAG,gBAAgB,CAAC;AAE7D,wBAAgB,kBAAkB,CAChC,OAAO,EAAE,SAAS,YAAY,EAAE,EAChC,QAAQ,EAAE,iBAAiB,EAC3B,GAAG,GAAE,MAA0B,GAC9B,UAAU,EAAE,CAuBd;AAED,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,UAAU,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,OAAO,CAOpF"}
@@ -0,0 +1,34 @@
1
+ import { ShapeType } from '../types/geometry.js';
2
+ import { CANOPY_SENSOR_TAG } from '../physics/canopy-sensor-tag.js';
3
+ import { sortPlacedObjects } from './sort-placed-objects.js';
4
+ export function extractCanopyZones(objects, registry, tag = CANOPY_SENSOR_TAG) {
5
+ const sorted = sortPlacedObjects(objects);
6
+ const zones = [];
7
+ for (let i = 0; i < sorted.length; i++) {
8
+ const obj = sorted[i];
9
+ const def = registry.get(obj.typeId);
10
+ if (!def)
11
+ continue;
12
+ const sensor = def.colliders.find(c => c.tag === tag && c.isSensor);
13
+ if (!sensor)
14
+ continue;
15
+ if (sensor.shape.type === ShapeType.Circle) {
16
+ const r = sensor.shape.radius * obj.scale;
17
+ zones.push({ type: ShapeType.Circle, x: obj.posX, y: obj.posY, radiusSq: r * r, objectIndex: i });
18
+ }
19
+ else {
20
+ const hw = sensor.shape.halfWidth * obj.scale;
21
+ const hh = sensor.shape.halfHeight * obj.scale;
22
+ zones.push({ type: ShapeType.Cuboid, x: obj.posX, y: obj.posY, halfW: hw, halfH: hh, objectIndex: i });
23
+ }
24
+ }
25
+ return zones;
26
+ }
27
+ export function isInsideCanopyZone(zone, px, py) {
28
+ const dx = px - zone.x;
29
+ const dy = py - zone.y;
30
+ if (zone.type === ShapeType.Circle) {
31
+ return dx * dx + dy * dy < zone.radiusSq;
32
+ }
33
+ return Math.abs(dx) < zone.halfW && Math.abs(dy) < zone.halfH;
34
+ }
@@ -0,0 +1,3 @@
1
+ import type { PlacedObject } from '../types/placed-object.js';
2
+ export declare function sortPlacedObjects(objects: readonly PlacedObject[]): PlacedObject[];
3
+ //# sourceMappingURL=sort-placed-objects.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sort-placed-objects.d.ts","sourceRoot":"","sources":["../../../src/lib/utils/sort-placed-objects.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAE9D,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,SAAS,YAAY,EAAE,GAAG,YAAY,EAAE,CAElF"}
@@ -0,0 +1,3 @@
1
+ export function sortPlacedObjects(objects) {
2
+ return [...objects].sort((a, b) => a.posY - b.posY || a.posX - b.posX);
3
+ }