@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
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ListView.d.ts","sourceRoot":"","sources":["../../src/ui/ListView.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAY,MAAM,SAAS,CAAC;AAC9C,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAI/C,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,SAAS,CAAC;CACjB;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;;;;;;;;;;GAUG;AACH,qBAAa,QAAS,SAAQ,SAAS;IACtC,OAAO,CAAC,KAAK,CAAkB;IAC/B,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;
|
|
1
|
+
{"version":3,"file":"ListView.d.ts","sourceRoot":"","sources":["../../src/ui/ListView.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAY,MAAM,SAAS,CAAC;AAC9C,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAI/C,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,SAAS,CAAC;CACjB;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;;;;;;;;;;GAUG;AACH,qBAAa,QAAS,SAAQ,SAAS;IACtC,OAAO,CAAC,KAAK,CAAkB;IAC/B,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,KAAK,CAAK;IAClB,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;IA0BN,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,CAiDhC;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,CAK1B;IAED,OAAO,IAAI,OAAO,CAKjB;IAED,6CAA6C;IAC7C,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAWpC;IAED,OAAO,CAAC,OAAO;CAwBf"}
|
package/dist/ui/ListView.js
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
import { Container, Graphics } from 'pixi.js';
|
|
2
2
|
import { Label } from './Label.js';
|
|
3
|
-
import { theme } from './theme.js';
|
|
3
|
+
import { theme, themeChanged } from './theme.js';
|
|
4
4
|
/**
|
|
5
5
|
* A scrolling list of rows, driven by the keyboard.
|
|
6
6
|
*
|
|
7
7
|
* This is the workhorse of an inventory-heavy game: bags, spell lists, shop stock,
|
|
8
8
|
* dialogue choices, save slots. It scrolls by keeping the highlight in view rather than by
|
|
9
|
-
* pixel offset, which is what makes it feel right with a keyboard
|
|
9
|
+
* pixel offset, which is what makes it feel right with a keyboard: the list moves only
|
|
10
10
|
* when the selection would otherwise leave the window.
|
|
11
11
|
*
|
|
12
12
|
* Rows that are `disabled` are skipped when moving, so holding a direction never lands on
|
|
@@ -22,9 +22,11 @@ export class ListView extends Container {
|
|
|
22
22
|
this.mask_ = new Graphics();
|
|
23
23
|
this.index = 0;
|
|
24
24
|
this.scroll = 0;
|
|
25
|
+
this.themeListener = () => this.restyle();
|
|
25
26
|
const t = theme();
|
|
26
27
|
this.viewWidth = options.width;
|
|
27
28
|
this.viewHeight = options.height;
|
|
29
|
+
this.explicitRowHeight = options.rowHeight !== undefined;
|
|
28
30
|
this.rowHeight = options.rowHeight ?? Math.ceil(t.font.size * t.font.lineHeight) + t.spacing;
|
|
29
31
|
this.onSelect = options.onSelect ?? null;
|
|
30
32
|
this.onHighlight = options.onHighlight ?? null;
|
|
@@ -34,7 +36,48 @@ export class ListView extends Container {
|
|
|
34
36
|
this.addChild(this.mask_);
|
|
35
37
|
this.rowsLayer.mask = this.mask_;
|
|
36
38
|
this.drawMask();
|
|
39
|
+
//a masked list with no click support (before this session) or wheel support was
|
|
40
|
+
//otherwise unreachable past the visible rows without the keyboard; one row per
|
|
41
|
+
//notch, the same step `move` already takes for an arrow key, since scroll is
|
|
42
|
+
//derived from the selection rather than an independent pixel offset (see this
|
|
43
|
+
//class's own doc comment) - a free-scrolling wheel would fight that invariant
|
|
44
|
+
this.eventMode = 'static';
|
|
45
|
+
this.on('wheel', (event) => this.move(event.deltaY > 0 ? 1 : -1));
|
|
37
46
|
this.setItems(options.items ?? []);
|
|
47
|
+
themeChanged.add(this.themeListener);
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Recolours rows and the default row height from the new theme in place, rather than
|
|
51
|
+
* through `setItems`: a row's optional `icon` is a `Container` the caller owns, and
|
|
52
|
+
* `setItems`'s teardown destroys a row's children on the way out - routing a restyle
|
|
53
|
+
* through it would destroy the very icons still referenced by `this.items`, the same
|
|
54
|
+
* trap `IconGrid.swapCells`'s own doc comment describes for its cells.
|
|
55
|
+
*/
|
|
56
|
+
restyle() {
|
|
57
|
+
const t = theme();
|
|
58
|
+
if (!this.explicitRowHeight) {
|
|
59
|
+
this.rowHeight = Math.ceil(t.font.size * t.font.lineHeight) + t.spacing;
|
|
60
|
+
}
|
|
61
|
+
const rtl = t.direction === 'rtl';
|
|
62
|
+
this.rows.forEach((row, i) => {
|
|
63
|
+
row.y = i * this.rowHeight;
|
|
64
|
+
const item = this.items[i];
|
|
65
|
+
const label = row.children.find((child) => child instanceof Label);
|
|
66
|
+
if (label) {
|
|
67
|
+
label.setColor(item.disabled ? t.color.textDim : t.color.text);
|
|
68
|
+
const textStart = t.spacing + (item.icon ? this.rowHeight : 0);
|
|
69
|
+
label.x = rtl ? this.viewWidth - textStart - label.width : textStart;
|
|
70
|
+
label.y = Math.round((this.rowHeight - label.height) / 2);
|
|
71
|
+
}
|
|
72
|
+
if (item.icon) {
|
|
73
|
+
item.icon.x = rtl ? this.viewWidth - t.spacing - this.rowHeight : t.spacing;
|
|
74
|
+
}
|
|
75
|
+
});
|
|
76
|
+
this.refresh();
|
|
77
|
+
}
|
|
78
|
+
destroy(options) {
|
|
79
|
+
themeChanged.remove(this.themeListener);
|
|
80
|
+
super.destroy(options);
|
|
38
81
|
}
|
|
39
82
|
drawMask() {
|
|
40
83
|
this.mask_.clear().rect(0, 0, this.viewWidth, this.viewHeight).fill({ color: 0xffffff });
|
|
@@ -64,6 +107,17 @@ export class ListView extends Container {
|
|
|
64
107
|
items.forEach((item, i) => {
|
|
65
108
|
const row = new Container();
|
|
66
109
|
row.y = i * this.rowHeight;
|
|
110
|
+
row.eventMode = 'static';
|
|
111
|
+
row.cursor = item.disabled ? 'default' : 'pointer';
|
|
112
|
+
//a tap selects and confirms in one step, the way a mouse/touch player expects
|
|
113
|
+
//from a menu row - IconGrid's cells already work this way, this closes the same
|
|
114
|
+
//gap on ListView, which was keyboard-only until now
|
|
115
|
+
row.on('pointerdown', () => {
|
|
116
|
+
if (item.disabled)
|
|
117
|
+
return;
|
|
118
|
+
this.select(i);
|
|
119
|
+
this.confirm();
|
|
120
|
+
});
|
|
67
121
|
if (item.icon) {
|
|
68
122
|
item.icon.x = rtl ? this.viewWidth - t.spacing - this.rowHeight : t.spacing;
|
|
69
123
|
row.addChild(item.icon);
|
package/dist/ui/ListView.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ListView.js","sourceRoot":"","sources":["../../src/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,KAAK,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"ListView.js","sourceRoot":"","sources":["../../src/ui/ListView.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { Container } from 'pixi.js';
|
|
2
|
+
import type { LoadQueue, LoadSnapshot } from '../core/Loading.ts';
|
|
3
|
+
export interface LoadingScreenOptions {
|
|
4
|
+
width: number;
|
|
5
|
+
height: number;
|
|
6
|
+
title?: string;
|
|
7
|
+
onRetry?: () => void;
|
|
8
|
+
onCancel?: () => void;
|
|
9
|
+
}
|
|
10
|
+
/** A themed loading view driven by `LoadQueue.snapshot`, with game-owned retry/cancel hooks. */
|
|
11
|
+
export declare class LoadingScreen extends Container {
|
|
12
|
+
private readonly backdrop;
|
|
13
|
+
private readonly title;
|
|
14
|
+
private readonly status;
|
|
15
|
+
private readonly progress;
|
|
16
|
+
private readonly onRetry?;
|
|
17
|
+
private readonly onCancel?;
|
|
18
|
+
private width_;
|
|
19
|
+
private height_;
|
|
20
|
+
constructor(options: LoadingScreenOptions);
|
|
21
|
+
setSnapshot(snapshot: LoadSnapshot): void;
|
|
22
|
+
/** Connects the screen to one queue and returns the cleanup needed when its scene closes. */
|
|
23
|
+
bind(queue: LoadQueue): () => void;
|
|
24
|
+
/** invoke from a game-owned retry button or keyboard binding */
|
|
25
|
+
retry(): void;
|
|
26
|
+
/** invoke from a game-owned cancel button or keyboard binding */
|
|
27
|
+
cancel(): void;
|
|
28
|
+
resize(width: number, height: number): void;
|
|
29
|
+
private layout;
|
|
30
|
+
}
|
|
31
|
+
//# sourceMappingURL=LoadingScreen.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"LoadingScreen.d.ts","sourceRoot":"","sources":["../../src/ui/LoadingScreen.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAY,MAAM,SAAS,CAAC;AAC9C,OAAO,KAAK,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAKlE,MAAM,WAAW,oBAAoB;IACpC,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAC;CACtB;AAED,gGAAgG;AAChG,qBAAa,aAAc,SAAQ,SAAS;IAC3C,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAkB;IAC3C,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAQ;IAC9B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAQ;IAC/B,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAiD;IAC1E,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAa;IACtC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAa;IACvC,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,OAAO,CAAS;IAExB,YAAY,OAAO,EAAE,oBAAoB,EAUxC;IAED,WAAW,CAAC,QAAQ,EAAE,YAAY,GAAG,IAAI,CAOxC;IAED,6FAA6F;IAC7F,IAAI,CAAC,KAAK,EAAE,SAAS,GAAG,MAAM,IAAI,CAKjC;IAED,gEAAgE;IAChE,KAAK,IAAI,IAAI,CAAsB;IACnC,iEAAiE;IACjE,MAAM,IAAI,IAAI,CAAuB;IAErC,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,CAI1C;IAED,OAAO,CAAC,MAAM;CAWd"}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
import { Container, Graphics } from 'pixi.js';
|
|
2
|
+
import { Bar } from './Bar.js';
|
|
3
|
+
import { Label } from './Label.js';
|
|
4
|
+
import { theme } from './theme.js';
|
|
5
|
+
/** A themed loading view driven by `LoadQueue.snapshot`, with game-owned retry/cancel hooks. */
|
|
6
|
+
export class LoadingScreen extends Container {
|
|
7
|
+
constructor(options) {
|
|
8
|
+
super();
|
|
9
|
+
this.backdrop = new Graphics();
|
|
10
|
+
this.progress = new Bar({ width: 240, height: 10, value: 0 });
|
|
11
|
+
this.width_ = options.width;
|
|
12
|
+
this.height_ = options.height;
|
|
13
|
+
this.onRetry = options.onRetry;
|
|
14
|
+
this.onCancel = options.onCancel;
|
|
15
|
+
this.title = new Label({ text: options.title ?? 'Loading', size: 18, bold: true, align: 'center' });
|
|
16
|
+
this.status = new Label({ text: 'Preparing...', align: 'center' });
|
|
17
|
+
this.addChild(this.backdrop, this.title, this.status, this.progress);
|
|
18
|
+
this.layout();
|
|
19
|
+
}
|
|
20
|
+
setSnapshot(snapshot) {
|
|
21
|
+
const fraction = snapshot.total > 0 ? snapshot.completed / snapshot.total : 0;
|
|
22
|
+
this.progress.setValue(fraction);
|
|
23
|
+
if (snapshot.status === 'failed')
|
|
24
|
+
this.status.setText('Loading failed. Retry or cancel.');
|
|
25
|
+
else if (snapshot.status === 'cancelled')
|
|
26
|
+
this.status.setText('Loading cancelled.');
|
|
27
|
+
else if (snapshot.status === 'ready')
|
|
28
|
+
this.status.setText('Ready');
|
|
29
|
+
else
|
|
30
|
+
this.status.setText(snapshot.current ? `Loading ${snapshot.current}...` : 'Preparing...');
|
|
31
|
+
}
|
|
32
|
+
/** Connects the screen to one queue and returns the cleanup needed when its scene closes. */
|
|
33
|
+
bind(queue) {
|
|
34
|
+
this.setSnapshot(queue.snapshot);
|
|
35
|
+
const listener = (snapshot) => this.setSnapshot(snapshot);
|
|
36
|
+
queue.changed.add(listener);
|
|
37
|
+
return () => queue.changed.remove(listener);
|
|
38
|
+
}
|
|
39
|
+
/** invoke from a game-owned retry button or keyboard binding */
|
|
40
|
+
retry() { this.onRetry?.(); }
|
|
41
|
+
/** invoke from a game-owned cancel button or keyboard binding */
|
|
42
|
+
cancel() { this.onCancel?.(); }
|
|
43
|
+
resize(width, height) {
|
|
44
|
+
this.width_ = width;
|
|
45
|
+
this.height_ = height;
|
|
46
|
+
this.layout();
|
|
47
|
+
}
|
|
48
|
+
layout() {
|
|
49
|
+
const colors = theme().color;
|
|
50
|
+
this.backdrop.clear().rect(0, 0, this.width_, this.height_).fill({ color: colors.overlay, alpha: 0.92 });
|
|
51
|
+
const centerX = this.width_ / 2;
|
|
52
|
+
const centerY = this.height_ / 2;
|
|
53
|
+
this.title.anchor.set(0.5);
|
|
54
|
+
this.status.anchor.set(0.5);
|
|
55
|
+
this.title.position.set(centerX, centerY - 36);
|
|
56
|
+
this.status.position.set(centerX, centerY - 8);
|
|
57
|
+
this.progress.position.set(centerX - 120, centerY + 16);
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
//# sourceMappingURL=LoadingScreen.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"LoadingScreen.js","sourceRoot":"","sources":["../../src/ui/LoadingScreen.ts"],"names":[],"mappings":"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"}
|
package/dist/ui/MessageBox.d.ts
CHANGED
|
@@ -27,13 +27,27 @@ export interface MessageBoxOptions {
|
|
|
27
27
|
dims?: boolean;
|
|
28
28
|
/** where the stack puts the box */
|
|
29
29
|
anchor?: 'center' | 'bottom' | 'top';
|
|
30
|
+
/**
|
|
31
|
+
* `'adv'` (the default) clears and redraws the box for each page, the way this class
|
|
32
|
+
* has always worked. `'nvl'` is Ren'Py's other display mode: every page's text stays
|
|
33
|
+
* on screen, accumulating into one growing block instead of being replaced - the same
|
|
34
|
+
* script data, presented as a page of prose instead of a strip of speech bubbles.
|
|
35
|
+
*/
|
|
36
|
+
mode?: 'adv' | 'nvl';
|
|
37
|
+
/**
|
|
38
|
+
* Seconds after a page's text finishes revealing before it advances on its own, as if
|
|
39
|
+
* `confirm` had been pressed. Never applies once choices are on screen - a choice
|
|
40
|
+
* always waits for a real answer. Omit to require `confirm` for every page, the
|
|
41
|
+
* default.
|
|
42
|
+
*/
|
|
43
|
+
autoAdvance?: number;
|
|
30
44
|
}
|
|
31
45
|
/**
|
|
32
46
|
* The dialogue box.
|
|
33
47
|
*
|
|
34
48
|
* It reveals text a character at a time, advances page by page on `confirm`, and can end
|
|
35
49
|
* on a set of choices. Pressing `confirm` while text is still appearing completes the page
|
|
36
|
-
* instead of advancing
|
|
50
|
+
* instead of advancing: the behaviour every player expects, and the reason the reveal is
|
|
37
51
|
* driven by a character count rather than by animating the label.
|
|
38
52
|
*
|
|
39
53
|
* This is the one window that is not closable by `cancel`: a conversation ends when it
|
|
@@ -44,6 +58,7 @@ export declare class MessageBox extends Window {
|
|
|
44
58
|
private pageIndex;
|
|
45
59
|
private speed;
|
|
46
60
|
private revealed;
|
|
61
|
+
private mode;
|
|
47
62
|
private body;
|
|
48
63
|
private speakerLabel;
|
|
49
64
|
private portrait;
|
|
@@ -53,11 +68,22 @@ export declare class MessageBox extends Window {
|
|
|
53
68
|
private choiceList;
|
|
54
69
|
private onDone;
|
|
55
70
|
private finished;
|
|
71
|
+
private autoAdvance?;
|
|
72
|
+
private autoAdvanceElapsed;
|
|
73
|
+
private readonly messageThemeListener;
|
|
56
74
|
constructor(options: MessageBoxOptions);
|
|
75
|
+
/** recolours the parts `Window`'s own restyle does not know about: the speaker/prompt labels */
|
|
76
|
+
private restyleMessage;
|
|
77
|
+
destroy(options?: Parameters<Window['destroy']>[0]): void;
|
|
57
78
|
private showPage;
|
|
79
|
+
/** the current page's revealed slice, formatted with its speaker inline in nvl mode */
|
|
80
|
+
private renderBody;
|
|
81
|
+
private formatLine;
|
|
58
82
|
private get pageComplete();
|
|
59
83
|
update(dt: number): void;
|
|
60
84
|
handleAction(action: Action): boolean;
|
|
85
|
+
/** what a completed page does next: the next page, choices, or finishing - shared by `confirm` and `autoAdvance` */
|
|
86
|
+
private advance;
|
|
61
87
|
private showChoices;
|
|
62
88
|
/** makes the box taller by `amount`, growing upwards so its foot stays put */
|
|
63
89
|
private grow;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MessageBox.d.ts","sourceRoot":"","sources":["../../src/ui/MessageBox.ts"],"names":[],"mappings":"AAAA,OAAO,EAAqB,KAAK,OAAO,EAAE,MAAM,SAAS,CAAC;AAC1D,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAKrC,MAAM,WAAW,WAAW;IAC3B,IAAI,EAAE,MAAM,CAAC;IAEb,4CAA4C;IAC5C,OAAO,CAAC,EAAE,MAAM,CAAC;IAEjB,+CAA+C;IAC/C,QAAQ,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,WAAW,MAAM;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,WAAW,iBAAiB;IACjC,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,KAAK,CAAC,WAAW,GAAG,MAAM,CAAC,CAAC;IAEnC,gEAAgE;IAChE,KAAK,CAAC,EAAE,MAAM,CAAC;IAEf,kCAAkC;IAClC,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IAEnB,4EAA4E;IAC5E,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,OAAO,KAAK,IAAI,CAAC;IAEnC,uFAAuF;IACvF,IAAI,CAAC,EAAE,OAAO,CAAC;IAEf,mCAAmC;IACnC,MAAM,CAAC,EAAE,QAAQ,GAAG,QAAQ,GAAG,KAAK,CAAC;
|
|
1
|
+
{"version":3,"file":"MessageBox.d.ts","sourceRoot":"","sources":["../../src/ui/MessageBox.ts"],"names":[],"mappings":"AAAA,OAAO,EAAqB,KAAK,OAAO,EAAE,MAAM,SAAS,CAAC;AAC1D,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAKrC,MAAM,WAAW,WAAW;IAC3B,IAAI,EAAE,MAAM,CAAC;IAEb,4CAA4C;IAC5C,OAAO,CAAC,EAAE,MAAM,CAAC;IAEjB,+CAA+C;IAC/C,QAAQ,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,WAAW,MAAM;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,WAAW,iBAAiB;IACjC,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,KAAK,CAAC,WAAW,GAAG,MAAM,CAAC,CAAC;IAEnC,gEAAgE;IAChE,KAAK,CAAC,EAAE,MAAM,CAAC;IAEf,kCAAkC;IAClC,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IAEnB,4EAA4E;IAC5E,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,OAAO,KAAK,IAAI,CAAC;IAEnC,uFAAuF;IACvF,IAAI,CAAC,EAAE,OAAO,CAAC;IAEf,mCAAmC;IACnC,MAAM,CAAC,EAAE,QAAQ,GAAG,QAAQ,GAAG,KAAK,CAAC;IAErC;;;;;OAKG;IACH,IAAI,CAAC,EAAE,KAAK,GAAG,KAAK,CAAC;IAErB;;;;;OAKG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;CACrB;AAED;;;;;;;;;;GAUG;AACH,qBAAa,UAAW,SAAQ,MAAM;IACrC,OAAO,CAAC,KAAK,CAAgB;IAC7B,OAAO,CAAC,SAAS,CAAK;IAEtB,OAAO,CAAC,KAAK,CAAS;IACtB,OAAO,CAAC,QAAQ,CAAK;IACrB,OAAO,CAAC,IAAI,CAAgB;IAE5B,OAAO,CAAC,IAAI,CAAQ;IACpB,OAAO,CAAC,YAAY,CAAQ;IAC5B,OAAO,CAAC,QAAQ,CAAuB;IACvC,OAAO,CAAC,aAAa,CAAmB;IACxC,OAAO,CAAC,MAAM,CAAQ;IAEtB,OAAO,CAAC,OAAO,CAAW;IAC1B,OAAO,CAAC,UAAU,CAAyB;IAE3C,OAAO,CAAC,MAAM,CAAqC;IACnD,OAAO,CAAC,QAAQ,CAAS;IAEzB,OAAO,CAAC,WAAW,CAAC,CAAS;IAC7B,OAAO,CAAC,kBAAkB,CAAK;IAE/B,OAAO,CAAC,QAAQ,CAAC,oBAAoB,CAA+B;IAEpE,YAAY,OAAO,EAAE,iBAAiB,EAkCrC;IAED,gGAAgG;IAChG,OAAO,CAAC,cAAc;IAMb,OAAO,CAAC,OAAO,CAAC,EAAE,UAAU,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAGjE;IAED,OAAO,CAAC,QAAQ;IAwChB,uFAAuF;IACvF,OAAO,CAAC,UAAU;IAclB,OAAO,CAAC,UAAU;IAIlB,OAAO,KAAK,YAAY,GAEvB;IAEQ,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,CAqBhC;IAEQ,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAgB7C;IAED,oHAAoH;IACpH,OAAO,CAAC,OAAO;IAef,OAAO,CAAC,WAAW;IAoCnB,8EAA8E;IAC9E,OAAO,CAAC,IAAI;IAOZ,OAAO,CAAC,MAAM;CAMd"}
|
package/dist/ui/MessageBox.js
CHANGED
|
@@ -2,13 +2,13 @@ import { Container, Sprite } from 'pixi.js';
|
|
|
2
2
|
import { Window } from './Window.js';
|
|
3
3
|
import { Label } from './Label.js';
|
|
4
4
|
import { ListView } from './ListView.js';
|
|
5
|
-
import { theme } from './theme.js';
|
|
5
|
+
import { theme, themeChanged } from './theme.js';
|
|
6
6
|
/**
|
|
7
7
|
* The dialogue box.
|
|
8
8
|
*
|
|
9
9
|
* It reveals text a character at a time, advances page by page on `confirm`, and can end
|
|
10
10
|
* on a set of choices. Pressing `confirm` while text is still appearing completes the page
|
|
11
|
-
* instead of advancing
|
|
11
|
+
* instead of advancing: the behaviour every player expects, and the reason the reveal is
|
|
12
12
|
* driven by a character count rather than by animating the label.
|
|
13
13
|
*
|
|
14
14
|
* This is the one window that is not closable by `cancel`: a conversation ends when it
|
|
@@ -30,8 +30,12 @@ export class MessageBox extends Window {
|
|
|
30
30
|
this.portraitLayer = new Container();
|
|
31
31
|
this.choiceList = null;
|
|
32
32
|
this.finished = false;
|
|
33
|
+
this.autoAdvanceElapsed = 0;
|
|
34
|
+
this.messageThemeListener = () => this.restyleMessage();
|
|
33
35
|
this.pages = options.pages.map((page) => (typeof page === 'string' ? { text: page } : page));
|
|
34
36
|
this.speed = options.speed ?? 40;
|
|
37
|
+
this.mode = options.mode ?? 'adv';
|
|
38
|
+
this.autoAdvance = options.autoAdvance;
|
|
35
39
|
this.choices = options.choices ?? [];
|
|
36
40
|
this.onDone = options.onDone ?? null;
|
|
37
41
|
const t = theme();
|
|
@@ -45,6 +49,17 @@ export class MessageBox extends Window {
|
|
|
45
49
|
this.prompt.visible = false;
|
|
46
50
|
this.content.addChild(this.prompt);
|
|
47
51
|
this.showPage(0);
|
|
52
|
+
themeChanged.add(this.messageThemeListener);
|
|
53
|
+
}
|
|
54
|
+
/** recolours the parts `Window`'s own restyle does not know about: the speaker/prompt labels */
|
|
55
|
+
restyleMessage() {
|
|
56
|
+
const t = theme();
|
|
57
|
+
this.speakerLabel.setColor(t.color.textHighlight);
|
|
58
|
+
this.prompt.setColor(t.color.textDim);
|
|
59
|
+
}
|
|
60
|
+
destroy(options) {
|
|
61
|
+
themeChanged.remove(this.messageThemeListener);
|
|
62
|
+
super.destroy(options);
|
|
48
63
|
}
|
|
49
64
|
showPage(index) {
|
|
50
65
|
const page = this.pages[index];
|
|
@@ -64,29 +79,59 @@ export class MessageBox extends Window {
|
|
|
64
79
|
textWidth = this.contentWidth - this.portrait.width - t.padding;
|
|
65
80
|
textLeft = rtl ? 0 : this.portrait.width + t.padding;
|
|
66
81
|
}
|
|
67
|
-
|
|
82
|
+
//nvl mode inlines the speaker into the accumulated text instead of a separate label,
|
|
83
|
+
//since there is no longer one current page's worth of header to place
|
|
84
|
+
this.speakerLabel.visible = this.mode === 'adv' && page.speaker !== undefined;
|
|
68
85
|
this.speakerLabel.x = textLeft;
|
|
69
86
|
this.speakerLabel.setText(page.speaker ?? '');
|
|
70
87
|
this.body.x = textLeft;
|
|
71
|
-
this.body.y = page.speaker !== undefined ? this.speakerLabel.height + t.spacing : 0;
|
|
88
|
+
this.body.y = this.mode === 'adv' && page.speaker !== undefined ? this.speakerLabel.height + t.spacing : 0;
|
|
72
89
|
this.body.style.wordWrapWidth = Math.max(16, textWidth);
|
|
73
90
|
this.revealed = this.speed > 0 ? 0 : page.text.length;
|
|
74
|
-
this.
|
|
91
|
+
this.autoAdvanceElapsed = 0;
|
|
92
|
+
this.renderBody();
|
|
75
93
|
this.prompt.visible = false;
|
|
76
94
|
this.prompt.x = rtl ? 0 : this.contentWidth - this.prompt.width;
|
|
77
95
|
this.prompt.y = this.contentHeight - this.prompt.height;
|
|
78
96
|
}
|
|
97
|
+
/** the current page's revealed slice, formatted with its speaker inline in nvl mode */
|
|
98
|
+
renderBody() {
|
|
99
|
+
if (this.mode === 'adv') {
|
|
100
|
+
this.body.setText(this.pages[this.pageIndex].text.slice(0, Math.floor(this.revealed)));
|
|
101
|
+
return;
|
|
102
|
+
}
|
|
103
|
+
//every earlier page is already fully revealed and stays on screen; only the newest
|
|
104
|
+
//page's own reveal is still in progress
|
|
105
|
+
const lines = this.pages.slice(0, this.pageIndex).map((page) => this.formatLine(page, page.text));
|
|
106
|
+
const current = this.pages[this.pageIndex];
|
|
107
|
+
lines.push(this.formatLine(current, current.text.slice(0, Math.floor(this.revealed))));
|
|
108
|
+
this.body.setText(lines.join('\n\n'));
|
|
109
|
+
}
|
|
110
|
+
formatLine(page, text) {
|
|
111
|
+
return page.speaker !== undefined ? `${page.speaker}: ${text}` : text;
|
|
112
|
+
}
|
|
79
113
|
get pageComplete() {
|
|
80
114
|
return this.revealed >= this.pages[this.pageIndex].text.length;
|
|
81
115
|
}
|
|
82
116
|
update(dt) {
|
|
83
|
-
if (this.finished
|
|
84
|
-
|
|
85
|
-
|
|
117
|
+
if (this.finished)
|
|
118
|
+
return;
|
|
119
|
+
if (!this.pageComplete) {
|
|
120
|
+
this.revealed = Math.min(this.pages[this.pageIndex].text.length, this.revealed + this.speed * dt);
|
|
121
|
+
this.renderBody();
|
|
86
122
|
return;
|
|
87
123
|
}
|
|
88
|
-
|
|
89
|
-
this.
|
|
124
|
+
//only prompt once there is something to advance to
|
|
125
|
+
this.prompt.visible = !this.choiceList;
|
|
126
|
+
//never applies with choices on screen - a choice always waits for a real answer,
|
|
127
|
+
//the same rule `confirm` follows once `delegate` takes over
|
|
128
|
+
if (this.autoAdvance === undefined || this.choiceList)
|
|
129
|
+
return;
|
|
130
|
+
this.autoAdvanceElapsed += dt;
|
|
131
|
+
if (this.autoAdvanceElapsed >= this.autoAdvance) {
|
|
132
|
+
this.autoAdvanceElapsed = 0;
|
|
133
|
+
this.advance();
|
|
134
|
+
}
|
|
90
135
|
}
|
|
91
136
|
handleAction(action) {
|
|
92
137
|
//once choices are up they own the input, which is what `delegate` expresses
|
|
@@ -98,20 +143,24 @@ export class MessageBox extends Window {
|
|
|
98
143
|
//also skip the page, or fast readers lose lines
|
|
99
144
|
if (!this.pageComplete) {
|
|
100
145
|
this.revealed = this.pages[this.pageIndex].text.length;
|
|
101
|
-
this.
|
|
146
|
+
this.renderBody();
|
|
102
147
|
return true;
|
|
103
148
|
}
|
|
149
|
+
this.advance();
|
|
150
|
+
return true;
|
|
151
|
+
}
|
|
152
|
+
/** what a completed page does next: the next page, choices, or finishing - shared by `confirm` and `autoAdvance` */
|
|
153
|
+
advance() {
|
|
104
154
|
if (this.pageIndex < this.pages.length - 1) {
|
|
105
155
|
this.pageIndex++;
|
|
106
156
|
this.showPage(this.pageIndex);
|
|
107
|
-
return
|
|
157
|
+
return;
|
|
108
158
|
}
|
|
109
159
|
if (this.choices.length > 0) {
|
|
110
160
|
this.showChoices();
|
|
111
|
-
return
|
|
161
|
+
return;
|
|
112
162
|
}
|
|
113
163
|
this.finish(undefined);
|
|
114
|
-
return true;
|
|
115
164
|
}
|
|
116
165
|
showChoices() {
|
|
117
166
|
const t = theme();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MessageBox.js","sourceRoot":"","sources":["../../src/ui/MessageBox.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,EAAgB,MAAM,SAAS,CAAC;AAE1D,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,OAAO,EAAE,QAAQ,EAAiB,MAAM,eAAe,CAAC;AACxD,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"MessageBox.js","sourceRoot":"","sources":["../../src/ui/MessageBox.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,EAAgB,MAAM,SAAS,CAAC;AAE1D,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,OAAO,EAAE,QAAQ,EAAiB,MAAM,eAAe,CAAC;AACxD,OAAO,EAAE,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAuDjD;;;;;;;;;;GAUG;AACH,MAAM,OAAO,UAAW,SAAQ,MAAM;IAyBrC,YAAY,OAA0B;QACrC,KAAK,CAAC;YACL,KAAK,EAAE,OAAO,CAAC,KAAK;YACpB,MAAM,EAAE,OAAO,CAAC,MAAM;YACtB,KAAK,EAAE,IAAI;YACX,QAAQ,EAAE,KAAK;YACf,IAAI,EAAE,OAAO,CAAC,IAAI;YAClB,MAAM,EAAE,OAAO,CAAC,MAAM,IAAI,QAAQ;SAClC,CAAC,CAAC;QA/BI,cAAS,GAAG,CAAC,CAAC;QAGd,aAAQ,GAAG,CAAC,CAAC;QAKb,aAAQ,GAAkB,IAAI,CAAC;QAC/B,kBAAa,GAAG,IAAI,SAAS,EAAE,CAAC;QAIhC,eAAU,GAAoB,IAAI,CAAC;QAGnC,aAAQ,GAAG,KAAK,CAAC;QAGjB,uBAAkB,GAAG,CAAC,CAAC;QAEd,yBAAoB,GAAG,GAAG,EAAE,CAAC,IAAI,CAAC,cAAc,EAAE,CAAC;QAYnE,IAAI,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,OAAO,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;QAC7F,IAAI,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK,IAAI,EAAE,CAAC;QACjC,IAAI,CAAC,IAAI,GAAG,OAAO,CAAC,IAAI,IAAI,KAAK,CAAC;QAClC,IAAI,CAAC,WAAW,GAAG,OAAO,CAAC,WAAW,CAAC;QACvC,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC,OAAO,IAAI,EAAE,CAAC;QACrC,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,IAAI,CAAC;QAErC,MAAM,CAAC,GAAG,KAAK,EAAE,CAAC;QAElB,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QAE1C,IAAI,CAAC,YAAY,GAAG,IAAI,KAAK,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,aAAa,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;QAC5E,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QAEzC,IAAI,CAAC,IAAI,GAAG,IAAI,KAAK,CAAC,EAAE,SAAS,EAAE,IAAI,CAAC,YAAY,EAAE,CAAC,CAAC;QACxD,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAEjC,+EAA+E;QAC/E,IAAI,CAAC,MAAM,GAAG,IAAI,KAAK,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;QAC/D,IAAI,CAAC,MAAM,CAAC,OAAO,GAAG,KAAK,CAAC;QAC5B,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAEnC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;QACjB,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC;IAC7C,CAAC;IAED,gGAAgG;IACxF,cAAc;QACrB,MAAM,CAAC,GAAG,KAAK,EAAE,CAAC;QAClB,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;QAClD,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IACvC,CAAC;IAEQ,OAAO,CAAC,OAA0C;QAC1D,YAAY,CAAC,MAAM,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC;QAC/C,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IACxB,CAAC;IAEO,QAAQ,CAAC,KAAa;QAC7B,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QAC/B,MAAM,CAAC,GAAG,KAAK,EAAE,CAAC;QAClB,kFAAkF;QAClF,uEAAuE;QACvE,MAAM,GAAG,GAAG,CAAC,CAAC,SAAS,KAAK,KAAK,CAAC;QAElC,IAAI,CAAC,aAAa,CAAC,cAAc,EAAE,CAAC;QACpC,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;QAErB,IAAI,QAAQ,GAAG,CAAC,CAAC;QACjB,IAAI,SAAS,GAAG,IAAI,CAAC,YAAY,CAAC;QAClC,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YACnB,IAAI,CAAC,QAAQ,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YAC1C,IAAI,GAAG;gBAAE,IAAI,CAAC,QAAQ,CAAC,CAAC,GAAG,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;YACnE,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YAE3C,SAAS,GAAG,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,QAAQ,CAAC,KAAK,GAAG,CAAC,CAAC,OAAO,CAAC;YAChE,QAAQ,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,GAAG,CAAC,CAAC,OAAO,CAAC;QACtD,CAAC;QAED,qFAAqF;QACrF,sEAAsE;QACtE,IAAI,CAAC,YAAY,CAAC,OAAO,GAAG,IAAI,CAAC,IAAI,KAAK,KAAK,IAAI,IAAI,CAAC,OAAO,KAAK,SAAS,CAAC;QAC9E,IAAI,CAAC,YAAY,CAAC,CAAC,GAAG,QAAQ,CAAC;QAC/B,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC;QAE9C,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,QAAQ,CAAC;QACvB,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,IAAI,KAAK,KAAK,IAAI,IAAI,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;QAC3G,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,aAAa,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,SAAS,CAAC,CAAC;QAExD,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC;QACtD,IAAI,CAAC,kBAAkB,GAAG,CAAC,CAAC;QAC5B,IAAI,CAAC,UAAU,EAAE,CAAC;QAElB,IAAI,CAAC,MAAM,CAAC,OAAO,GAAG,KAAK,CAAC;QAC5B,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC;QAChE,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC;IACzD,CAAC;IAED,uFAAuF;IAC/E,UAAU;QACjB,IAAI,IAAI,CAAC,IAAI,KAAK,KAAK,EAAE,CAAC;YACzB,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;YACvF,OAAO;QACR,CAAC;QAED,mFAAmF;QACnF,wCAAwC;QACxC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QAClG,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAC3C,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;QACvF,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;IACvC,CAAC;IAEO,UAAU,CAAC,IAAiB,EAAE,IAAY;QACjD,OAAO,IAAI,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,OAAO,KAAK,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;IACvE,CAAC;IAED,IAAY,YAAY;QACvB,OAAO,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC;IAChE,CAAC;IAEQ,MAAM,CAAC,EAAU;QACzB,IAAI,IAAI,CAAC,QAAQ;YAAE,OAAO;QAE1B,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC;YACxB,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC,CAAC;YAClG,IAAI,CAAC,UAAU,EAAE,CAAC;YAClB,OAAO;QACR,CAAC;QAED,mDAAmD;QACnD,IAAI,CAAC,MAAM,CAAC,OAAO,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC;QAEvC,iFAAiF;QACjF,4DAA4D;QAC5D,IAAI,IAAI,CAAC,WAAW,KAAK,SAAS,IAAI,IAAI,CAAC,UAAU;YAAE,OAAO;QAE9D,IAAI,CAAC,kBAAkB,IAAI,EAAE,CAAC;QAC9B,IAAI,IAAI,CAAC,kBAAkB,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;YACjD,IAAI,CAAC,kBAAkB,GAAG,CAAC,CAAC;YAC5B,IAAI,CAAC,OAAO,EAAE,CAAC;QAChB,CAAC;IACF,CAAC;IAEQ,YAAY,CAAC,MAAc;QACnC,4EAA4E;QAC5E,IAAI,IAAI,CAAC,QAAQ;YAAE,OAAO,KAAK,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;QAErD,IAAI,MAAM,KAAK,SAAS;YAAE,OAAO,KAAK,CAAC;QAEvC,iFAAiF;QACjF,gDAAgD;QAChD,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC;YACxB,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC;YACvD,IAAI,CAAC,UAAU,EAAE,CAAC;YAClB,OAAO,IAAI,CAAC;QACb,CAAC;QAED,IAAI,CAAC,OAAO,EAAE,CAAC;QACf,OAAO,IAAI,CAAC;IACb,CAAC;IAED,oHAAoH;IAC5G,OAAO;QACd,IAAI,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC5C,IAAI,CAAC,SAAS,EAAE,CAAC;YACjB,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YAC9B,OAAO;QACR,CAAC;QAED,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC7B,IAAI,CAAC,WAAW,EAAE,CAAC;YACnB,OAAO;QACR,CAAC;QAED,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;IACxB,CAAC;IAEO,WAAW;QAClB,MAAM,CAAC,GAAG,KAAK,EAAE,CAAC;QAClB,MAAM,KAAK,GAAe,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;YACvD,IAAI,EAAE,MAAM,CAAC,IAAI;YACjB,QAAQ,EAAE,MAAM,CAAC,QAAQ;YACzB,KAAK,EAAE,MAAM,CAAC,KAAK,IAAI,MAAM,CAAC,IAAI;SAClC,CAAC,CAAC,CAAC;QAEJ,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC;QACzE,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,GAAG,SAAS,CAAC;QAExC,mFAAmF;QACnF,iFAAiF;QACjF,sDAAsD;QACtD,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,OAAO,CAAC;QAEvD,4EAA4E;QAC5E,0EAA0E;QAC1E,MAAM,QAAQ,GAAG,GAAG,GAAG,MAAM,GAAG,IAAI,CAAC,aAAa,CAAC;QACnD,IAAI,QAAQ,GAAG,CAAC,EAAE,CAAC;YAClB,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACrB,CAAC;QAED,IAAI,CAAC,UAAU,GAAG,IAAI,QAAQ,CAAC;YAC9B,KAAK,EAAE,IAAI,CAAC,YAAY;YACxB,MAAM;YACN,KAAK;YACL,QAAQ,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC;SAC3C,CAAC,CAAC;QACH,IAAI,CAAC,UAAU,CAAC,CAAC,GAAG,GAAG,CAAC;QACxB,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QACvC,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,UAAU,CAAC;QAEhC,IAAI,CAAC,MAAM,CAAC,OAAO,GAAG,KAAK,CAAC;IAC7B,CAAC;IAED,8EAA8E;IACtE,IAAI,CAAC,MAAc;QAC1B,MAAM,MAAM,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC;QACrC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,GAAG,MAAM,CAAC,CAAC;QAClD,wEAAwE;QACxE,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC;IACvC,CAAC;IAEO,MAAM,CAAC,MAAe;QAC7B,IAAI,IAAI,CAAC,QAAQ;YAAE,OAAO;QAC1B,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;QACrB,IAAI,CAAC,MAAM,EAAE,CAAC,MAAM,CAAC,CAAC;QACtB,IAAI,CAAC,KAAK,EAAE,CAAC;IACd,CAAC;CACD"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import { Container } from 'pixi.js';
|
|
2
|
+
import type { Action } from '../core/Input.ts';
|
|
3
|
+
export interface RebindScreenOptions {
|
|
4
|
+
width: number;
|
|
5
|
+
height: number;
|
|
6
|
+
/** which actions to list, and in what order */
|
|
7
|
+
actions: readonly Action[];
|
|
8
|
+
/** a label for an action, `mwg` never invents a display name of its own */
|
|
9
|
+
label?: (action: Action) => string;
|
|
10
|
+
rowHeight?: number;
|
|
11
|
+
/**
|
|
12
|
+
* Asked before a captured key already claimed by another action is taken from it -
|
|
13
|
+
* `Input.actionsForKey` (item 94) is exactly the query behind `previousOwners`. Return
|
|
14
|
+
* `false` to refuse the capture and leave every binding untouched, for a game that wants
|
|
15
|
+
* to warn and ask first rather than silently losing the old binding. Omit it to always
|
|
16
|
+
* take the key over, which is this screen's default.
|
|
17
|
+
*/
|
|
18
|
+
onConflict?: (key: string, action: Action, previousOwners: readonly Action[]) => boolean;
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* A ready-made rebinding flow over `Input`'s existing `bind`/`keysFor`/`actionsForKey`, the
|
|
22
|
+
* same way `IconGrid` is a ready-made inventory screen over `Inventory` rather than something
|
|
23
|
+
* every game builds by hand. `confirm` on a row starts capturing the next physical key
|
|
24
|
+
* pressed; that capture reads the raw `onKey` signal rather than a named action, since the
|
|
25
|
+
* whole point is accepting a key nothing is bound to yet.
|
|
26
|
+
*
|
|
27
|
+
* Capturing a key replaces that action's *entire* existing binding, the same way a settings
|
|
28
|
+
* screen's "press a key" always means "this is the key now", not "add one more" - a row shows
|
|
29
|
+
* every key `Input.keysFor` currently returns, but confirming it always ends with exactly one.
|
|
30
|
+
*
|
|
31
|
+
* Pressing the physical Escape key while capturing cancels it rather than binding Escape
|
|
32
|
+
* itself - the same reservation `DEFAULT_BINDINGS` already makes for `'cancel'`, and the only
|
|
33
|
+
* way to back out of a capture once started.
|
|
34
|
+
*/
|
|
35
|
+
export declare class RebindScreen extends Container {
|
|
36
|
+
private list;
|
|
37
|
+
private actions;
|
|
38
|
+
private labelFor;
|
|
39
|
+
private onConflict;
|
|
40
|
+
private capturing;
|
|
41
|
+
private onKeyCaptured;
|
|
42
|
+
constructor(options: RebindScreenOptions);
|
|
43
|
+
private rows;
|
|
44
|
+
private rowText;
|
|
45
|
+
private refresh;
|
|
46
|
+
private startCapture;
|
|
47
|
+
private cancelCapture;
|
|
48
|
+
private finishCapture;
|
|
49
|
+
/** true while waiting for the next physical key press to bind */
|
|
50
|
+
get isCapturing(): boolean;
|
|
51
|
+
/** @returns true when the action was used */
|
|
52
|
+
handleAction(action: Action): boolean;
|
|
53
|
+
destroy(options?: Parameters<Container['destroy']>[0]): void;
|
|
54
|
+
}
|
|
55
|
+
//# sourceMappingURL=RebindScreen.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RebindScreen.d.ts","sourceRoot":"","sources":["../../src/ui/RebindScreen.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAEpC,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAG/C,MAAM,WAAW,mBAAmB;IACnC,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IAEf,+CAA+C;IAC/C,OAAO,EAAE,SAAS,MAAM,EAAE,CAAC;IAE3B,2EAA2E;IAC3E,KAAK,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,MAAM,CAAC;IAEnC,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB;;;;;;OAMG;IACH,UAAU,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,cAAc,EAAE,SAAS,MAAM,EAAE,KAAK,OAAO,CAAC;CACzF;AAED;;;;;;;;;;;;;;GAcG;AACH,qBAAa,YAAa,SAAQ,SAAS;IAC1C,OAAO,CAAC,IAAI,CAAW;IACvB,OAAO,CAAC,OAAO,CAAW;IAC1B,OAAO,CAAC,QAAQ,CAA6B;IAC7C,OAAO,CAAC,UAAU,CAA8E;IAChG,OAAO,CAAC,SAAS,CAAuB;IACxC,OAAO,CAAC,aAAa,CAOnB;IAEF,YAAY,OAAO,EAAE,mBAAmB,EAavC;IAED,OAAO,CAAC,IAAI;IAQZ,OAAO,CAAC,OAAO;IAMf,OAAO,CAAC,OAAO;IAMf,OAAO,CAAC,YAAY;IAcpB,OAAO,CAAC,aAAa;IAMrB,OAAO,CAAC,aAAa;IAerB,iEAAiE;IACjE,IAAI,WAAW,IAAI,OAAO,CAEzB;IAED,6CAA6C;IAC7C,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CASpC;IAEQ,OAAO,CAAC,OAAO,CAAC,EAAE,UAAU,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAGpE;CACD"}
|