@lagless/2d-map-renderer 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 (45) hide show
  1. package/LICENSE +26 -0
  2. package/dist/index.d.ts +6 -0
  3. package/dist/index.d.ts.map +1 -0
  4. package/dist/index.js +5 -0
  5. package/dist/lib/core/map-object-renderer.d.ts +14 -0
  6. package/dist/lib/core/map-object-renderer.d.ts.map +1 -0
  7. package/dist/lib/core/map-object-renderer.js +49 -0
  8. package/dist/lib/core/map-terrain-renderer.d.ts +12 -0
  9. package/dist/lib/core/map-terrain-renderer.d.ts.map +1 -0
  10. package/dist/lib/core/map-terrain-renderer.js +73 -0
  11. package/dist/lib/core/minimap-renderer.d.ts +10 -0
  12. package/dist/lib/core/minimap-renderer.d.ts.map +1 -0
  13. package/dist/lib/core/minimap-renderer.js +89 -0
  14. package/dist/lib/layers/background-layer.d.ts +3 -0
  15. package/dist/lib/layers/background-layer.d.ts.map +1 -0
  16. package/dist/lib/layers/background-layer.js +6 -0
  17. package/dist/lib/layers/beach-layer.d.ts +4 -0
  18. package/dist/lib/layers/beach-layer.d.ts.map +1 -0
  19. package/dist/lib/layers/beach-layer.js +10 -0
  20. package/dist/lib/layers/grass-layer.d.ts +4 -0
  21. package/dist/lib/layers/grass-layer.d.ts.map +1 -0
  22. package/dist/lib/layers/grass-layer.js +8 -0
  23. package/dist/lib/layers/grid-layer.d.ts +3 -0
  24. package/dist/lib/layers/grid-layer.d.ts.map +1 -0
  25. package/dist/lib/layers/grid-layer.js +13 -0
  26. package/dist/lib/layers/ground-patch-layer.d.ts +4 -0
  27. package/dist/lib/layers/ground-patch-layer.d.ts.map +1 -0
  28. package/dist/lib/layers/ground-patch-layer.js +10 -0
  29. package/dist/lib/layers/ocean-layer.d.ts +4 -0
  30. package/dist/lib/layers/ocean-layer.d.ts.map +1 -0
  31. package/dist/lib/layers/ocean-layer.js +9 -0
  32. package/dist/lib/layers/river-shore-layer.d.ts +4 -0
  33. package/dist/lib/layers/river-shore-layer.d.ts.map +1 -0
  34. package/dist/lib/layers/river-shore-layer.js +10 -0
  35. package/dist/lib/layers/river-water-layer.d.ts +4 -0
  36. package/dist/lib/layers/river-water-layer.d.ts.map +1 -0
  37. package/dist/lib/layers/river-water-layer.js +10 -0
  38. package/dist/lib/utils/jagged-aabb-draw.d.ts +5 -0
  39. package/dist/lib/utils/jagged-aabb-draw.d.ts.map +1 -0
  40. package/dist/lib/utils/jagged-aabb-draw.js +12 -0
  41. package/dist/lib/utils/polygon-draw.d.ts +5 -0
  42. package/dist/lib/utils/polygon-draw.d.ts.map +1 -0
  43. package/dist/lib/utils/polygon-draw.js +21 -0
  44. package/dist/tsconfig.lib.tsbuildinfo +1 -0
  45. package/package.json +41 -0
