@datamoc/mw_games 0.1.1 → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +57 -32
- package/dist/actors/Appearances.js +1 -1
- package/dist/actors/Aura.d.ts +29 -0
- package/dist/actors/Aura.d.ts.map +1 -0
- package/dist/actors/Aura.js +69 -0
- package/dist/actors/Aura.js.map +1 -0
- package/dist/actors/ItemStatusEffect.d.ts +27 -0
- package/dist/actors/ItemStatusEffect.d.ts.map +1 -0
- package/dist/actors/ItemStatusEffect.js +35 -0
- package/dist/actors/ItemStatusEffect.js.map +1 -0
- package/dist/actors/Resource.d.ts.map +1 -1
- package/dist/actors/Resource.js +13 -5
- package/dist/actors/Resource.js.map +1 -1
- package/dist/actors/Support.d.ts +32 -0
- package/dist/actors/Support.d.ts.map +1 -0
- package/dist/actors/Support.js +60 -0
- package/dist/actors/Support.js.map +1 -0
- package/dist/actors/Traits.d.ts +29 -0
- package/dist/actors/Traits.d.ts.map +1 -0
- package/dist/actors/Traits.js +21 -0
- package/dist/actors/Traits.js.map +1 -0
- package/dist/actors/craft.d.ts.map +1 -1
- package/dist/actors/craft.js +6 -2
- package/dist/actors/craft.js.map +1 -1
- package/dist/actors/index.d.ts +8 -0
- package/dist/actors/index.d.ts.map +1 -1
- package/dist/actors/index.js +4 -0
- package/dist/actors/index.js.map +1 -1
- package/dist/assets/Streaming.d.ts +40 -0
- package/dist/assets/Streaming.d.ts.map +1 -0
- package/dist/assets/Streaming.js +79 -0
- package/dist/assets/Streaming.js.map +1 -0
- package/dist/assets/index.d.ts +14 -1
- package/dist/assets/index.d.ts.map +1 -1
- package/dist/assets/index.js +19 -0
- package/dist/assets/index.js.map +1 -1
- package/dist/audio/Captions.d.ts +15 -0
- package/dist/audio/Captions.d.ts.map +1 -0
- package/dist/audio/Captions.js +4 -0
- package/dist/audio/Captions.js.map +1 -0
- package/dist/audio/Midi.d.ts +75 -0
- package/dist/audio/Midi.d.ts.map +1 -0
- package/dist/audio/Midi.js +186 -0
- package/dist/audio/Midi.js.map +1 -0
- package/dist/audio/Orchestrator.d.ts +40 -0
- package/dist/audio/Orchestrator.d.ts.map +1 -0
- package/dist/audio/Orchestrator.js +48 -0
- package/dist/audio/Orchestrator.js.map +1 -0
- package/dist/audio/Sound.d.ts +3 -0
- package/dist/audio/Sound.d.ts.map +1 -1
- package/dist/audio/Sound.js +4 -0
- package/dist/audio/Sound.js.map +1 -1
- package/dist/audio/Synth.d.ts +35 -0
- package/dist/audio/Synth.d.ts.map +1 -0
- package/dist/audio/Synth.js +96 -0
- package/dist/audio/Synth.js.map +1 -0
- package/dist/audio/index.d.ts +8 -0
- package/dist/audio/index.d.ts.map +1 -1
- package/dist/audio/index.js +4 -0
- package/dist/audio/index.js.map +1 -1
- package/dist/battle/Party.d.ts.map +1 -1
- package/dist/battle/Party.js +2 -0
- package/dist/battle/Party.js.map +1 -1
- package/dist/board/Army.d.ts +17 -0
- package/dist/board/Army.d.ts.map +1 -0
- package/dist/board/Army.js +48 -0
- package/dist/board/Army.js.map +1 -0
- package/dist/board/Classics.d.ts.map +1 -1
- package/dist/board/Classics.js +14 -6
- package/dist/board/Classics.js.map +1 -1
- package/dist/board/FogOfWar.d.ts +23 -0
- package/dist/board/FogOfWar.d.ts.map +1 -0
- package/dist/board/FogOfWar.js +40 -0
- package/dist/board/FogOfWar.js.map +1 -0
- package/dist/board/Tactics.d.ts +2 -0
- package/dist/board/Tactics.d.ts.map +1 -1
- package/dist/board/Tactics.js +36 -8
- package/dist/board/Tactics.js.map +1 -1
- package/dist/board/index.d.ts +5 -1
- package/dist/board/index.d.ts.map +1 -1
- package/dist/board/index.js +3 -1
- package/dist/board/index.js.map +1 -1
- package/dist/core/Feedback.d.ts +23 -0
- package/dist/core/Feedback.d.ts.map +1 -0
- package/dist/core/Feedback.js +35 -0
- package/dist/core/Feedback.js.map +1 -0
- package/dist/core/Game.d.ts +27 -1
- package/dist/core/Game.d.ts.map +1 -1
- package/dist/core/Game.js +61 -5
- package/dist/core/Game.js.map +1 -1
- package/dist/core/Input.d.ts +59 -1
- package/dist/core/Input.d.ts.map +1 -1
- package/dist/core/Input.js +135 -0
- package/dist/core/Input.js.map +1 -1
- package/dist/core/Loading.d.ts +48 -0
- package/dist/core/Loading.d.ts.map +1 -0
- package/dist/core/Loading.js +102 -0
- package/dist/core/Loading.js.map +1 -0
- package/dist/core/News.d.ts +46 -0
- package/dist/core/News.d.ts.map +1 -0
- package/dist/core/News.js +79 -0
- package/dist/core/News.js.map +1 -0
- package/dist/core/PlayerInput.d.ts +38 -0
- package/dist/core/PlayerInput.d.ts.map +1 -0
- package/dist/core/PlayerInput.js +57 -0
- package/dist/core/PlayerInput.js.map +1 -0
- package/dist/core/Random.d.ts +2 -2
- package/dist/core/Random.js +2 -2
- package/dist/core/RunHistory.d.ts +43 -0
- package/dist/core/RunHistory.d.ts.map +1 -0
- package/dist/core/RunHistory.js +41 -0
- package/dist/core/RunHistory.js.map +1 -0
- package/dist/core/Sanitize.d.ts +56 -0
- package/dist/core/Sanitize.d.ts.map +1 -0
- package/dist/core/Sanitize.js +87 -0
- package/dist/core/Sanitize.js.map +1 -0
- package/dist/core/Save.d.ts +31 -7
- package/dist/core/Save.d.ts.map +1 -1
- package/dist/core/Save.js +56 -0
- package/dist/core/Save.js.map +1 -1
- package/dist/core/SaveSync.d.ts +26 -0
- package/dist/core/SaveSync.d.ts.map +1 -0
- package/dist/core/SaveSync.js +52 -0
- package/dist/core/SaveSync.js.map +1 -0
- package/dist/core/Scramble.d.ts +13 -0
- package/dist/core/Scramble.d.ts.map +1 -0
- package/dist/core/Scramble.js +44 -0
- package/dist/core/Scramble.js.map +1 -0
- package/dist/core/Session.d.ts +21 -0
- package/dist/core/Session.d.ts.map +1 -0
- package/dist/core/Session.js +11 -0
- package/dist/core/Session.js.map +1 -0
- package/dist/core/Spawner.d.ts +48 -0
- package/dist/core/Spawner.d.ts.map +1 -0
- package/dist/core/Spawner.js +65 -0
- package/dist/core/Spawner.js.map +1 -0
- package/dist/core/Tween.d.ts +25 -0
- package/dist/core/Tween.d.ts.map +1 -0
- package/dist/core/Tween.js +60 -0
- package/dist/core/Tween.js.map +1 -0
- package/dist/core/UndoHistory.d.ts +37 -0
- package/dist/core/UndoHistory.d.ts.map +1 -0
- package/dist/core/UndoHistory.js +49 -0
- package/dist/core/UndoHistory.js.map +1 -0
- package/dist/core/index.d.ts +22 -0
- package/dist/core/index.d.ts.map +1 -1
- package/dist/core/index.js +12 -0
- package/dist/core/index.js.map +1 -1
- package/dist/i18n/Fluent.d.ts +7 -0
- package/dist/i18n/Fluent.d.ts.map +1 -0
- package/dist/i18n/Fluent.js +86 -0
- package/dist/i18n/Fluent.js.map +1 -0
- package/dist/i18n/index.d.ts +15 -1
- package/dist/i18n/index.d.ts.map +1 -1
- package/dist/i18n/index.js +17 -2
- package/dist/i18n/index.js.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/mw_games.global.js +351 -79
- package/dist/render/Camera.d.ts +32 -4
- package/dist/render/Camera.d.ts.map +1 -1
- package/dist/render/Camera.js +58 -23
- package/dist/render/Camera.js.map +1 -1
- package/dist/render/Capabilities.d.ts +51 -0
- package/dist/render/Capabilities.d.ts.map +1 -0
- package/dist/render/Capabilities.js +56 -0
- package/dist/render/Capabilities.js.map +1 -0
- package/dist/render/ColorBlindness.d.ts +16 -0
- package/dist/render/ColorBlindness.d.ts.map +1 -0
- package/dist/render/ColorBlindness.js +41 -0
- package/dist/render/ColorBlindness.js.map +1 -0
- package/dist/render/ColorTransformBatcher.d.ts +9 -0
- package/dist/render/ColorTransformBatcher.d.ts.map +1 -1
- package/dist/render/ColorTransformBatcher.js +131 -19
- package/dist/render/ColorTransformBatcher.js.map +1 -1
- package/dist/render/Minimap.d.ts +52 -0
- package/dist/render/Minimap.d.ts.map +1 -0
- package/dist/render/Minimap.js +95 -0
- package/dist/render/Minimap.js.map +1 -0
- package/dist/render/TileMap.d.ts +2 -2
- package/dist/render/TileMap.d.ts.map +1 -1
- package/dist/render/TileMap.js +12 -12
- package/dist/render/TileMap.js.map +1 -1
- package/dist/render/TintedSprite.d.ts +1 -8
- package/dist/render/TintedSprite.d.ts.map +1 -1
- package/dist/render/TintedSprite.js +3 -111
- package/dist/render/TintedSprite.js.map +1 -1
- package/dist/render/Viewport.d.ts +46 -0
- package/dist/render/Viewport.d.ts.map +1 -0
- package/dist/render/Viewport.js +52 -0
- package/dist/render/Viewport.js.map +1 -0
- package/dist/render/index.d.ts +9 -1
- package/dist/render/index.d.ts.map +1 -1
- package/dist/render/index.js +5 -1
- package/dist/render/index.js.map +1 -1
- package/dist/roguelike/FieldOfView.d.ts +1 -1
- package/dist/roguelike/Level.d.ts +2 -2
- package/dist/roguelike/Level.d.ts.map +1 -1
- package/dist/roguelike/Level.js +1 -1
- package/dist/roguelike/Level.js.map +1 -1
- package/dist/roguelike/Pathfinder.d.ts +3 -3
- package/dist/roguelike/Pathfinder.js +2 -2
- package/dist/roguelike/Scheduler.d.ts +1 -1
- package/dist/roguelike/Scheduler.js +1 -1
- package/dist/roguelike/Stealth.d.ts +34 -0
- package/dist/roguelike/Stealth.d.ts.map +1 -0
- package/dist/roguelike/Stealth.js +35 -0
- package/dist/roguelike/Stealth.js.map +1 -0
- package/dist/roguelike/generate.d.ts +3 -3
- package/dist/roguelike/generate.js +1 -1
- package/dist/roguelike/generate.js.map +1 -1
- package/dist/roguelike/index.d.ts +2 -0
- package/dist/roguelike/index.d.ts.map +1 -1
- package/dist/roguelike/index.js +1 -0
- package/dist/roguelike/index.js.map +1 -1
- package/dist/rpg/Collision.d.ts +42 -0
- package/dist/rpg/Collision.d.ts.map +1 -0
- package/dist/rpg/Collision.js +77 -0
- package/dist/rpg/Collision.js.map +1 -0
- package/dist/rpg/FreeMover.d.ts +45 -0
- package/dist/rpg/FreeMover.d.ts.map +1 -0
- package/dist/rpg/FreeMover.js +68 -0
- package/dist/rpg/FreeMover.js.map +1 -0
- package/dist/rpg/Marshal.d.ts +65 -0
- package/dist/rpg/Marshal.d.ts.map +1 -0
- package/dist/rpg/Marshal.js +393 -0
- package/dist/rpg/Marshal.js.map +1 -0
- package/dist/rpg/Quest.d.ts +41 -0
- package/dist/rpg/Quest.d.ts.map +1 -1
- package/dist/rpg/Quest.js +39 -6
- package/dist/rpg/Quest.js.map +1 -1
- package/dist/rpg/index.d.ts +7 -1
- package/dist/rpg/index.d.ts.map +1 -1
- package/dist/rpg/index.js +3 -0
- package/dist/rpg/index.js.map +1 -1
- package/dist/stage/DialogueStage.d.ts +2 -3
- package/dist/stage/DialogueStage.d.ts.map +1 -1
- package/dist/stage/DialogueStage.js +21 -30
- package/dist/stage/DialogueStage.js.map +1 -1
- package/dist/stage/index.d.ts +1 -1
- package/dist/stage/index.d.ts.map +1 -1
- package/dist/stage/script.d.ts +32 -3
- package/dist/stage/script.d.ts.map +1 -1
- package/dist/stage/script.js +0 -0
- package/dist/stage/script.js.map +1 -1
- package/dist/three-d/Character3D.d.ts +48 -0
- package/dist/three-d/Character3D.d.ts.map +1 -0
- package/dist/three-d/Character3D.js +96 -0
- package/dist/three-d/Character3D.js.map +1 -0
- package/dist/three-d/Engine3D.d.ts +23 -0
- package/dist/three-d/Engine3D.d.ts.map +1 -0
- package/dist/three-d/Engine3D.js +45 -0
- package/dist/three-d/Engine3D.js.map +1 -0
- package/dist/three-d/Grid.d.ts +14 -0
- package/dist/three-d/Grid.d.ts.map +1 -0
- package/dist/three-d/Grid.js +13 -0
- package/dist/three-d/Grid.js.map +1 -0
- package/dist/three-d/Heightmap.d.ts +35 -0
- package/dist/three-d/Heightmap.d.ts.map +1 -0
- package/dist/three-d/Heightmap.js +29 -0
- package/dist/three-d/Heightmap.js.map +1 -0
- package/dist/three-d/Models.d.ts +12 -0
- package/dist/three-d/Models.d.ts.map +1 -0
- package/dist/three-d/Models.js +14 -0
- package/dist/three-d/Models.js.map +1 -0
- package/dist/three-d/TileGrid3D.d.ts +21 -0
- package/dist/three-d/TileGrid3D.d.ts.map +1 -0
- package/dist/three-d/TileGrid3D.js +65 -0
- package/dist/three-d/TileGrid3D.js.map +1 -0
- package/dist/three-d/Vox.d.ts +24 -0
- package/dist/three-d/Vox.d.ts.map +1 -0
- package/dist/three-d/Vox.js +93 -0
- package/dist/three-d/Vox.js.map +1 -0
- package/dist/three-d/index.d.ts +13 -0
- package/dist/three-d/index.d.ts.map +1 -0
- package/dist/three-d/index.js +7 -0
- package/dist/three-d/index.js.map +1 -0
- package/dist/ui/Bar.d.ts +49 -0
- package/dist/ui/Bar.d.ts.map +1 -0
- package/dist/ui/Bar.js +70 -0
- package/dist/ui/Bar.js.map +1 -0
- package/dist/ui/BitmapLabel.d.ts +42 -0
- package/dist/ui/BitmapLabel.d.ts.map +1 -0
- package/dist/ui/BitmapLabel.js +59 -0
- package/dist/ui/BitmapLabel.js.map +1 -0
- package/dist/ui/Button.d.ts +52 -0
- package/dist/ui/Button.d.ts.map +1 -0
- package/dist/ui/Button.js +147 -0
- package/dist/ui/Button.js.map +1 -0
- package/dist/ui/FloatingText.d.ts +28 -0
- package/dist/ui/FloatingText.d.ts.map +1 -0
- package/dist/ui/FloatingText.js +39 -0
- package/dist/ui/FloatingText.js.map +1 -0
- package/dist/ui/HelpScreen.d.ts +29 -0
- package/dist/ui/HelpScreen.d.ts.map +1 -0
- package/dist/ui/HelpScreen.js +39 -0
- package/dist/ui/HelpScreen.js.map +1 -0
- package/dist/ui/IconGrid.d.ts +8 -0
- package/dist/ui/IconGrid.d.ts.map +1 -1
- package/dist/ui/IconGrid.js +27 -1
- package/dist/ui/IconGrid.js.map +1 -1
- package/dist/ui/Label.d.ts +10 -1
- package/dist/ui/Label.d.ts.map +1 -1
- package/dist/ui/Label.js +25 -2
- package/dist/ui/Label.js.map +1 -1
- package/dist/ui/ListView.d.ts +12 -1
- package/dist/ui/ListView.d.ts.map +1 -1
- package/dist/ui/ListView.js +56 -2
- package/dist/ui/ListView.js.map +1 -1
- package/dist/ui/LoadingScreen.d.ts +31 -0
- package/dist/ui/LoadingScreen.d.ts.map +1 -0
- package/dist/ui/LoadingScreen.js +60 -0
- package/dist/ui/LoadingScreen.js.map +1 -0
- package/dist/ui/MessageBox.d.ts +27 -1
- package/dist/ui/MessageBox.d.ts.map +1 -1
- package/dist/ui/MessageBox.js +63 -14
- package/dist/ui/MessageBox.js.map +1 -1
- package/dist/ui/RebindScreen.d.ts +55 -0
- package/dist/ui/RebindScreen.d.ts.map +1 -0
- package/dist/ui/RebindScreen.js +114 -0
- package/dist/ui/RebindScreen.js.map +1 -0
- package/dist/ui/Toast.d.ts +44 -0
- package/dist/ui/Toast.d.ts.map +1 -0
- package/dist/ui/Toast.js +89 -0
- package/dist/ui/Toast.js.map +1 -0
- package/dist/ui/VerticalLabel.d.ts +5 -0
- package/dist/ui/VerticalLabel.d.ts.map +1 -1
- package/dist/ui/VerticalLabel.js +18 -7
- package/dist/ui/VerticalLabel.js.map +1 -1
- package/dist/ui/Window.d.ts +6 -0
- package/dist/ui/Window.d.ts.map +1 -1
- package/dist/ui/Window.js +16 -1
- package/dist/ui/Window.js.map +1 -1
- package/dist/ui/WindowStack.d.ts +1 -0
- package/dist/ui/WindowStack.d.ts.map +1 -1
- package/dist/ui/WindowStack.js +4 -1
- package/dist/ui/WindowStack.js.map +1 -1
- package/dist/ui/index.d.ts +17 -1
- package/dist/ui/index.d.ts.map +1 -1
- package/dist/ui/index.js +9 -1
- package/dist/ui/index.js.map +1 -1
- package/dist/ui/theme.d.ts +21 -0
- package/dist/ui/theme.d.ts.map +1 -1
- package/dist/ui/theme.js +42 -0
- package/dist/ui/theme.js.map +1 -1
- package/dist/version.d.ts +13 -0
- package/dist/version.d.ts.map +1 -0
- package/dist/version.js +13 -0
- package/dist/version.js.map +1 -0
- package/dist/world/Environment.d.ts +35 -0
- package/dist/world/Environment.d.ts.map +1 -0
- package/dist/world/Environment.js +55 -0
- package/dist/world/Environment.js.map +1 -0
- package/dist/world/index.d.ts +2 -0
- package/dist/world/index.d.ts.map +1 -1
- package/dist/world/index.js +1 -0
- package/dist/world/index.js.map +1 -1
- package/package.json +40 -4
|
@@ -20,7 +20,7 @@ export interface ShowOptions {
|
|
|
20
20
|
* A dialogue scene: a backdrop, characters standing in front of it, and whoever is
|
|
21
21
|
* speaking picked out from the rest.
|
|
22
22
|
*
|
|
23
|
-
* This is the presentation the tile map is not
|
|
23
|
+
* This is the presentation the tile map is not: a still image with figures on it, the
|
|
24
24
|
* mode nearly every RPG drops into for a conversation that matters, and the whole of how a
|
|
25
25
|
* visual novel looks.
|
|
26
26
|
*
|
|
@@ -38,7 +38,7 @@ export declare class DialogueStage extends Container {
|
|
|
38
38
|
private focused;
|
|
39
39
|
private stageWidth;
|
|
40
40
|
private stageHeight;
|
|
41
|
-
private
|
|
41
|
+
private tweener;
|
|
42
42
|
/** how far a character is darkened while someone else is speaking, 0 to 1 */
|
|
43
43
|
dimAmount: number;
|
|
44
44
|
constructor(width: number, height: number);
|
|
@@ -67,7 +67,6 @@ export declare class DialogueStage extends Container {
|
|
|
67
67
|
private applyFocus;
|
|
68
68
|
private slotOf;
|
|
69
69
|
private placeActor;
|
|
70
|
-
private tween;
|
|
71
70
|
update(dt: number): void;
|
|
72
71
|
/** true while a fade is running, so a script can wait for it */
|
|
73
72
|
get isBusy(): boolean;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DialogueStage.d.ts","sourceRoot":"","sources":["../../src/stage/DialogueStage.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAU,OAAO,EAAE,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"DialogueStage.d.ts","sourceRoot":"","sources":["../../src/stage/DialogueStage.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAU,OAAO,EAAE,MAAM,SAAS,CAAC;AAGrD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAE5D,MAAM,MAAM,QAAQ,GAAG,MAAM,GAAG,QAAQ,GAAG,OAAO,GAAG,SAAS,GAAG,UAAU,CAAC;AAW5E,MAAM,WAAW,mBAAmB;IACnC,KAAK,EAAE,WAAW,CAAC;IAEnB,kDAAkD;IAClD,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAEpC,uEAAuE;IACvE,MAAM,CAAC,EAAE,MAAM,CAAC;IAEhB,wEAAwE;IACxE,QAAQ,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,WAAW;IAC3B,EAAE,CAAC,EAAE,QAAQ,GAAG,MAAM,CAAC;IACvB,UAAU,CAAC,EAAE,MAAM,CAAC;IAEpB,4CAA4C;IAC5C,IAAI,CAAC,EAAE,MAAM,CAAC;CACd;AAUD;;;;;;;;;;;GAWG;AACH,qBAAa,aAAc,SAAQ,SAAS;IAC3C,OAAO,CAAC,aAAa,CAAmB;IACxC,OAAO,CAAC,UAAU,CAAmB;IAErC,OAAO,CAAC,QAAQ,CAAuB;IACvC,OAAO,CAAC,gBAAgB,CAAuB;IAE/C,OAAO,CAAC,MAAM,CAA4B;IAC1C,OAAO,CAAC,WAAW,CAA0C;IAE7D,OAAO,CAAC,OAAO,CAAuB;IAEtC,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,WAAW,CAAS;IAE5B,OAAO,CAAC,OAAO,CAAiB;IAEhC,6EAA6E;IAC7E,SAAS,SAAQ;IAEjB,YAAY,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAOxC;IAED,sEAAsE;IACtE,eAAe,CAAC,EAAE,EAAE,MAAM,EAAE,UAAU,EAAE,mBAAmB,GAAG,IAAI,CAEjE;IAED,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,CAQ1C;IAED;;;;;OAKG;IACH,WAAW,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,SAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CA6BvD;IAED,OAAO,CAAC,WAAW;IASnB,IAAI,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,GAAE,WAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,CAoCzD;IAED,IAAI,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,SAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAgB3C;IAED,OAAO,CAAC,IAAI,SAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAElC;IAED,aAAa,CAAC,EAAE,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,IAAI,CAWlD;IAED;;;;;OAKG;IACH,KAAK,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI,CAG7B;IAED,OAAO,CAAC,UAAU;IAUlB,OAAO,CAAC,MAAM;IAId,OAAO,CAAC,UAAU;IAWlB,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,CAEvB;IAED,gEAAgE;IAChE,IAAI,MAAM,IAAI,OAAO,CAEpB;CACD"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { Container, Sprite, Texture } from 'pixi.js';
|
|
2
|
+
import { Tweener } from '../core/Tween.js';
|
|
2
3
|
import { TintedSprite } from '../render/TintedSprite.js';
|
|
3
4
|
/** where a slot sits, as a fraction of the stage width */
|
|
4
5
|
const SLOTS = {
|
|
@@ -12,7 +13,7 @@ const SLOTS = {
|
|
|
12
13
|
* A dialogue scene: a backdrop, characters standing in front of it, and whoever is
|
|
13
14
|
* speaking picked out from the rest.
|
|
14
15
|
*
|
|
15
|
-
* This is the presentation the tile map is not
|
|
16
|
+
* This is the presentation the tile map is not: a still image with figures on it, the
|
|
16
17
|
* mode nearly every RPG drops into for a conversation that matters, and the whole of how a
|
|
17
18
|
* visual novel looks.
|
|
18
19
|
*
|
|
@@ -30,7 +31,7 @@ export class DialogueStage extends Container {
|
|
|
30
31
|
this.actors = new Map();
|
|
31
32
|
this.definitions = new Map();
|
|
32
33
|
this.focused = null;
|
|
33
|
-
this.
|
|
34
|
+
this.tweener = new Tweener();
|
|
34
35
|
/** how far a character is darkened while someone else is speaking, 0 to 1 */
|
|
35
36
|
this.dimAmount = 0.45;
|
|
36
37
|
this.stageWidth = width;
|
|
@@ -60,23 +61,29 @@ export class DialogueStage extends Container {
|
|
|
60
61
|
*/
|
|
61
62
|
setBackdrop(texture, fade = 0.4) {
|
|
62
63
|
this.outgoingBackdrop?.destroy();
|
|
63
|
-
|
|
64
|
+
const outgoing = this.backdrop;
|
|
65
|
+
this.outgoingBackdrop = outgoing;
|
|
64
66
|
const sprite = new Sprite(texture);
|
|
65
67
|
this.fitBackdrop(sprite);
|
|
66
68
|
this.backdrop = sprite;
|
|
67
69
|
this.backdropLayer.addChild(sprite);
|
|
70
|
+
//only clears this call's own outgoing sprite - an overlapping setBackdrop before
|
|
71
|
+
//this one's fade finishes reassigns `outgoingBackdrop` to its own, and that call's
|
|
72
|
+
//settle must not destroy the sprite the newer transition is still fading over
|
|
73
|
+
const settle = () => {
|
|
74
|
+
if (this.outgoingBackdrop === outgoing) {
|
|
75
|
+
outgoing?.destroy();
|
|
76
|
+
this.outgoingBackdrop = null;
|
|
77
|
+
}
|
|
78
|
+
};
|
|
68
79
|
if (fade <= 0) {
|
|
69
|
-
|
|
70
|
-
this.outgoingBackdrop = null;
|
|
80
|
+
settle();
|
|
71
81
|
return Promise.resolve();
|
|
72
82
|
}
|
|
73
83
|
sprite.alpha = 0;
|
|
74
|
-
return this.tween(fade, (t) => {
|
|
84
|
+
return this.tweener.tween(fade, (t) => {
|
|
75
85
|
sprite.alpha = t;
|
|
76
|
-
}).then(
|
|
77
|
-
this.outgoingBackdrop?.destroy();
|
|
78
|
-
this.outgoingBackdrop = null;
|
|
79
|
-
});
|
|
86
|
+
}).then(settle);
|
|
80
87
|
}
|
|
81
88
|
fitBackdrop(sprite) {
|
|
82
89
|
//cover the stage without distorting: scale by the larger ratio and centre the rest
|
|
@@ -116,7 +123,7 @@ export class DialogueStage extends Container {
|
|
|
116
123
|
if (fade <= 0)
|
|
117
124
|
return Promise.resolve();
|
|
118
125
|
sprite.alpha = 0;
|
|
119
|
-
return this.tween(fade, (t) => {
|
|
126
|
+
return this.tweener.tween(fade, (t) => {
|
|
120
127
|
sprite.alpha = t;
|
|
121
128
|
});
|
|
122
129
|
}
|
|
@@ -132,7 +139,7 @@ export class DialogueStage extends Container {
|
|
|
132
139
|
actor.sprite.destroy();
|
|
133
140
|
return Promise.resolve();
|
|
134
141
|
}
|
|
135
|
-
return this.tween(fade, (t) => {
|
|
142
|
+
return this.tweener.tween(fade, (t) => {
|
|
136
143
|
actor.sprite.alpha = 1 - t;
|
|
137
144
|
}).then(() => actor.sprite.destroy());
|
|
138
145
|
}
|
|
@@ -180,28 +187,12 @@ export class DialogueStage extends Container {
|
|
|
180
187
|
//positioned by the feet, so characters of different heights stand on the same floor
|
|
181
188
|
actor.sprite.y = Math.round((definition.baseline ?? 0.92) * this.stageHeight - wanted);
|
|
182
189
|
}
|
|
183
|
-
tween(duration, apply) {
|
|
184
|
-
return new Promise((resolve) => {
|
|
185
|
-
this.tweens.push({ elapsed: 0, duration, apply, resolve });
|
|
186
|
-
});
|
|
187
|
-
}
|
|
188
190
|
update(dt) {
|
|
189
|
-
|
|
190
|
-
return;
|
|
191
|
-
//iterate a copy: a tween's resolve may start another
|
|
192
|
-
for (const tween of [...this.tweens]) {
|
|
193
|
-
tween.elapsed += dt;
|
|
194
|
-
const t = Math.min(1, tween.elapsed / tween.duration);
|
|
195
|
-
tween.apply(t);
|
|
196
|
-
if (t >= 1) {
|
|
197
|
-
this.tweens.splice(this.tweens.indexOf(tween), 1);
|
|
198
|
-
tween.resolve();
|
|
199
|
-
}
|
|
200
|
-
}
|
|
191
|
+
this.tweener.update(dt);
|
|
201
192
|
}
|
|
202
193
|
/** true while a fade is running, so a script can wait for it */
|
|
203
194
|
get isBusy() {
|
|
204
|
-
return this.
|
|
195
|
+
return this.tweener.isBusy;
|
|
205
196
|
}
|
|
206
197
|
}
|
|
207
198
|
//# sourceMappingURL=DialogueStage.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DialogueStage.js","sourceRoot":"","sources":["../../src/stage/DialogueStage.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AACrD,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAKzD,0DAA0D;AAC1D,MAAM,KAAK,GAA6B;IACvC,OAAO,EAAE,IAAI;IACb,IAAI,EAAE,IAAI;IACV,MAAM,EAAE,GAAG;IACX,KAAK,EAAE,IAAI;IACX,QAAQ,EAAE,IAAI;CACd,CAAC;AA+BF;;;;;;;;;;;GAWG;AACH,MAAM,OAAO,aAAc,SAAQ,SAAS;IAoB3C,YAAY,KAAa,EAAE,MAAc;QACxC,KAAK,EAAE,CAAC;QApBD,kBAAa,GAAG,IAAI,SAAS,EAAE,CAAC;QAChC,eAAU,GAAG,IAAI,SAAS,EAAE,CAAC;QAE7B,aAAQ,GAAkB,IAAI,CAAC;QAC/B,qBAAgB,GAAkB,IAAI,CAAC;QAEvC,WAAM,GAAG,IAAI,GAAG,EAAiB,CAAC;QAClC,gBAAW,GAAG,IAAI,GAAG,EAA+B,CAAC;QAErD,YAAO,GAAkB,IAAI,CAAC;QAK9B,
|
|
1
|
+
{"version":3,"file":"DialogueStage.js","sourceRoot":"","sources":["../../src/stage/DialogueStage.ts"],"names":[],"mappings":"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"}
|
package/dist/stage/index.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
export { DialogueStage } from './DialogueStage.ts';
|
|
2
2
|
export type { CharacterDefinition, ShowOptions, SlotName } from './DialogueStage.ts';
|
|
3
3
|
export { StageScript } from './script.ts';
|
|
4
|
-
export type { StageCommand, StageChoice, StoryScript, ScriptOptions, ScriptState } from './script.ts';
|
|
4
|
+
export type { StageCommand, StageChoice, StoryScript, ScriptOptions, ScriptState, HistoryEntry } from './script.ts';
|
|
5
5
|
export { importTwee } from './twee.ts';
|
|
6
6
|
export type { TwineStory } from './twee.ts';
|
|
7
7
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/stage/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,YAAY,EAAE,mBAAmB,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAErF,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,YAAY,EAAE,YAAY,EAAE,WAAW,EAAE,WAAW,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/stage/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,YAAY,EAAE,mBAAmB,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAErF,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,YAAY,EAAE,YAAY,EAAE,WAAW,EAAE,WAAW,EAAE,aAAa,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AACpH,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AACvC,YAAY,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC"}
|
package/dist/stage/script.d.ts
CHANGED
|
@@ -8,7 +8,7 @@ import type { DialogueStage, SlotName } from './DialogueStage.ts';
|
|
|
8
8
|
* A scripted conversation is a list of instructions, not a function. That is deliberate:
|
|
9
9
|
* the same list can be written by hand, generated, translated, or one day produced by an
|
|
10
10
|
* editor, and none of those need the runtime to change. It is also what lets the RPG event
|
|
11
|
-
* interpreter and this share a format later
|
|
11
|
+
* interpreter and this share a format later: a cutscene on a tile map is the same list
|
|
12
12
|
* with a different backdrop.
|
|
13
13
|
*/
|
|
14
14
|
export type StageCommand = {
|
|
@@ -65,6 +65,13 @@ export interface ScriptState {
|
|
|
65
65
|
/** whatever `ask` commands have stored, keyed by their `store` name */
|
|
66
66
|
answers: Record<string, unknown>;
|
|
67
67
|
}
|
|
68
|
+
/** one completed line, kept for `StageScript.history`/`showLast` */
|
|
69
|
+
export interface HistoryEntry {
|
|
70
|
+
text: string;
|
|
71
|
+
speaker?: string;
|
|
72
|
+
/** the value picked, when this line ended on choices; undefined for a plain line */
|
|
73
|
+
chosen?: unknown;
|
|
74
|
+
}
|
|
68
75
|
export interface ScriptOptions {
|
|
69
76
|
stage: DialogueStage;
|
|
70
77
|
windows: WindowStack;
|
|
@@ -77,20 +84,41 @@ export interface ScriptOptions {
|
|
|
77
84
|
boxHeight?: number;
|
|
78
85
|
/** characters revealed per second */
|
|
79
86
|
speed?: number;
|
|
87
|
+
/** `'adv'` (default) or `'nvl'`, `MessageBox`'s two display modes; see `MessageBoxOptions.mode` */
|
|
88
|
+
mode?: 'adv' | 'nvl';
|
|
80
89
|
}
|
|
81
90
|
/**
|
|
82
91
|
* Runs a scene.
|
|
83
92
|
*
|
|
84
93
|
* `run` resolves when the list is exhausted, so a caller can simply await a conversation
|
|
85
|
-
* and carry on afterwards
|
|
94
|
+
* and carry on afterwards, which is what makes a cutscene readable at the call site
|
|
86
95
|
* instead of a chain of callbacks.
|
|
87
96
|
*/
|
|
88
97
|
export declare class StageScript {
|
|
89
98
|
private options;
|
|
90
99
|
readonly state: ScriptState;
|
|
91
100
|
private cancelled;
|
|
101
|
+
private historyLog;
|
|
102
|
+
private seenLines;
|
|
103
|
+
/**
|
|
104
|
+
* When true, a line whose exact text has already been shown once this script's lifetime
|
|
105
|
+
* reveals at once and advances on its own instead of waiting for `confirm` - common
|
|
106
|
+
* visual-novel "skip already-read text". A line with choices never skips: those always
|
|
107
|
+
* wait for a real answer.
|
|
108
|
+
*/
|
|
109
|
+
skipSeen: boolean;
|
|
92
110
|
constructor(options: ScriptOptions);
|
|
93
111
|
cancel(): void;
|
|
112
|
+
/** every line completed so far, oldest first */
|
|
113
|
+
get history(): readonly HistoryEntry[];
|
|
114
|
+
/**
|
|
115
|
+
* Re-shows the most recently completed line for review: a player-facing "back" a game
|
|
116
|
+
* can wire to a button or a scroll gesture. This is read-only - it does not let a past
|
|
117
|
+
* choice be re-picked or replay any side effect (`show`/`hide`/`call`) around it, only
|
|
118
|
+
* the words themselves, the bounded and honestly-scoped half of "rollback" this offers.
|
|
119
|
+
* Resolves to `false` when there is nothing in `history` yet.
|
|
120
|
+
*/
|
|
121
|
+
showLast(): Promise<boolean>;
|
|
94
122
|
run(commands: readonly StageCommand[]): Promise<ScriptState>;
|
|
95
123
|
/**
|
|
96
124
|
* Runs a graph of passages starting at `start`, following `goto` commands and
|
|
@@ -99,11 +127,12 @@ export declare class StageScript {
|
|
|
99
127
|
runStory(story: StoryScript, start: string): Promise<ScriptState>;
|
|
100
128
|
/** runs one command; returns the passage to jump to, if the command jumps anywhere */
|
|
101
129
|
private step;
|
|
130
|
+
private recordHistory;
|
|
102
131
|
/**
|
|
103
132
|
* Puts one line in front of the player and resolves with their answer.
|
|
104
133
|
*
|
|
105
134
|
* Protected rather than private on purpose: this is the seam for a game that presents
|
|
106
|
-
* dialogue its own way
|
|
135
|
+
* dialogue its own way (a different box, a voice line, a test harness) without
|
|
107
136
|
* reimplementing the sequencing above.
|
|
108
137
|
*/
|
|
109
138
|
protected speak(text: string, as: string | undefined, speaker?: string, choices?: Choice[]): Promise<unknown>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"script.d.ts","sourceRoot":"","sources":["../../src/stage/script.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAc,KAAK,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAC9D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACxD,OAAO,KAAK,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAElE;;;;;;;;GAQG;AACH,MAAM,MAAM,YAAY,GACrB;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,GACnC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,EAAE,CAAC,EAAE,QAAQ,GAAG,MAAM,CAAC;IAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,GAC5E;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,GAC/B;IAAE,OAAO,EAAE,IAAI,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,GAChC;IAAE,UAAU,EAAE,MAAM,CAAC;IAAC,EAAE,EAAE,MAAM,CAAA;CAAE,GAClC;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,EAAE,CAAC,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAA;CAAE,GAC9C;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,EAAE,CAAC,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,WAAW,EAAE,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,GACtF;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,GAChB;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,GAChB;IAAE,IAAI,EAAE,CAAC,KAAK,EAAE,WAAW,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;CAAE,CAAC;AAE1D;;;;;GAKG;AACH,MAAM,MAAM,WAAW,GAAG,MAAM,GAAG;IAClC,+EAA+E;IAC/E,IAAI,CAAC,EAAE,MAAM,CAAC;CACd,CAAC;AAEF;;;;GAIG;AACH,MAAM,MAAM,WAAW,GAAG,MAAM,CAAC,MAAM,EAAE,SAAS,YAAY,EAAE,CAAC,CAAC;AAElE,MAAM,WAAW,WAAW;IAC3B,uEAAuE;IACvE,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACjC;AAED,MAAM,WAAW,aAAa;IAC7B,KAAK,EAAE,aAAa,CAAC;IACrB,OAAO,EAAE,WAAW,CAAC;IAErB,2DAA2D;IAC3D,QAAQ,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC;IAEpC,gFAAgF;IAChF,WAAW,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,MAAM,CAAC;IAErC,+DAA+D;IAC/D,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB,qCAAqC;IACrC,KAAK,CAAC,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"script.d.ts","sourceRoot":"","sources":["../../src/stage/script.ts"],"names":[],"mappings":"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"}
|
package/dist/stage/script.js
CHANGED
|
Binary file
|
package/dist/stage/script.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"script.js","sourceRoot":"","sources":["../../src/stage/script.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAe,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"script.js","sourceRoot":"","sources":["../../src/stage/script.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import type { AnimationGroup } from '@babylonjs/core/Animations/animationGroup.js';
|
|
2
|
+
import type { AbstractMesh } from '@babylonjs/core/Meshes/abstractMesh.js';
|
|
3
|
+
import { TransformNode } from '@babylonjs/core/Meshes/transformNode.js';
|
|
4
|
+
import type { Scene } from '@babylonjs/core/scene.js';
|
|
5
|
+
export interface Billboard3DOptions {
|
|
6
|
+
/**
|
|
7
|
+
* An asset path (resolved through `mwg/assets`) or an already-resolved `data:`/`blob:`
|
|
8
|
+
* URI. A `data:` URI must be base64-encoded (`;base64,...`) - Babylon's texture loader
|
|
9
|
+
* does not decode a percent-encoded one and fails to load it without an error.
|
|
10
|
+
*/
|
|
11
|
+
texture: string;
|
|
12
|
+
width?: number;
|
|
13
|
+
height?: number;
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Moves either a billboard sprite or imported mesh through continuous 3D world space, and -
|
|
17
|
+
* for an imported mesh - plays back whichever animation clips came baked into it.
|
|
18
|
+
* `loadModel3D` already loads a glTF's own `animationGroups` as part of its import result;
|
|
19
|
+
* this is what turns one of them into something a game can actually trigger, the way a walk
|
|
20
|
+
* cycle baked into a mesh needs to be, rather than leaving them loaded but unreachable.
|
|
21
|
+
*/
|
|
22
|
+
export declare class Character3D {
|
|
23
|
+
readonly node: TransformNode;
|
|
24
|
+
private target;
|
|
25
|
+
private speed;
|
|
26
|
+
private readonly animations;
|
|
27
|
+
private currentClip;
|
|
28
|
+
constructor(node: TransformNode, animations?: readonly AnimationGroup[]);
|
|
29
|
+
/** true when an animation clip of this name was imported with the model */
|
|
30
|
+
hasAnimation(name: string): boolean;
|
|
31
|
+
/**
|
|
32
|
+
* Plays an imported animation clip by name, stopping whichever one was already playing.
|
|
33
|
+
* A name the model has no clip for is a no-op, returning `false`, the same
|
|
34
|
+
* degrade-to-nothing `ActorAnimator`/`GridMover` already use for a missing animation
|
|
35
|
+
* rather than throwing over what is often just a naming mismatch between assets.
|
|
36
|
+
*/
|
|
37
|
+
playAnimation(name: string, loop?: boolean): boolean;
|
|
38
|
+
/** stops whichever imported clip is currently playing, if any */
|
|
39
|
+
stopAnimation(): void;
|
|
40
|
+
/** the name of the clip currently playing, or null when none is */
|
|
41
|
+
get currentAnimation(): string | null;
|
|
42
|
+
moveTo(x: number, y: number, z: number, speed: number): void;
|
|
43
|
+
update(deltaSeconds: number): boolean;
|
|
44
|
+
/** @param animations typically `loadModel3D`'s own `animationGroups` result field */
|
|
45
|
+
static fromMesh(mesh: AbstractMesh, animations?: readonly AnimationGroup[]): Character3D;
|
|
46
|
+
static billboard(scene: Scene, options: Billboard3DOptions): Character3D;
|
|
47
|
+
}
|
|
48
|
+
//# sourceMappingURL=Character3D.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Character3D.d.ts","sourceRoot":"","sources":["../../src/three-d/Character3D.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,8CAA8C,CAAC;AAKnF,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,wCAAwC,CAAC;AAE3E,OAAO,EAAE,aAAa,EAAE,MAAM,yCAAyC,CAAC;AACxE,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,0BAA0B,CAAC;AAItD,MAAM,WAAW,kBAAkB;IAClC;;;;OAIG;IACH,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;CAChB;AAOD;;;;;;GAMG;AACH,qBAAa,WAAW;IACvB,QAAQ,CAAC,IAAI,EAAE,aAAa,CAAC;IAC7B,OAAO,CAAC,MAAM,CAAwB;IACtC,OAAO,CAAC,KAAK,CAAK;IAElB,OAAO,CAAC,QAAQ,CAAC,UAAU,CAA8B;IACzD,OAAO,CAAC,WAAW,CAA+B;IAElD,YAAY,IAAI,EAAE,aAAa,EAAE,UAAU,GAAE,SAAS,cAAc,EAAO,EAG1E;IAED,2EAA2E;IAC3E,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAElC;IAED;;;;;OAKG;IACH,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,UAAO,GAAG,OAAO,CAWhD;IAED,iEAAiE;IACjE,aAAa,IAAI,IAAI,CAGpB;IAED,mEAAmE;IACnE,IAAI,gBAAgB,IAAI,MAAM,GAAG,IAAI,CAEpC;IAED,MAAM,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAI3D;IAED,MAAM,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAYpC;IAED,qFAAqF;IACrF,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,YAAY,EAAE,UAAU,GAAE,SAAS,cAAc,EAAO,GAAG,WAAW,CAE3F;IAED,MAAM,CAAC,SAAS,CAAC,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,kBAAkB,GAAG,WAAW,CAUvE;CACD"}
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
import { StandardMaterial } from '@babylonjs/core/Materials/standardMaterial.js';
|
|
2
|
+
import { Texture } from '@babylonjs/core/Materials/Textures/texture.js';
|
|
3
|
+
import { Vector3 } from '@babylonjs/core/Maths/math.vector.js';
|
|
4
|
+
import { CreatePlane } from '@babylonjs/core/Meshes/Builders/planeBuilder.pure.js';
|
|
5
|
+
import { Mesh } from '@babylonjs/core/Meshes/mesh.js';
|
|
6
|
+
import { TransformNode } from '@babylonjs/core/Meshes/transformNode.js';
|
|
7
|
+
import { resolve } from '../assets/index.js';
|
|
8
|
+
/** an asset path resolved via `mwg/assets`, or a URI passed through unchanged */
|
|
9
|
+
function resolveSource(source) {
|
|
10
|
+
return /^(?:data|blob|https?):/i.test(source) ? source : resolve(source);
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Moves either a billboard sprite or imported mesh through continuous 3D world space, and -
|
|
14
|
+
* for an imported mesh - plays back whichever animation clips came baked into it.
|
|
15
|
+
* `loadModel3D` already loads a glTF's own `animationGroups` as part of its import result;
|
|
16
|
+
* this is what turns one of them into something a game can actually trigger, the way a walk
|
|
17
|
+
* cycle baked into a mesh needs to be, rather than leaving them loaded but unreachable.
|
|
18
|
+
*/
|
|
19
|
+
export class Character3D {
|
|
20
|
+
constructor(node, animations = []) {
|
|
21
|
+
this.target = null;
|
|
22
|
+
this.speed = 0;
|
|
23
|
+
this.currentClip = null;
|
|
24
|
+
this.node = node;
|
|
25
|
+
this.animations = new Map(animations.map((group) => [group.name, group]));
|
|
26
|
+
}
|
|
27
|
+
/** true when an animation clip of this name was imported with the model */
|
|
28
|
+
hasAnimation(name) {
|
|
29
|
+
return this.animations.has(name);
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Plays an imported animation clip by name, stopping whichever one was already playing.
|
|
33
|
+
* A name the model has no clip for is a no-op, returning `false`, the same
|
|
34
|
+
* degrade-to-nothing `ActorAnimator`/`GridMover` already use for a missing animation
|
|
35
|
+
* rather than throwing over what is often just a naming mismatch between assets.
|
|
36
|
+
*/
|
|
37
|
+
playAnimation(name, loop = true) {
|
|
38
|
+
const clip = this.animations.get(name);
|
|
39
|
+
if (!clip)
|
|
40
|
+
return false;
|
|
41
|
+
if (this.currentClip === clip) {
|
|
42
|
+
if (!clip.isPlaying)
|
|
43
|
+
clip.start(loop);
|
|
44
|
+
return true;
|
|
45
|
+
}
|
|
46
|
+
this.currentClip?.stop();
|
|
47
|
+
clip.start(loop);
|
|
48
|
+
this.currentClip = clip;
|
|
49
|
+
return true;
|
|
50
|
+
}
|
|
51
|
+
/** stops whichever imported clip is currently playing, if any */
|
|
52
|
+
stopAnimation() {
|
|
53
|
+
this.currentClip?.stop();
|
|
54
|
+
this.currentClip = null;
|
|
55
|
+
}
|
|
56
|
+
/** the name of the clip currently playing, or null when none is */
|
|
57
|
+
get currentAnimation() {
|
|
58
|
+
return this.currentClip?.name ?? null;
|
|
59
|
+
}
|
|
60
|
+
moveTo(x, y, z, speed) {
|
|
61
|
+
if (!(speed > 0))
|
|
62
|
+
throw new Error('3D character speed must be positive');
|
|
63
|
+
this.target = new Vector3(x, y, z);
|
|
64
|
+
this.speed = speed;
|
|
65
|
+
}
|
|
66
|
+
update(deltaSeconds) {
|
|
67
|
+
if (!this.target)
|
|
68
|
+
return false;
|
|
69
|
+
const distance = Vector3.Distance(this.node.position, this.target);
|
|
70
|
+
if (distance <= this.speed * deltaSeconds) {
|
|
71
|
+
this.node.position.copyFrom(this.target);
|
|
72
|
+
this.target = null;
|
|
73
|
+
return false;
|
|
74
|
+
}
|
|
75
|
+
const direction = this.target.subtract(this.node.position).normalize();
|
|
76
|
+
this.node.position.addInPlace(direction.scale(this.speed * deltaSeconds));
|
|
77
|
+
this.node.rotation.y = Math.atan2(direction.x, direction.z);
|
|
78
|
+
return true;
|
|
79
|
+
}
|
|
80
|
+
/** @param animations typically `loadModel3D`'s own `animationGroups` result field */
|
|
81
|
+
static fromMesh(mesh, animations = []) {
|
|
82
|
+
return new Character3D(mesh, animations);
|
|
83
|
+
}
|
|
84
|
+
static billboard(scene, options) {
|
|
85
|
+
const plane = CreatePlane('billboard-character', { width: options.width ?? 1, height: options.height ?? 1.5 }, scene);
|
|
86
|
+
plane.billboardMode = Mesh.BILLBOARDMODE_Y;
|
|
87
|
+
const material = new StandardMaterial('billboard-material', scene);
|
|
88
|
+
material.diffuseTexture = new Texture(resolveSource(options.texture), scene);
|
|
89
|
+
material.diffuseTexture.hasAlpha = true;
|
|
90
|
+
material.useAlphaFromDiffuseTexture = true;
|
|
91
|
+
material.backFaceCulling = false;
|
|
92
|
+
plane.material = material;
|
|
93
|
+
return new Character3D(plane);
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
//# sourceMappingURL=Character3D.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Character3D.js","sourceRoot":"","sources":["../../src/three-d/Character3D.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { ArcRotateCamera } from '@babylonjs/core/Cameras/arcRotateCamera.js';
|
|
2
|
+
import { Engine } from '@babylonjs/core/Engines/engine.js';
|
|
3
|
+
import { Scene } from '@babylonjs/core/scene.js';
|
|
4
|
+
export interface Engine3DOptions {
|
|
5
|
+
canvas: HTMLCanvasElement;
|
|
6
|
+
antialias?: boolean;
|
|
7
|
+
clearColor?: readonly [number, number, number, number?];
|
|
8
|
+
}
|
|
9
|
+
export type Frame3D = (deltaSeconds: number) => void;
|
|
10
|
+
/** Owns Babylon's WebGL engine, scene, default camera, lighting, and render loop. */
|
|
11
|
+
export declare class Engine3D {
|
|
12
|
+
readonly engine: Engine;
|
|
13
|
+
readonly scene: Scene;
|
|
14
|
+
readonly camera: ArcRotateCamera;
|
|
15
|
+
private frame;
|
|
16
|
+
private readonly resize;
|
|
17
|
+
constructor(options: Engine3DOptions);
|
|
18
|
+
start(frame?: Frame3D): void;
|
|
19
|
+
step(deltaSeconds: number): void;
|
|
20
|
+
stop(): void;
|
|
21
|
+
dispose(): void;
|
|
22
|
+
}
|
|
23
|
+
//# sourceMappingURL=Engine3D.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Engine3D.d.ts","sourceRoot":"","sources":["../../src/three-d/Engine3D.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,4CAA4C,CAAC;AAC7E,OAAO,EAAE,MAAM,EAAE,MAAM,mCAAmC,CAAC;AAI3D,OAAO,EAAE,KAAK,EAAE,MAAM,0BAA0B,CAAC;AAEjD,MAAM,WAAW,eAAe;IAC/B,MAAM,EAAE,iBAAiB,CAAC;IAC1B,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,UAAU,CAAC,EAAE,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;CACxD;AAED,MAAM,MAAM,OAAO,GAAG,CAAC,YAAY,EAAE,MAAM,KAAK,IAAI,CAAC;AAErD,qFAAqF;AACrF,qBAAa,QAAQ;IACpB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC;IACtB,QAAQ,CAAC,MAAM,EAAE,eAAe,CAAC;IACjC,OAAO,CAAC,KAAK,CAAwB;IACrC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAoC;IAE3D,YAAY,OAAO,EAAE,eAAe,EAYnC;IAED,KAAK,CAAC,KAAK,CAAC,EAAE,OAAO,GAAG,IAAI,CAG3B;IAED,IAAI,CAAC,YAAY,EAAE,MAAM,GAAG,IAAI,CAG/B;IAED,IAAI,IAAI,IAAI,CAEX;IAED,OAAO,IAAI,IAAI,CAOd;CACD"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import { ArcRotateCamera } from '@babylonjs/core/Cameras/arcRotateCamera.js';
|
|
2
|
+
import { Engine } from '@babylonjs/core/Engines/engine.js';
|
|
3
|
+
import { HemisphericLight } from '@babylonjs/core/Lights/hemisphericLight.js';
|
|
4
|
+
import { Color4 } from '@babylonjs/core/Maths/math.color.js';
|
|
5
|
+
import { Vector3 } from '@babylonjs/core/Maths/math.vector.js';
|
|
6
|
+
import { Scene } from '@babylonjs/core/scene.js';
|
|
7
|
+
/** Owns Babylon's WebGL engine, scene, default camera, lighting, and render loop. */
|
|
8
|
+
export class Engine3D {
|
|
9
|
+
constructor(options) {
|
|
10
|
+
this.frame = null;
|
|
11
|
+
this.resize = () => this.engine.resize();
|
|
12
|
+
this.engine = new Engine(options.canvas, options.antialias ?? true);
|
|
13
|
+
this.scene = new Scene(this.engine);
|
|
14
|
+
const color = options.clearColor ?? [0.04, 0.06, 0.09, 1];
|
|
15
|
+
this.scene.clearColor = new Color4(color[0], color[1], color[2], color[3] ?? 1);
|
|
16
|
+
this.camera = new ArcRotateCamera('camera', -Math.PI / 2, Math.PI / 3, 18, Vector3.Zero(), this.scene);
|
|
17
|
+
this.camera.lowerRadiusLimit = 3;
|
|
18
|
+
this.camera.upperRadiusLimit = 80;
|
|
19
|
+
this.camera.attachControl(options.canvas, true);
|
|
20
|
+
new HemisphericLight('ambient', new Vector3(0.3, 1, 0.2), this.scene).intensity = 0.9;
|
|
21
|
+
addEventListener('resize', this.resize);
|
|
22
|
+
globalThis.__MWG_3D__ = this;
|
|
23
|
+
}
|
|
24
|
+
start(frame) {
|
|
25
|
+
this.frame = frame ?? null;
|
|
26
|
+
this.engine.runRenderLoop(() => this.step(this.engine.getDeltaTime() / 1000));
|
|
27
|
+
}
|
|
28
|
+
step(deltaSeconds) {
|
|
29
|
+
this.frame?.(deltaSeconds);
|
|
30
|
+
this.scene.render();
|
|
31
|
+
}
|
|
32
|
+
stop() {
|
|
33
|
+
this.engine.stopRenderLoop();
|
|
34
|
+
}
|
|
35
|
+
dispose() {
|
|
36
|
+
this.stop();
|
|
37
|
+
removeEventListener('resize', this.resize);
|
|
38
|
+
this.scene.dispose();
|
|
39
|
+
this.engine.dispose();
|
|
40
|
+
const globals = globalThis;
|
|
41
|
+
if (globals.__MWG_3D__ === this)
|
|
42
|
+
delete globals.__MWG_3D__;
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
//# sourceMappingURL=Engine3D.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Engine3D.js","sourceRoot":"","sources":["../../src/three-d/Engine3D.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,4CAA4C,CAAC;AAC7E,OAAO,EAAE,MAAM,EAAE,MAAM,mCAAmC,CAAC;AAC3D,OAAO,EAAE,gBAAgB,EAAE,MAAM,4CAA4C,CAAC;AAC9E,OAAO,EAAE,MAAM,EAAE,MAAM,qCAAqC,CAAC;AAC7D,OAAO,EAAE,OAAO,EAAE,MAAM,sCAAsC,CAAC;AAC/D,OAAO,EAAE,KAAK,EAAE,MAAM,0BAA0B,CAAC;AAUjD,qFAAqF;AACrF,MAAM,OAAO,QAAQ;IAOpB,YAAY,OAAwB;QAH5B,UAAK,GAAmB,IAAI,CAAC;QACpB,WAAM,GAAG,GAAS,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;QAG1D,IAAI,CAAC,MAAM,GAAG,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC,SAAS,IAAI,IAAI,CAAC,CAAC;QACpE,IAAI,CAAC,KAAK,GAAG,IAAI,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACpC,MAAM,KAAK,GAAG,OAAO,CAAC,UAAU,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;QAC1D,IAAI,CAAC,KAAK,CAAC,UAAU,GAAG,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;QAChF,IAAI,CAAC,MAAM,GAAG,IAAI,eAAe,CAAC,QAAQ,EAAE,CAAC,IAAI,CAAC,EAAE,GAAG,CAAC,EAAE,IAAI,CAAC,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,OAAO,CAAC,IAAI,EAAE,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;QACvG,IAAI,CAAC,MAAM,CAAC,gBAAgB,GAAG,CAAC,CAAC;QACjC,IAAI,CAAC,MAAM,CAAC,gBAAgB,GAAG,EAAE,CAAC;QAClC,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,OAAO,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;QAChD,IAAI,gBAAgB,CAAC,SAAS,EAAE,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,SAAS,GAAG,GAAG,CAAC;QACtF,gBAAgB,CAAC,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;QACvC,UAAiD,CAAC,UAAU,GAAG,IAAI,CAAC;IACtE,CAAC;IAED,KAAK,CAAC,KAAe;QACpB,IAAI,CAAC,KAAK,GAAG,KAAK,IAAI,IAAI,CAAC;QAC3B,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,YAAY,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC;IAC/E,CAAC;IAED,IAAI,CAAC,YAAoB;QACxB,IAAI,CAAC,KAAK,EAAE,CAAC,YAAY,CAAC,CAAC;QAC3B,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;IACrB,CAAC;IAED,IAAI;QACH,IAAI,CAAC,MAAM,CAAC,cAAc,EAAE,CAAC;IAC9B,CAAC;IAED,OAAO;QACN,IAAI,CAAC,IAAI,EAAE,CAAC;QACZ,mBAAmB,CAAC,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;QAC3C,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC;QACrB,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;QACtB,MAAM,OAAO,GAAG,UAAgD,CAAC;QACjE,IAAI,OAAO,CAAC,UAAU,KAAK,IAAI;YAAE,OAAO,OAAO,CAAC,UAAU,CAAC;IAC5D,CAAC;CACD"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
export type GridShape3D = 'square' | 'hex';
|
|
2
|
+
export interface GridCell3D {
|
|
3
|
+
x: number;
|
|
4
|
+
y: number;
|
|
5
|
+
height?: number;
|
|
6
|
+
}
|
|
7
|
+
export interface Point3D {
|
|
8
|
+
x: number;
|
|
9
|
+
y: number;
|
|
10
|
+
z: number;
|
|
11
|
+
}
|
|
12
|
+
/** Converts the framework's integer square or odd-q hex coordinate to 3D world space. */
|
|
13
|
+
export declare function gridPoint3D(shape: GridShape3D, x: number, y: number, tileSize?: number, height?: number, heightStep?: number): Point3D;
|
|
14
|
+
//# sourceMappingURL=Grid.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Grid.d.ts","sourceRoot":"","sources":["../../src/three-d/Grid.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,WAAW,GAAG,QAAQ,GAAG,KAAK,CAAC;AAE3C,MAAM,WAAW,UAAU;IAC1B,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,MAAM,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,OAAO;IACvB,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;CACV;AAED,yFAAyF;AACzF,wBAAgB,WAAW,CAC1B,KAAK,EAAE,WAAW,EAClB,CAAC,EAAE,MAAM,EACT,CAAC,EAAE,MAAM,EACT,QAAQ,SAAI,EACZ,MAAM,SAAI,EACV,UAAU,SAAI,GACZ,OAAO,CAQT"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/** Converts the framework's integer square or odd-q hex coordinate to 3D world space. */
|
|
2
|
+
export function gridPoint3D(shape, x, y, tileSize = 1, height = 0, heightStep = 1) {
|
|
3
|
+
if (!(tileSize > 0) || !(heightStep > 0))
|
|
4
|
+
throw new Error('3D grid sizes must be positive');
|
|
5
|
+
if (shape === 'square')
|
|
6
|
+
return { x: x * tileSize, y: height * heightStep, z: y * tileSize };
|
|
7
|
+
return {
|
|
8
|
+
x: x * tileSize * 1.5,
|
|
9
|
+
y: height * heightStep,
|
|
10
|
+
z: (y + (x & 1) * 0.5) * Math.sqrt(3) * tileSize,
|
|
11
|
+
};
|
|
12
|
+
}
|
|
13
|
+
//# sourceMappingURL=Grid.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Grid.js","sourceRoot":"","sources":["../../src/three-d/Grid.ts"],"names":[],"mappings":"AAcA,yFAAyF;AACzF,MAAM,UAAU,WAAW,CAC1B,KAAkB,EAClB,CAAS,EACT,CAAS,EACT,QAAQ,GAAG,CAAC,EACZ,MAAM,GAAG,CAAC,EACV,UAAU,GAAG,CAAC;IAEd,IAAI,CAAC,CAAC,QAAQ,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,UAAU,GAAG,CAAC,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAC;IAC5F,IAAI,KAAK,KAAK,QAAQ;QAAE,OAAO,EAAE,CAAC,EAAE,CAAC,GAAG,QAAQ,EAAE,CAAC,EAAE,MAAM,GAAG,UAAU,EAAE,CAAC,EAAE,CAAC,GAAG,QAAQ,EAAE,CAAC;IAC5F,OAAO;QACN,CAAC,EAAE,CAAC,GAAG,QAAQ,GAAG,GAAG;QACrB,CAAC,EAAE,MAAM,GAAG,UAAU;QACtB,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,QAAQ;KAChD,CAAC;AACH,CAAC"}
|