@datamoc/mw_games 0.7.7 → 0.7.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +183 -3
- package/README.md +28 -7
- package/dist/actors/Shop.d.ts.map +1 -1
- package/dist/actors/Shop.js +4 -1
- package/dist/actors/Shop.js.map +1 -1
- package/dist/ai/Heuristics.d.ts +8 -0
- package/dist/ai/Heuristics.d.ts.map +1 -1
- package/dist/ai/Heuristics.js.map +1 -1
- package/dist/ai/index.d.ts +2 -2
- package/dist/ai/index.d.ts.map +1 -1
- package/dist/ai/index.js +1 -1
- package/dist/ai/index.js.map +1 -1
- package/dist/ai/lua.d.ts +21 -0
- package/dist/ai/lua.d.ts.map +1 -1
- package/dist/ai/lua.js +21 -0
- package/dist/ai/lua.js.map +1 -1
- package/dist/ai/score.d.ts +36 -0
- package/dist/ai/score.d.ts.map +1 -1
- package/dist/ai/score.js +26 -0
- package/dist/ai/score.js.map +1 -1
- package/dist/assets/index.d.ts +1 -1
- package/dist/assets/index.d.ts.map +1 -1
- package/dist/assets/index.js +1 -1
- package/dist/assets/index.js.map +1 -1
- package/dist/assets/loader.d.ts.map +1 -1
- package/dist/assets/loader.js +10 -1
- package/dist/assets/loader.js.map +1 -1
- package/dist/assets/paths.d.ts +23 -0
- package/dist/assets/paths.d.ts.map +1 -1
- package/dist/assets/paths.js +29 -0
- package/dist/assets/paths.js.map +1 -1
- package/dist/battle/BattleStats.d.ts.map +1 -1
- package/dist/battle/BattleStats.js.map +1 -1
- package/dist/board/Classics.d.ts.map +1 -1
- package/dist/board/Classics.js +51 -39
- package/dist/board/Classics.js.map +1 -1
- package/dist/board/HexSkirmish.d.ts.map +1 -1
- package/dist/board/HexSkirmish.js +69 -20
- package/dist/board/HexSkirmish.js.map +1 -1
- package/dist/board/Tactics.d.ts +7 -0
- package/dist/board/Tactics.d.ts.map +1 -1
- package/dist/board/Tactics.js +2 -2
- package/dist/board/Tactics.js.map +1 -1
- package/dist/core/Achievements.d.ts.map +1 -1
- package/dist/core/Achievements.js +3 -1
- package/dist/core/Achievements.js.map +1 -1
- package/dist/core/Math.d.ts +14 -0
- package/dist/core/Math.d.ts.map +1 -0
- package/dist/core/Math.js +16 -0
- package/dist/core/Math.js.map +1 -0
- package/dist/core/index.d.ts +1 -0
- package/dist/core/index.d.ts.map +1 -1
- package/dist/core/index.js +1 -0
- package/dist/core/index.js.map +1 -1
- package/dist/mw_games.global.js +102 -102
- package/dist/mwl/actors.d.ts +46 -2
- package/dist/mwl/actors.d.ts.map +1 -1
- package/dist/mwl/actors.js +46 -2
- package/dist/mwl/actors.js.map +1 -1
- package/dist/mwl/carryover.d.ts +7 -0
- package/dist/mwl/carryover.d.ts.map +1 -1
- package/dist/mwl/carryover.js +7 -0
- package/dist/mwl/carryover.js.map +1 -1
- package/dist/mwl/catalog.d.ts +21 -1
- package/dist/mwl/catalog.d.ts.map +1 -1
- package/dist/mwl/catalog.js +0 -0
- package/dist/mwl/catalog.js.map +1 -1
- package/dist/mwl/compiler.d.ts +70 -3
- package/dist/mwl/compiler.d.ts.map +1 -1
- package/dist/mwl/compiler.js +70 -3
- package/dist/mwl/compiler.js.map +1 -1
- package/dist/mwl/conditions.d.ts +10 -1
- package/dist/mwl/conditions.d.ts.map +1 -1
- package/dist/mwl/conditions.js +10 -1
- package/dist/mwl/conditions.js.map +1 -1
- package/dist/mwl/content.d.ts +15 -0
- package/dist/mwl/content.d.ts.map +1 -1
- package/dist/mwl/content.js +13 -0
- package/dist/mwl/content.js.map +1 -1
- package/dist/mwl/expression.d.ts +21 -0
- package/dist/mwl/expression.d.ts.map +1 -1
- package/dist/mwl/expression.js +21 -0
- package/dist/mwl/expression.js.map +1 -1
- package/dist/mwl/fengari.d.ts +12 -1
- package/dist/mwl/fengari.d.ts.map +1 -1
- package/dist/mwl/fengari.js +12 -1
- package/dist/mwl/fengari.js.map +1 -1
- package/dist/mwl/grammar.d.ts +45 -1
- package/dist/mwl/grammar.d.ts.map +1 -1
- package/dist/mwl/grammar.js +45 -1
- package/dist/mwl/grammar.js.map +1 -1
- package/dist/mwl/hooks.d.ts +45 -1
- package/dist/mwl/hooks.d.ts.map +1 -1
- package/dist/mwl/hooks.js +45 -1
- package/dist/mwl/hooks.js.map +1 -1
- package/dist/mwl/index.d.ts +1 -1
- package/dist/mwl/index.d.ts.map +1 -1
- package/dist/mwl/index.js +1 -1
- package/dist/mwl/index.js.map +1 -1
- package/dist/mwl/persistence.d.ts +32 -0
- package/dist/mwl/persistence.d.ts.map +1 -1
- package/dist/mwl/persistence.js +32 -0
- package/dist/mwl/persistence.js.map +1 -1
- package/dist/mwl/readers.d.ts +24 -2
- package/dist/mwl/readers.d.ts.map +1 -1
- package/dist/mwl/readers.js +27 -4
- package/dist/mwl/readers.js.map +1 -1
- package/dist/mwl/report.d.ts +21 -2
- package/dist/mwl/report.d.ts.map +1 -1
- package/dist/mwl/report.js +21 -2
- package/dist/mwl/report.js.map +1 -1
- package/dist/mwl/runtime.d.ts +72 -0
- package/dist/mwl/runtime.d.ts.map +1 -1
- package/dist/mwl/runtime.js +274 -70
- package/dist/mwl/runtime.js.map +1 -1
- package/dist/mwl/schema.d.ts +57 -1
- package/dist/mwl/schema.d.ts.map +1 -1
- package/dist/mwl/schema.js +99 -9
- package/dist/mwl/schema.js.map +1 -1
- package/dist/mwl/scripts.d.ts +12 -1
- package/dist/mwl/scripts.d.ts.map +1 -1
- package/dist/mwl/scripts.js +12 -1
- package/dist/mwl/scripts.js.map +1 -1
- package/dist/mwl/utils.d.ts +2 -0
- package/dist/mwl/utils.d.ts.map +1 -1
- package/dist/mwl/utils.js +4 -1
- package/dist/mwl/utils.js.map +1 -1
- package/dist/rpg/Collision.d.ts.map +1 -1
- package/dist/rpg/Collision.js +1 -3
- package/dist/rpg/Collision.js.map +1 -1
- package/dist/rpg/GameState.d.ts +2 -2
- package/dist/rpg/GameState.js +2 -2
- package/dist/two-d/pixi-interop.d.ts +28 -10
- package/dist/two-d/pixi-interop.d.ts.map +1 -1
- package/dist/two-d/pixi-interop.js +36 -10
- package/dist/two-d/pixi-interop.js.map +1 -1
- package/dist/two-d/render/Camera.d.ts +11 -0
- package/dist/two-d/render/Camera.d.ts.map +1 -1
- package/dist/two-d/render/Camera.js +14 -3
- package/dist/two-d/render/Camera.js.map +1 -1
- package/dist/two-d/render/ColorTransformBatcher.d.ts +7 -1
- package/dist/two-d/render/ColorTransformBatcher.d.ts.map +1 -1
- package/dist/two-d/render/ColorTransformBatcher.js +10 -1
- package/dist/two-d/render/ColorTransformBatcher.js.map +1 -1
- package/dist/two-d/render/ImageModifiers.d.ts +40 -0
- package/dist/two-d/render/ImageModifiers.d.ts.map +1 -1
- package/dist/two-d/render/ImageModifiers.js +67 -4
- package/dist/two-d/render/ImageModifiers.js.map +1 -1
- package/dist/two-d/render/PaletteRemap.d.ts.map +1 -1
- package/dist/two-d/render/PaletteRemap.js +12 -1
- package/dist/two-d/render/PaletteRemap.js.map +1 -1
- package/dist/two-d/render/Projectile.d.ts +16 -0
- package/dist/two-d/render/Projectile.d.ts.map +1 -1
- package/dist/two-d/render/Projectile.js +14 -0
- package/dist/two-d/render/Projectile.js.map +1 -1
- package/dist/two-d/render/ScreenEffects.d.ts +42 -4
- package/dist/two-d/render/ScreenEffects.d.ts.map +1 -1
- package/dist/two-d/render/ScreenEffects.js +64 -9
- package/dist/two-d/render/ScreenEffects.js.map +1 -1
- package/dist/two-d/render/Shape2D.d.ts +22 -2
- package/dist/two-d/render/Shape2D.d.ts.map +1 -1
- package/dist/two-d/render/Shape2D.js +31 -2
- package/dist/two-d/render/Shape2D.js.map +1 -1
- package/dist/two-d/render/StatusVisuals.d.ts +41 -23
- package/dist/two-d/render/StatusVisuals.d.ts.map +1 -1
- package/dist/two-d/render/StatusVisuals.js +65 -26
- package/dist/two-d/render/StatusVisuals.js.map +1 -1
- package/dist/two-d/render/TerrainGraphics.d.ts.map +1 -1
- package/dist/two-d/render/TerrainGraphics.js.map +1 -1
- package/dist/two-d/render/TerrainGraphicsLayer.d.ts +55 -0
- package/dist/two-d/render/TerrainGraphicsLayer.d.ts.map +1 -0
- package/dist/two-d/render/TerrainGraphicsLayer.js +54 -0
- package/dist/two-d/render/TerrainGraphicsLayer.js.map +1 -0
- package/dist/two-d/render/TintedSprite.js +2 -2
- package/dist/two-d/render/TintedSprite.js.map +1 -1
- package/dist/two-d/render/index.d.ts +5 -3
- package/dist/two-d/render/index.d.ts.map +1 -1
- package/dist/two-d/render/index.js +3 -2
- package/dist/two-d/render/index.js.map +1 -1
- package/dist/two-d/ui/ListView.d.ts +9 -0
- package/dist/two-d/ui/ListView.d.ts.map +1 -1
- package/dist/two-d/ui/ListView.js +16 -6
- package/dist/two-d/ui/ListView.js.map +1 -1
- package/dist/two-d/ui/MarkupText.d.ts +66 -0
- package/dist/two-d/ui/MarkupText.d.ts.map +1 -0
- package/dist/two-d/ui/MarkupText.js +156 -0
- package/dist/two-d/ui/MarkupText.js.map +1 -0
- package/dist/two-d/ui/RichLabel.d.ts +7 -1
- package/dist/two-d/ui/RichLabel.d.ts.map +1 -1
- package/dist/two-d/ui/RichLabel.js +20 -9
- package/dist/two-d/ui/RichLabel.js.map +1 -1
- package/dist/two-d/ui/index.d.ts +4 -2
- package/dist/two-d/ui/index.d.ts.map +1 -1
- package/dist/two-d/ui/index.js +2 -1
- package/dist/two-d/ui/index.js.map +1 -1
- package/dist/two-d/ui/markup.d.ts +63 -1
- package/dist/two-d/ui/markup.d.ts.map +1 -1
- package/dist/two-d/ui/markup.js +69 -4
- package/dist/two-d/ui/markup.js.map +1 -1
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/package.json +5 -1
- package/tools/classic-html.d.mts +6 -0
- package/tools/classic-html.mjs +61 -0
- package/tools/mwl.mjs +12 -0
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import { Texture } from 'pixi.js';
|
|
2
|
+
import { Node2D, Sprite2D } from './Shape2D.js';
|
|
3
|
+
import { texture } from '../../assets/loader.js';
|
|
4
|
+
/**
|
|
5
|
+
* Draws the placements `resolveTerrainGraphics` resolves - the renderer half of `[terrain_graphics]`
|
|
6
|
+
* that the rule pass deliberately leaves to a caller.
|
|
7
|
+
*
|
|
8
|
+
* It is one `Sprite2D` per placement, added in `layer` order (a stable sort, so placements sharing a
|
|
9
|
+
* layer keep the order the rule pass emitted, which is its row-major walk). That is what makes a
|
|
10
|
+
* rule's multi-cell art *one rule's images at their own offsets* rather than something `TileMap`'s
|
|
11
|
+
* one-sprite-per-cell grid would have to hold, and what lets a rotated or probabilistic rule vary
|
|
12
|
+
* how a transition looks without the layer knowing any of that.
|
|
13
|
+
*
|
|
14
|
+
* Z-order between this layer and the rest of a scene is the caller's, as it is for `Halo`: add the
|
|
15
|
+
* layer before a unit to sit terrain under it, or after to overlay.
|
|
16
|
+
*
|
|
17
|
+
* @example
|
|
18
|
+
* ```ts
|
|
19
|
+
* import { TerrainGraphicsLayer, resolveTerrainGraphics } from '@datamoc/mw_games/two-d/render';
|
|
20
|
+
*
|
|
21
|
+
* const placements = resolveTerrainGraphics(2, 1, [], () => new Set(['land']));
|
|
22
|
+
* const layer = new TerrainGraphicsLayer({
|
|
23
|
+
* placements,
|
|
24
|
+
* project: (x, y, dx, dy) => ({ x: (x + dx) * 32, y: (y + dy) * 32 }),
|
|
25
|
+
* });
|
|
26
|
+
* layer.setPlacements(placements);
|
|
27
|
+
* ```
|
|
28
|
+
*/
|
|
29
|
+
export class TerrainGraphicsLayer extends Node2D {
|
|
30
|
+
constructor(options) {
|
|
31
|
+
super();
|
|
32
|
+
this.placements = options.placements;
|
|
33
|
+
this.project = options.project;
|
|
34
|
+
this.resolveImage = options.resolveImage ?? ((path) => texture(path, Texture.EMPTY));
|
|
35
|
+
this.rebuild();
|
|
36
|
+
}
|
|
37
|
+
/** replaces the resolved placements and redraws them in layer order */
|
|
38
|
+
setPlacements(placements) {
|
|
39
|
+
this.placements = placements;
|
|
40
|
+
this.rebuild();
|
|
41
|
+
}
|
|
42
|
+
rebuild() {
|
|
43
|
+
for (const child of this.removeChildren())
|
|
44
|
+
child.destroy();
|
|
45
|
+
for (const placement of [...this.placements].sort((a, b) => a.layer - b.layer)) {
|
|
46
|
+
const at = this.project(placement.x, placement.y, placement.dx, placement.dy);
|
|
47
|
+
const sprite = new Sprite2D(this.resolveImage(placement.image));
|
|
48
|
+
sprite.x = at.x;
|
|
49
|
+
sprite.y = at.y;
|
|
50
|
+
this.addChild(sprite);
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
//# sourceMappingURL=TerrainGraphicsLayer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TerrainGraphicsLayer.js","sourceRoot":"","sources":["../../../src/two-d/render/TerrainGraphicsLayer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AAGhD,OAAO,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;AAmBjD;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,MAAM,OAAO,oBAAqB,SAAQ,MAAM;IAK/C,YAAY,OAAoC;QAC/C,KAAK,EAAE,CAAC;QACR,IAAI,CAAC,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC;QACrC,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;QAC/B,IAAI,CAAC,YAAY,GAAG,OAAO,CAAC,YAAY,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC;QACrF,IAAI,CAAC,OAAO,EAAE,CAAC;IAChB,CAAC;IAED,uEAAuE;IACvE,aAAa,CAAC,UAAuC;QACpD,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;QAC7B,IAAI,CAAC,OAAO,EAAE,CAAC;IAChB,CAAC;IAEO,OAAO;QACd,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,cAAc,EAAE;YAAE,KAAK,CAAC,OAAO,EAAE,CAAC;QAE3D,KAAK,MAAM,SAAS,IAAI,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC;YAChF,MAAM,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,EAAE,SAAS,CAAC,EAAE,EAAE,SAAS,CAAC,EAAE,CAAC,CAAC;YAC9E,MAAM,MAAM,GAAG,IAAI,QAAQ,CAAC,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC;YAChE,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;YAChB,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;YAChB,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;QACvB,CAAC;IACF,CAAC;CACD"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { Sprite } from 'pixi.js';
|
|
2
|
-
import {
|
|
2
|
+
import { packColorAdd, packTintAdd, registerColorTransform, useColorTransformPipe } from './ColorTransformBatcher.js';
|
|
3
3
|
export { registerColorTransform } from './ColorTransformBatcher.js';
|
|
4
4
|
//registers the pipe the moment anything imports this file - see registerColorTransform's own
|
|
5
5
|
//doc comment for why a module-scope call, rather than "on first render", is what makes this
|
|
@@ -46,7 +46,7 @@ export class TintedSprite extends Sprite {
|
|
|
46
46
|
this._colorAdd = 0;
|
|
47
47
|
//Sprite's constructor points this at Pixi's own pipe; redirect it to ours, which
|
|
48
48
|
//is what puts this sprite in the colour-transform batch
|
|
49
|
-
this
|
|
49
|
+
useColorTransformPipe(this);
|
|
50
50
|
}
|
|
51
51
|
/** the packed additive colour; use `setColorAdd` or `lerpTint` rather than setting it raw */
|
|
52
52
|
get colorAdd() {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TintedSprite.js","sourceRoot":"","sources":["../../../src/two-d/render/TintedSprite.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AAEjC,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"TintedSprite.js","sourceRoot":"","sources":["../../../src/two-d/render/TintedSprite.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AAEjC,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,sBAAsB,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;AAGtH,OAAO,EAAE,sBAAsB,EAAE,MAAM,4BAA4B,CAAC;AAEpE,6FAA6F;AAC7F,4FAA4F;AAC5F,qBAAqB;AACrB,sBAAsB,EAAE,CAAC;AAEzB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AACH,MAAM,OAAO,YAAa,SAAQ,MAAM;IAGvC,YAAY,OAAmC;QAC9C,KAAK,CAAC,OAAwB,CAAC,CAAC;QAHzB,cAAS,GAAG,CAAC,CAAC;QAKrB,iFAAiF;QACjF,wDAAwD;QACxD,qBAAqB,CAAC,IAAI,CAAC,CAAC;IAC7B,CAAC;IAED,6FAA6F;IAC7F,IAAI,QAAQ;QACX,OAAO,IAAI,CAAC,SAAS,CAAC;IACvB,CAAC;IAED,IAAI,QAAQ,CAAC,KAAa;QACzB,IAAI,IAAI,CAAC,SAAS,KAAK,KAAK;YAAE,OAAO;QACrC,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;QACvB,0EAA0E;QAC1E,IAAI,CAAC,YAAY,EAAE,CAAC;IACrB,CAAC;IAED,oFAAoF;IACpF,WAAW,CAAC,CAAS,EAAE,CAAS,EAAE,CAAS,EAAE,CAAC,GAAG,CAAC;QACjD,IAAI,CAAC,QAAQ,GAAG,YAAY,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IAC1C,CAAC;IAED;;;;;OAKG;IACH,QAAQ,CAAC,KAAa,EAAE,QAAgB;QACvC,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,GAAG,IAAI,CAAC,CAAC;QAC/C,IAAI,CAAC,IAAI,GAAG,CAAC,IAAI,IAAI,EAAE,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC;QAC9C,IAAI,CAAC,QAAQ,GAAG,WAAW,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;IAC9C,CAAC;IAED,qEAAqE;IACrE,UAAU,CAAC,KAAa;QACvB,IAAI,CAAC,IAAI,GAAG,QAAQ,CAAC;QACrB,IAAI,CAAC,QAAQ,GAAG,WAAW,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;IACvC,CAAC;IAED,wCAAwC;IACxC,UAAU;QACT,IAAI,CAAC,IAAI,GAAG,QAAQ,CAAC;QACrB,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC;IACnB,CAAC;CACD"}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
export { ColorTransformBatcher, packColorAdd, packTintAdd, NO_COLOR_ADD } from './ColorTransformBatcher.ts';
|
|
2
2
|
export type { HasColorAdd } from './ColorTransformBatcher.ts';
|
|
3
3
|
export { TintedSprite, registerColorTransform } from './TintedSprite.ts';
|
|
4
|
-
export { applyImageModifiers, applyTextureModifiers, blendMatrix, blendPixels, channelScaleMatrix, channelSwapMatrix, colorShiftMatrix, croppedTexture, imageModifier, maskPixels, parseColorPairs, parseImagePath, parsePaletteLists, rotatePixels, } from './ImageModifiers.ts';
|
|
5
|
-
export type { ChannelSource, ImageModifier, ImageTextureProbe, ParsedImagePath, RotatedPixels } from './ImageModifiers.ts';
|
|
4
|
+
export { applyAllImageModifiers, applyImageModifiers, applyTextureModifiers, blendMatrix, blendPixels, channelScaleMatrix, channelSwapMatrix, colorShiftMatrix, croppedTexture, imageModifier, maskPixels, parseColorPairs, parseImagePath, parsePaletteLists, rotatePixels, spriteColorMatrix, } from './ImageModifiers.ts';
|
|
5
|
+
export type { ChannelSource, ImageModifier, ImageTextureProbe, ParsedImagePath, RotatedPixels, } from './ImageModifiers.ts';
|
|
6
6
|
export { AnimatedSprite, Animation } from './AnimatedSprite.ts';
|
|
7
7
|
export type { AnimationFrame, AnimationFrameInput, AnimationOptions } from './AnimatedSprite.ts';
|
|
8
8
|
export { SpriteSheet } from './SpriteSheet.ts';
|
|
@@ -37,11 +37,13 @@ export { blobIndex, autotileFrames, BLOB_SHAPES } from './Autotile.ts';
|
|
|
37
37
|
export type { NeighborMask } from './Autotile.ts';
|
|
38
38
|
export { hexRotate, matchTerrainRule, resolveTerrainGraphics, squareRotate } from './TerrainGraphics.ts';
|
|
39
39
|
export type { ResolveTerrainGraphicsOptions, TerrainCondition, TerrainFlagsAt, TerrainImage, TerrainPlacement, TerrainRotate, TerrainRule, } from './TerrainGraphics.ts';
|
|
40
|
+
export { TerrainGraphicsLayer } from './TerrainGraphicsLayer.ts';
|
|
41
|
+
export type { TerrainGraphicsLayerOptions } from './TerrainGraphicsLayer.ts';
|
|
40
42
|
export { inspectGraphicsCapabilities, detectWebGpu, RENDERING_DECISIONS } from './Capabilities.ts';
|
|
41
43
|
export type { GraphicsCapabilities, GraphicsProbe, GraphicsWorkload, RenderingDecision, WebGpuDetection, } from './Capabilities.ts';
|
|
42
44
|
export { Container2D, Rectangle2D, Texture2D, rectOf } from './Types2D.ts';
|
|
43
45
|
export type { Rect, TextureRegion } from './Types2D.ts';
|
|
44
|
-
export { Node2D, Shape2D, Text2D, Sprite2D, TiledSprite, Gradient } from './Shape2D.ts';
|
|
46
|
+
export { Node2D, Shape2D, Text2D, Sprite2D, TiledSprite, Gradient, createLayers } from './Shape2D.ts';
|
|
45
47
|
export { paletteRangeMapping, recolorTexture, remapPixels, withTextureCanvas } from './PaletteRemap.ts';
|
|
46
48
|
export type { PaletteMapping, PaletteRange, PaletteRemapMode, RecolorProbe, RemapCanvas, RemapCanvasContext, } from './PaletteRemap.ts';
|
|
47
49
|
export { loadTiledMap } from './TiledMap.ts';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/two-d/render/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,YAAY,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAC5G,YAAY,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AAE9D,OAAO,EAAE,YAAY,EAAE,sBAAsB,EAAE,MAAM,mBAAmB,CAAC;AACzE,OAAO,EACN,mBAAmB,EACnB,qBAAqB,EACrB,WAAW,EACX,WAAW,EACX,kBAAkB,EAClB,iBAAiB,EACjB,gBAAgB,EAChB,cAAc,EACd,aAAa,EACb,UAAU,EACV,eAAe,EACf,cAAc,EACd,iBAAiB,EACjB,YAAY,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/two-d/render/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
export { ColorTransformBatcher, packColorAdd, packTintAdd, NO_COLOR_ADD } from './ColorTransformBatcher.js';
|
|
2
2
|
export { TintedSprite, registerColorTransform } from './TintedSprite.js';
|
|
3
|
-
export { applyImageModifiers, applyTextureModifiers, blendMatrix, blendPixels, channelScaleMatrix, channelSwapMatrix, colorShiftMatrix, croppedTexture, imageModifier, maskPixels, parseColorPairs, parseImagePath, parsePaletteLists, rotatePixels, } from './ImageModifiers.js';
|
|
3
|
+
export { applyAllImageModifiers, applyImageModifiers, applyTextureModifiers, blendMatrix, blendPixels, channelScaleMatrix, channelSwapMatrix, colorShiftMatrix, croppedTexture, imageModifier, maskPixels, parseColorPairs, parseImagePath, parsePaletteLists, rotatePixels, spriteColorMatrix, } from './ImageModifiers.js';
|
|
4
4
|
export { AnimatedSprite, Animation } from './AnimatedSprite.js';
|
|
5
5
|
export { SpriteSheet } from './SpriteSheet.js';
|
|
6
6
|
export { Camera, createCamera, snapZoom } from './Camera.js';
|
|
@@ -19,9 +19,10 @@ export { ActorAnimator } from './ActorAnimator.js';
|
|
|
19
19
|
export { StatusVisuals } from './StatusVisuals.js';
|
|
20
20
|
export { blobIndex, autotileFrames, BLOB_SHAPES } from './Autotile.js';
|
|
21
21
|
export { hexRotate, matchTerrainRule, resolveTerrainGraphics, squareRotate } from './TerrainGraphics.js';
|
|
22
|
+
export { TerrainGraphicsLayer } from './TerrainGraphicsLayer.js';
|
|
22
23
|
export { inspectGraphicsCapabilities, detectWebGpu, RENDERING_DECISIONS } from './Capabilities.js';
|
|
23
24
|
export { Container2D, Rectangle2D, Texture2D, rectOf } from './Types2D.js';
|
|
24
|
-
export { Node2D, Shape2D, Text2D, Sprite2D, TiledSprite, Gradient } from './Shape2D.js';
|
|
25
|
+
export { Node2D, Shape2D, Text2D, Sprite2D, TiledSprite, Gradient, createLayers } from './Shape2D.js';
|
|
25
26
|
export { paletteRangeMapping, recolorTexture, remapPixels, withTextureCanvas } from './PaletteRemap.js';
|
|
26
27
|
export { loadTiledMap } from './TiledMap.js';
|
|
27
28
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/two-d/render/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,YAAY,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAG5G,OAAO,EAAE,YAAY,EAAE,sBAAsB,EAAE,MAAM,mBAAmB,CAAC;AACzE,OAAO,EACN,mBAAmB,EACnB,qBAAqB,EACrB,WAAW,EACX,WAAW,EACX,kBAAkB,EAClB,iBAAiB,EACjB,gBAAgB,EAChB,cAAc,EACd,aAAa,EACb,UAAU,EACV,eAAe,EACf,cAAc,EACd,iBAAiB,EACjB,YAAY,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/two-d/render/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,YAAY,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAG5G,OAAO,EAAE,YAAY,EAAE,sBAAsB,EAAE,MAAM,mBAAmB,CAAC;AACzE,OAAO,EACN,sBAAsB,EACtB,mBAAmB,EACnB,qBAAqB,EACrB,WAAW,EACX,WAAW,EACX,kBAAkB,EAClB,iBAAiB,EACjB,gBAAgB,EAChB,cAAc,EACd,aAAa,EACb,UAAU,EACV,eAAe,EACf,cAAc,EACd,iBAAiB,EACjB,YAAY,EACZ,iBAAiB,GACjB,MAAM,qBAAqB,CAAC;AAQ7B,OAAO,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAEhE,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAE7D,OAAO,EAAE,QAAQ,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAE5D,OAAO,EAAE,0BAA0B,EAAE,wBAAwB,EAAE,MAAM,qBAAqB,CAAC;AAG3F,OAAO,EAAE,OAAO,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AAEzE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAEzF,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAE7C,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAEjD,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAEzD,OAAO,EAAE,IAAI,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAGjD,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAGjD,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAGnD,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAGnD,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAGnD,OAAO,EAAE,SAAS,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAGvE,OAAO,EAAE,SAAS,EAAE,gBAAgB,EAAE,sBAAsB,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAWzG,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AAGjE,OAAO,EAAE,2BAA2B,EAAE,YAAY,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AASnG,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAE3E,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,WAAW,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAEtG,OAAO,EAAE,mBAAmB,EAAE,cAAc,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAUxG,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC"}
|
|
@@ -90,6 +90,15 @@ export declare class ListView extends Container {
|
|
|
90
90
|
move(delta: number): boolean;
|
|
91
91
|
select(index: number): void;
|
|
92
92
|
confirm(): boolean;
|
|
93
|
+
/**
|
|
94
|
+
* Selects and confirms row `index` in one step, the way a mouse or touch player expects
|
|
95
|
+
* from a menu row rather than a select-then-confirm keyboard sequence - the same pointer
|
|
96
|
+
* parity `IconGrid.tapCell` already gives its cells. A disabled row is a no-op, the same
|
|
97
|
+
* as an out-of-range one. This is what a row's own `pointerdown` handler calls, so a game
|
|
98
|
+
* driving the list programmatically (a test, a gamepad-to-pointer bridge) reaches the
|
|
99
|
+
* exact behaviour a real tap would.
|
|
100
|
+
*/
|
|
101
|
+
tapRow(index: number): void;
|
|
93
102
|
/** @returns true when the action was used */
|
|
94
103
|
handleAction(action: Action): boolean;
|
|
95
104
|
private refresh;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ListView.d.ts","sourceRoot":"","sources":["../../../src/two-d/ui/ListView.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAY,MAAM,SAAS,CAAC;AAC9C,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAIlD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAExD,MAAM,WAAW,QAAQ;IACxB,yBAAyB;IACzB,IAAI,EAAE,MAAM,CAAC;IAEb,uDAAuD;IACvD,QAAQ,CAAC,EAAE,OAAO,CAAC;IAEnB,iEAAiE;IACjE,KAAK,CAAC,EAAE,OAAO,CAAC;IAEhB,qEAAqE;IACrE,IAAI,CAAC,EAAE,WAAW,CAAC;CACnB;AAED,MAAM,WAAW,eAAe;IAC/B,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,QAAQ,EAAE,CAAC;IAEnB,sDAAsD;IACtD,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACnD,WAAW,CAAC,EAAE,CAAC,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;CACtD;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AACH,qBAAa,QAAS,SAAQ,SAAS;IACtC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAGvB;IACH,OAAO,CAAC,IAAI,CAAmB;IAE/B,OAAO,CAAC,SAAS,CAAmB;IACpC,OAAO,CAAC,SAAS,CAAkB;IACnC,OAAO,CAAC,KAAK,CAAkB;IAE/B,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAU;IAE5C,OAAO,CAAC,MAAM,CAAK;IAEnB,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAwB;IAEtD,QAAQ,EAAE,CAAC,CAAC,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC,GAAG,IAAI,CAAC;IAC3D,WAAW,EAAE,CAAC,CAAC,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC,GAAG,IAAI,CAAC;IAE9D,YAAY,OAAO,EAAE,eAAe,EA6BnC;IAED;;;;;;OAMG;IACH,OAAO,CAAC,OAAO;IA2BN,OAAO,CAAC,OAAO,CAAC,EAAE,UAAU,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAGpE;IAED,OAAO,CAAC,QAAQ;IAIhB,IAAI,WAAW,IAAI,MAAM,CAExB;IAED,IAAI,aAAa,IAAI,MAAM,CAE1B;IAED,IAAI,QAAQ,IAAI,QAAQ,GAAG,IAAI,CAE9B;IAED,IAAI,MAAM,IAAI,MAAM,CAEnB;IAED,QAAQ,CAAC,KAAK,EAAE,QAAQ,EAAE,GAAG,IAAI,
|
|
1
|
+
{"version":3,"file":"ListView.d.ts","sourceRoot":"","sources":["../../../src/two-d/ui/ListView.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAY,MAAM,SAAS,CAAC;AAC9C,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAIlD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAExD,MAAM,WAAW,QAAQ;IACxB,yBAAyB;IACzB,IAAI,EAAE,MAAM,CAAC;IAEb,uDAAuD;IACvD,QAAQ,CAAC,EAAE,OAAO,CAAC;IAEnB,iEAAiE;IACjE,KAAK,CAAC,EAAE,OAAO,CAAC;IAEhB,qEAAqE;IACrE,IAAI,CAAC,EAAE,WAAW,CAAC;CACnB;AAED,MAAM,WAAW,eAAe;IAC/B,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,QAAQ,EAAE,CAAC;IAEnB,sDAAsD;IACtD,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACnD,WAAW,CAAC,EAAE,CAAC,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;CACtD;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AACH,qBAAa,QAAS,SAAQ,SAAS;IACtC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAGvB;IACH,OAAO,CAAC,IAAI,CAAmB;IAE/B,OAAO,CAAC,SAAS,CAAmB;IACpC,OAAO,CAAC,SAAS,CAAkB;IACnC,OAAO,CAAC,KAAK,CAAkB;IAE/B,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAU;IAE5C,OAAO,CAAC,MAAM,CAAK;IAEnB,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAwB;IAEtD,QAAQ,EAAE,CAAC,CAAC,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC,GAAG,IAAI,CAAC;IAC3D,WAAW,EAAE,CAAC,CAAC,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC,GAAG,IAAI,CAAC;IAE9D,YAAY,OAAO,EAAE,eAAe,EA6BnC;IAED;;;;;;OAMG;IACH,OAAO,CAAC,OAAO;IA2BN,OAAO,CAAC,OAAO,CAAC,EAAE,UAAU,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAGpE;IAED,OAAO,CAAC,QAAQ;IAIhB,IAAI,WAAW,IAAI,MAAM,CAExB;IAED,IAAI,aAAa,IAAI,MAAM,CAE1B;IAED,IAAI,QAAQ,IAAI,QAAQ,GAAG,IAAI,CAE9B;IAED,IAAI,MAAM,IAAI,MAAM,CAEnB;IAED,QAAQ,CAAC,KAAK,EAAE,QAAQ,EAAE,GAAG,IAAI,CA0ChC;IAED,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,CAK1C;IAED;;;;;OAKG;IACH,IAAI,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAE3B;IAED,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAE1B;IAED,OAAO,IAAI,OAAO,CAEjB;IAED;;;;;;;OAOG;IACH,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAK1B;IAED,6CAA6C;IAC7C,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAWpC;IAED,OAAO,CAAC,OAAO;CA0Bf"}
|
|
@@ -134,12 +134,7 @@ export class ListView extends Container {
|
|
|
134
134
|
//a tap selects and confirms in one step, the way a mouse/touch player expects
|
|
135
135
|
//from a menu row - IconGrid's cells already work this way, this closes the same
|
|
136
136
|
//gap on ListView, which was keyboard-only until now
|
|
137
|
-
row.on('pointerdown', () =>
|
|
138
|
-
if (item.disabled)
|
|
139
|
-
return;
|
|
140
|
-
this.select(i);
|
|
141
|
-
this.confirm();
|
|
142
|
-
});
|
|
137
|
+
row.on('pointerdown', () => this.tapRow(i));
|
|
143
138
|
if (item.icon) {
|
|
144
139
|
item.icon.x = rtl ? this.viewWidth - t.spacing - this.rowHeight : t.spacing;
|
|
145
140
|
row.addChild(item.icon);
|
|
@@ -181,6 +176,21 @@ export class ListView extends Container {
|
|
|
181
176
|
confirm() {
|
|
182
177
|
return this.selection.confirm(this.onSelect);
|
|
183
178
|
}
|
|
179
|
+
/**
|
|
180
|
+
* Selects and confirms row `index` in one step, the way a mouse or touch player expects
|
|
181
|
+
* from a menu row rather than a select-then-confirm keyboard sequence - the same pointer
|
|
182
|
+
* parity `IconGrid.tapCell` already gives its cells. A disabled row is a no-op, the same
|
|
183
|
+
* as an out-of-range one. This is what a row's own `pointerdown` handler calls, so a game
|
|
184
|
+
* driving the list programmatically (a test, a gamepad-to-pointer bridge) reaches the
|
|
185
|
+
* exact behaviour a real tap would.
|
|
186
|
+
*/
|
|
187
|
+
tapRow(index) {
|
|
188
|
+
const items = this.selection.items;
|
|
189
|
+
if (index < 0 || index >= items.length || items[index].disabled)
|
|
190
|
+
return;
|
|
191
|
+
this.select(index);
|
|
192
|
+
this.confirm();
|
|
193
|
+
}
|
|
184
194
|
/** @returns true when the action was used */
|
|
185
195
|
handleAction(action) {
|
|
186
196
|
switch (action) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ListView.js","sourceRoot":"","sources":["../../../src/two-d/ui/ListView.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAE9C,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAE,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AA6BjD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AACH,MAAM,OAAO,QAAS,SAAQ,SAAS;IAuBtC,YAAY,OAAwB;QACnC,KAAK,EAAE,CAAC;QAvBQ,cAAS,GAAG,IAAI,cAAc,CAAW;YACzD,QAAQ,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,OAAO,EAAE;YAC9B,WAAW,EAAE,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,IAAI,EAAE,KAAK,CAAC;SAC7D,CAAC,CAAC;QACK,SAAI,GAAgB,EAAE,CAAC;QAEvB,cAAS,GAAG,IAAI,SAAS,EAAE,CAAC;QAC5B,cAAS,GAAG,IAAI,QAAQ,EAAE,CAAC;QAC3B,UAAK,GAAG,IAAI,QAAQ,EAAE,CAAC;QAOvB,WAAM,GAAG,CAAC,CAAC;QAEF,kBAAa,GAAG,GAAG,EAAE,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;QAQrD,MAAM,CAAC,GAAG,KAAK,EAAE,CAAC;QAClB,IAAI,CAAC,SAAS,GAAG,OAAO,CAAC,KAAK,CAAC;QAC/B,IAAI,CAAC,UAAU,GAAG,OAAO,CAAC,MAAM,CAAC;QACjC,IAAI,CAAC,iBAAiB,GAAG,OAAO,CAAC,SAAS,KAAK,SAAS,CAAC;QACzD,IAAI,CAAC,SAAS,GAAG,OAAO,CAAC,SAAS,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC;QAC7F,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC,QAAQ,IAAI,IAAI,CAAC;QACzC,IAAI,CAAC,WAAW,GAAG,OAAO,CAAC,WAAW,IAAI,IAAI,CAAC;QAE/C,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAC9B,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAE9B,sEAAsE;QACtE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC1B,IAAI,CAAC,SAAS,CAAC,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC;QACjC,IAAI,CAAC,QAAQ,EAAE,CAAC;QAEhB,gFAAgF;QAChF,+EAA+E;QAC/E,6EAA6E;QAC7E,8EAA8E;QAC9E,8EAA8E;QAC9E,IAAI,CAAC,SAAS,GAAG,QAAQ,CAAC;QAC1B,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAElE,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC;QACnC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;IACtC,CAAC;IAED;;;;;;OAMG;IACK,OAAO;QACd,MAAM,CAAC,GAAG,KAAK,EAAE,CAAC;QAClB,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE,CAAC;YAC7B,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC;QACzE,CAAC;QACD,MAAM,GAAG,GAAG,CAAC,CAAC,SAAS,KAAK,KAAK,CAAC;QAClC,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC;QAEnC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE;YAC5B,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC;YAC3B,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;YAEtB,MAAM,KAAK,GAAG,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,KAAK,EAAkB,EAAE,CAAC,KAAK,YAAY,KAAK,CAAC,CAAC;YACnF,IAAI,KAAK,EAAE,CAAC;gBACX,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;gBAC/D,MAAM,SAAS,GAAG,CAAC,CAAC,OAAO,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gBAC/D,KAAK,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,GAAG,SAAS,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC;gBACrE,KAAK,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;YAC3D,CAAC;YACD,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;gBACf,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC;YAC7E,CAAC;QACF,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,OAAO,EAAE,CAAC;IAChB,CAAC;IAEQ,OAAO,CAAC,OAA6C;QAC7D,YAAY,CAAC,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QACxC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IACxB,CAAC;IAEO,QAAQ;QACf,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC;IAC1F,CAAC;IAED,IAAI,WAAW;QACd,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC;IAClE,CAAC;IAED,IAAI,aAAa;QAChB,OAAO,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC;IACrC,CAAC;IAED,IAAI,QAAQ;QACX,OAAO,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC;IAChC,CAAC;IAED,IAAI,MAAM;QACT,OAAO,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC;IAC9B,CAAC;IAED,QAAQ,CAAC,KAAiB;QACzB,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,IAAI;YAAE,GAAG,CAAC,OAAO,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;QAC7D,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC;QACf,IAAI,CAAC,SAAS,CAAC,cAAc,EAAE,CAAC;QAEhC,MAAM,CAAC,GAAG,KAAK,EAAE,CAAC;QAClB,kFAAkF;QAClF,wEAAwE;QACxE,MAAM,GAAG,GAAG,CAAC,CAAC,SAAS,KAAK,KAAK,CAAC;QAElC,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE;YACzB,MAAM,GAAG,GAAG,IAAI,SAAS,EAAE,CAAC;YAC5B,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC;YAC3B,GAAG,CAAC,SAAS,GAAG,QAAQ,CAAC;YACzB,GAAG,CAAC,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC;YACnD,8EAA8E;YAC9E,gFAAgF;YAChF,oDAAoD;YACpD,GAAG,CAAC,EAAE,CAAC,aAAa,EAAE,GAAG,EAAE
|
|
1
|
+
{"version":3,"file":"ListView.js","sourceRoot":"","sources":["../../../src/two-d/ui/ListView.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
import { Container, type TextStyleOptions } from 'pixi.js';
|
|
2
|
+
import type { Texture2D } from '../render/Types2D.ts';
|
|
3
|
+
import { type MarkupAlign, type MarkupDirection } from './markup.ts';
|
|
4
|
+
export interface MarkupTextOptions {
|
|
5
|
+
text?: string;
|
|
6
|
+
/** wrap width in pixels; omit for a single unwrapped line */
|
|
7
|
+
maxWidth?: number;
|
|
8
|
+
/** distance between baselines; defaults to the theme's size times line height */
|
|
9
|
+
lineHeight?: number;
|
|
10
|
+
align?: MarkupAlign;
|
|
11
|
+
/** flow direction; defaults to the theme's `direction` */
|
|
12
|
+
direction?: MarkupDirection;
|
|
13
|
+
/** text texture resolution; omit for the renderer default */
|
|
14
|
+
resolution?: number;
|
|
15
|
+
/** how an `<img>` path becomes a texture; defaults to the asset resolver with a `Texture.EMPTY` fallback */
|
|
16
|
+
resolveImage?: (path: string) => Texture2D;
|
|
17
|
+
/** what a `$name` in the text becomes, the same contract `parseMarkup` takes */
|
|
18
|
+
variables?: Readonly<Record<string, string>>;
|
|
19
|
+
/**
|
|
20
|
+
* Pixi `Text` tag styles for custom inline tags, the same option a bare `Text2D` takes:
|
|
21
|
+
* supplying `<quest>`, say, makes `<quest>...</quest>` a styled run rather than literal text.
|
|
22
|
+
*/
|
|
23
|
+
tagStyles?: Readonly<Record<string, TextStyleOptions>>;
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* The canvas backend for inline markup, and the counterpart to `RichLabel`'s HTML text: the same
|
|
27
|
+
* `MarkupSpan` stream, laid out once by `layoutMarkupLines` and `positionMarkupLines`, drawn here
|
|
28
|
+
* as one `Text2D` per styled run (colour, size, emphasis) and one `Sprite2D` per `<img>` span,
|
|
29
|
+
* resolved through the asset resolver. That split is the point - Pixi's `HTMLText` (which
|
|
30
|
+
* `RichLabel` builds on) renders emphasis but has no inline-image primitive, so an image would
|
|
31
|
+
* otherwise be dropped or a caller would have to position it itself at a `layoutMarkupLines`
|
|
32
|
+
* offset by hand. This class is the component that does that wiring.
|
|
33
|
+
*
|
|
34
|
+
* Costs more than a `Label` (one drawable per run), so it is for descriptions, dialogue lines
|
|
35
|
+
* and help bodies, not per-frame numbers - the same guidance `RichLabel` already carries.
|
|
36
|
+
*
|
|
37
|
+
* @example
|
|
38
|
+
* ```ts
|
|
39
|
+
* import { MarkupText } from '@datamoc/mw_games/two-d/ui';
|
|
40
|
+
*
|
|
41
|
+
* const description = new MarkupText({ text: 'Pay <b>10</b> gold<img>coin.png</img>', maxWidth: 240 });
|
|
42
|
+
* description.setText('Pay <b>15</b> gold<img>coin.png</img>');
|
|
43
|
+
* ```
|
|
44
|
+
*/
|
|
45
|
+
export declare class MarkupText extends Container {
|
|
46
|
+
private readonly opts;
|
|
47
|
+
private readonly themeListener;
|
|
48
|
+
constructor(options?: MarkupTextOptions);
|
|
49
|
+
/** replaces the markup source and redraws, so a description can be updated in place */
|
|
50
|
+
setText(value: string): void;
|
|
51
|
+
/** re-parses, re-lays-out and re-draws; a theme change must re-measure against the new font */
|
|
52
|
+
private rebuild;
|
|
53
|
+
private measurePiece;
|
|
54
|
+
/** the Pixi tag style for a run's custom tag, or undefined for a built-in styled run */
|
|
55
|
+
private tagStyle;
|
|
56
|
+
/**
|
|
57
|
+
* The font a run is measured and drawn with: a custom tag's own family/size/weight/style when it
|
|
58
|
+
* sets them, the run's built-in style otherwise. Both `measurePiece` and `textFor` read this, so
|
|
59
|
+
* a tag's larger font wraps where its wider glyphs land rather than where the base font would.
|
|
60
|
+
*/
|
|
61
|
+
private resolvedFont;
|
|
62
|
+
private textFor;
|
|
63
|
+
private spriteFor;
|
|
64
|
+
destroy(options?: Parameters<Container['destroy']>[0]): void;
|
|
65
|
+
}
|
|
66
|
+
//# sourceMappingURL=MarkupText.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MarkupText.d.ts","sourceRoot":"","sources":["../../../src/two-d/ui/MarkupText.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAW,KAAK,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAEpE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAEtD,OAAO,EAIN,KAAK,WAAW,EAChB,KAAK,eAAe,EAGpB,MAAM,aAAa,CAAC;AAGrB,MAAM,WAAW,iBAAiB;IACjC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,6DAA6D;IAC7D,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,iFAAiF;IACjF,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE,WAAW,CAAC;IACpB,0DAA0D;IAC1D,SAAS,CAAC,EAAE,eAAe,CAAC;IAC5B,6DAA6D;IAC7D,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,4GAA4G;IAC5G,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,SAAS,CAAC;IAC3C,gFAAgF;IAChF,SAAS,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IAC7C;;;OAGG;IACH,SAAS,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAC,CAAC;CACvD;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,qBAAa,UAAW,SAAQ,SAAS;IACxC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAoB;IACzC,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAiC;IAE/D,YAAY,OAAO,GAAE,iBAAsB,EAK1C;IAED,uFAAuF;IACvF,OAAO,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAG3B;IAED,+FAA+F;IAC/F,OAAO,CAAC,OAAO;IAoCf,OAAO,CAAC,YAAY;IAcpB,wFAAwF;IACxF,OAAO,CAAC,QAAQ;IAIhB;;;;OAIG;IACH,OAAO,CAAC,YAAY;IAapB,OAAO,CAAC,OAAO;IAkBf,OAAO,CAAC,SAAS;IASR,OAAO,CAAC,OAAO,CAAC,EAAE,UAAU,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAGpE;CACD"}
|
|
@@ -0,0 +1,156 @@
|
|
|
1
|
+
import { Container, Texture } from 'pixi.js';
|
|
2
|
+
import { Sprite2D, Text2D } from '../render/Shape2D.js';
|
|
3
|
+
import { texture } from '../../assets/loader.js';
|
|
4
|
+
import { layoutMarkupLines, parseMarkup, positionMarkupLines, } from './markup.js';
|
|
5
|
+
import { theme, themeChanged } from './theme.js';
|
|
6
|
+
/**
|
|
7
|
+
* The canvas backend for inline markup, and the counterpart to `RichLabel`'s HTML text: the same
|
|
8
|
+
* `MarkupSpan` stream, laid out once by `layoutMarkupLines` and `positionMarkupLines`, drawn here
|
|
9
|
+
* as one `Text2D` per styled run (colour, size, emphasis) and one `Sprite2D` per `<img>` span,
|
|
10
|
+
* resolved through the asset resolver. That split is the point - Pixi's `HTMLText` (which
|
|
11
|
+
* `RichLabel` builds on) renders emphasis but has no inline-image primitive, so an image would
|
|
12
|
+
* otherwise be dropped or a caller would have to position it itself at a `layoutMarkupLines`
|
|
13
|
+
* offset by hand. This class is the component that does that wiring.
|
|
14
|
+
*
|
|
15
|
+
* Costs more than a `Label` (one drawable per run), so it is for descriptions, dialogue lines
|
|
16
|
+
* and help bodies, not per-frame numbers - the same guidance `RichLabel` already carries.
|
|
17
|
+
*
|
|
18
|
+
* @example
|
|
19
|
+
* ```ts
|
|
20
|
+
* import { MarkupText } from '@datamoc/mw_games/two-d/ui';
|
|
21
|
+
*
|
|
22
|
+
* const description = new MarkupText({ text: 'Pay <b>10</b> gold<img>coin.png</img>', maxWidth: 240 });
|
|
23
|
+
* description.setText('Pay <b>15</b> gold<img>coin.png</img>');
|
|
24
|
+
* ```
|
|
25
|
+
*/
|
|
26
|
+
export class MarkupText extends Container {
|
|
27
|
+
constructor(options = {}) {
|
|
28
|
+
super();
|
|
29
|
+
this.themeListener = (t) => this.rebuild(t);
|
|
30
|
+
this.opts = options;
|
|
31
|
+
this.rebuild(theme());
|
|
32
|
+
themeChanged.add(this.themeListener);
|
|
33
|
+
}
|
|
34
|
+
/** replaces the markup source and redraws, so a description can be updated in place */
|
|
35
|
+
setText(value) {
|
|
36
|
+
this.opts.text = value;
|
|
37
|
+
this.rebuild(theme());
|
|
38
|
+
}
|
|
39
|
+
/** re-parses, re-lays-out and re-draws; a theme change must re-measure against the new font */
|
|
40
|
+
rebuild(t) {
|
|
41
|
+
for (const child of this.removeChildren())
|
|
42
|
+
child.destroy();
|
|
43
|
+
const lineHeight = this.opts.lineHeight ?? t.font.size * t.font.lineHeight;
|
|
44
|
+
const wrapWidth = this.opts.maxWidth ?? Number.POSITIVE_INFINITY;
|
|
45
|
+
const alignWidth = this.opts.maxWidth ?? 0;
|
|
46
|
+
const direction = this.opts.direction ?? t.direction;
|
|
47
|
+
const resolveImage = this.opts.resolveImage ?? ((path) => texture(path, Texture.EMPTY));
|
|
48
|
+
const context = canvasContext();
|
|
49
|
+
const measure = (piece) => this.measurePiece(piece, t, lineHeight, resolveImage, context);
|
|
50
|
+
const tagStyles = this.opts.tagStyles;
|
|
51
|
+
const spans = parseMarkup(this.opts.text ?? '', {
|
|
52
|
+
variables: this.opts.variables,
|
|
53
|
+
tags: tagStyles === undefined ? undefined : new Set(Object.keys(tagStyles)),
|
|
54
|
+
});
|
|
55
|
+
const lines = layoutMarkupLines(spans, measure, wrapWidth);
|
|
56
|
+
const runs = positionMarkupLines(lines, {
|
|
57
|
+
measure,
|
|
58
|
+
maxWidth: alignWidth,
|
|
59
|
+
lineHeight,
|
|
60
|
+
direction,
|
|
61
|
+
align: this.opts.align ?? (this.opts.maxWidth === undefined ? 'left' : undefined),
|
|
62
|
+
});
|
|
63
|
+
for (const run of runs) {
|
|
64
|
+
const child = run.span.image !== undefined
|
|
65
|
+
? this.spriteFor(run.span.image, lineHeight, resolveImage)
|
|
66
|
+
: this.textFor(run.span, t, lineHeight);
|
|
67
|
+
child.x = run.x;
|
|
68
|
+
child.y = run.y;
|
|
69
|
+
this.addChild(child);
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
measurePiece(piece, t, lineHeight, resolveImage, context) {
|
|
73
|
+
if (piece.image !== undefined)
|
|
74
|
+
return imageDisplaySize(resolveImage(piece.image), lineHeight).width;
|
|
75
|
+
const font = this.resolvedFont(piece, t);
|
|
76
|
+
if (!context)
|
|
77
|
+
return piece.text.length * font.size;
|
|
78
|
+
context.font = `${font.italic ? 'italic ' : ''}${font.bold ? 'bold ' : ''}${font.size}px ${font.family}`;
|
|
79
|
+
return context.measureText(piece.text).width;
|
|
80
|
+
}
|
|
81
|
+
/** the Pixi tag style for a run's custom tag, or undefined for a built-in styled run */
|
|
82
|
+
tagStyle(tag) {
|
|
83
|
+
return tag === undefined || this.opts.tagStyles === undefined ? undefined : this.opts.tagStyles[tag];
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* The font a run is measured and drawn with: a custom tag's own family/size/weight/style when it
|
|
87
|
+
* sets them, the run's built-in style otherwise. Both `measurePiece` and `textFor` read this, so
|
|
88
|
+
* a tag's larger font wraps where its wider glyphs land rather than where the base font would.
|
|
89
|
+
*/
|
|
90
|
+
resolvedFont(piece, t) {
|
|
91
|
+
const tag = this.tagStyle(piece.tag);
|
|
92
|
+
return {
|
|
93
|
+
family: typeof tag?.fontFamily === 'string' ? tag.fontFamily : t.font.family,
|
|
94
|
+
size: typeof tag?.fontSize === 'number' ? tag.fontSize : (piece.size ?? t.font.size),
|
|
95
|
+
bold: tag?.fontWeight !== undefined ? fontWeightIsBold(tag.fontWeight) : piece.bold,
|
|
96
|
+
italic: tag?.fontStyle !== undefined ? fontStyleIsItalic(tag.fontStyle) : piece.italic,
|
|
97
|
+
};
|
|
98
|
+
}
|
|
99
|
+
textFor(span, t, lineHeight) {
|
|
100
|
+
const font = this.resolvedFont(span, t);
|
|
101
|
+
const tag = this.tagStyle(span.tag);
|
|
102
|
+
return new Text2D({
|
|
103
|
+
text: span.text,
|
|
104
|
+
resolution: this.opts.resolution,
|
|
105
|
+
style: {
|
|
106
|
+
fontFamily: font.family,
|
|
107
|
+
fontSize: font.size,
|
|
108
|
+
fontWeight: font.bold ? 'bold' : 'normal',
|
|
109
|
+
fontStyle: font.italic ? 'italic' : 'normal',
|
|
110
|
+
fill: span.color ?? t.color.text,
|
|
111
|
+
lineHeight,
|
|
112
|
+
...tag,
|
|
113
|
+
},
|
|
114
|
+
});
|
|
115
|
+
}
|
|
116
|
+
spriteFor(path, lineHeight, resolveImage) {
|
|
117
|
+
const tex = resolveImage(path);
|
|
118
|
+
const size = imageDisplaySize(tex, lineHeight);
|
|
119
|
+
const sprite = new Sprite2D(tex);
|
|
120
|
+
sprite.width = size.width;
|
|
121
|
+
sprite.height = size.height;
|
|
122
|
+
return sprite;
|
|
123
|
+
}
|
|
124
|
+
destroy(options) {
|
|
125
|
+
themeChanged.remove(this.themeListener);
|
|
126
|
+
super.destroy(options);
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
/** a shared canvas 2D context, the same way Pixi's own `Text` measurement works under the hood */
|
|
130
|
+
let measureContext = null;
|
|
131
|
+
function canvasContext() {
|
|
132
|
+
if (typeof document === 'undefined')
|
|
133
|
+
return null;
|
|
134
|
+
measureContext ??= document.createElement('canvas').getContext('2d');
|
|
135
|
+
return measureContext;
|
|
136
|
+
}
|
|
137
|
+
/** whether a Pixi font weight reads as bold, for measuring a run under its tag's style */
|
|
138
|
+
function fontWeightIsBold(weight) {
|
|
139
|
+
if (weight === 'bold' || weight === 'bolder')
|
|
140
|
+
return true;
|
|
141
|
+
if (weight === 'normal' || weight === 'lighter')
|
|
142
|
+
return false;
|
|
143
|
+
const numeric = Number(weight);
|
|
144
|
+
return Number.isFinite(numeric) && numeric >= 600;
|
|
145
|
+
}
|
|
146
|
+
/** whether a Pixi font style reads as italic, for measuring a run under its tag's style */
|
|
147
|
+
function fontStyleIsItalic(style) {
|
|
148
|
+
return style === 'italic' || style === 'oblique';
|
|
149
|
+
}
|
|
150
|
+
/** an image run's drawn size: the line's own height, with the texture's aspect ratio kept */
|
|
151
|
+
function imageDisplaySize(tex, lineHeight) {
|
|
152
|
+
const width = tex.width > 0 ? tex.width : lineHeight;
|
|
153
|
+
const height = tex.height > 0 ? tex.height : lineHeight;
|
|
154
|
+
return { width: width * (lineHeight / height), height: lineHeight };
|
|
155
|
+
}
|
|
156
|
+
//# sourceMappingURL=MarkupText.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MarkupText.js","sourceRoot":"","sources":["../../../src/two-d/ui/MarkupText.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,8 +1,13 @@
|
|
|
1
|
-
import { HTMLText } from 'pixi.js';
|
|
1
|
+
import { HTMLText, type HTMLTextStyleOptions } from 'pixi.js';
|
|
2
2
|
import { type ThemedTextOptions } from './themedText.ts';
|
|
3
3
|
export interface RichLabelOptions extends ThemedTextOptions {
|
|
4
4
|
/** Text texture resolution; omit to use the renderer default. */
|
|
5
5
|
resolution?: number;
|
|
6
|
+
/**
|
|
7
|
+
* Pixi `HTMLText` tag styles for custom inline tags, the same option a bare `Text2D` takes:
|
|
8
|
+
* supplying `<quest>`, say, makes `<quest>...</quest>` a styled run rather than escaped text.
|
|
9
|
+
*/
|
|
10
|
+
tagStyles?: Record<string, HTMLTextStyleOptions>;
|
|
6
11
|
}
|
|
7
12
|
/**
|
|
8
13
|
* A label that renders basic inline markdown (`**bold**`, `__bold__`, `*italic*`,
|
|
@@ -26,6 +31,7 @@ export interface RichLabelOptions extends ThemedTextOptions {
|
|
|
26
31
|
*/
|
|
27
32
|
export declare class RichLabel extends HTMLText {
|
|
28
33
|
private readonly opts;
|
|
34
|
+
private readonly tags;
|
|
29
35
|
private readonly themeListener;
|
|
30
36
|
private revealSpans;
|
|
31
37
|
private reveal;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RichLabel.d.ts","sourceRoot":"","sources":["../../../src/two-d/ui/RichLabel.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAiB,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"RichLabel.d.ts","sourceRoot":"","sources":["../../../src/two-d/ui/RichLabel.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAiB,KAAK,oBAAoB,EAAE,MAAM,SAAS,CAAC;AAE7E,OAAO,EAAqC,KAAK,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AAI5F,MAAM,WAAW,gBAAiB,SAAQ,iBAAiB;IAC1D,iEAAiE;IACjE,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB;;;OAGG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,oBAAoB,CAAC,CAAC;CACjD;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,qBAAa,SAAU,SAAQ,QAAQ;IACtC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAmB;IACxC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAoB;IACzC,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAiC;IAC/D,OAAO,CAAC,WAAW,CAA+B;IAClD,OAAO,CAAC,MAAM,CAA4B;IAE1C,YAAY,OAAO,GAAE,gBAAgB,GAAG,MAAW,EAyBlD;IAED,6EAA6E;IAC7E,OAAO,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAM3B;IAED;;;;;;OAMG;IACH,eAAe,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAInD;IAED,gFAAgF;IAChF,YAAY,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAKhC;IAED,+CAA+C;IAC/C,cAAc,IAAI,IAAI,CAIrB;IAED,OAAO,CAAC,cAAc;IAOtB;;;;OAIG;IACH,OAAO,CAAC,OAAO;IAUN,OAAO,CAAC,OAAO,CAAC,EAAE,UAAU,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAGnE;CACD"}
|
|
@@ -27,8 +27,9 @@ export class RichLabel extends HTMLText {
|
|
|
27
27
|
constructor(options = {}) {
|
|
28
28
|
const opts = normalizeTextOptions(options);
|
|
29
29
|
const t = theme();
|
|
30
|
+
const tags = opts.tagStyles === undefined ? [] : Object.keys(opts.tagStyles);
|
|
30
31
|
super({
|
|
31
|
-
text: toHtml(opts.text ?? ''),
|
|
32
|
+
text: toHtml(opts.text ?? '', tags),
|
|
32
33
|
resolution: opts.resolution,
|
|
33
34
|
style: new HTMLTextStyle({
|
|
34
35
|
fontFamily: t.font.family,
|
|
@@ -40,12 +41,14 @@ export class RichLabel extends HTMLText {
|
|
|
40
41
|
wordWrap: opts.wrapWidth !== undefined,
|
|
41
42
|
wordWrapWidth: opts.wrapWidth ?? 0,
|
|
42
43
|
breakWords: true,
|
|
44
|
+
tagStyles: opts.tagStyles,
|
|
43
45
|
}),
|
|
44
46
|
});
|
|
45
47
|
this.themeListener = (t) => this.restyle(t);
|
|
46
48
|
this.revealSpans = null;
|
|
47
49
|
this.reveal = null;
|
|
48
50
|
this.opts = opts;
|
|
51
|
+
this.tags = tags;
|
|
49
52
|
themeChanged.add(this.themeListener);
|
|
50
53
|
}
|
|
51
54
|
/** avoids the re-render when the markdown source has not actually changed */
|
|
@@ -53,7 +56,7 @@ export class RichLabel extends HTMLText {
|
|
|
53
56
|
//an instant set cancels any reveal in progress - the two never interleave
|
|
54
57
|
this.revealSpans = null;
|
|
55
58
|
this.reveal = null;
|
|
56
|
-
const html = toHtml(value);
|
|
59
|
+
const html = toHtml(value, this.tags);
|
|
57
60
|
if (this.text !== html)
|
|
58
61
|
this.text = html;
|
|
59
62
|
}
|
|
@@ -88,7 +91,7 @@ export class RichLabel extends HTMLText {
|
|
|
88
91
|
if (!this.reveal || !this.revealSpans)
|
|
89
92
|
return;
|
|
90
93
|
//through the field rather than setText, which cancels a reveal in progress
|
|
91
|
-
const html = toHtmlSpans(sliceSpans(this.revealSpans, this.reveal.revealed));
|
|
94
|
+
const html = toHtmlSpans(sliceSpans(this.revealSpans, this.reveal.revealed), this.tags);
|
|
92
95
|
if (this.text !== html)
|
|
93
96
|
this.text = html;
|
|
94
97
|
}
|
|
@@ -114,13 +117,13 @@ export class RichLabel extends HTMLText {
|
|
|
114
117
|
}
|
|
115
118
|
}
|
|
116
119
|
/** styled spans to an HTML fragment; literal text is escaped so `a < b` never parses */
|
|
117
|
-
function toHtml(source) {
|
|
118
|
-
return toHtmlSpans(parseMarkdown(source));
|
|
120
|
+
function toHtml(source, tags) {
|
|
121
|
+
return toHtmlSpans(parseMarkdown(source), tags);
|
|
119
122
|
}
|
|
120
|
-
function toHtmlSpans(spans) {
|
|
123
|
+
function toHtmlSpans(spans, tags) {
|
|
121
124
|
return spans
|
|
122
125
|
.map((span) => {
|
|
123
|
-
let text = escapeHtml(span.text);
|
|
126
|
+
let text = escapeHtml(span.text, tags);
|
|
124
127
|
if (span.italic)
|
|
125
128
|
text = `<i>${text}</i>`;
|
|
126
129
|
if (span.bold)
|
|
@@ -129,7 +132,15 @@ function toHtmlSpans(spans) {
|
|
|
129
132
|
})
|
|
130
133
|
.join('');
|
|
131
134
|
}
|
|
132
|
-
|
|
133
|
-
|
|
135
|
+
/**
|
|
136
|
+
* Escapes literal text, then un-escapes the registered custom tags again, so `a < b` never parses
|
|
137
|
+
* but `<quest>...</quest>` survives as a real element for `HTMLText`'s own `tagStyles` to match.
|
|
138
|
+
*/
|
|
139
|
+
function escapeHtml(text, tags) {
|
|
140
|
+
let html = text.replaceAll('&', '&').replaceAll('<', '<').replaceAll('>', '>');
|
|
141
|
+
for (const tag of tags) {
|
|
142
|
+
html = html.replaceAll(`<${tag}>`, `<${tag}>`).replaceAll(`</${tag}>`, `</${tag}>`);
|
|
143
|
+
}
|
|
144
|
+
return html;
|
|
134
145
|
}
|
|
135
146
|
//# sourceMappingURL=RichLabel.js.map
|