package/LICENSE ADDED
@@ -0,0 +1,26 @@
1
+ Creative Commons Attribution-NonCommercial 4.0 International
2
+
3
+ Copyright (c) 2025 Lagless
4
+
5
+ This work is licensed under the Creative Commons
6
+ Attribution-NonCommercial 4.0 International License.
7
+
8
+ You are free to:
9
+
10
+ Share — copy and redistribute the material in any medium or format
11
+ Adapt — remix, transform, and build upon the material
12
+
13
+ Under the following terms:
14
+
15
+ Attribution — You must give appropriate credit, provide a link to
16
+ the license, and indicate if changes were made. You may do so in
17
+ any reasonable manner, but not in any way that suggests the licensor
18
+ endorses you or your use.
19
+
20
+ NonCommercial — You may not use the material for commercial purposes.
21
+
22
+ No additional restrictions — You may not apply legal terms or
23
+ technological measures that legally restrict others from doing
24
+ anything the license permits.
25
+
26
+ Full license text: https://creativecommons.org/licenses/by-nc/4.0/legalcode
@@ -0,0 +1,6 @@
1
+ export { MapTerrainRenderer } from './lib/core/map-terrain-renderer.js';
2
+ export { MapObjectRenderer } from './lib/core/map-object-renderer.js';
3
+ export { MinimapRenderer } from './lib/core/minimap-renderer.js';
4
+ export { drawPolygon, drawPolygonHole } from './lib/utils/polygon-draw.js';
5
+ export { drawJaggedAabb } from './lib/utils/jagged-aabb-draw.js';
6
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,oCAAoC,CAAC;AACxE,OAAO,EAAE,iBAAiB,EAAE,MAAM,mCAAmC,CAAC;AACtE,OAAO,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAC;AACjE,OAAO,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAC3E,OAAO,EAAE,cAAc,EAAE,MAAM,iCAAiC,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,5 @@
1
+ export { MapTerrainRenderer } from './lib/core/map-terrain-renderer.js';
2
+ export { MapObjectRenderer } from './lib/core/map-object-renderer.js';
3
+ export { MinimapRenderer } from './lib/core/minimap-renderer.js';
4
+ export { drawPolygon, drawPolygonHole } from './lib/utils/polygon-draw.js';
5
+ export { drawJaggedAabb } from './lib/utils/jagged-aabb-draw.js';
@@ -0,0 +1,14 @@
1
+ import { ParticleContainer, Texture } from 'pixi.js';
2
+ import type { PlacedObject, MapObjectRegistry } from '@lagless/2d-map-generator';
3
+ export declare class MapObjectRenderer {
4
+ readonly ground: ParticleContainer;
5
+ readonly canopy: ParticleContainer;
6
+ private readonly _canopyParticles;
7
+ constructor(options?: {
8
+ dynamicCanopyAlpha?: boolean;
9
+ });
10
+ build(objects: readonly PlacedObject[], registry: MapObjectRegistry, getTexture: (frameKey: string) => Texture): void;
11
+ setCanopyAlpha(objectIndex: number, alpha: number): void;
12
+ destroy(): void;
13
+ }
14
+ //# sourceMappingURL=map-object-renderer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"map-object-renderer.d.ts","sourceRoot":"","sources":["../../../src/lib/core/map-object-renderer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAY,OAAO,EAAE,MAAM,SAAS,CAAC;AAC/D,OAAO,KAAK,EAAE,YAAY,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAGjF,qBAAa,iBAAiB;IAC5B,QAAQ,CAAC,MAAM,EAAE,iBAAiB,CAAC;IACnC,QAAQ,CAAC,MAAM,EAAE,iBAAiB,CAAC;IAEnC,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAoC;gBAEzD,OAAO,CAAC,EAAE;QAAE,kBAAkB,CAAC,EAAE,OAAO,CAAA;KAAE;IAMtD,KAAK,CACH,OAAO,EAAE,SAAS,YAAY,EAAE,EAChC,QAAQ,EAAE,iBAAiB,EAC3B,UAAU,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,OAAO,GACxC,IAAI;IA4BP,cAAc,CAAC,WAAW,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI;IAOxD,OAAO,IAAI,IAAI;CAKhB"}
@@ -0,0 +1,49 @@
1
+ import { ParticleContainer, Particle } from 'pixi.js';
2
+ import { RenderLayer, sortPlacedObjects } from '@lagless/2d-map-generator';
3
+ export class MapObjectRenderer {
4
+ ground;
5
+ canopy;
6
+ _canopyParticles = new Map();
7
+ constructor(options) {
8
+ const dynamicAlpha = options?.dynamicCanopyAlpha ?? true;
9
+ this.ground = new ParticleContainer({ dynamicProperties: { color: false } });
10
+ this.canopy = new ParticleContainer({ dynamicProperties: { color: dynamicAlpha } });
11
+ }
12
+ build(objects, registry, getTexture) {
13
+ const sorted = sortPlacedObjects(objects);
14
+ for (let i = 0; i < sorted.length; i++) {
15
+ const obj = sorted[i];
16
+ const def = registry.get(obj.typeId);
17
+ if (!def)
18
+ continue;
19
+ for (const visual of def.visuals) {
20
+ const particle = new Particle(getTexture(visual.texture));
21
+ particle.x = obj.posX + (visual.offsetX ?? 0) * obj.scale;
22
+ particle.y = obj.posY + (visual.offsetY ?? 0) * obj.scale;
23
+ particle.rotation = obj.rotation;
24
+ particle.scaleX = obj.scale;
25
+ particle.scaleY = obj.scale;
26
+ particle.anchorX = visual.anchorX ?? 0.5;
27
+ particle.anchorY = visual.anchorY ?? 0.5;
28
+ if (visual.layer === RenderLayer.Ground) {
29
+ this.ground.addParticle(particle);
30
+ }
31
+ else {
32
+ this.canopy.addParticle(particle);
33
+ this._canopyParticles.set(i, particle);
34
+ }
35
+ }
36
+ }
37
+ }
38
+ setCanopyAlpha(objectIndex, alpha) {
39
+ const particle = this._canopyParticles.get(objectIndex);
40
+ if (particle) {
41
+ particle.alpha = alpha;
42
+ }
43
+ }
44
+ destroy() {
45
+ this.ground.destroy();
46
+ this.canopy.destroy();
47
+ this._canopyParticles.clear();
48
+ }
49
+ }
@@ -0,0 +1,12 @@
1
+ import { Container } from 'pixi.js';
2
+ import type { IGeneratedMap } from '@lagless/2d-map-generator';
3
+ export interface MapTerrainRendererOptions {
4
+ canvasMode?: boolean;
5
+ }
6
+ export declare class MapTerrainRenderer {
7
+ private _container;
8
+ buildTerrain(map: IGeneratedMap, options?: MapTerrainRendererOptions): Container;
9
+ updateCamera(screenOriginX: number, screenOriginY: number, scaleX: number, scaleY: number): void;
10
+ destroy(): void;
11
+ }
12
+ //# sourceMappingURL=map-terrain-renderer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"map-terrain-renderer.d.ts","sourceRoot":"","sources":["../../../src/lib/core/map-terrain-renderer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AACpC,OAAO,KAAK,EAAE,aAAa,EAAqF,MAAM,2BAA2B,CAAC;AAWlJ,MAAM,WAAW,yBAAyB;IACxC,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;AAED,qBAAa,kBAAkB;IAC7B,OAAO,CAAC,UAAU,CAA0B;IAE5C,YAAY,CAAC,GAAG,EAAE,aAAa,EAAE,OAAO,CAAC,EAAE,yBAAyB,GAAG,SAAS;IAyDhF,YAAY,CAAC,aAAa,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI;IAMhG,OAAO,IAAI,IAAI;CAMhB"}
@@ -0,0 +1,73 @@
1
+ import { Container } from 'pixi.js';
2
+ import { BiomeFeature, ShoreFeature, GrassFeature, RiverFeature, LakeFeature, GroundPatchFeature } from '@lagless/2d-map-generator';
3
+ import { createBackgroundLayer } from '../layers/background-layer.js';
4
+ import { createBeachLayer } from '../layers/beach-layer.js';
5
+ import { createGrassLayer } from '../layers/grass-layer.js';
6
+ import { createOceanLayer } from '../layers/ocean-layer.js';
7
+ import { createGridLayer } from '../layers/grid-layer.js';
8
+ import { createRiverShoreLayer } from '../layers/river-shore-layer.js';
9
+ import { createRiverWaterLayer } from '../layers/river-water-layer.js';
10
+ import { createGroundPatchLayer } from '../layers/ground-patch-layer.js';
11
+ export class MapTerrainRenderer {
12
+ _container = null;
13
+ buildTerrain(map, options) {
14
+ const container = new Container();
15
+ const width = map.width;
16
+ const height = map.height;
17
+ const biome = map.get(BiomeFeature);
18
+ const shore = map.get(ShoreFeature);
19
+ const grass = map.get(GrassFeature);
20
+ const riverOutput = map.get(RiverFeature);
21
+ const lakeOutput = map.get(LakeFeature);
22
+ const patchOutput = map.get(GroundPatchFeature);
23
+ const bgColor = biome?.grass ?? 0x80af49;
24
+ container.addChild(createBackgroundLayer(width, height, bgColor));
25
+ if (shore && grass && biome) {
26
+ container.addChild(createBeachLayer(shore, grass, biome.beach));
27
+ if (options?.canvasMode) {
28
+ container.addChild(createGrassLayer(grass, biome.grass));
29
+ }
30
+ }
31
+ // Patches order=0 (under grid)
32
+ if (patchOutput) {
33
+ const order0 = patchOutput.patches.filter(p => p.order === 0);
34
+ if (order0.length > 0)
35
+ container.addChild(createGroundPatchLayer(order0));
36
+ }
37
+ // Rivers
38
+ const allRivers = [
39
+ ...(riverOutput?.rivers ?? []),
40
+ ...(lakeOutput?.lakes ?? []),
41
+ ];
42
+ if (allRivers.length > 0 && biome) {
43
+ container.addChild(createRiverShoreLayer(allRivers, biome.riverbank));
44
+ container.addChild(createRiverWaterLayer(allRivers, biome.water));
45
+ }
46
+ // Ocean
47
+ if (shore && biome) {
48
+ container.addChild(createOceanLayer(width, height, shore, biome.water));
49
+ }
50
+ // Grid
51
+ container.addChild(createGridLayer(width, height, map.gridSize));
52
+ // Patches order=1 (over grid)
53
+ if (patchOutput) {
54
+ const order1 = patchOutput.patches.filter(p => p.order === 1);
55
+ if (order1.length > 0)
56
+ container.addChild(createGroundPatchLayer(order1));
57
+ }
58
+ this._container = container;
59
+ return container;
60
+ }
61
+ updateCamera(screenOriginX, screenOriginY, scaleX, scaleY) {
62
+ if (!this._container)
63
+ return;
64
+ this._container.position.set(screenOriginX, screenOriginY);
65
+ this._container.scale.set(scaleX, scaleY);
66
+ }
67
+ destroy() {
68
+ if (this._container) {
69
+ this._container.destroy({ children: true });
70
+ this._container = null;
71
+ }
72
+ }
73
+ }
@@ -0,0 +1,10 @@
1
+ import { Container } from 'pixi.js';
2
+ import type { IGeneratedMap, PlacedObject, MapObjectRegistry, PlacesOutput } from '@lagless/2d-map-generator';
3
+ export declare class MinimapRenderer {
4
+ private _container;
5
+ buildMinimap(map: IGeneratedMap, size: number): Container;
6
+ addObjectShapes(objects: readonly PlacedObject[], registry: MapObjectRegistry): void;
7
+ addPlaceLabels(places: PlacesOutput['places']): void;
8
+ destroy(): void;
9
+ }
10
+ //# sourceMappingURL=minimap-renderer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"minimap-renderer.d.ts","sourceRoot":"","sources":["../../../src/lib/core/minimap-renderer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAkB,MAAM,SAAS,CAAC;AACpD,OAAO,KAAK,EAAE,aAAa,EAAkE,YAAY,EAAE,iBAAiB,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAI9K,qBAAa,eAAe;IAC1B,OAAO,CAAC,UAAU,CAA0B;IAE5C,YAAY,CAAC,GAAG,EAAE,aAAa,EAAE,IAAI,EAAE,MAAM,GAAG,SAAS;IAmDzD,eAAe,CAAC,OAAO,EAAE,SAAS,YAAY,EAAE,EAAE,QAAQ,EAAE,iBAAiB,GAAG,IAAI;IAuBpF,cAAc,CAAC,MAAM,EAAE,YAAY,CAAC,QAAQ,CAAC,GAAG,IAAI;IAWpD,OAAO,IAAI,IAAI;CAMhB"}
@@ -0,0 +1,89 @@
1
+ import { Container, Graphics, Text } from 'pixi.js';
2
+ import { BiomeFeature, ShoreFeature, GrassFeature, RiverFeature, LakeFeature, ShapeType } from '@lagless/2d-map-generator';
3
+ import { drawPolygon } from '../utils/polygon-draw.js';
4
+ export class MinimapRenderer {
5
+ _container = null;
6
+ buildMinimap(map, size) {
7
+ const container = new Container();
8
+ const scaleX = size / map.width;
9
+ const scaleY = size / map.height;
10
+ container.scale.set(scaleX, scaleY);
11
+ const biome = map.get(BiomeFeature);
12
+ const shore = map.get(ShoreFeature);
13
+ const grass = map.get(GrassFeature);
14
+ const riverOutput = map.get(RiverFeature);
15
+ const lakeOutput = map.get(LakeFeature);
16
+ // Background
17
+ const bg = new Graphics();
18
+ bg.rect(0, 0, map.width, map.height).fill({ color: biome?.water ?? 0x3d85c6 });
19
+ container.addChild(bg);
20
+ // Shore
21
+ if (shore && biome) {
22
+ const shoreG = new Graphics();
23
+ drawPolygon(shoreG, shore.polygon.points);
24
+ shoreG.fill({ color: biome.beach });
25
+ container.addChild(shoreG);
26
+ }
27
+ // Grass
28
+ if (grass && biome) {
29
+ const grassG = new Graphics();
30
+ drawPolygon(grassG, grass.polygon.points);
31
+ grassG.fill({ color: biome.grass });
32
+ container.addChild(grassG);
33
+ }
34
+ // Rivers
35
+ const allRivers = [
36
+ ...(riverOutput?.rivers ?? []),
37
+ ...(lakeOutput?.lakes ?? []),
38
+ ];
39
+ if (allRivers.length > 0 && biome) {
40
+ const riverG = new Graphics();
41
+ for (const river of allRivers) {
42
+ drawPolygon(riverG, river.waterPoly.points);
43
+ riverG.fill({ color: biome.water });
44
+ }
45
+ container.addChild(riverG);
46
+ }
47
+ this._container = container;
48
+ return container;
49
+ }
50
+ addObjectShapes(objects, registry) {
51
+ if (!this._container)
52
+ return;
53
+ const g = new Graphics();
54
+ for (const obj of objects) {
55
+ const def = registry.get(obj.typeId);
56
+ if (!def?.mapDisplay)
57
+ continue;
58
+ for (const shape of def.mapDisplay.shapes) {
59
+ if (shape.collider.type === ShapeType.Circle) {
60
+ g.circle(obj.posX, obj.posY, shape.collider.radius * shape.scale);
61
+ g.fill({ color: shape.color });
62
+ }
63
+ else if (shape.collider.type === ShapeType.Cuboid) {
64
+ const hw = shape.collider.halfWidth * shape.scale;
65
+ const hh = shape.collider.halfHeight * shape.scale;
66
+ g.rect(obj.posX - hw, obj.posY - hh, hw * 2, hh * 2);
67
+ g.fill({ color: shape.color });
68
+ }
69
+ }
70
+ }
71
+ this._container.addChild(g);
72
+ }
73
+ addPlaceLabels(places) {
74
+ if (!this._container)
75
+ return;
76
+ for (const place of places) {
77
+ const text = new Text({ text: place.name, style: { fontSize: 12, fill: 0xffffff } });
78
+ text.position.set(place.x, place.y);
79
+ text.anchor.set(0.5, 0.5);
80
+ this._container.addChild(text);
81
+ }
82
+ }
83
+ destroy() {
84
+ if (this._container) {
85
+ this._container.destroy({ children: true });
86
+ this._container = null;
87
+ }
88
+ }
89
+ }
@@ -0,0 +1,3 @@
1
+ import { Graphics } from 'pixi.js';
2
+ export declare function createBackgroundLayer(width: number, height: number, color: number): Graphics;
3
+ //# sourceMappingURL=background-layer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"background-layer.d.ts","sourceRoot":"","sources":["../../../src/lib/layers/background-layer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAEnC,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,QAAQ,CAI5F"}
@@ -0,0 +1,6 @@
1
+ import { Graphics } from 'pixi.js';
2
+ export function createBackgroundLayer(width, height, color) {
3
+ const g = new Graphics();
4
+ g.rect(0, 0, width, height).fill({ color });
5
+ return g;
6
+ }
@@ -0,0 +1,4 @@
1
+ import { Graphics } from 'pixi.js';
2
+ import type { ShoreOutput, GrassOutput } from '@lagless/2d-map-generator';
3
+ export declare function createBeachLayer(shore: ShoreOutput, grass: GrassOutput, color: number): Graphics;
4
+ //# sourceMappingURL=beach-layer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"beach-layer.d.ts","sourceRoot":"","sources":["../../../src/lib/layers/beach-layer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AACnC,OAAO,KAAK,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AAG1E,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,WAAW,EAAE,KAAK,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,GAAG,QAAQ,CAOhG"}
@@ -0,0 +1,10 @@
1
+ import { Graphics } from 'pixi.js';
2
+ import { drawPolygon } from '../utils/polygon-draw.js';
3
+ export function createBeachLayer(shore, grass, color) {
4
+ const g = new Graphics();
5
+ drawPolygon(g, shore.polygon.points);
6
+ g.fill({ color });
7
+ drawPolygon(g, grass.polygon.points);
8
+ g.cut();
9
+ return g;
10
+ }
@@ -0,0 +1,4 @@
1
+ import { Graphics } from 'pixi.js';
2
+ import type { GrassOutput } from '@lagless/2d-map-generator';
3
+ export declare function createGrassLayer(grass: GrassOutput, color: number): Graphics;
4
+ //# sourceMappingURL=grass-layer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"grass-layer.d.ts","sourceRoot":"","sources":["../../../src/lib/layers/grass-layer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AACnC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AAG7D,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,GAAG,QAAQ,CAK5E"}
@@ -0,0 +1,8 @@
1
+ import { Graphics } from 'pixi.js';
2
+ import { drawPolygon } from '../utils/polygon-draw.js';
3
+ export function createGrassLayer(grass, color) {
4
+ const g = new Graphics();
5
+ drawPolygon(g, grass.polygon.points);
6
+ g.fill({ color });
7
+ return g;
8
+ }
@@ -0,0 +1,3 @@
1
+ import { Graphics } from 'pixi.js';
2
+ export declare function createGridLayer(width: number, height: number, gridSize: number): Graphics;
3
+ //# sourceMappingURL=grid-layer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"grid-layer.d.ts","sourceRoot":"","sources":["../../../src/lib/layers/grid-layer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAEnC,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,QAAQ,CAazF"}
@@ -0,0 +1,13 @@
1
+ import { Graphics } from 'pixi.js';
2
+ export function createGridLayer(width, height, gridSize) {
3
+ const g = new Graphics();
4
+ const color = 0x000000;
5
+ const alpha = 0.15;
6
+ for (let x = 0; x <= width; x += gridSize) {
7
+ g.moveTo(x, 0).lineTo(x, height).stroke({ color, alpha, width: 0.05 });
8
+ }
9
+ for (let y = 0; y <= height; y += gridSize) {
10
+ g.moveTo(0, y).lineTo(width, y).stroke({ color, alpha, width: 0.05 });
11
+ }
12
+ return g;
13
+ }
@@ -0,0 +1,4 @@
1
+ import { Graphics } from 'pixi.js';
2
+ import type { GeneratedGroundPatch } from '@lagless/2d-map-generator';
3
+ export declare function createGroundPatchLayer(patches: readonly GeneratedGroundPatch[]): Graphics;
4
+ //# sourceMappingURL=ground-patch-layer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ground-patch-layer.d.ts","sourceRoot":"","sources":["../../../src/lib/layers/ground-patch-layer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AACnC,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AAEtE,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,SAAS,oBAAoB,EAAE,GAAG,QAAQ,CAQzF"}
@@ -0,0 +1,10 @@
1
+ import { Graphics } from 'pixi.js';
2
+ export function createGroundPatchLayer(patches) {
3
+ const g = new Graphics();
4
+ for (const patch of patches) {
5
+ const w = patch.maxX - patch.minX;
6
+ const h = patch.maxY - patch.minY;
7
+ g.rect(patch.minX, patch.minY, w, h).fill({ color: patch.color });
8
+ }
9
+ return g;
10
+ }
@@ -0,0 +1,4 @@
1
+ import { Graphics } from 'pixi.js';
2
+ import type { ShoreOutput } from '@lagless/2d-map-generator';
3
+ export declare function createOceanLayer(width: number, height: number, shore: ShoreOutput, color: number): Graphics;
4
+ //# sourceMappingURL=ocean-layer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ocean-layer.d.ts","sourceRoot":"","sources":["../../../src/lib/layers/ocean-layer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AACnC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AAG7D,wBAAgB,gBAAgB,CAC9B,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,WAAW,EAClB,KAAK,EAAE,MAAM,GACZ,QAAQ,CAMV"}
@@ -0,0 +1,9 @@
1
+ import { Graphics } from 'pixi.js';
2
+ import { drawPolygon } from '../utils/polygon-draw.js';
3
+ export function createOceanLayer(width, height, shore, color) {
4
+ const g = new Graphics();
5
+ g.rect(0, 0, width, height).fill({ color });
6
+ drawPolygon(g, shore.polygon.points);
7
+ g.cut();
8
+ return g;
9
+ }
@@ -0,0 +1,4 @@
1
+ import { Graphics } from 'pixi.js';
2
+ import type { GeneratedRiver } from '@lagless/2d-map-generator';
3
+ export declare function createRiverShoreLayer(rivers: readonly GeneratedRiver[], color: number): Graphics;
4
+ //# sourceMappingURL=river-shore-layer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"river-shore-layer.d.ts","sourceRoot":"","sources":["../../../src/lib/layers/river-shore-layer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AACnC,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAGhE,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,SAAS,cAAc,EAAE,EAAE,KAAK,EAAE,MAAM,GAAG,QAAQ,CAOhG"}
@@ -0,0 +1,10 @@
1
+ import { Graphics } from 'pixi.js';
2
+ import { drawPolygon } from '../utils/polygon-draw.js';
3
+ export function createRiverShoreLayer(rivers, color) {
4
+ const g = new Graphics();
5
+ for (const river of rivers) {
6
+ drawPolygon(g, river.shorePoly.points);
7
+ g.fill({ color });
8
+ }
9
+ return g;
10
+ }
@@ -0,0 +1,4 @@
1
+ import { Graphics } from 'pixi.js';
2
+ import type { GeneratedRiver } from '@lagless/2d-map-generator';
3
+ export declare function createRiverWaterLayer(rivers: readonly GeneratedRiver[], color: number): Graphics;
4
+ //# sourceMappingURL=river-water-layer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"river-water-layer.d.ts","sourceRoot":"","sources":["../../../src/lib/layers/river-water-layer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AACnC,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAGhE,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,SAAS,cAAc,EAAE,EAAE,KAAK,EAAE,MAAM,GAAG,QAAQ,CAOhG"}
@@ -0,0 +1,10 @@
1
+ import { Graphics } from 'pixi.js';
2
+ import { drawPolygon } from '../utils/polygon-draw.js';
3
+ export function createRiverWaterLayer(rivers, color) {
4
+ const g = new Graphics();
5
+ for (const river of rivers) {
6
+ drawPolygon(g, river.waterPoly.points);
7
+ g.fill({ color });
8
+ }
9
+ return g;
10
+ }
@@ -0,0 +1,5 @@
1
+ import { Graphics } from 'pixi.js';
2
+ import type { AABB } from '@lagless/2d-map-generator';
3
+ import type { ISeededRandom } from '@lagless/2d-map-generator';
4
+ export declare function drawJaggedAabb(g: Graphics, aabb: AABB, roughness: number, offsetDist: number, color: number, random: ISeededRandom): Graphics;
5
+ //# sourceMappingURL=jagged-aabb-draw.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"jagged-aabb-draw.d.ts","sourceRoot":"","sources":["../../../src/lib/utils/jagged-aabb-draw.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AACnC,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,2BAA2B,CAAC;AAEtD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAG/D,wBAAgB,cAAc,CAC5B,CAAC,EAAE,QAAQ,EACX,IAAI,EAAE,IAAI,EACV,SAAS,EAAE,MAAM,EACjB,UAAU,EAAE,MAAM,EAClB,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,aAAa,GACpB,QAAQ,CAUV"}
@@ -0,0 +1,12 @@
1
+ import { generateJaggedAabbPoints } from '@lagless/2d-map-generator';
2
+ import { drawPolygon } from './polygon-draw.js';
3
+ export function drawJaggedAabb(g, aabb, roughness, offsetDist, color, random) {
4
+ const w = aabb.max.x - aabb.min.x;
5
+ const h = aabb.max.y - aabb.min.y;
6
+ const divisionsX = Math.max(2, Math.round(w * roughness / Math.max(1, offsetDist)));
7
+ const divisionsY = Math.max(2, Math.round(h * roughness / Math.max(1, offsetDist)));
8
+ const points = generateJaggedAabbPoints(aabb, divisionsX, divisionsY, offsetDist, random);
9
+ drawPolygon(g, points);
10
+ g.fill({ color });
11
+ return g;
12
+ }
@@ -0,0 +1,5 @@
1
+ import type { Graphics } from 'pixi.js';
2
+ import type { ReadonlyVec2 } from '@lagless/2d-map-generator';
3
+ export declare function drawPolygon(g: Graphics, points: readonly ReadonlyVec2[]): Graphics;
4
+ export declare function drawPolygonHole(g: Graphics, points: readonly ReadonlyVec2[]): Graphics;
5
+ //# sourceMappingURL=polygon-draw.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"polygon-draw.d.ts","sourceRoot":"","sources":["../../../src/lib/utils/polygon-draw.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AACxC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAE9D,wBAAgB,WAAW,CAAC,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,SAAS,YAAY,EAAE,GAAG,QAAQ,CAQlF;AAED,wBAAgB,eAAe,CAAC,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,SAAS,YAAY,EAAE,GAAG,QAAQ,CAStF"}
@@ -0,0 +1,21 @@
1
+ export function drawPolygon(g, points) {
2
+ if (points.length < 3)
3
+ return g;
4
+ g.moveTo(points[0].x, points[0].y);
5
+ for (let i = 1; i < points.length; i++) {
6
+ g.lineTo(points[i].x, points[i].y);
7
+ }
8
+ g.closePath();
9
+ return g;
10
+ }
11
+ export function drawPolygonHole(g, points) {
12
+ if (points.length < 3)
13
+ return g;
14
+ // Draw in reverse winding to create a hole via even-odd fill rule
15
+ g.moveTo(points[points.length - 1].x, points[points.length - 1].y);
16
+ for (let i = points.length - 2; i >= 0; i--) {
17
+ g.lineTo(points[i].x, points[i].y);
18
+ }
19
+ g.closePath();
20
+ return g;
21
+ }