@datamoc/mw_games 0.7.6 → 0.7.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +359 -0
- package/README.md +7 -7
- package/dist/actors/Inventory.d.ts +7 -1
- package/dist/actors/Inventory.d.ts.map +1 -1
- package/dist/actors/Inventory.js.map +1 -1
- package/dist/actors/Shop.d.ts.map +1 -1
- package/dist/actors/Shop.js +4 -1
- package/dist/actors/Shop.js.map +1 -1
- package/dist/actors/craft.d.ts +35 -14
- package/dist/actors/craft.d.ts.map +1 -1
- package/dist/actors/craft.js +56 -24
- package/dist/actors/craft.js.map +1 -1
- package/dist/actors/index.d.ts +1 -1
- package/dist/actors/index.d.ts.map +1 -1
- package/dist/ai/Heuristics.d.ts +240 -0
- package/dist/ai/Heuristics.d.ts.map +1 -0
- package/dist/ai/Heuristics.js +298 -0
- package/dist/ai/Heuristics.js.map +1 -0
- package/dist/ai/index.d.ts +4 -0
- package/dist/ai/index.d.ts.map +1 -1
- package/dist/ai/index.js +2 -0
- package/dist/ai/index.js.map +1 -1
- package/dist/ai/lua.d.ts +21 -0
- package/dist/ai/lua.d.ts.map +1 -1
- package/dist/ai/lua.js +21 -0
- package/dist/ai/lua.js.map +1 -1
- package/dist/ai/score.d.ts +162 -0
- package/dist/ai/score.d.ts.map +1 -0
- package/dist/ai/score.js +147 -0
- package/dist/ai/score.js.map +1 -0
- package/dist/assets/loader.d.ts +18 -4
- package/dist/assets/loader.d.ts.map +1 -1
- package/dist/assets/loader.js +40 -11
- package/dist/assets/loader.js.map +1 -1
- package/dist/audio/Positional.d.ts +125 -0
- package/dist/audio/Positional.d.ts.map +1 -0
- package/dist/audio/Positional.js +135 -0
- package/dist/audio/Positional.js.map +1 -0
- package/dist/audio/Sound.d.ts +7 -1
- package/dist/audio/Sound.d.ts.map +1 -1
- package/dist/audio/Sound.js +8 -2
- package/dist/audio/Sound.js.map +1 -1
- package/dist/audio/index.d.ts +2 -0
- package/dist/audio/index.d.ts.map +1 -1
- package/dist/audio/index.js +1 -0
- package/dist/audio/index.js.map +1 -1
- package/dist/battle/AttackDialog.d.ts +75 -0
- package/dist/battle/AttackDialog.d.ts.map +1 -0
- package/dist/battle/AttackDialog.js +115 -0
- package/dist/battle/AttackDialog.js.map +1 -0
- package/dist/battle/AttackPreview.d.ts +70 -0
- package/dist/battle/AttackPreview.d.ts.map +1 -0
- package/dist/battle/AttackPreview.js +78 -0
- package/dist/battle/AttackPreview.js.map +1 -0
- package/dist/battle/BattleStats.d.ts +45 -0
- package/dist/battle/BattleStats.d.ts.map +1 -0
- package/dist/battle/BattleStats.js +63 -0
- package/dist/battle/BattleStats.js.map +1 -0
- package/dist/battle/UnitSelector.d.ts +72 -0
- package/dist/battle/UnitSelector.d.ts.map +1 -0
- package/dist/battle/UnitSelector.js +117 -0
- package/dist/battle/UnitSelector.js.map +1 -0
- package/dist/battle/Whiteboard.d.ts +50 -0
- package/dist/battle/Whiteboard.d.ts.map +1 -0
- package/dist/battle/Whiteboard.js +94 -0
- package/dist/battle/Whiteboard.js.map +1 -0
- package/dist/battle/index.d.ts +10 -0
- package/dist/battle/index.d.ts.map +1 -1
- package/dist/battle/index.js +5 -0
- package/dist/battle/index.js.map +1 -1
- package/dist/board/Classics.d.ts.map +1 -1
- package/dist/board/Classics.js +51 -39
- package/dist/board/Classics.js.map +1 -1
- package/dist/board/FogOfWar.d.ts +32 -2
- package/dist/board/FogOfWar.d.ts.map +1 -1
- package/dist/board/FogOfWar.js +70 -6
- package/dist/board/FogOfWar.js.map +1 -1
- package/dist/board/HexSkirmish.d.ts.map +1 -1
- package/dist/board/HexSkirmish.js +69 -20
- package/dist/board/HexSkirmish.js.map +1 -1
- package/dist/board/Tactics.d.ts +7 -0
- package/dist/board/Tactics.d.ts.map +1 -1
- package/dist/board/Tactics.js +2 -2
- package/dist/board/Tactics.js.map +1 -1
- package/dist/core/Achievements.d.ts +40 -7
- package/dist/core/Achievements.d.ts.map +1 -1
- package/dist/core/Achievements.js +53 -7
- package/dist/core/Achievements.js.map +1 -1
- package/dist/core/Hex.d.ts +26 -6
- package/dist/core/Hex.d.ts.map +1 -1
- package/dist/core/Hex.js +40 -13
- package/dist/core/Hex.js.map +1 -1
- package/dist/core/Input.d.ts +36 -0
- package/dist/core/Input.d.ts.map +1 -1
- package/dist/core/Input.js +63 -1
- package/dist/core/Input.js.map +1 -1
- package/dist/core/Random.d.ts +93 -0
- package/dist/core/Random.d.ts.map +1 -1
- package/dist/core/Random.js +177 -0
- package/dist/core/Random.js.map +1 -1
- package/dist/core/SyncGuard.d.ts +57 -0
- package/dist/core/SyncGuard.d.ts.map +1 -0
- package/dist/core/SyncGuard.js +116 -0
- package/dist/core/SyncGuard.js.map +1 -0
- package/dist/core/index.d.ts +3 -1
- package/dist/core/index.d.ts.map +1 -1
- package/dist/core/index.js +2 -1
- package/dist/core/index.js.map +1 -1
- package/dist/i18n/Po.d.ts +51 -0
- package/dist/i18n/Po.d.ts.map +1 -0
- package/dist/i18n/Po.js +176 -0
- package/dist/i18n/Po.js.map +1 -0
- package/dist/i18n/index.d.ts +2 -0
- package/dist/i18n/index.d.ts.map +1 -1
- package/dist/i18n/index.js +1 -0
- package/dist/i18n/index.js.map +1 -1
- package/dist/mw_games.global.js +104 -98
- package/dist/mwl/MapFile.d.ts +41 -0
- package/dist/mwl/MapFile.d.ts.map +1 -0
- package/dist/mwl/MapFile.js +43 -0
- package/dist/mwl/MapFile.js.map +1 -0
- package/dist/mwl/actors.d.ts +46 -2
- package/dist/mwl/actors.d.ts.map +1 -1
- package/dist/mwl/actors.js +46 -2
- package/dist/mwl/actors.js.map +1 -1
- package/dist/mwl/campaign.d.ts +51 -0
- package/dist/mwl/campaign.d.ts.map +1 -0
- package/dist/mwl/campaign.js +58 -0
- package/dist/mwl/campaign.js.map +1 -0
- package/dist/mwl/carryover.d.ts +86 -0
- package/dist/mwl/carryover.d.ts.map +1 -0
- package/dist/mwl/carryover.js +70 -0
- package/dist/mwl/carryover.js.map +1 -0
- package/dist/mwl/catalog.d.ts +10 -1
- package/dist/mwl/catalog.d.ts.map +1 -1
- package/dist/mwl/catalog.js +10 -1
- package/dist/mwl/catalog.js.map +1 -1
- package/dist/mwl/compiler.d.ts +70 -3
- package/dist/mwl/compiler.d.ts.map +1 -1
- package/dist/mwl/compiler.js +70 -3
- package/dist/mwl/compiler.js.map +1 -1
- package/dist/mwl/conditions.d.ts +10 -1
- package/dist/mwl/conditions.d.ts.map +1 -1
- package/dist/mwl/conditions.js +10 -1
- package/dist/mwl/conditions.js.map +1 -1
- package/dist/mwl/content.d.ts +21 -0
- package/dist/mwl/content.d.ts.map +1 -1
- package/dist/mwl/content.js +19 -0
- package/dist/mwl/content.js.map +1 -1
- package/dist/mwl/expression.d.ts +21 -0
- package/dist/mwl/expression.d.ts.map +1 -1
- package/dist/mwl/expression.js +21 -0
- package/dist/mwl/expression.js.map +1 -1
- package/dist/mwl/fengari.d.ts +12 -1
- package/dist/mwl/fengari.d.ts.map +1 -1
- package/dist/mwl/fengari.js +12 -1
- package/dist/mwl/fengari.js.map +1 -1
- package/dist/mwl/grammar.d.ts +45 -1
- package/dist/mwl/grammar.d.ts.map +1 -1
- package/dist/mwl/grammar.js +45 -1
- package/dist/mwl/grammar.js.map +1 -1
- package/dist/mwl/hooks.d.ts +51 -6
- package/dist/mwl/hooks.d.ts.map +1 -1
- package/dist/mwl/hooks.js +45 -1
- package/dist/mwl/hooks.js.map +1 -1
- package/dist/mwl/index.d.ts +9 -3
- package/dist/mwl/index.d.ts.map +1 -1
- package/dist/mwl/index.js +5 -2
- package/dist/mwl/index.js.map +1 -1
- package/dist/mwl/persistence.d.ts +32 -0
- package/dist/mwl/persistence.d.ts.map +1 -1
- package/dist/mwl/persistence.js +32 -0
- package/dist/mwl/persistence.js.map +1 -1
- package/dist/mwl/readers.d.ts +24 -2
- package/dist/mwl/readers.d.ts.map +1 -1
- package/dist/mwl/readers.js +27 -4
- package/dist/mwl/readers.js.map +1 -1
- package/dist/mwl/report.d.ts +21 -2
- package/dist/mwl/report.d.ts.map +1 -1
- package/dist/mwl/report.js +21 -2
- package/dist/mwl/report.js.map +1 -1
- package/dist/mwl/runtime.d.ts +212 -7
- package/dist/mwl/runtime.d.ts.map +1 -1
- package/dist/mwl/runtime.js +682 -90
- package/dist/mwl/runtime.js.map +1 -1
- package/dist/mwl/schema.d.ts +57 -1
- package/dist/mwl/schema.d.ts.map +1 -1
- package/dist/mwl/schema.js +181 -21
- package/dist/mwl/schema.js.map +1 -1
- package/dist/mwl/scripts.d.ts +12 -1
- package/dist/mwl/scripts.d.ts.map +1 -1
- package/dist/mwl/scripts.js +12 -1
- package/dist/mwl/scripts.js.map +1 -1
- package/dist/mwl/utils.d.ts +2 -0
- package/dist/mwl/utils.d.ts.map +1 -1
- package/dist/mwl/utils.js +4 -1
- package/dist/mwl/utils.js.map +1 -1
- package/dist/roguelike/MultiTurnBeam.d.ts +50 -12
- package/dist/roguelike/MultiTurnBeam.d.ts.map +1 -1
- package/dist/roguelike/MultiTurnBeam.js +100 -53
- package/dist/roguelike/MultiTurnBeam.js.map +1 -1
- package/dist/roguelike/Targeting.d.ts +94 -0
- package/dist/roguelike/Targeting.d.ts.map +1 -1
- package/dist/roguelike/Targeting.js +123 -0
- package/dist/roguelike/Targeting.js.map +1 -1
- package/dist/roguelike/index.d.ts +3 -1
- 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/GameState.d.ts +2 -2
- package/dist/rpg/GameState.js +2 -2
- package/dist/simulation/CampaignSave.d.ts +68 -0
- package/dist/simulation/CampaignSave.d.ts.map +1 -0
- package/dist/simulation/CampaignSave.js +54 -0
- package/dist/simulation/CampaignSave.js.map +1 -0
- package/dist/simulation/EventPresentation.d.ts +111 -0
- package/dist/simulation/EventPresentation.d.ts.map +1 -0
- package/dist/simulation/EventPresentation.js +120 -0
- package/dist/simulation/EventPresentation.js.map +1 -0
- package/dist/simulation/index.d.ts +4 -0
- package/dist/simulation/index.d.ts.map +1 -1
- package/dist/simulation/index.js +2 -0
- package/dist/simulation/index.js.map +1 -1
- package/dist/two-d/pixi-interop.d.ts +18 -6
- package/dist/two-d/pixi-interop.d.ts.map +1 -1
- package/dist/two-d/pixi-interop.js +18 -6
- package/dist/two-d/pixi-interop.js.map +1 -1
- package/dist/two-d/render/AnimatedSprite.d.ts +74 -7
- package/dist/two-d/render/AnimatedSprite.d.ts.map +1 -1
- package/dist/two-d/render/AnimatedSprite.js +88 -26
- package/dist/two-d/render/AnimatedSprite.js.map +1 -1
- package/dist/two-d/render/Camera.d.ts +64 -4
- package/dist/two-d/render/Camera.d.ts.map +1 -1
- package/dist/two-d/render/Camera.js +132 -11
- package/dist/two-d/render/Camera.js.map +1 -1
- package/dist/two-d/render/ColorTransformBatcher.d.ts +7 -1
- package/dist/two-d/render/ColorTransformBatcher.d.ts.map +1 -1
- package/dist/two-d/render/ColorTransformBatcher.js +10 -1
- package/dist/two-d/render/ColorTransformBatcher.js.map +1 -1
- package/dist/two-d/render/Halo.d.ts +58 -0
- package/dist/two-d/render/Halo.d.ts.map +1 -0
- package/dist/two-d/render/Halo.js +48 -0
- package/dist/two-d/render/Halo.js.map +1 -0
- package/dist/two-d/render/ImageModifiers.d.ts +174 -0
- package/dist/two-d/render/ImageModifiers.d.ts.map +1 -1
- package/dist/two-d/render/ImageModifiers.js +454 -1
- package/dist/two-d/render/ImageModifiers.js.map +1 -1
- package/dist/two-d/render/LightningArc.d.ts +57 -0
- package/dist/two-d/render/LightningArc.d.ts.map +1 -0
- package/dist/two-d/render/LightningArc.js +91 -0
- package/dist/two-d/render/LightningArc.js.map +1 -0
- package/dist/two-d/render/PaletteRemap.d.ts +135 -0
- package/dist/two-d/render/PaletteRemap.d.ts.map +1 -0
- package/dist/two-d/render/PaletteRemap.js +181 -0
- package/dist/two-d/render/PaletteRemap.js.map +1 -0
- package/dist/two-d/render/Particles.d.ts +26 -0
- package/dist/two-d/render/Particles.d.ts.map +1 -1
- package/dist/two-d/render/Particles.js +23 -2
- package/dist/two-d/render/Particles.js.map +1 -1
- package/dist/two-d/render/SpriteAttachment.d.ts +55 -0
- package/dist/two-d/render/SpriteAttachment.d.ts.map +1 -0
- package/dist/two-d/render/SpriteAttachment.js +60 -0
- package/dist/two-d/render/SpriteAttachment.js.map +1 -0
- package/dist/two-d/render/TerrainGraphics.d.ts +142 -0
- package/dist/two-d/render/TerrainGraphics.d.ts.map +1 -0
- package/dist/two-d/render/TerrainGraphics.js +161 -0
- package/dist/two-d/render/TerrainGraphics.js.map +1 -0
- package/dist/two-d/render/TerrainGraphicsLayer.d.ts +55 -0
- package/dist/two-d/render/TerrainGraphicsLayer.d.ts.map +1 -0
- package/dist/two-d/render/TerrainGraphicsLayer.js +54 -0
- package/dist/two-d/render/TerrainGraphicsLayer.js.map +1 -0
- package/dist/two-d/render/TintedSprite.js +2 -2
- package/dist/two-d/render/TintedSprite.js.map +1 -1
- package/dist/two-d/render/index.d.ts +15 -3
- package/dist/two-d/render/index.d.ts.map +1 -1
- package/dist/two-d/render/index.js +7 -1
- package/dist/two-d/render/index.js.map +1 -1
- package/dist/two-d/stage/StoryScreen.d.ts +110 -0
- package/dist/two-d/stage/StoryScreen.d.ts.map +1 -0
- package/dist/two-d/stage/StoryScreen.js +178 -0
- package/dist/two-d/stage/StoryScreen.js.map +1 -0
- package/dist/two-d/stage/index.d.ts +2 -0
- package/dist/two-d/stage/index.d.ts.map +1 -1
- package/dist/two-d/stage/index.js +1 -0
- package/dist/two-d/stage/index.js.map +1 -1
- package/dist/two-d/ui/Checkbox.d.ts +44 -0
- package/dist/two-d/ui/Checkbox.d.ts.map +1 -0
- package/dist/two-d/ui/Checkbox.js +89 -0
- package/dist/two-d/ui/Checkbox.js.map +1 -0
- package/dist/two-d/ui/DataTable.d.ts +79 -0
- package/dist/two-d/ui/DataTable.d.ts.map +1 -0
- package/dist/two-d/ui/DataTable.js +164 -0
- package/dist/two-d/ui/DataTable.js.map +1 -0
- package/dist/two-d/ui/Dropdown.d.ts +72 -0
- package/dist/two-d/ui/Dropdown.d.ts.map +1 -0
- package/dist/two-d/ui/Dropdown.js +126 -0
- package/dist/two-d/ui/Dropdown.js.map +1 -0
- package/dist/two-d/ui/FloatingText.d.ts +43 -4
- package/dist/two-d/ui/FloatingText.d.ts.map +1 -1
- package/dist/two-d/ui/FloatingText.js +52 -5
- package/dist/two-d/ui/FloatingText.js.map +1 -1
- package/dist/two-d/ui/FloatingTextStack.d.ts +86 -13
- package/dist/two-d/ui/FloatingTextStack.d.ts.map +1 -1
- package/dist/two-d/ui/FloatingTextStack.js +89 -18
- package/dist/two-d/ui/FloatingTextStack.js.map +1 -1
- package/dist/two-d/ui/Layout.d.ts +105 -0
- package/dist/two-d/ui/Layout.d.ts.map +1 -0
- package/dist/two-d/ui/Layout.js +174 -0
- package/dist/two-d/ui/Layout.js.map +1 -0
- package/dist/two-d/ui/MarkupText.d.ts +53 -0
- package/dist/two-d/ui/MarkupText.d.ts.map +1 -0
- package/dist/two-d/ui/MarkupText.js +122 -0
- package/dist/two-d/ui/MarkupText.js.map +1 -0
- package/dist/two-d/ui/ScrollBox.d.ts +67 -0
- package/dist/two-d/ui/ScrollBox.d.ts.map +1 -0
- package/dist/two-d/ui/ScrollBox.js +127 -0
- package/dist/two-d/ui/ScrollBox.js.map +1 -0
- package/dist/two-d/ui/Skins.d.ts +59 -0
- package/dist/two-d/ui/Skins.d.ts.map +1 -0
- package/dist/two-d/ui/Skins.js +77 -0
- package/dist/two-d/ui/Skins.js.map +1 -0
- package/dist/two-d/ui/Slider.d.ts +91 -0
- package/dist/two-d/ui/Slider.d.ts.map +1 -0
- package/dist/two-d/ui/Slider.js +170 -0
- package/dist/two-d/ui/Slider.js.map +1 -0
- package/dist/two-d/ui/Spinner.d.ts +67 -0
- package/dist/two-d/ui/Spinner.d.ts.map +1 -0
- package/dist/two-d/ui/Spinner.js +137 -0
- package/dist/two-d/ui/Spinner.js.map +1 -0
- package/dist/two-d/ui/TabbedList.d.ts +118 -0
- package/dist/two-d/ui/TabbedList.d.ts.map +1 -0
- package/dist/two-d/ui/TabbedList.js +221 -0
- package/dist/two-d/ui/TabbedList.js.map +1 -0
- package/dist/two-d/ui/TextModel.d.ts +65 -0
- package/dist/two-d/ui/TextModel.d.ts.map +1 -0
- package/dist/two-d/ui/TextModel.js +126 -0
- package/dist/two-d/ui/TextModel.js.map +1 -0
- package/dist/two-d/ui/TreeView.d.ts +68 -0
- package/dist/two-d/ui/TreeView.d.ts.map +1 -0
- package/dist/two-d/ui/TreeView.js +133 -0
- package/dist/two-d/ui/TreeView.js.map +1 -0
- package/dist/two-d/ui/Window.d.ts +13 -0
- package/dist/two-d/ui/Window.d.ts.map +1 -1
- package/dist/two-d/ui/Window.js +23 -0
- package/dist/two-d/ui/Window.js.map +1 -1
- package/dist/two-d/ui/WindowStack.d.ts.map +1 -1
- package/dist/two-d/ui/WindowStack.js +2 -0
- package/dist/two-d/ui/WindowStack.js.map +1 -1
- package/dist/two-d/ui/index.d.ts +29 -3
- package/dist/two-d/ui/index.d.ts.map +1 -1
- package/dist/two-d/ui/index.js +15 -2
- package/dist/two-d/ui/index.js.map +1 -1
- package/dist/two-d/ui/markup.d.ts +181 -0
- package/dist/two-d/ui/markup.d.ts.map +1 -0
- package/dist/two-d/ui/markup.js +370 -0
- package/dist/two-d/ui/markup.js.map +1 -0
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/dist/world/SideTurns.d.ts +115 -0
- package/dist/world/SideTurns.d.ts.map +1 -0
- package/dist/world/SideTurns.js +138 -0
- package/dist/world/SideTurns.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 +2 -1
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Ties a second sprite's position to a first one's, with its own offset and its own optional
|
|
3
|
+
* lifetime - a shadow flat beneath a unit, a status icon floating above it, a shield glyph at a
|
|
4
|
+
* corner. `StatusVisuals` only tints a sprite that already exists; this is for a sprite that is
|
|
5
|
+
* its own thing, positioned relative to an owner rather than drawn as part of it.
|
|
6
|
+
*
|
|
7
|
+
* Renderer-neutral by the same design `Projectile` and `LightningArc` use: it takes any
|
|
8
|
+
* `{ x, y }` point (a real Pixi `Sprite`, a plain object, a test double) and only ever writes
|
|
9
|
+
* to it, so it needs no renderer to construct or test. Z-order and parenting stay the caller's,
|
|
10
|
+
* for the same reason `Halo` leaves them: whether a shadow is added before or after its unit is
|
|
11
|
+
* a per-game drawing decision, not something a framework should guess.
|
|
12
|
+
*
|
|
13
|
+
* @example
|
|
14
|
+
* ```ts
|
|
15
|
+
* import { SpriteAttachment } from '@datamoc/mw_games/two-d/render';
|
|
16
|
+
*
|
|
17
|
+
* declare const shadowSprite: { x: number; y: number };
|
|
18
|
+
* declare const statusIcon: { x: number; y: number };
|
|
19
|
+
*
|
|
20
|
+
* const shadow = new SpriteAttachment(shadowSprite, { offsetY: 4 });
|
|
21
|
+
* const poisoned = new SpriteAttachment(statusIcon, { offsetY: -20, duration: 3 });
|
|
22
|
+
*
|
|
23
|
+
* shadow.follow(100, 200);
|
|
24
|
+
* poisoned.follow(100, 200);
|
|
25
|
+
*
|
|
26
|
+
* const expired = poisoned.update(1 / 60);
|
|
27
|
+
* console.log(expired); // false - not yet 3 seconds in
|
|
28
|
+
* ```
|
|
29
|
+
*/
|
|
30
|
+
export class SpriteAttachment {
|
|
31
|
+
constructor(child, options = {}) {
|
|
32
|
+
this.elapsed = 0;
|
|
33
|
+
this.expired = false;
|
|
34
|
+
this.child = child;
|
|
35
|
+
this.offsetX = options.offsetX ?? 0;
|
|
36
|
+
this.offsetY = options.offsetY ?? 0;
|
|
37
|
+
this.duration = options.duration;
|
|
38
|
+
}
|
|
39
|
+
get done() {
|
|
40
|
+
return this.expired;
|
|
41
|
+
}
|
|
42
|
+
/** puts the attachment where its owner stands, with whatever offset it was built with */
|
|
43
|
+
follow(ownerX, ownerY) {
|
|
44
|
+
this.child.x = ownerX + this.offsetX;
|
|
45
|
+
this.child.y = ownerY + this.offsetY;
|
|
46
|
+
return this;
|
|
47
|
+
}
|
|
48
|
+
/** @returns true the instant `duration` elapses, so a caller can remove it exactly once; always false with no `duration` */
|
|
49
|
+
update(dt) {
|
|
50
|
+
if (this.expired || this.duration === undefined)
|
|
51
|
+
return false;
|
|
52
|
+
this.elapsed += dt;
|
|
53
|
+
if (this.elapsed >= this.duration) {
|
|
54
|
+
this.expired = true;
|
|
55
|
+
return true;
|
|
56
|
+
}
|
|
57
|
+
return false;
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
//# sourceMappingURL=SpriteAttachment.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SpriteAttachment.js","sourceRoot":"","sources":["../../../src/two-d/render/SpriteAttachment.ts"],"names":[],"mappings":"AAcA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,MAAM,OAAO,gBAAgB;IAQ5B,YAAY,KAAsB,EAAE,OAAO,GAA4B,EAAE;QAHjE,YAAO,GAAG,CAAC,CAAC;QACZ,YAAO,GAAG,KAAK,CAAC;QAGvB,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACnB,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC,OAAO,IAAI,CAAC,CAAC;QACpC,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC,OAAO,IAAI,CAAC,CAAC;QACpC,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC;IAClC,CAAC;IAED,IAAI,IAAI;QACP,OAAO,IAAI,CAAC,OAAO,CAAC;IACrB,CAAC;IAED,yFAAyF;IACzF,MAAM,CAAC,MAAc,EAAE,MAAc;QACpC,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC;QACrC,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC;QACrC,OAAO,IAAI,CAAC;IACb,CAAC;IAED,4HAA4H;IAC5H,MAAM,CAAC,EAAU;QAChB,IAAI,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,QAAQ,KAAK,SAAS;YAAE,OAAO,KAAK,CAAC;QAC9D,IAAI,CAAC,OAAO,IAAI,EAAE,CAAC;QACnB,IAAI,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YACnC,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;YACpB,OAAO,IAAI,CAAC;QACb,CAAC;QACD,OAAO,KAAK,CAAC;IACd,CAAC;CACD"}
|
|
@@ -0,0 +1,142 @@
|
|
|
1
|
+
import { Generator } from '../../core/Random.ts';
|
|
2
|
+
/**
|
|
3
|
+
* One condition a rule tests against a neighbouring cell (or its own cell, at `dx=0, dy=0`):
|
|
4
|
+
* which flags that cell must carry, must not carry, or carry at least one of. `dx`/`dy` are in
|
|
5
|
+
* whatever unit the caller's grid uses - a square or isometric grid's own cell steps, or an
|
|
6
|
+
* axial hex offset for `hexRotate` - `resolveTerrainGraphics` never interprets them itself.
|
|
7
|
+
*/
|
|
8
|
+
export interface TerrainCondition {
|
|
9
|
+
readonly dx: number;
|
|
10
|
+
readonly dy: number;
|
|
11
|
+
readonly hasAll?: readonly string[];
|
|
12
|
+
readonly hasAny?: readonly string[];
|
|
13
|
+
readonly hasNone?: readonly string[];
|
|
14
|
+
}
|
|
15
|
+
/** One image a matched rule places, at an offset from the rule's own anchor cell. */
|
|
16
|
+
export interface TerrainImage {
|
|
17
|
+
readonly image: string;
|
|
18
|
+
/** offset from the anchor cell, in the same pixel/cell unit the caller draws with */
|
|
19
|
+
readonly dx?: number;
|
|
20
|
+
readonly dy?: number;
|
|
21
|
+
/** draw order among a rule's own images and other rules matching the same cell; higher draws later (on top) */
|
|
22
|
+
readonly layer?: number;
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* One `[terrain_graphics]`-style transition rule: a set of neighbour conditions that must all
|
|
26
|
+
* hold, and the image or images to draw when they do. A rule with more conditions is more
|
|
27
|
+
* specific and wins over a less specific one covering the same cell, the same precedence a
|
|
28
|
+
* hand-authored rule set expects (a "this exact corner" rule beats a "any edge" rule); among
|
|
29
|
+
* rules tied on specificity, `probability` weights which one is picked, so a terrain can vary
|
|
30
|
+
* its look without every variant needing a different neighbourhood to key off of.
|
|
31
|
+
*/
|
|
32
|
+
export interface TerrainRule {
|
|
33
|
+
readonly id: string;
|
|
34
|
+
readonly conditions: readonly TerrainCondition[];
|
|
35
|
+
readonly images: readonly TerrainImage[];
|
|
36
|
+
/** relative weight among rules tied for most-specific at a cell; default 1 */
|
|
37
|
+
readonly probability?: number;
|
|
38
|
+
/**
|
|
39
|
+
* how many rotated copies of this rule to also try, each one `conditions`/`images` rotated
|
|
40
|
+
* by one more step of `rotate` (see `squareRotate`/`hexRotate`) - so one rule authored for
|
|
41
|
+
* one direction covers every direction a symmetric transition needs, instead of one rule
|
|
42
|
+
* per direction written out by hand. 0 or omitted tries only the rule as written.
|
|
43
|
+
*/
|
|
44
|
+
readonly rotations?: number;
|
|
45
|
+
}
|
|
46
|
+
/** One resolved image placement: an absolute cell plus the rule's own image and offset. */
|
|
47
|
+
export interface TerrainPlacement {
|
|
48
|
+
readonly x: number;
|
|
49
|
+
readonly y: number;
|
|
50
|
+
readonly ruleId: string;
|
|
51
|
+
readonly image: string;
|
|
52
|
+
readonly dx: number;
|
|
53
|
+
readonly dy: number;
|
|
54
|
+
readonly layer: number;
|
|
55
|
+
}
|
|
56
|
+
/** The flags present at a cell, or `undefined` for a cell with no terrain at all (e.g. off the map). */
|
|
57
|
+
export type TerrainFlagsAt = (x: number, y: number) => ReadonlySet<string> | undefined;
|
|
58
|
+
/** Rotates one condition/image offset by `rotationIndex` of `rotations` total steps around the cell. */
|
|
59
|
+
export type TerrainRotate = (dx: number, dy: number, rotationIndex: number, rotations: number) => {
|
|
60
|
+
dx: number;
|
|
61
|
+
dy: number;
|
|
62
|
+
};
|
|
63
|
+
/**
|
|
64
|
+
* `TerrainRotate` for a square or isometric grid: exact 90-degree steps only (`rotations` must
|
|
65
|
+
* be a multiple of 4, or 0).
|
|
66
|
+
*
|
|
67
|
+
* @example
|
|
68
|
+
* ```ts
|
|
69
|
+
* import { squareRotate } from '@datamoc/mw_games/two-d/render';
|
|
70
|
+
*
|
|
71
|
+
* console.log(squareRotate(1, 0, 1, 4)); // { dx: 0, dy: 1 } - one 90-degree step
|
|
72
|
+
* ```
|
|
73
|
+
*/
|
|
74
|
+
export declare function squareRotate(dx: number, dy: number, rotationIndex: number, rotations: number): {
|
|
75
|
+
dx: number;
|
|
76
|
+
dy: number;
|
|
77
|
+
};
|
|
78
|
+
/**
|
|
79
|
+
* `TerrainRotate` for an axial hex grid: exact 60-degree steps (`rotations` must be a multiple
|
|
80
|
+
* of 6, or 0), via the standard cube-coordinate rotation (`q,r,s -> -r,-s,-q` per 60-degree step,
|
|
81
|
+
* `s = -q - r`).
|
|
82
|
+
*
|
|
83
|
+
* @example
|
|
84
|
+
* ```ts
|
|
85
|
+
* import { hexRotate } from '@datamoc/mw_games/two-d/render';
|
|
86
|
+
*
|
|
87
|
+
* console.log(hexRotate(1, 0, 1, 6)); // one 60-degree step of the axial offset (1, 0)
|
|
88
|
+
* ```
|
|
89
|
+
*/
|
|
90
|
+
export declare function hexRotate(dx: number, dy: number, rotationIndex: number, rotations: number): {
|
|
91
|
+
dx: number;
|
|
92
|
+
dy: number;
|
|
93
|
+
};
|
|
94
|
+
/**
|
|
95
|
+
* Whether `rule`, rotated by `rotationIndex` of `rotations` steps, matches the cell at `x, y`.
|
|
96
|
+
*
|
|
97
|
+
* @example
|
|
98
|
+
* ```ts
|
|
99
|
+
* import { matchTerrainRule } from '@datamoc/mw_games/two-d/render';
|
|
100
|
+
*
|
|
101
|
+
* const rule = { id: 'coast', conditions: [{ dx: 1, dy: 0, hasAll: ['water'] }], images: [] };
|
|
102
|
+
* const flagsAt = (x: number, y: number) => (x === 1 && y === 0 ? new Set(['water']) : new Set(['land']));
|
|
103
|
+
* console.log(matchTerrainRule(rule, 0, 0, flagsAt)); // true
|
|
104
|
+
* ```
|
|
105
|
+
*/
|
|
106
|
+
export declare function matchTerrainRule(rule: TerrainRule, x: number, y: number, flagsAt: TerrainFlagsAt, rotate?: TerrainRotate, rotationIndex?: number): boolean;
|
|
107
|
+
export interface ResolveTerrainGraphicsOptions {
|
|
108
|
+
rotate?: TerrainRotate;
|
|
109
|
+
/** deterministic when given a seeded `Generator`; a fresh unseeded one otherwise */
|
|
110
|
+
random?: Generator;
|
|
111
|
+
}
|
|
112
|
+
/**
|
|
113
|
+
* Resolves a `[terrain_graphics]`-style rule set over a grid into the flat list of image
|
|
114
|
+
* placements a renderer draws, the generalisation `Autotile`'s 47-shape blob table cannot
|
|
115
|
+
* express: a rule can test flags rather than only "same terrain", key off any offset rather
|
|
116
|
+
* than only the 8 immediate neighbours, place more than one image (so a piece bigger than one
|
|
117
|
+
* cell, overlapping its neighbours, is one rule's `images` rather than something `TileMap`'s
|
|
118
|
+
* one-sprite-per-cell grid has to hold), and vary by rotation or probability.
|
|
119
|
+
*
|
|
120
|
+
* At each cell, every rule (at every rotation it declares) is tested; among the rules that
|
|
121
|
+
* match, the most specific (most conditions) wins, and `probability` breaks a tie among rules
|
|
122
|
+
* of equal specificity. A cell with no matching rule contributes nothing. The result is plain
|
|
123
|
+
* data - which cell, which rule, which image, at what offset and layer - a caller draws
|
|
124
|
+
* through `TileMap`, a custom `Sprite` pass, or anything else; this function never touches a
|
|
125
|
+
* renderer itself.
|
|
126
|
+
*
|
|
127
|
+
* @example
|
|
128
|
+
* ```ts
|
|
129
|
+
* import { resolveTerrainGraphics } from '@datamoc/mw_games/two-d/render';
|
|
130
|
+
*
|
|
131
|
+
* const water = new Set(['water']);
|
|
132
|
+
* const land = new Set(['land']);
|
|
133
|
+
* const flagsAt = (x: number, y: number) => (x === 0 ? water : land);
|
|
134
|
+
*
|
|
135
|
+
* const placements = resolveTerrainGraphics(2, 1, [
|
|
136
|
+
* { id: 'coast', conditions: [{ dx: 0, dy: 0, hasAll: ['land'] }, { dx: -1, dy: 0, hasAll: ['water'] }], images: [{ image: 'coast.png' }] },
|
|
137
|
+
* ], flagsAt);
|
|
138
|
+
* console.log(placements); // [{ x: 1, y: 0, ruleId: 'coast', image: 'coast.png', dx: 0, dy: 0, layer: 0 }]
|
|
139
|
+
* ```
|
|
140
|
+
*/
|
|
141
|
+
export declare function resolveTerrainGraphics(width: number, height: number, rules: readonly TerrainRule[], flagsAt: TerrainFlagsAt, options?: ResolveTerrainGraphicsOptions): TerrainPlacement[];
|
|
142
|
+
//# sourceMappingURL=TerrainGraphics.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TerrainGraphics.d.ts","sourceRoot":"","sources":["../../../src/two-d/render/TerrainGraphics.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,161 @@
|
|
|
1
|
+
import { Generator } from '../../core/Random.js';
|
|
2
|
+
/**
|
|
3
|
+
* `TerrainRotate` for a square or isometric grid: exact 90-degree steps only (`rotations` must
|
|
4
|
+
* be a multiple of 4, or 0).
|
|
5
|
+
*
|
|
6
|
+
* @example
|
|
7
|
+
* ```ts
|
|
8
|
+
* import { squareRotate } from '@datamoc/mw_games/two-d/render';
|
|
9
|
+
*
|
|
10
|
+
* console.log(squareRotate(1, 0, 1, 4)); // { dx: 0, dy: 1 } - one 90-degree step
|
|
11
|
+
* ```
|
|
12
|
+
*/
|
|
13
|
+
export function squareRotate(dx, dy, rotationIndex, rotations) {
|
|
14
|
+
const steps = (rotationIndex * 4) / rotations;
|
|
15
|
+
let x = dx;
|
|
16
|
+
let y = dy;
|
|
17
|
+
for (let i = 0; i < steps; i += 1)
|
|
18
|
+
[x, y] = [-y, x];
|
|
19
|
+
return { dx: x || 0, dy: y || 0 };
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* `TerrainRotate` for an axial hex grid: exact 60-degree steps (`rotations` must be a multiple
|
|
23
|
+
* of 6, or 0), via the standard cube-coordinate rotation (`q,r,s -> -r,-s,-q` per 60-degree step,
|
|
24
|
+
* `s = -q - r`).
|
|
25
|
+
*
|
|
26
|
+
* @example
|
|
27
|
+
* ```ts
|
|
28
|
+
* import { hexRotate } from '@datamoc/mw_games/two-d/render';
|
|
29
|
+
*
|
|
30
|
+
* console.log(hexRotate(1, 0, 1, 6)); // one 60-degree step of the axial offset (1, 0)
|
|
31
|
+
* ```
|
|
32
|
+
*/
|
|
33
|
+
export function hexRotate(dx, dy, rotationIndex, rotations) {
|
|
34
|
+
const steps = (rotationIndex * 6) / rotations;
|
|
35
|
+
let q = dx;
|
|
36
|
+
let r = dy;
|
|
37
|
+
for (let i = 0; i < steps; i += 1) {
|
|
38
|
+
const s = -q - r;
|
|
39
|
+
[q, r] = [-r, -s];
|
|
40
|
+
}
|
|
41
|
+
return { dx: q || 0, dy: r || 0 };
|
|
42
|
+
}
|
|
43
|
+
function conditionMatches(condition, flags) {
|
|
44
|
+
const present = flags ?? new Set();
|
|
45
|
+
if (condition.hasAll && !condition.hasAll.every((flag) => present.has(flag)))
|
|
46
|
+
return false;
|
|
47
|
+
if (condition.hasAny && !condition.hasAny.some((flag) => present.has(flag)))
|
|
48
|
+
return false;
|
|
49
|
+
if (condition.hasNone && condition.hasNone.some((flag) => present.has(flag)))
|
|
50
|
+
return false;
|
|
51
|
+
return true;
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Whether `rule`, rotated by `rotationIndex` of `rotations` steps, matches the cell at `x, y`.
|
|
55
|
+
*
|
|
56
|
+
* @example
|
|
57
|
+
* ```ts
|
|
58
|
+
* import { matchTerrainRule } from '@datamoc/mw_games/two-d/render';
|
|
59
|
+
*
|
|
60
|
+
* const rule = { id: 'coast', conditions: [{ dx: 1, dy: 0, hasAll: ['water'] }], images: [] };
|
|
61
|
+
* const flagsAt = (x: number, y: number) => (x === 1 && y === 0 ? new Set(['water']) : new Set(['land']));
|
|
62
|
+
* console.log(matchTerrainRule(rule, 0, 0, flagsAt)); // true
|
|
63
|
+
* ```
|
|
64
|
+
*/
|
|
65
|
+
export function matchTerrainRule(rule, x, y, flagsAt, rotate = squareRotate, rotationIndex = 0) {
|
|
66
|
+
const rotations = rule.rotations ?? 0;
|
|
67
|
+
return rule.conditions.every((condition) => {
|
|
68
|
+
const offset = rotations > 0 ? rotate(condition.dx, condition.dy, rotationIndex, rotations) : condition;
|
|
69
|
+
return conditionMatches(condition, flagsAt(x + offset.dx, y + offset.dy));
|
|
70
|
+
});
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Resolves a `[terrain_graphics]`-style rule set over a grid into the flat list of image
|
|
74
|
+
* placements a renderer draws, the generalisation `Autotile`'s 47-shape blob table cannot
|
|
75
|
+
* express: a rule can test flags rather than only "same terrain", key off any offset rather
|
|
76
|
+
* than only the 8 immediate neighbours, place more than one image (so a piece bigger than one
|
|
77
|
+
* cell, overlapping its neighbours, is one rule's `images` rather than something `TileMap`'s
|
|
78
|
+
* one-sprite-per-cell grid has to hold), and vary by rotation or probability.
|
|
79
|
+
*
|
|
80
|
+
* At each cell, every rule (at every rotation it declares) is tested; among the rules that
|
|
81
|
+
* match, the most specific (most conditions) wins, and `probability` breaks a tie among rules
|
|
82
|
+
* of equal specificity. A cell with no matching rule contributes nothing. The result is plain
|
|
83
|
+
* data - which cell, which rule, which image, at what offset and layer - a caller draws
|
|
84
|
+
* through `TileMap`, a custom `Sprite` pass, or anything else; this function never touches a
|
|
85
|
+
* renderer itself.
|
|
86
|
+
*
|
|
87
|
+
* @example
|
|
88
|
+
* ```ts
|
|
89
|
+
* import { resolveTerrainGraphics } from '@datamoc/mw_games/two-d/render';
|
|
90
|
+
*
|
|
91
|
+
* const water = new Set(['water']);
|
|
92
|
+
* const land = new Set(['land']);
|
|
93
|
+
* const flagsAt = (x: number, y: number) => (x === 0 ? water : land);
|
|
94
|
+
*
|
|
95
|
+
* const placements = resolveTerrainGraphics(2, 1, [
|
|
96
|
+
* { id: 'coast', conditions: [{ dx: 0, dy: 0, hasAll: ['land'] }, { dx: -1, dy: 0, hasAll: ['water'] }], images: [{ image: 'coast.png' }] },
|
|
97
|
+
* ], flagsAt);
|
|
98
|
+
* console.log(placements); // [{ x: 1, y: 0, ruleId: 'coast', image: 'coast.png', dx: 0, dy: 0, layer: 0 }]
|
|
99
|
+
* ```
|
|
100
|
+
*/
|
|
101
|
+
export function resolveTerrainGraphics(width, height, rules, flagsAt, options = {}) {
|
|
102
|
+
const rotate = options.rotate ?? squareRotate;
|
|
103
|
+
const random = options.random ?? new Generator();
|
|
104
|
+
const placements = [];
|
|
105
|
+
for (let y = 0; y < height; y += 1) {
|
|
106
|
+
for (let x = 0; x < width; x += 1) {
|
|
107
|
+
let bestSpecificity = -1;
|
|
108
|
+
let candidates = [];
|
|
109
|
+
for (const rule of rules) {
|
|
110
|
+
const rotations = rule.rotations ?? 0;
|
|
111
|
+
const steps = rotations > 0 ? rotations : 1;
|
|
112
|
+
for (let rotationIndex = 0; rotationIndex < steps; rotationIndex += 1) {
|
|
113
|
+
if (!matchTerrainRule(rule, x, y, flagsAt, rotate, rotationIndex))
|
|
114
|
+
continue;
|
|
115
|
+
const specificity = rule.conditions.length;
|
|
116
|
+
if (specificity > bestSpecificity) {
|
|
117
|
+
bestSpecificity = specificity;
|
|
118
|
+
candidates = [{ rule, rotationIndex }];
|
|
119
|
+
}
|
|
120
|
+
else if (specificity === bestSpecificity) {
|
|
121
|
+
candidates.push({ rule, rotationIndex });
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
if (candidates.length === 0)
|
|
126
|
+
continue;
|
|
127
|
+
const chosen = candidates.length === 1
|
|
128
|
+
? candidates[0]
|
|
129
|
+
: candidates[weightedIndex(candidates.map((c) => c.rule.probability ?? 1), random)];
|
|
130
|
+
const rotations = chosen.rule.rotations ?? 0;
|
|
131
|
+
for (const image of chosen.rule.images) {
|
|
132
|
+
const offset = rotations > 0
|
|
133
|
+
? rotate(image.dx ?? 0, image.dy ?? 0, chosen.rotationIndex, rotations)
|
|
134
|
+
: { dx: image.dx ?? 0, dy: image.dy ?? 0 };
|
|
135
|
+
placements.push({
|
|
136
|
+
x,
|
|
137
|
+
y,
|
|
138
|
+
ruleId: chosen.rule.id,
|
|
139
|
+
image: image.image,
|
|
140
|
+
dx: offset.dx,
|
|
141
|
+
dy: offset.dy,
|
|
142
|
+
layer: image.layer ?? 0,
|
|
143
|
+
});
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
return placements;
|
|
148
|
+
}
|
|
149
|
+
function weightedIndex(weights, random) {
|
|
150
|
+
const total = weights.reduce((sum, weight) => sum + Math.max(0, weight), 0);
|
|
151
|
+
if (total <= 0)
|
|
152
|
+
return 0;
|
|
153
|
+
let roll = random.float() * total;
|
|
154
|
+
for (let index = 0; index < weights.length; index += 1) {
|
|
155
|
+
roll -= Math.max(0, weights[index]);
|
|
156
|
+
if (roll < 0)
|
|
157
|
+
return index;
|
|
158
|
+
}
|
|
159
|
+
return weights.length - 1;
|
|
160
|
+
}
|
|
161
|
+
//# sourceMappingURL=TerrainGraphics.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TerrainGraphics.js","sourceRoot":"","sources":["../../../src/two-d/render/TerrainGraphics.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import { Node2D } from './Shape2D.ts';
|
|
2
|
+
import type { Texture2D } from './Types2D.ts';
|
|
3
|
+
import type { TerrainPlacement } from './TerrainGraphics.ts';
|
|
4
|
+
export interface TerrainGraphicsLayerOptions {
|
|
5
|
+
/** the placements `resolveTerrainGraphics` produced, or any list of the same shape */
|
|
6
|
+
readonly placements: readonly TerrainPlacement[];
|
|
7
|
+
/**
|
|
8
|
+
* Where a placement lands, in pixels: its anchor cell (`x`, `y`) plus the rule image's own
|
|
9
|
+
* offset (`dx`, `dy`), both in the unit the rules were authored in. A square or isometric grid
|
|
10
|
+
* projects the sum of the two; a hex grid, whose offsets are axial, projects the cell and the
|
|
11
|
+
* offset separately - which is why the layer is handed the whole placement rather than only a
|
|
12
|
+
* cell, and why the projection belongs to the caller.
|
|
13
|
+
*/
|
|
14
|
+
readonly project: (x: number, y: number, dx: number, dy: number) => {
|
|
15
|
+
x: number;
|
|
16
|
+
y: number;
|
|
17
|
+
};
|
|
18
|
+
/** how an image path becomes a texture; defaults to the asset resolver with a `Texture.EMPTY` fallback */
|
|
19
|
+
readonly resolveImage?: (path: string) => Texture2D;
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Draws the placements `resolveTerrainGraphics` resolves - the renderer half of `[terrain_graphics]`
|
|
23
|
+
* that the rule pass deliberately leaves to a caller.
|
|
24
|
+
*
|
|
25
|
+
* It is one `Sprite2D` per placement, added in `layer` order (a stable sort, so placements sharing a
|
|
26
|
+
* layer keep the order the rule pass emitted, which is its row-major walk). That is what makes a
|
|
27
|
+
* rule's multi-cell art *one rule's images at their own offsets* rather than something `TileMap`'s
|
|
28
|
+
* one-sprite-per-cell grid would have to hold, and what lets a rotated or probabilistic rule vary
|
|
29
|
+
* how a transition looks without the layer knowing any of that.
|
|
30
|
+
*
|
|
31
|
+
* Z-order between this layer and the rest of a scene is the caller's, as it is for `Halo`: add the
|
|
32
|
+
* layer before a unit to sit terrain under it, or after to overlay.
|
|
33
|
+
*
|
|
34
|
+
* @example
|
|
35
|
+
* ```ts
|
|
36
|
+
* import { TerrainGraphicsLayer, resolveTerrainGraphics } from '@datamoc/mw_games/two-d/render';
|
|
37
|
+
*
|
|
38
|
+
* const placements = resolveTerrainGraphics(2, 1, [], () => new Set(['land']));
|
|
39
|
+
* const layer = new TerrainGraphicsLayer({
|
|
40
|
+
* placements,
|
|
41
|
+
* project: (x, y, dx, dy) => ({ x: (x + dx) * 32, y: (y + dy) * 32 }),
|
|
42
|
+
* });
|
|
43
|
+
* layer.setPlacements(placements);
|
|
44
|
+
* ```
|
|
45
|
+
*/
|
|
46
|
+
export declare class TerrainGraphicsLayer extends Node2D {
|
|
47
|
+
private placements;
|
|
48
|
+
private readonly project;
|
|
49
|
+
private readonly resolveImage;
|
|
50
|
+
constructor(options: TerrainGraphicsLayerOptions);
|
|
51
|
+
/** replaces the resolved placements and redraws them in layer order */
|
|
52
|
+
setPlacements(placements: readonly TerrainPlacement[]): void;
|
|
53
|
+
private rebuild;
|
|
54
|
+
}
|
|
55
|
+
//# sourceMappingURL=TerrainGraphicsLayer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TerrainGraphicsLayer.d.ts","sourceRoot":"","sources":["../../../src/two-d/render/TerrainGraphicsLayer.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAY,MAAM,cAAc,CAAC;AAChD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAG7D,MAAM,WAAW,2BAA2B;IAC3C,sFAAsF;IACtF,QAAQ,CAAC,UAAU,EAAE,SAAS,gBAAgB,EAAE,CAAC;IAEjD;;;;;;OAMG;IACH,QAAQ,CAAC,OAAO,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,KAAK;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAE7F,0GAA0G;IAC1G,QAAQ,CAAC,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,SAAS,CAAC;CACpD;AAED;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,qBAAa,oBAAqB,SAAQ,MAAM;IAC/C,OAAO,CAAC,UAAU,CAA8B;IAChD,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAyC;IACjE,OAAO,CAAC,QAAQ,CAAC,YAAY,CAA8B;IAE3D,YAAY,OAAO,EAAE,2BAA2B,EAM/C;IAED,uEAAuE;IACvE,aAAa,CAAC,UAAU,EAAE,SAAS,gBAAgB,EAAE,GAAG,IAAI,CAG3D;IAED,OAAO,CAAC,OAAO;CAWf"}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import { Texture } from 'pixi.js';
|
|
2
|
+
import { Node2D, Sprite2D } from './Shape2D.js';
|
|
3
|
+
import { texture } from '../../assets/loader.js';
|
|
4
|
+
/**
|
|
5
|
+
* Draws the placements `resolveTerrainGraphics` resolves - the renderer half of `[terrain_graphics]`
|
|
6
|
+
* that the rule pass deliberately leaves to a caller.
|
|
7
|
+
*
|
|
8
|
+
* It is one `Sprite2D` per placement, added in `layer` order (a stable sort, so placements sharing a
|
|
9
|
+
* layer keep the order the rule pass emitted, which is its row-major walk). That is what makes a
|
|
10
|
+
* rule's multi-cell art *one rule's images at their own offsets* rather than something `TileMap`'s
|
|
11
|
+
* one-sprite-per-cell grid would have to hold, and what lets a rotated or probabilistic rule vary
|
|
12
|
+
* how a transition looks without the layer knowing any of that.
|
|
13
|
+
*
|
|
14
|
+
* Z-order between this layer and the rest of a scene is the caller's, as it is for `Halo`: add the
|
|
15
|
+
* layer before a unit to sit terrain under it, or after to overlay.
|
|
16
|
+
*
|
|
17
|
+
* @example
|
|
18
|
+
* ```ts
|
|
19
|
+
* import { TerrainGraphicsLayer, resolveTerrainGraphics } from '@datamoc/mw_games/two-d/render';
|
|
20
|
+
*
|
|
21
|
+
* const placements = resolveTerrainGraphics(2, 1, [], () => new Set(['land']));
|
|
22
|
+
* const layer = new TerrainGraphicsLayer({
|
|
23
|
+
* placements,
|
|
24
|
+
* project: (x, y, dx, dy) => ({ x: (x + dx) * 32, y: (y + dy) * 32 }),
|
|
25
|
+
* });
|
|
26
|
+
* layer.setPlacements(placements);
|
|
27
|
+
* ```
|
|
28
|
+
*/
|
|
29
|
+
export class TerrainGraphicsLayer extends Node2D {
|
|
30
|
+
constructor(options) {
|
|
31
|
+
super();
|
|
32
|
+
this.placements = options.placements;
|
|
33
|
+
this.project = options.project;
|
|
34
|
+
this.resolveImage = options.resolveImage ?? ((path) => texture(path, Texture.EMPTY));
|
|
35
|
+
this.rebuild();
|
|
36
|
+
}
|
|
37
|
+
/** replaces the resolved placements and redraws them in layer order */
|
|
38
|
+
setPlacements(placements) {
|
|
39
|
+
this.placements = placements;
|
|
40
|
+
this.rebuild();
|
|
41
|
+
}
|
|
42
|
+
rebuild() {
|
|
43
|
+
for (const child of this.removeChildren())
|
|
44
|
+
child.destroy();
|
|
45
|
+
for (const placement of [...this.placements].sort((a, b) => a.layer - b.layer)) {
|
|
46
|
+
const at = this.project(placement.x, placement.y, placement.dx, placement.dy);
|
|
47
|
+
const sprite = new Sprite2D(this.resolveImage(placement.image));
|
|
48
|
+
sprite.x = at.x;
|
|
49
|
+
sprite.y = at.y;
|
|
50
|
+
this.addChild(sprite);
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
//# sourceMappingURL=TerrainGraphicsLayer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TerrainGraphicsLayer.js","sourceRoot":"","sources":["../../../src/two-d/render/TerrainGraphicsLayer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AAGhD,OAAO,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;AAmBjD;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,MAAM,OAAO,oBAAqB,SAAQ,MAAM;IAK/C,YAAY,OAAoC;QAC/C,KAAK,EAAE,CAAC;QACR,IAAI,CAAC,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC;QACrC,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;QAC/B,IAAI,CAAC,YAAY,GAAG,OAAO,CAAC,YAAY,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC;QACrF,IAAI,CAAC,OAAO,EAAE,CAAC;IAChB,CAAC;IAED,uEAAuE;IACvE,aAAa,CAAC,UAAuC;QACpD,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;QAC7B,IAAI,CAAC,OAAO,EAAE,CAAC;IAChB,CAAC;IAEO,OAAO;QACd,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,cAAc,EAAE;YAAE,KAAK,CAAC,OAAO,EAAE,CAAC;QAE3D,KAAK,MAAM,SAAS,IAAI,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC;YAChF,MAAM,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,EAAE,SAAS,CAAC,EAAE,EAAE,SAAS,CAAC,EAAE,CAAC,CAAC;YAC9E,MAAM,MAAM,GAAG,IAAI,QAAQ,CAAC,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC;YAChE,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;YAChB,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;YAChB,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;QACvB,CAAC;IACF,CAAC;CACD"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { Sprite } from 'pixi.js';
|
|
2
|
-
import {
|
|
2
|
+
import { packColorAdd, packTintAdd, registerColorTransform, useColorTransformPipe } from './ColorTransformBatcher.js';
|
|
3
3
|
export { registerColorTransform } from './ColorTransformBatcher.js';
|
|
4
4
|
//registers the pipe the moment anything imports this file - see registerColorTransform's own
|
|
5
5
|
//doc comment for why a module-scope call, rather than "on first render", is what makes this
|
|
@@ -46,7 +46,7 @@ export class TintedSprite extends Sprite {
|
|
|
46
46
|
this._colorAdd = 0;
|
|
47
47
|
//Sprite's constructor points this at Pixi's own pipe; redirect it to ours, which
|
|
48
48
|
//is what puts this sprite in the colour-transform batch
|
|
49
|
-
this
|
|
49
|
+
useColorTransformPipe(this);
|
|
50
50
|
}
|
|
51
51
|
/** the packed additive colour; use `setColorAdd` or `lerpTint` rather than setting it raw */
|
|
52
52
|
get colorAdd() {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TintedSprite.js","sourceRoot":"","sources":["../../../src/two-d/render/TintedSprite.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AAEjC,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"TintedSprite.js","sourceRoot":"","sources":["../../../src/two-d/render/TintedSprite.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AAEjC,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,sBAAsB,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;AAGtH,OAAO,EAAE,sBAAsB,EAAE,MAAM,4BAA4B,CAAC;AAEpE,6FAA6F;AAC7F,4FAA4F;AAC5F,qBAAqB;AACrB,sBAAsB,EAAE,CAAC;AAEzB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AACH,MAAM,OAAO,YAAa,SAAQ,MAAM;IAGvC,YAAY,OAAmC;QAC9C,KAAK,CAAC,OAAwB,CAAC,CAAC;QAHzB,cAAS,GAAG,CAAC,CAAC;QAKrB,iFAAiF;QACjF,wDAAwD;QACxD,qBAAqB,CAAC,IAAI,CAAC,CAAC;IAC7B,CAAC;IAED,6FAA6F;IAC7F,IAAI,QAAQ;QACX,OAAO,IAAI,CAAC,SAAS,CAAC;IACvB,CAAC;IAED,IAAI,QAAQ,CAAC,KAAa;QACzB,IAAI,IAAI,CAAC,SAAS,KAAK,KAAK;YAAE,OAAO;QACrC,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;QACvB,0EAA0E;QAC1E,IAAI,CAAC,YAAY,EAAE,CAAC;IACrB,CAAC;IAED,oFAAoF;IACpF,WAAW,CAAC,CAAS,EAAE,CAAS,EAAE,CAAS,EAAE,CAAC,GAAG,CAAC;QACjD,IAAI,CAAC,QAAQ,GAAG,YAAY,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IAC1C,CAAC;IAED;;;;;OAKG;IACH,QAAQ,CAAC,KAAa,EAAE,QAAgB;QACvC,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,GAAG,IAAI,CAAC,CAAC;QAC/C,IAAI,CAAC,IAAI,GAAG,CAAC,IAAI,IAAI,EAAE,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC;QAC9C,IAAI,CAAC,QAAQ,GAAG,WAAW,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;IAC9C,CAAC;IAED,qEAAqE;IACrE,UAAU,CAAC,KAAa;QACvB,IAAI,CAAC,IAAI,GAAG,QAAQ,CAAC;QACrB,IAAI,CAAC,QAAQ,GAAG,WAAW,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;IACvC,CAAC;IAED,wCAAwC;IACxC,UAAU;QACT,IAAI,CAAC,IAAI,GAAG,QAAQ,CAAC;QACrB,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC;IACnB,CAAC;CACD"}
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
export { ColorTransformBatcher, packColorAdd, packTintAdd, NO_COLOR_ADD } from './ColorTransformBatcher.ts';
|
|
2
2
|
export type { HasColorAdd } from './ColorTransformBatcher.ts';
|
|
3
3
|
export { TintedSprite, registerColorTransform } from './TintedSprite.ts';
|
|
4
|
-
export { applyImageModifiers, colorShiftMatrix, croppedTexture, imageModifier, parseImagePath, } from './ImageModifiers.ts';
|
|
5
|
-
export type { ImageModifier, ParsedImagePath } from './ImageModifiers.ts';
|
|
4
|
+
export { applyImageModifiers, applyTextureModifiers, blendMatrix, blendPixels, channelScaleMatrix, channelSwapMatrix, colorShiftMatrix, croppedTexture, imageModifier, maskPixels, parseColorPairs, parseImagePath, parsePaletteLists, rotatePixels, } from './ImageModifiers.ts';
|
|
5
|
+
export type { ChannelSource, ImageModifier, ImageTextureProbe, ParsedImagePath, RotatedPixels, } from './ImageModifiers.ts';
|
|
6
6
|
export { AnimatedSprite, Animation } from './AnimatedSprite.ts';
|
|
7
|
-
export type { AnimationOptions } from './AnimatedSprite.ts';
|
|
7
|
+
export type { AnimationFrame, AnimationFrameInput, AnimationOptions } from './AnimatedSprite.ts';
|
|
8
8
|
export { SpriteSheet } from './SpriteSheet.ts';
|
|
9
9
|
export { Camera, createCamera, snapZoom } from './Camera.ts';
|
|
10
10
|
export type { CameraOptions } from './Camera.ts';
|
|
@@ -19,6 +19,12 @@ export type { TileMapOptions } from './TileMap.ts';
|
|
|
19
19
|
export { LayeredSprite } from './LayeredSprite.ts';
|
|
20
20
|
export { Projectile } from './Projectile.ts';
|
|
21
21
|
export type { ProjectilePoint, ProjectileOptions } from './Projectile.ts';
|
|
22
|
+
export { LightningArc } from './LightningArc.ts';
|
|
23
|
+
export type { LightningArcOptions, LightningArcPoint } from './LightningArc.ts';
|
|
24
|
+
export { SpriteAttachment } from './SpriteAttachment.ts';
|
|
25
|
+
export type { AttachmentPoint, SpriteAttachmentOptions } from './SpriteAttachment.ts';
|
|
26
|
+
export { Halo, HALO_ANIMATION } from './Halo.ts';
|
|
27
|
+
export type { HaloOptions } from './Halo.ts';
|
|
22
28
|
export { ParticleEmitter } from './Particles.ts';
|
|
23
29
|
export type { Particle, ParticleRange, ParticleEmitterOptions } from './Particles.ts';
|
|
24
30
|
export { ScreenEffects } from './ScreenEffects.ts';
|
|
@@ -29,11 +35,17 @@ export { StatusVisuals } from './StatusVisuals.ts';
|
|
|
29
35
|
export type { TintTarget, StatusVisualStyle, StatusVisualsOptions } from './StatusVisuals.ts';
|
|
30
36
|
export { blobIndex, autotileFrames, BLOB_SHAPES } from './Autotile.ts';
|
|
31
37
|
export type { NeighborMask } from './Autotile.ts';
|
|
38
|
+
export { hexRotate, matchTerrainRule, resolveTerrainGraphics, squareRotate } from './TerrainGraphics.ts';
|
|
39
|
+
export type { ResolveTerrainGraphicsOptions, TerrainCondition, TerrainFlagsAt, TerrainImage, TerrainPlacement, TerrainRotate, TerrainRule, } from './TerrainGraphics.ts';
|
|
40
|
+
export { TerrainGraphicsLayer } from './TerrainGraphicsLayer.ts';
|
|
41
|
+
export type { TerrainGraphicsLayerOptions } from './TerrainGraphicsLayer.ts';
|
|
32
42
|
export { inspectGraphicsCapabilities, detectWebGpu, RENDERING_DECISIONS } from './Capabilities.ts';
|
|
33
43
|
export type { GraphicsCapabilities, GraphicsProbe, GraphicsWorkload, RenderingDecision, WebGpuDetection, } from './Capabilities.ts';
|
|
34
44
|
export { Container2D, Rectangle2D, Texture2D, rectOf } from './Types2D.ts';
|
|
35
45
|
export type { Rect, TextureRegion } from './Types2D.ts';
|
|
36
46
|
export { Node2D, Shape2D, Text2D, Sprite2D, TiledSprite, Gradient } from './Shape2D.ts';
|
|
47
|
+
export { paletteRangeMapping, recolorTexture, remapPixels, withTextureCanvas } from './PaletteRemap.ts';
|
|
48
|
+
export type { PaletteMapping, PaletteRange, PaletteRemapMode, RecolorProbe, RemapCanvas, RemapCanvasContext, } from './PaletteRemap.ts';
|
|
37
49
|
export { loadTiledMap } from './TiledMap.ts';
|
|
38
50
|
export type { TiledMapData, TiledTilesetData, TilesetSheet, LoadedTiledMap, TiledObject, TiledLayer, } from './TiledMap.ts';
|
|
39
51
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/two-d/render/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,YAAY,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAC5G,YAAY,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AAE9D,OAAO,EAAE,YAAY,EAAE,sBAAsB,EAAE,MAAM,mBAAmB,CAAC;AACzE,OAAO,EACN,mBAAmB,EACnB,gBAAgB,EAChB,cAAc,EACd,aAAa,EACb,cAAc,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/two-d/render/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
export { ColorTransformBatcher, packColorAdd, packTintAdd, NO_COLOR_ADD } from './ColorTransformBatcher.js';
|
|
2
2
|
export { TintedSprite, registerColorTransform } from './TintedSprite.js';
|
|
3
|
-
export { applyImageModifiers, colorShiftMatrix, croppedTexture, imageModifier, parseImagePath, } from './ImageModifiers.js';
|
|
3
|
+
export { applyImageModifiers, applyTextureModifiers, blendMatrix, blendPixels, channelScaleMatrix, channelSwapMatrix, colorShiftMatrix, croppedTexture, imageModifier, maskPixels, parseColorPairs, parseImagePath, parsePaletteLists, rotatePixels, } from './ImageModifiers.js';
|
|
4
4
|
export { AnimatedSprite, Animation } from './AnimatedSprite.js';
|
|
5
5
|
export { SpriteSheet } from './SpriteSheet.js';
|
|
6
6
|
export { Camera, createCamera, snapZoom } from './Camera.js';
|
|
@@ -10,13 +10,19 @@ export { Minimap, newlyRevealed, minimapCellCenter } from './Minimap.js';
|
|
|
10
10
|
export { TileMap, EMPTY, tileFrame, tileFrameSheet, tileFrameIndex } from './TileMap.js';
|
|
11
11
|
export { LayeredSprite } from './LayeredSprite.js';
|
|
12
12
|
export { Projectile } from './Projectile.js';
|
|
13
|
+
export { LightningArc } from './LightningArc.js';
|
|
14
|
+
export { SpriteAttachment } from './SpriteAttachment.js';
|
|
15
|
+
export { Halo, HALO_ANIMATION } from './Halo.js';
|
|
13
16
|
export { ParticleEmitter } from './Particles.js';
|
|
14
17
|
export { ScreenEffects } from './ScreenEffects.js';
|
|
15
18
|
export { ActorAnimator } from './ActorAnimator.js';
|
|
16
19
|
export { StatusVisuals } from './StatusVisuals.js';
|
|
17
20
|
export { blobIndex, autotileFrames, BLOB_SHAPES } from './Autotile.js';
|
|
21
|
+
export { hexRotate, matchTerrainRule, resolveTerrainGraphics, squareRotate } from './TerrainGraphics.js';
|
|
22
|
+
export { TerrainGraphicsLayer } from './TerrainGraphicsLayer.js';
|
|
18
23
|
export { inspectGraphicsCapabilities, detectWebGpu, RENDERING_DECISIONS } from './Capabilities.js';
|
|
19
24
|
export { Container2D, Rectangle2D, Texture2D, rectOf } from './Types2D.js';
|
|
20
25
|
export { Node2D, Shape2D, Text2D, Sprite2D, TiledSprite, Gradient } from './Shape2D.js';
|
|
26
|
+
export { paletteRangeMapping, recolorTexture, remapPixels, withTextureCanvas } from './PaletteRemap.js';
|
|
21
27
|
export { loadTiledMap } from './TiledMap.js';
|
|
22
28
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/two-d/render/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,YAAY,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAG5G,OAAO,EAAE,YAAY,EAAE,sBAAsB,EAAE,MAAM,mBAAmB,CAAC;AACzE,OAAO,EACN,mBAAmB,EACnB,gBAAgB,EAChB,cAAc,EACd,aAAa,EACb,cAAc,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/two-d/render/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,YAAY,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAG5G,OAAO,EAAE,YAAY,EAAE,sBAAsB,EAAE,MAAM,mBAAmB,CAAC;AACzE,OAAO,EACN,mBAAmB,EACnB,qBAAqB,EACrB,WAAW,EACX,WAAW,EACX,kBAAkB,EAClB,iBAAiB,EACjB,gBAAgB,EAChB,cAAc,EACd,aAAa,EACb,UAAU,EACV,eAAe,EACf,cAAc,EACd,iBAAiB,EACjB,YAAY,GACZ,MAAM,qBAAqB,CAAC;AAQ7B,OAAO,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAEhE,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAE7D,OAAO,EAAE,QAAQ,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAE5D,OAAO,EAAE,0BAA0B,EAAE,wBAAwB,EAAE,MAAM,qBAAqB,CAAC;AAG3F,OAAO,EAAE,OAAO,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AAEzE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAEzF,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAE7C,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAEjD,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAEzD,OAAO,EAAE,IAAI,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAGjD,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAGjD,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAGnD,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAGnD,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAGnD,OAAO,EAAE,SAAS,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAGvE,OAAO,EAAE,SAAS,EAAE,gBAAgB,EAAE,sBAAsB,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAWzG,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AAGjE,OAAO,EAAE,2BAA2B,EAAE,YAAY,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AASnG,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAE3E,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AAExF,OAAO,EAAE,mBAAmB,EAAE,cAAc,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAUxG,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC"}
|