@datamoc/mw_games 0.1.1
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/LICENSE +373 -0
- package/README.md +327 -0
- package/dist/actors/Advancement.d.ts +73 -0
- package/dist/actors/Advancement.d.ts.map +1 -0
- package/dist/actors/Advancement.js +98 -0
- package/dist/actors/Advancement.js.map +1 -0
- package/dist/actors/Affix.d.ts +44 -0
- package/dist/actors/Affix.d.ts.map +1 -0
- package/dist/actors/Affix.js +35 -0
- package/dist/actors/Affix.js.map +1 -0
- package/dist/actors/Appearances.d.ts +36 -0
- package/dist/actors/Appearances.d.ts.map +1 -0
- package/dist/actors/Appearances.js +50 -0
- package/dist/actors/Appearances.js.map +1 -0
- package/dist/actors/Charges.d.ts +31 -0
- package/dist/actors/Charges.d.ts.map +1 -0
- package/dist/actors/Charges.js +35 -0
- package/dist/actors/Charges.js.map +1 -0
- package/dist/actors/Equipment.d.ts +40 -0
- package/dist/actors/Equipment.d.ts.map +1 -0
- package/dist/actors/Equipment.js +57 -0
- package/dist/actors/Equipment.js.map +1 -0
- package/dist/actors/Inventory.d.ts +50 -0
- package/dist/actors/Inventory.d.ts.map +1 -0
- package/dist/actors/Inventory.js +56 -0
- package/dist/actors/Inventory.js.map +1 -0
- package/dist/actors/ItemState.d.ts +21 -0
- package/dist/actors/ItemState.d.ts.map +1 -0
- package/dist/actors/ItemState.js +34 -0
- package/dist/actors/ItemState.js.map +1 -0
- package/dist/actors/Loot.d.ts +24 -0
- package/dist/actors/Loot.d.ts.map +1 -0
- package/dist/actors/Loot.js +14 -0
- package/dist/actors/Loot.js.map +1 -0
- package/dist/actors/Progression.d.ts +30 -0
- package/dist/actors/Progression.d.ts.map +1 -0
- package/dist/actors/Progression.js +39 -0
- package/dist/actors/Progression.js.map +1 -0
- package/dist/actors/Resource.d.ts +23 -0
- package/dist/actors/Resource.d.ts.map +1 -0
- package/dist/actors/Resource.js +28 -0
- package/dist/actors/Resource.js.map +1 -0
- package/dist/actors/Scaling.d.ts +22 -0
- package/dist/actors/Scaling.d.ts.map +1 -0
- package/dist/actors/Scaling.js +9 -0
- package/dist/actors/Scaling.js.map +1 -0
- package/dist/actors/Shop.d.ts +25 -0
- package/dist/actors/Shop.d.ts.map +1 -0
- package/dist/actors/Shop.js +33 -0
- package/dist/actors/Shop.js.map +1 -0
- package/dist/actors/SkillPoints.d.ts +45 -0
- package/dist/actors/SkillPoints.d.ts.map +1 -0
- package/dist/actors/SkillPoints.js +58 -0
- package/dist/actors/SkillPoints.js.map +1 -0
- package/dist/actors/StatBlock.d.ts +52 -0
- package/dist/actors/StatBlock.d.ts.map +1 -0
- package/dist/actors/StatBlock.js +80 -0
- package/dist/actors/StatBlock.js.map +1 -0
- package/dist/actors/StatusEffect.d.ts +38 -0
- package/dist/actors/StatusEffect.d.ts.map +1 -0
- package/dist/actors/StatusEffect.js +28 -0
- package/dist/actors/StatusEffect.js.map +1 -0
- package/dist/actors/craft.d.ts +26 -0
- package/dist/actors/craft.d.ts.map +1 -0
- package/dist/actors/craft.js +34 -0
- package/dist/actors/craft.js.map +1 -0
- package/dist/actors/index.d.ts +33 -0
- package/dist/actors/index.d.ts.map +1 -0
- package/dist/actors/index.js +18 -0
- package/dist/actors/index.js.map +1 -0
- package/dist/actors/skillCheck.d.ts +13 -0
- package/dist/actors/skillCheck.d.ts.map +1 -0
- package/dist/actors/skillCheck.js +16 -0
- package/dist/actors/skillCheck.js.map +1 -0
- package/dist/assets/index.d.ts +37 -0
- package/dist/assets/index.d.ts.map +1 -0
- package/dist/assets/index.js +62 -0
- package/dist/assets/index.js.map +1 -0
- package/dist/audio/Music.d.ts +22 -0
- package/dist/audio/Music.d.ts.map +1 -0
- package/dist/audio/Music.js +67 -0
- package/dist/audio/Music.js.map +1 -0
- package/dist/audio/Playable.d.ts +16 -0
- package/dist/audio/Playable.d.ts.map +1 -0
- package/dist/audio/Playable.js +6 -0
- package/dist/audio/Playable.js.map +1 -0
- package/dist/audio/Sound.d.ts +23 -0
- package/dist/audio/Sound.d.ts.map +1 -0
- package/dist/audio/Sound.js +30 -0
- package/dist/audio/Sound.js.map +1 -0
- package/dist/audio/index.d.ts +7 -0
- package/dist/audio/index.d.ts.map +1 -0
- package/dist/audio/index.js +4 -0
- package/dist/audio/index.js.map +1 -0
- package/dist/battle/BattleAI.d.ts +24 -0
- package/dist/battle/BattleAI.d.ts.map +1 -0
- package/dist/battle/BattleAI.js +47 -0
- package/dist/battle/BattleAI.js.map +1 -0
- package/dist/battle/Evolution.d.ts +22 -0
- package/dist/battle/Evolution.d.ts.map +1 -0
- package/dist/battle/Evolution.js +25 -0
- package/dist/battle/Evolution.js.map +1 -0
- package/dist/battle/Field.d.ts +25 -0
- package/dist/battle/Field.d.ts.map +1 -0
- package/dist/battle/Field.js +31 -0
- package/dist/battle/Field.js.map +1 -0
- package/dist/battle/Hooks.d.ts +29 -0
- package/dist/battle/Hooks.d.ts.map +1 -0
- package/dist/battle/Hooks.js +20 -0
- package/dist/battle/Hooks.js.map +1 -0
- package/dist/battle/Move.d.ts +32 -0
- package/dist/battle/Move.d.ts.map +1 -0
- package/dist/battle/Move.js +10 -0
- package/dist/battle/Move.js.map +1 -0
- package/dist/battle/Party.d.ts +21 -0
- package/dist/battle/Party.d.ts.map +1 -0
- package/dist/battle/Party.js +49 -0
- package/dist/battle/Party.js.map +1 -0
- package/dist/battle/Species.d.ts +40 -0
- package/dist/battle/Species.d.ts.map +1 -0
- package/dist/battle/Species.js +31 -0
- package/dist/battle/Species.js.map +1 -0
- package/dist/battle/StatStages.d.ts +38 -0
- package/dist/battle/StatStages.d.ts.map +1 -0
- package/dist/battle/StatStages.js +50 -0
- package/dist/battle/StatStages.js.map +1 -0
- package/dist/battle/TypeMatrix.d.ts +14 -0
- package/dist/battle/TypeMatrix.d.ts.map +1 -0
- package/dist/battle/TypeMatrix.js +24 -0
- package/dist/battle/TypeMatrix.js.map +1 -0
- package/dist/battle/index.d.ts +16 -0
- package/dist/battle/index.d.ts.map +1 -0
- package/dist/battle/index.js +10 -0
- package/dist/battle/index.js.map +1 -0
- package/dist/board/Classics.d.ts +123 -0
- package/dist/board/Classics.d.ts.map +1 -0
- package/dist/board/Classics.js +260 -0
- package/dist/board/Classics.js.map +1 -0
- package/dist/board/Engine.d.ts +23 -0
- package/dist/board/Engine.d.ts.map +1 -0
- package/dist/board/Engine.js +87 -0
- package/dist/board/Engine.js.map +1 -0
- package/dist/board/Tactics.d.ts +46 -0
- package/dist/board/Tactics.d.ts.map +1 -0
- package/dist/board/Tactics.js +108 -0
- package/dist/board/Tactics.js.map +1 -0
- package/dist/board/chess.d.ts +67 -0
- package/dist/board/chess.d.ts.map +1 -0
- package/dist/board/chess.js +439 -0
- package/dist/board/chess.js.map +1 -0
- package/dist/board/index.d.ts +9 -0
- package/dist/board/index.d.ts.map +1 -0
- package/dist/board/index.js +5 -0
- package/dist/board/index.js.map +1 -0
- package/dist/core/Achievements.d.ts +53 -0
- package/dist/core/Achievements.d.ts.map +1 -0
- package/dist/core/Achievements.js +80 -0
- package/dist/core/Achievements.js.map +1 -0
- package/dist/core/Collection.d.ts +46 -0
- package/dist/core/Collection.d.ts.map +1 -0
- package/dist/core/Collection.js +61 -0
- package/dist/core/Collection.js.map +1 -0
- package/dist/core/Game.d.ts +115 -0
- package/dist/core/Game.d.ts.map +1 -0
- package/dist/core/Game.js +236 -0
- package/dist/core/Game.js.map +1 -0
- package/dist/core/Hex.d.ts +45 -0
- package/dist/core/Hex.d.ts.map +1 -0
- package/dist/core/Hex.js +120 -0
- package/dist/core/Hex.js.map +1 -0
- package/dist/core/Input.d.ts +41 -0
- package/dist/core/Input.d.ts.map +1 -0
- package/dist/core/Input.js +132 -0
- package/dist/core/Input.js.map +1 -0
- package/dist/core/Log.d.ts +39 -0
- package/dist/core/Log.d.ts.map +1 -0
- package/dist/core/Log.js +50 -0
- package/dist/core/Log.js.map +1 -0
- package/dist/core/Random.d.ts +64 -0
- package/dist/core/Random.d.ts.map +1 -0
- package/dist/core/Random.js +178 -0
- package/dist/core/Random.js.map +1 -0
- package/dist/core/Replay.d.ts +71 -0
- package/dist/core/Replay.d.ts.map +1 -0
- package/dist/core/Replay.js +102 -0
- package/dist/core/Replay.js.map +1 -0
- package/dist/core/Save.d.ts +52 -0
- package/dist/core/Save.d.ts.map +1 -0
- package/dist/core/Save.js +81 -0
- package/dist/core/Save.js.map +1 -0
- package/dist/core/Scene.d.ts +40 -0
- package/dist/core/Scene.d.ts.map +1 -0
- package/dist/core/Scene.js +56 -0
- package/dist/core/Scene.js.map +1 -0
- package/dist/core/SceneStack.d.ts +37 -0
- package/dist/core/SceneStack.d.ts.map +1 -0
- package/dist/core/SceneStack.js +67 -0
- package/dist/core/SceneStack.js.map +1 -0
- package/dist/core/Signal.d.ts +24 -0
- package/dist/core/Signal.d.ts.map +1 -0
- package/dist/core/Signal.js +41 -0
- package/dist/core/Signal.js.map +1 -0
- package/dist/core/index.d.ts +23 -0
- package/dist/core/index.d.ts.map +1 -0
- package/dist/core/index.js +14 -0
- package/dist/core/index.js.map +1 -0
- package/dist/i18n/index.d.ts +51 -0
- package/dist/i18n/index.d.ts.map +1 -0
- package/dist/i18n/index.js +74 -0
- package/dist/i18n/index.js.map +1 -0
- package/dist/index.d.ts +22 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +22 -0
- package/dist/index.js.map +1 -0
- package/dist/mw_games.global.js +993 -0
- package/dist/render/ActorAnimator.d.ts +60 -0
- package/dist/render/ActorAnimator.d.ts.map +1 -0
- package/dist/render/ActorAnimator.js +76 -0
- package/dist/render/ActorAnimator.js.map +1 -0
- package/dist/render/AnimatedSprite.d.ts +57 -0
- package/dist/render/AnimatedSprite.d.ts.map +1 -0
- package/dist/render/AnimatedSprite.js +105 -0
- package/dist/render/AnimatedSprite.js.map +1 -0
- package/dist/render/Autotile.d.ts +42 -0
- package/dist/render/Autotile.d.ts.map +1 -0
- package/dist/render/Autotile.js +117 -0
- package/dist/render/Autotile.js.map +1 -0
- package/dist/render/Camera.d.ts +88 -0
- package/dist/render/Camera.d.ts.map +1 -0
- package/dist/render/Camera.js +145 -0
- package/dist/render/Camera.js.map +1 -0
- package/dist/render/ColorTransformBatcher.d.ts +57 -0
- package/dist/render/ColorTransformBatcher.d.ts.map +1 -0
- package/dist/render/ColorTransformBatcher.js +212 -0
- package/dist/render/ColorTransformBatcher.js.map +1 -0
- package/dist/render/LayeredSprite.d.ts +27 -0
- package/dist/render/LayeredSprite.d.ts.map +1 -0
- package/dist/render/LayeredSprite.js +53 -0
- package/dist/render/LayeredSprite.js.map +1 -0
- package/dist/render/Projectile.d.ts +37 -0
- package/dist/render/Projectile.d.ts.map +1 -0
- package/dist/render/Projectile.js +50 -0
- package/dist/render/Projectile.js.map +1 -0
- package/dist/render/SpriteSheet.d.ts +38 -0
- package/dist/render/SpriteSheet.d.ts.map +1 -0
- package/dist/render/SpriteSheet.js +79 -0
- package/dist/render/SpriteSheet.js.map +1 -0
- package/dist/render/TileMap.d.ts +188 -0
- package/dist/render/TileMap.d.ts.map +1 -0
- package/dist/render/TileMap.js +488 -0
- package/dist/render/TileMap.js.map +1 -0
- package/dist/render/TintedSprite.d.ts +47 -0
- package/dist/render/TintedSprite.d.ts.map +1 -0
- package/dist/render/TintedSprite.js +173 -0
- package/dist/render/TintedSprite.js.map +1 -0
- package/dist/render/index.d.ts +18 -0
- package/dist/render/index.d.ts.map +1 -0
- package/dist/render/index.js +11 -0
- package/dist/render/index.js.map +1 -0
- package/dist/roguelike/Blob.d.ts +46 -0
- package/dist/roguelike/Blob.d.ts.map +1 -0
- package/dist/roguelike/Blob.js +98 -0
- package/dist/roguelike/Blob.js.map +1 -0
- package/dist/roguelike/Boss.d.ts +67 -0
- package/dist/roguelike/Boss.d.ts.map +1 -0
- package/dist/roguelike/Boss.js +114 -0
- package/dist/roguelike/Boss.js.map +1 -0
- package/dist/roguelike/Combat.d.ts +23 -0
- package/dist/roguelike/Combat.d.ts.map +1 -0
- package/dist/roguelike/Combat.js +27 -0
- package/dist/roguelike/Combat.js.map +1 -0
- package/dist/roguelike/Doors.d.ts +60 -0
- package/dist/roguelike/Doors.d.ts.map +1 -0
- package/dist/roguelike/Doors.js +102 -0
- package/dist/roguelike/Doors.js.map +1 -0
- package/dist/roguelike/Elevation.d.ts +26 -0
- package/dist/roguelike/Elevation.d.ts.map +1 -0
- package/dist/roguelike/Elevation.js +37 -0
- package/dist/roguelike/Elevation.js.map +1 -0
- package/dist/roguelike/FieldOfView.d.ts +72 -0
- package/dist/roguelike/FieldOfView.d.ts.map +1 -0
- package/dist/roguelike/FieldOfView.js +134 -0
- package/dist/roguelike/FieldOfView.js.map +1 -0
- package/dist/roguelike/Level.d.ts +96 -0
- package/dist/roguelike/Level.d.ts.map +1 -0
- package/dist/roguelike/Level.js +137 -0
- package/dist/roguelike/Level.js.map +1 -0
- package/dist/roguelike/MonsterAI.d.ts +40 -0
- package/dist/roguelike/MonsterAI.d.ts.map +1 -0
- package/dist/roguelike/MonsterAI.js +69 -0
- package/dist/roguelike/MonsterAI.js.map +1 -0
- package/dist/roguelike/Pathfinder.d.ts +82 -0
- package/dist/roguelike/Pathfinder.d.ts.map +1 -0
- package/dist/roguelike/Pathfinder.js +192 -0
- package/dist/roguelike/Pathfinder.js.map +1 -0
- package/dist/roguelike/Scheduler.d.ts +45 -0
- package/dist/roguelike/Scheduler.d.ts.map +1 -0
- package/dist/roguelike/Scheduler.js +82 -0
- package/dist/roguelike/Scheduler.js.map +1 -0
- package/dist/roguelike/Secrets.d.ts +44 -0
- package/dist/roguelike/Secrets.d.ts.map +1 -0
- package/dist/roguelike/Secrets.js +64 -0
- package/dist/roguelike/Secrets.js.map +1 -0
- package/dist/roguelike/Targeting.d.ts +66 -0
- package/dist/roguelike/Targeting.d.ts.map +1 -0
- package/dist/roguelike/Targeting.js +150 -0
- package/dist/roguelike/Targeting.js.map +1 -0
- package/dist/roguelike/generate.d.ts +44 -0
- package/dist/roguelike/generate.d.ts.map +1 -0
- package/dist/roguelike/generate.js +88 -0
- package/dist/roguelike/generate.js.map +1 -0
- package/dist/roguelike/index.d.ts +23 -0
- package/dist/roguelike/index.d.ts.map +1 -0
- package/dist/roguelike/index.js +15 -0
- package/dist/roguelike/index.js.map +1 -0
- package/dist/rpg/Event.d.ts +33 -0
- package/dist/rpg/Event.d.ts.map +1 -0
- package/dist/rpg/Event.js +19 -0
- package/dist/rpg/Event.js.map +1 -0
- package/dist/rpg/EventRunner.d.ts +72 -0
- package/dist/rpg/EventRunner.d.ts.map +1 -0
- package/dist/rpg/EventRunner.js +76 -0
- package/dist/rpg/EventRunner.js.map +1 -0
- package/dist/rpg/GameState.d.ts +22 -0
- package/dist/rpg/GameState.d.ts.map +1 -0
- package/dist/rpg/GameState.js +35 -0
- package/dist/rpg/GameState.js.map +1 -0
- package/dist/rpg/GridMover.d.ts +51 -0
- package/dist/rpg/GridMover.d.ts.map +1 -0
- package/dist/rpg/GridMover.js +91 -0
- package/dist/rpg/GridMover.js.map +1 -0
- package/dist/rpg/Quest.d.ts +67 -0
- package/dist/rpg/Quest.d.ts.map +1 -0
- package/dist/rpg/Quest.js +92 -0
- package/dist/rpg/Quest.js.map +1 -0
- package/dist/rpg/TiledMap.d.ts +107 -0
- package/dist/rpg/TiledMap.d.ts.map +1 -0
- package/dist/rpg/TiledMap.js +123 -0
- package/dist/rpg/TiledMap.js.map +1 -0
- package/dist/rpg/automap.d.ts +40 -0
- package/dist/rpg/automap.d.ts.map +1 -0
- package/dist/rpg/automap.js +81 -0
- package/dist/rpg/automap.js.map +1 -0
- package/dist/rpg/index.d.ts +14 -0
- package/dist/rpg/index.d.ts.map +1 -0
- package/dist/rpg/index.js +8 -0
- package/dist/rpg/index.js.map +1 -0
- package/dist/stage/DialogueStage.d.ts +75 -0
- package/dist/stage/DialogueStage.d.ts.map +1 -0
- package/dist/stage/DialogueStage.js +207 -0
- package/dist/stage/DialogueStage.js.map +1 -0
- package/dist/stage/index.d.ts +7 -0
- package/dist/stage/index.d.ts.map +1 -0
- package/dist/stage/index.js +4 -0
- package/dist/stage/index.js.map +1 -0
- package/dist/stage/script.d.ts +111 -0
- package/dist/stage/script.d.ts.map +1 -0
- package/dist/stage/script.js +133 -0
- package/dist/stage/script.js.map +1 -0
- package/dist/stage/twee.d.ts +42 -0
- package/dist/stage/twee.d.ts.map +1 -0
- package/dist/stage/twee.js +169 -0
- package/dist/stage/twee.js.map +1 -0
- package/dist/ui/IconGrid.d.ts +110 -0
- package/dist/ui/IconGrid.d.ts.map +1 -0
- package/dist/ui/IconGrid.js +284 -0
- package/dist/ui/IconGrid.js.map +1 -0
- package/dist/ui/Label.d.ts +26 -0
- package/dist/ui/Label.d.ts.map +1 -0
- package/dist/ui/Label.js +41 -0
- package/dist/ui/Label.js.map +1 -0
- package/dist/ui/ListView.d.ts +67 -0
- package/dist/ui/ListView.d.ts.map +1 -0
- package/dist/ui/ListView.js +167 -0
- package/dist/ui/ListView.js.map +1 -0
- package/dist/ui/MessageBox.d.ts +66 -0
- package/dist/ui/MessageBox.d.ts.map +1 -0
- package/dist/ui/MessageBox.js +161 -0
- package/dist/ui/MessageBox.js.map +1 -0
- package/dist/ui/NinePatch.d.ts +34 -0
- package/dist/ui/NinePatch.d.ts.map +1 -0
- package/dist/ui/NinePatch.js +45 -0
- package/dist/ui/NinePatch.js.map +1 -0
- package/dist/ui/VerticalLabel.d.ts +46 -0
- package/dist/ui/VerticalLabel.d.ts.map +1 -0
- package/dist/ui/VerticalLabel.js +81 -0
- package/dist/ui/VerticalLabel.js.map +1 -0
- package/dist/ui/Window.d.ts +71 -0
- package/dist/ui/Window.d.ts.map +1 -0
- package/dist/ui/Window.js +126 -0
- package/dist/ui/Window.js.map +1 -0
- package/dist/ui/WindowStack.d.ts +40 -0
- package/dist/ui/WindowStack.d.ts.map +1 -0
- package/dist/ui/WindowStack.js +106 -0
- package/dist/ui/WindowStack.js.map +1 -0
- package/dist/ui/index.d.ts +18 -0
- package/dist/ui/index.d.ts.map +1 -0
- package/dist/ui/index.js +10 -0
- package/dist/ui/index.js.map +1 -0
- package/dist/ui/theme.d.ts +50 -0
- package/dist/ui/theme.d.ts.map +1 -0
- package/dist/ui/theme.js +36 -0
- package/dist/ui/theme.js.map +1 -0
- package/dist/world/Encounters.d.ts +20 -0
- package/dist/world/Encounters.d.ts.map +1 -0
- package/dist/world/Encounters.js +9 -0
- package/dist/world/Encounters.js.map +1 -0
- package/dist/world/Overworld.d.ts +25 -0
- package/dist/world/Overworld.d.ts.map +1 -0
- package/dist/world/Overworld.js +26 -0
- package/dist/world/Overworld.js.map +1 -0
- package/dist/world/TurnClock.d.ts +25 -0
- package/dist/world/TurnClock.d.ts.map +1 -0
- package/dist/world/TurnClock.js +33 -0
- package/dist/world/TurnClock.js.map +1 -0
- package/dist/world/World.d.ts +50 -0
- package/dist/world/World.d.ts.map +1 -0
- package/dist/world/World.js +77 -0
- package/dist/world/World.js.map +1 -0
- package/dist/world/index.d.ts +8 -0
- package/dist/world/index.d.ts.map +1 -0
- package/dist/world/index.js +5 -0
- package/dist/world/index.js.map +1 -0
- package/package.json +76 -0
- package/tools/compile-resources.mjs +129 -0
|
@@ -0,0 +1,488 @@
|
|
|
1
|
+
import { Container, Graphics } from 'pixi.js';
|
|
2
|
+
import { TintedSprite } from './TintedSprite.js';
|
|
3
|
+
import { hexToPixel, pixelToHex } from '../core/Hex.js';
|
|
4
|
+
/** the frame value meaning "nothing here"; a cell holding it gets no sprite at all */
|
|
5
|
+
export const EMPTY = -1;
|
|
6
|
+
/** the faces of a raised block are shaded, the way light falls on the classic block look */
|
|
7
|
+
const LEFT_FACE_FILL = 0x6e6e6e;
|
|
8
|
+
const RIGHT_FACE_FILL = 0x9a9a9a;
|
|
9
|
+
/**
|
|
10
|
+
* Packs a (sheet, frame) pair into one cell value, for a `TileMap` built over
|
|
11
|
+
* several sheets - a map whose tiles come from more than one Tiled tileset.
|
|
12
|
+
*
|
|
13
|
+
* Single-sheet maps never need this: a plain frame index already decodes as
|
|
14
|
+
* sheet 0, so every existing call site keeps working unchanged.
|
|
15
|
+
*/
|
|
16
|
+
export function tileFrame(sheet, frame) {
|
|
17
|
+
if (!Number.isInteger(sheet) || sheet < 0 || sheet >= 1 << 12) {
|
|
18
|
+
throw new Error(`tileFrame needs a sheet index from 0 to ${(1 << 12) - 1}, got ${sheet}`);
|
|
19
|
+
}
|
|
20
|
+
if (!Number.isInteger(frame) || frame < 0 || frame >= 1 << 20) {
|
|
21
|
+
throw new Error(`tileFrame needs a frame index from 0 to ${(1 << 20) - 1}, got ${frame}`);
|
|
22
|
+
}
|
|
23
|
+
return (sheet << 20) | frame;
|
|
24
|
+
}
|
|
25
|
+
/** the sheet half of a `tileFrame` pack, or 0 for a plain frame index */
|
|
26
|
+
export function tileFrameSheet(packed) {
|
|
27
|
+
return packed >>> 20;
|
|
28
|
+
}
|
|
29
|
+
/** the frame half of a `tileFrame` pack, or the value itself for a plain index */
|
|
30
|
+
export function tileFrameIndex(packed) {
|
|
31
|
+
return packed & ((1 << 20) - 1);
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* A grid of tiles, drawn as sprites.
|
|
35
|
+
*
|
|
36
|
+
* Layers stack in the order they are added: a floor, then whatever stands on it, then a
|
|
37
|
+
* roof. Every layer shares one grid, so a cell's lighting applies to all of them at once —
|
|
38
|
+
* which is what fog of war needs, since an unseen floor and the wall on it have to dim
|
|
39
|
+
* together.
|
|
40
|
+
*
|
|
41
|
+
* The map is chunked and culled against the camera, so its cost tracks what is on screen
|
|
42
|
+
* rather than how large the map is.
|
|
43
|
+
*
|
|
44
|
+
* Cells can also carry an elevation (`setCellHeight`): the top tile moves up by one
|
|
45
|
+
* `heightStep` per level, and on the diamond projections (isometric, staggered) each
|
|
46
|
+
* level grows two shaded side faces, the classic raised-block look. `tileCenter`
|
|
47
|
+
* rides along, so whoever stands on the cell stands on top of it.
|
|
48
|
+
*/
|
|
49
|
+
export class TileMap extends Container {
|
|
50
|
+
constructor(options) {
|
|
51
|
+
super();
|
|
52
|
+
this.layers = [];
|
|
53
|
+
this.layersByName = new Map();
|
|
54
|
+
//one container per chunk per layer, so culling toggles a single flag per chunk
|
|
55
|
+
this.chunks = [];
|
|
56
|
+
this.widthInTiles = options.width;
|
|
57
|
+
this.heightInTiles = options.height;
|
|
58
|
+
this.sheets = Array.isArray(options.sheet) ? [...options.sheet] : [options.sheet];
|
|
59
|
+
if (this.sheets.length === 0)
|
|
60
|
+
throw new Error('a TileMap needs at least one sheet');
|
|
61
|
+
this.tileWidth = options.tileWidth ?? this.sheets[0].frameWidth;
|
|
62
|
+
this.tileHeight = options.tileHeight ?? this.sheets[0].frameHeight;
|
|
63
|
+
this.shape = options.shape ?? 'square';
|
|
64
|
+
this.heightStep = options.heightStep ?? this.tileHeight / 2;
|
|
65
|
+
if (!(this.heightStep > 0)) {
|
|
66
|
+
throw new Error(`a TileMap's heightStep must be a positive number, got ${options.heightStep}`);
|
|
67
|
+
}
|
|
68
|
+
this.chunkSize = options.chunkSize ?? 16;
|
|
69
|
+
this.chunkColumns = Math.ceil(this.widthInTiles / this.chunkSize);
|
|
70
|
+
this.chunkRows = Math.ceil(this.heightInTiles / this.chunkSize);
|
|
71
|
+
const cells = this.widthInTiles * this.heightInTiles;
|
|
72
|
+
this.cellTint = new Uint32Array(cells).fill(0xffffff);
|
|
73
|
+
this.cellAdd = new Uint32Array(cells);
|
|
74
|
+
this.cellHeight = new Int32Array(cells);
|
|
75
|
+
this.faces = new Array(cells).fill(null);
|
|
76
|
+
}
|
|
77
|
+
get layerCount() {
|
|
78
|
+
return this.layers.length;
|
|
79
|
+
}
|
|
80
|
+
/** world size, for setting camera bounds */
|
|
81
|
+
get worldWidth() {
|
|
82
|
+
switch (this.shape) {
|
|
83
|
+
case 'square':
|
|
84
|
+
return this.widthInTiles * this.tileWidth;
|
|
85
|
+
case 'hex':
|
|
86
|
+
//columns overlap three-quarters of a tile each; the last column still needs
|
|
87
|
+
//its full width past where the previous one started
|
|
88
|
+
return this.widthInTiles <= 0 ? 0 : (this.widthInTiles - 1) * this.tileWidth * 0.75 + this.tileWidth;
|
|
89
|
+
case 'isometric':
|
|
90
|
+
//a diamond spanning every row and column, at their combined width
|
|
91
|
+
return (this.widthInTiles + this.heightInTiles) * (this.tileWidth / 2);
|
|
92
|
+
case 'staggered':
|
|
93
|
+
//every other row is pushed half a tile right, so the map is that much wider
|
|
94
|
+
return this.widthInTiles * this.tileWidth + this.tileWidth / 2;
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
get worldHeight() {
|
|
98
|
+
switch (this.shape) {
|
|
99
|
+
case 'square':
|
|
100
|
+
return this.heightInTiles * this.tileHeight;
|
|
101
|
+
case 'hex':
|
|
102
|
+
//odd columns sit half a tile lower, so the map is that much taller than the
|
|
103
|
+
//rows alone
|
|
104
|
+
return this.heightInTiles * this.tileHeight + this.tileHeight / 2;
|
|
105
|
+
case 'isometric':
|
|
106
|
+
return (this.widthInTiles + this.heightInTiles) * (this.tileHeight / 2);
|
|
107
|
+
case 'staggered':
|
|
108
|
+
//rows are packed at half height, staggered brick-fashion
|
|
109
|
+
return this.heightInTiles * (this.tileHeight / 2) + this.tileHeight / 2;
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
inside(x, y) {
|
|
113
|
+
return x >= 0 && y >= 0 && x < this.widthInTiles && y < this.heightInTiles;
|
|
114
|
+
}
|
|
115
|
+
index(x, y) {
|
|
116
|
+
return y * this.widthInTiles + x;
|
|
117
|
+
}
|
|
118
|
+
/**
|
|
119
|
+
* Adds a layer on top of the existing ones.
|
|
120
|
+
*
|
|
121
|
+
* @param data one frame index per cell, row-major, `EMPTY` for a blank cell. A missing
|
|
122
|
+
* array makes an empty layer to fill in later. On a multi-sheet map the values are
|
|
123
|
+
* `tileFrame` packs rather than plain indices.
|
|
124
|
+
*/
|
|
125
|
+
addLayer(name, data) {
|
|
126
|
+
if (this.layersByName.has(name))
|
|
127
|
+
throw new Error(`this map already has a layer named "${name}"`);
|
|
128
|
+
const cells = this.widthInTiles * this.heightInTiles;
|
|
129
|
+
if (data && data.length !== cells) {
|
|
130
|
+
throw new Error(`layer "${name}" has ${data.length} cells, but the map has ${cells}`);
|
|
131
|
+
}
|
|
132
|
+
const container = new Container();
|
|
133
|
+
const chunkContainers = [];
|
|
134
|
+
for (let i = 0; i < this.chunkColumns * this.chunkRows; i++) {
|
|
135
|
+
const chunk = new Container();
|
|
136
|
+
chunkContainers.push(chunk);
|
|
137
|
+
container.addChild(chunk);
|
|
138
|
+
}
|
|
139
|
+
const layer = {
|
|
140
|
+
name,
|
|
141
|
+
data: data ? Int32Array.from(data) : new Int32Array(cells).fill(EMPTY),
|
|
142
|
+
sprites: new Array(cells).fill(null),
|
|
143
|
+
container,
|
|
144
|
+
};
|
|
145
|
+
this.layers.push(layer);
|
|
146
|
+
this.layersByName.set(name, layer);
|
|
147
|
+
this.chunks.push(chunkContainers);
|
|
148
|
+
this.addChild(container);
|
|
149
|
+
//sprites are built after registration so setTile can find the layer
|
|
150
|
+
const isBottom = this.layers.length === 1;
|
|
151
|
+
for (let y = 0; y < this.heightInTiles; y++) {
|
|
152
|
+
for (let x = 0; x < this.widthInTiles; x++) {
|
|
153
|
+
const frame = layer.data[this.index(x, y)];
|
|
154
|
+
if (frame !== EMPTY)
|
|
155
|
+
this.buildSprite(layer, x, y, frame);
|
|
156
|
+
//faces belong to the block, which the bottom layer defines; upper
|
|
157
|
+
//layers ride the same lift through buildSprite but draw no faces
|
|
158
|
+
if (isBottom)
|
|
159
|
+
this.syncFaces(x, y);
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
return this;
|
|
163
|
+
}
|
|
164
|
+
layerAt(layer) {
|
|
165
|
+
const found = typeof layer === 'number' ? this.layers[layer] : this.layersByName.get(layer);
|
|
166
|
+
if (!found)
|
|
167
|
+
throw new Error(`no such layer: ${layer}`);
|
|
168
|
+
return found;
|
|
169
|
+
}
|
|
170
|
+
chunkIndex(x, y) {
|
|
171
|
+
return Math.floor(y / this.chunkSize) * this.chunkColumns + Math.floor(x / this.chunkSize);
|
|
172
|
+
}
|
|
173
|
+
/** the centre of a cell's tile, before the projections below settle on a shared contract */
|
|
174
|
+
projectedCenter(x, y) {
|
|
175
|
+
switch (this.shape) {
|
|
176
|
+
case 'square':
|
|
177
|
+
return { x: (x + 0.5) * this.tileWidth, y: (y + 0.5) * this.tileHeight };
|
|
178
|
+
case 'hex':
|
|
179
|
+
return hexToPixel(x, y, this.tileWidth, this.tileHeight);
|
|
180
|
+
case 'isometric':
|
|
181
|
+
//the whole diamond is shifted right by the tallest possible row offset, so
|
|
182
|
+
//every tile lands at a non-negative pixel position
|
|
183
|
+
return {
|
|
184
|
+
x: (x - y + (this.heightInTiles - 1)) * (this.tileWidth / 2) + this.tileWidth / 2,
|
|
185
|
+
y: (x + y) * (this.tileHeight / 2) + this.tileHeight / 2,
|
|
186
|
+
};
|
|
187
|
+
case 'staggered':
|
|
188
|
+
//every other row (by convention, the odd ones) is pushed half a tile right;
|
|
189
|
+
//rows are packed at half height so alternating rows still tile seamlessly
|
|
190
|
+
return {
|
|
191
|
+
x: x * this.tileWidth + (y & 1) * (this.tileWidth / 2) + this.tileWidth / 2,
|
|
192
|
+
y: y * (this.tileHeight / 2) + this.tileHeight / 2,
|
|
193
|
+
};
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
/** the cell under a pixel position - the inverse of `projectedCenter` */
|
|
197
|
+
projectedTile(px, py) {
|
|
198
|
+
switch (this.shape) {
|
|
199
|
+
case 'square':
|
|
200
|
+
return { x: Math.floor(px / this.tileWidth), y: Math.floor(py / this.tileHeight) };
|
|
201
|
+
case 'hex':
|
|
202
|
+
return pixelToHex(px, py, this.tileWidth, this.tileHeight);
|
|
203
|
+
case 'isometric': {
|
|
204
|
+
const rx = (px - this.tileWidth / 2) / (this.tileWidth / 2) - (this.heightInTiles - 1);
|
|
205
|
+
const ry = (py - this.tileHeight / 2) / (this.tileHeight / 2);
|
|
206
|
+
return { x: Math.round((rx + ry) / 2), y: Math.round((ry - rx) / 2) };
|
|
207
|
+
}
|
|
208
|
+
case 'staggered': {
|
|
209
|
+
const y = Math.round((py - this.tileHeight / 2) / (this.tileHeight / 2));
|
|
210
|
+
const x = Math.round((px - this.tileWidth / 2 - (y & 1) * (this.tileWidth / 2)) / this.tileWidth);
|
|
211
|
+
return { x, y };
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
/** top-left corner of a cell, in world units - where a sprite anchored at (0,0) belongs */
|
|
216
|
+
cellOrigin(x, y) {
|
|
217
|
+
const center = this.projectedCenter(x, y);
|
|
218
|
+
return { x: center.x - this.tileWidth / 2, y: center.y - this.tileHeight / 2 };
|
|
219
|
+
}
|
|
220
|
+
/** resolves a cell value to a texture: plain indices read sheet 0, packs read their sheet */
|
|
221
|
+
textureFor(frame) {
|
|
222
|
+
const sheet = tileFrameSheet(frame);
|
|
223
|
+
if (sheet >= this.sheets.length) {
|
|
224
|
+
throw new Error(`frame ${frame} names sheet ${sheet}, but this map has ${this.sheets.length}`);
|
|
225
|
+
}
|
|
226
|
+
return this.sheets[sheet].get(tileFrameIndex(frame));
|
|
227
|
+
}
|
|
228
|
+
buildSprite(layer, x, y, frame) {
|
|
229
|
+
const sprite = new TintedSprite(this.textureFor(frame));
|
|
230
|
+
const origin = this.cellOrigin(x, y);
|
|
231
|
+
sprite.x = origin.x;
|
|
232
|
+
//raised cells draw their top higher; the bands between are the faces below
|
|
233
|
+
sprite.y = origin.y - this.cellHeight[this.index(x, y)] * this.heightStep;
|
|
234
|
+
const cell = this.index(x, y);
|
|
235
|
+
sprite.tint = this.cellTint[cell];
|
|
236
|
+
sprite.colorAdd = this.cellAdd[cell];
|
|
237
|
+
layer.sprites[cell] = sprite;
|
|
238
|
+
this.chunks[this.layers.indexOf(layer)][this.chunkIndex(x, y)].addChild(sprite);
|
|
239
|
+
return sprite;
|
|
240
|
+
}
|
|
241
|
+
getTile(layer, x, y) {
|
|
242
|
+
if (!this.inside(x, y))
|
|
243
|
+
return EMPTY;
|
|
244
|
+
return this.layerAt(layer).data[this.index(x, y)];
|
|
245
|
+
}
|
|
246
|
+
setTile(layer, x, y, frame) {
|
|
247
|
+
if (!this.inside(x, y))
|
|
248
|
+
return;
|
|
249
|
+
const target = this.layerAt(layer);
|
|
250
|
+
const cell = this.index(x, y);
|
|
251
|
+
if (target.data[cell] === frame)
|
|
252
|
+
return;
|
|
253
|
+
target.data[cell] = frame;
|
|
254
|
+
const existing = target.sprites[cell];
|
|
255
|
+
if (frame === EMPTY) {
|
|
256
|
+
existing?.destroy();
|
|
257
|
+
target.sprites[cell] = null;
|
|
258
|
+
}
|
|
259
|
+
else if (existing) {
|
|
260
|
+
existing.texture = this.textureFor(frame);
|
|
261
|
+
}
|
|
262
|
+
else {
|
|
263
|
+
this.buildSprite(target, x, y, frame);
|
|
264
|
+
}
|
|
265
|
+
//faces follow the bottom layer: no tile there, no block to side
|
|
266
|
+
if (this.layers[0] === target)
|
|
267
|
+
this.syncFaces(x, y);
|
|
268
|
+
}
|
|
269
|
+
/** fills a whole layer at once, which is what loading a map does */
|
|
270
|
+
setLayerData(layer, data) {
|
|
271
|
+
//resolved once up front so a bad layer name fails before half the map is rewritten
|
|
272
|
+
this.layerAt(layer);
|
|
273
|
+
for (let y = 0; y < this.heightInTiles; y++) {
|
|
274
|
+
for (let x = 0; x < this.widthInTiles; x++) {
|
|
275
|
+
this.setTile(layer, x, y, data[this.index(x, y)] ?? EMPTY);
|
|
276
|
+
}
|
|
277
|
+
}
|
|
278
|
+
}
|
|
279
|
+
/**
|
|
280
|
+
* Colours one cell across every layer.
|
|
281
|
+
*
|
|
282
|
+
* This is the fog-of-war and lighting hook. `tint` multiplies, so it darkens; `add` is
|
|
283
|
+
* the additive term, which is what lets an unseen-but-remembered tile wash out towards
|
|
284
|
+
* grey rather than merely going dark. Side faces take the tint but not the add -
|
|
285
|
+
* plain geometry has no batcher of its own to carry it.
|
|
286
|
+
*/
|
|
287
|
+
setCellColor(x, y, tint, add = 0) {
|
|
288
|
+
if (!this.inside(x, y))
|
|
289
|
+
return;
|
|
290
|
+
const cell = this.index(x, y);
|
|
291
|
+
if (this.cellTint[cell] === tint && this.cellAdd[cell] === add)
|
|
292
|
+
return;
|
|
293
|
+
this.cellTint[cell] = tint;
|
|
294
|
+
this.cellAdd[cell] = add;
|
|
295
|
+
for (const layer of this.layers) {
|
|
296
|
+
const sprite = layer.sprites[cell];
|
|
297
|
+
if (sprite) {
|
|
298
|
+
sprite.tint = tint;
|
|
299
|
+
sprite.colorAdd = add;
|
|
300
|
+
}
|
|
301
|
+
}
|
|
302
|
+
const face = this.faces[cell];
|
|
303
|
+
if (face)
|
|
304
|
+
face.tint = tint;
|
|
305
|
+
}
|
|
306
|
+
getCellTint(x, y) {
|
|
307
|
+
return this.inside(x, y) ? this.cellTint[this.index(x, y)] : 0;
|
|
308
|
+
}
|
|
309
|
+
/** resets every cell to undimmed */
|
|
310
|
+
clearColors() {
|
|
311
|
+
for (let y = 0; y < this.heightInTiles; y++) {
|
|
312
|
+
for (let x = 0; x < this.widthInTiles; x++)
|
|
313
|
+
this.setCellColor(x, y, 0xffffff, 0);
|
|
314
|
+
}
|
|
315
|
+
}
|
|
316
|
+
/**
|
|
317
|
+
* Raises or lowers one cell, in whole levels.
|
|
318
|
+
*
|
|
319
|
+
* Every layer's top tile moves up by one `heightStep` per level, and on the
|
|
320
|
+
* diamond projections a raised cell grows two shaded side faces per level -
|
|
321
|
+
* the left and right walls of the block, drawn into the bottom layer's chunk
|
|
322
|
+
* behind the cell's own top, so rows in front still overlap correctly. Square
|
|
323
|
+
* and hex cells lift without faces. A cell with no bottom-layer tile grows no
|
|
324
|
+
* faces: nothing to be the side of. Negative heights sink the top with no
|
|
325
|
+
* faces - pits are a hole, not an inverted block.
|
|
326
|
+
*
|
|
327
|
+
* The usual source is an `Elevation`: `map.setCellHeight(x, y,
|
|
328
|
+
* elevation.heightAt(x, y))` over every cell, after the layers are added.
|
|
329
|
+
*/
|
|
330
|
+
setCellHeight(x, y, height) {
|
|
331
|
+
if (!this.inside(x, y))
|
|
332
|
+
return;
|
|
333
|
+
if (!Number.isInteger(height)) {
|
|
334
|
+
throw new Error(`a cell's height must be a whole number, got ${height}`);
|
|
335
|
+
}
|
|
336
|
+
const cell = this.index(x, y);
|
|
337
|
+
if (this.cellHeight[cell] === height)
|
|
338
|
+
return;
|
|
339
|
+
this.cellHeight[cell] = height;
|
|
340
|
+
const lift = height * this.heightStep;
|
|
341
|
+
for (const layer of this.layers) {
|
|
342
|
+
const sprite = layer.sprites[cell];
|
|
343
|
+
if (sprite)
|
|
344
|
+
sprite.y = this.cellOrigin(x, y).y - lift;
|
|
345
|
+
}
|
|
346
|
+
this.syncFaces(x, y);
|
|
347
|
+
}
|
|
348
|
+
/** the elevation of a cell in whole levels; off the map reads as ground */
|
|
349
|
+
getCellHeight(x, y) {
|
|
350
|
+
return this.inside(x, y) ? this.cellHeight[this.index(x, y)] : 0;
|
|
351
|
+
}
|
|
352
|
+
/** how many cells currently draw side faces, for a debug overlay */
|
|
353
|
+
get faceCount() {
|
|
354
|
+
return this.faces.filter((face) => face !== null).length;
|
|
355
|
+
}
|
|
356
|
+
/** rebuilds or removes one cell's faces to match its height and bottom tile */
|
|
357
|
+
syncFaces(x, y) {
|
|
358
|
+
if (this.layers.length === 0)
|
|
359
|
+
return;
|
|
360
|
+
const cell = this.index(x, y);
|
|
361
|
+
const want = (this.shape === 'isometric' || this.shape === 'staggered') &&
|
|
362
|
+
this.cellHeight[cell] > 0 &&
|
|
363
|
+
this.layers[0].data[cell] !== EMPTY;
|
|
364
|
+
const have = this.faces[cell];
|
|
365
|
+
if (!want) {
|
|
366
|
+
if (have) {
|
|
367
|
+
have.destroy();
|
|
368
|
+
this.faces[cell] = null;
|
|
369
|
+
}
|
|
370
|
+
return;
|
|
371
|
+
}
|
|
372
|
+
const face = have ?? new Graphics();
|
|
373
|
+
this.drawFaces(face, x, y);
|
|
374
|
+
face.tint = this.cellTint[cell];
|
|
375
|
+
if (!have) {
|
|
376
|
+
this.faces[cell] = face;
|
|
377
|
+
//behind the cell's own top, after everything drawn above it on screen
|
|
378
|
+
const chunk = this.chunks[0][this.chunkIndex(x, y)];
|
|
379
|
+
const top = this.layers[0].sprites[cell];
|
|
380
|
+
if (top)
|
|
381
|
+
chunk.addChildAt(face, chunk.getChildIndex(top));
|
|
382
|
+
else
|
|
383
|
+
chunk.addChild(face);
|
|
384
|
+
}
|
|
385
|
+
}
|
|
386
|
+
/**
|
|
387
|
+
* Draws one raised block: per level, a left and a right rhombus band stacking
|
|
388
|
+
* from the base diamond up to the lifted top. Band `k` spans the step between
|
|
389
|
+
* `(k-1) * heightStep` and `k * heightStep` above the base, so the bands tile
|
|
390
|
+
* the whole side exactly, whatever the step is.
|
|
391
|
+
*/
|
|
392
|
+
drawFaces(face, x, y) {
|
|
393
|
+
const origin = this.cellOrigin(x, y);
|
|
394
|
+
const ox = origin.x;
|
|
395
|
+
const oy = origin.y;
|
|
396
|
+
const halfW = this.tileWidth / 2;
|
|
397
|
+
const halfH = this.tileHeight / 2;
|
|
398
|
+
const step = this.heightStep;
|
|
399
|
+
const height = this.cellHeight[this.index(x, y)];
|
|
400
|
+
face.clear();
|
|
401
|
+
for (let k = 1; k <= height; k++) {
|
|
402
|
+
const top = k * step;
|
|
403
|
+
const bottom = (k - 1) * step;
|
|
404
|
+
face
|
|
405
|
+
.poly([
|
|
406
|
+
ox, oy + halfH - top,
|
|
407
|
+
ox + halfW, oy + halfH * 2 - top,
|
|
408
|
+
ox + halfW, oy + halfH * 2 - bottom,
|
|
409
|
+
ox, oy + halfH - bottom,
|
|
410
|
+
])
|
|
411
|
+
.fill(LEFT_FACE_FILL);
|
|
412
|
+
face
|
|
413
|
+
.poly([
|
|
414
|
+
ox + halfW, oy + halfH * 2 - top,
|
|
415
|
+
ox + halfW * 2, oy + halfH - top,
|
|
416
|
+
ox + halfW * 2, oy + halfH - bottom,
|
|
417
|
+
ox + halfW, oy + halfH * 2 - bottom,
|
|
418
|
+
])
|
|
419
|
+
.fill(RIGHT_FACE_FILL);
|
|
420
|
+
}
|
|
421
|
+
}
|
|
422
|
+
/** world point to tile coordinates */
|
|
423
|
+
toTile(worldX, worldY) {
|
|
424
|
+
//the base grid, not the lifted tops: a raised tile overlaps its neighbours
|
|
425
|
+
//on screen, and unpicking which one a point meant needs the heights, which
|
|
426
|
+
//this deliberately does not consult - games with raised clickable cells
|
|
427
|
+
//adjust the point by the known height first
|
|
428
|
+
return this.projectedTile(worldX, worldY);
|
|
429
|
+
}
|
|
430
|
+
/**
|
|
431
|
+
* The centre of a tile, in world units — where a character standing on it belongs.
|
|
432
|
+
*
|
|
433
|
+
* Rides the cell's elevation: a raised cell reports its lifted top, so whoever
|
|
434
|
+
* is placed there stands on the block rather than inside it.
|
|
435
|
+
*/
|
|
436
|
+
tileCenter(x, y) {
|
|
437
|
+
const center = this.projectedCenter(x, y);
|
|
438
|
+
center.y -= this.getCellHeight(x, y) * this.heightStep;
|
|
439
|
+
return center;
|
|
440
|
+
}
|
|
441
|
+
/**
|
|
442
|
+
* Switches off chunks the camera cannot see.
|
|
443
|
+
*
|
|
444
|
+
* Call it once per frame. Culling by chunk rather than by tile is the point: a 200x200
|
|
445
|
+
* map is 40 000 tiles but only 169 chunks, so the test runs a couple of hundred times
|
|
446
|
+
* instead of forty thousand.
|
|
447
|
+
*/
|
|
448
|
+
cull(camera) {
|
|
449
|
+
const view = camera.view;
|
|
450
|
+
//the screen's four corners, mapped into tile space through whichever projection this
|
|
451
|
+
//map uses. A projection is affine, so a rectangle's image (or preimage) is a
|
|
452
|
+
//parallelogram, and the axis-aligned box around those four points always fully
|
|
453
|
+
//contains it - the same reasoning works unchanged for square, hex, isometric or
|
|
454
|
+
//staggered, so nothing here needs to know which one it is
|
|
455
|
+
const corners = [
|
|
456
|
+
this.projectedTile(view.x, view.y),
|
|
457
|
+
this.projectedTile(view.x + view.width, view.y),
|
|
458
|
+
this.projectedTile(view.x, view.y + view.height),
|
|
459
|
+
this.projectedTile(view.x + view.width, view.y + view.height),
|
|
460
|
+
];
|
|
461
|
+
const tileMinX = Math.min(...corners.map((c) => c.x));
|
|
462
|
+
const tileMaxX = Math.max(...corners.map((c) => c.x));
|
|
463
|
+
const tileMinY = Math.min(...corners.map((c) => c.y));
|
|
464
|
+
const tileMaxY = Math.max(...corners.map((c) => c.y));
|
|
465
|
+
//a one-chunk margin, so a chunk is switched on slightly before it is needed
|
|
466
|
+
const minChunkX = Math.floor(tileMinX / this.chunkSize) - 1;
|
|
467
|
+
const maxChunkX = Math.floor(tileMaxX / this.chunkSize) + 1;
|
|
468
|
+
const minChunkY = Math.floor(tileMinY / this.chunkSize) - 1;
|
|
469
|
+
const maxChunkY = Math.floor(tileMaxY / this.chunkSize) + 1;
|
|
470
|
+
for (let cy = 0; cy < this.chunkRows; cy++) {
|
|
471
|
+
const rowVisible = cy >= minChunkY && cy <= maxChunkY;
|
|
472
|
+
for (let cx = 0; cx < this.chunkColumns; cx++) {
|
|
473
|
+
const visible = rowVisible && cx >= minChunkX && cx <= maxChunkX;
|
|
474
|
+
const index = cy * this.chunkColumns + cx;
|
|
475
|
+
for (const layerChunks of this.chunks) {
|
|
476
|
+
layerChunks[index].renderable = visible;
|
|
477
|
+
}
|
|
478
|
+
}
|
|
479
|
+
}
|
|
480
|
+
}
|
|
481
|
+
/** how many chunks are currently drawn, for a debug overlay */
|
|
482
|
+
get visibleChunks() {
|
|
483
|
+
if (this.chunks.length === 0)
|
|
484
|
+
return 0;
|
|
485
|
+
return this.chunks[0].filter((chunk) => chunk.renderable).length;
|
|
486
|
+
}
|
|
487
|
+
}
|
|
488
|
+
//# sourceMappingURL=TileMap.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TileMap.js","sourceRoot":"","sources":["../../src/render/TileMap.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import { Sprite } from 'pixi.js';
|
|
2
|
+
import type { Texture, SpriteOptions } from 'pixi.js';
|
|
3
|
+
/**
|
|
4
|
+
* A sprite that can be pulled *towards* a colour, not just darkened.
|
|
5
|
+
*
|
|
6
|
+
* `tint` multiplies, as it does on any Pixi sprite. `colorAdd` is added on top, which is
|
|
7
|
+
* what makes effects like these possible:
|
|
8
|
+
*
|
|
9
|
+
* ```ts
|
|
10
|
+
* const rat = new TintedSprite({ texture });
|
|
11
|
+
* rat.lerpTint(0x00ff00, 0.5); // half-way to green: poisoned
|
|
12
|
+
* rat.flash(0xffffff, 0.8); // nearly white: just took a hit
|
|
13
|
+
* rat.tint = 0x404060; // plain multiply: standing in the dark
|
|
14
|
+
* ```
|
|
15
|
+
*
|
|
16
|
+
* Both terms ride in the same batch, so a screen full of tinted sprites is still one draw
|
|
17
|
+
* call. See ColorTransformBatcher for how, and for the caveat about Pixi internals.
|
|
18
|
+
*/
|
|
19
|
+
export declare class TintedSprite extends Sprite {
|
|
20
|
+
private _colorAdd;
|
|
21
|
+
constructor(options?: SpriteOptions | Texture);
|
|
22
|
+
/** the packed additive colour; use `setColorAdd` or `lerpTint` rather than setting it raw */
|
|
23
|
+
get colorAdd(): number;
|
|
24
|
+
set colorAdd(value: number);
|
|
25
|
+
/** @param r @param g @param b each 0 to 1 @param a extra alpha to add, usually 0 */
|
|
26
|
+
setColorAdd(r: number, g: number, b: number, a?: number): void;
|
|
27
|
+
/**
|
|
28
|
+
* Moves the sprite `strength` of the way towards `color`, leaving its shading intact.
|
|
29
|
+
*
|
|
30
|
+
* This sets both halves of the transform: the tint carries `1 - strength` and the
|
|
31
|
+
* additive term carries `color × strength`.
|
|
32
|
+
*/
|
|
33
|
+
lerpTint(color: number, strength: number): void;
|
|
34
|
+
/** a solid silhouette in `color`, keeping only the sprite's shape */
|
|
35
|
+
silhouette(color: number): void;
|
|
36
|
+
/** back to the texture's own colours */
|
|
37
|
+
resetColor(): void;
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Registers the batcher and pipe with Pixi.
|
|
41
|
+
*
|
|
42
|
+
* Called automatically the first time a TintedSprite is rendered is not possible, because
|
|
43
|
+
* registration has to happen before the renderer is created — so `Game` calls this during
|
|
44
|
+
* start-up, and it is exported for anyone building their own renderer.
|
|
45
|
+
*/
|
|
46
|
+
export declare function registerColorTransform(): void;
|
|
47
|
+
//# sourceMappingURL=TintedSprite.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TintedSprite.d.ts","sourceRoot":"","sources":["../../src/render/TintedSprite.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAA6B,MAAM,SAAS,CAAC;AAC5D,OAAO,KAAK,EAA4B,OAAO,EAAE,aAAa,EAAe,MAAM,SAAS,CAAC;AAK7F;;;;;;;;;;;;;;;GAeG;AACH,qBAAa,YAAa,SAAQ,MAAM;IACvC,OAAO,CAAC,SAAS,CAAK;IAEtB,YAAY,OAAO,CAAC,EAAE,aAAa,GAAG,OAAO,EAM5C;IAED,6FAA6F;IAC7F,IAAI,QAAQ,IAAI,MAAM,CAErB;IAED,IAAI,QAAQ,CAAC,KAAK,EAAE,MAAM,EAKzB;IAED,oFAAoF;IACpF,WAAW,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,SAAI,GAAG,IAAI,CAExD;IAED;;;;;OAKG;IACH,QAAQ,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI,CAI9C;IAED,qEAAqE;IACrE,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAG9B;IAED,wCAAwC;IACxC,UAAU,IAAI,IAAI,CAGjB;CACD;AAyHD;;;;;;GAMG;AACH,wBAAgB,sBAAsB,IAAI,IAAI,CAM7C"}
|