idlerpg.sh 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +171 -0
- package/dist/affix/AffixRegistry.d.ts +68 -0
- package/dist/affix/AffixRegistry.d.ts.map +1 -0
- package/dist/affix/AffixRegistry.js +245 -0
- package/dist/affix/AffixRegistry.js.map +1 -0
- package/dist/affix/PluginLoader.d.ts +66 -0
- package/dist/affix/PluginLoader.d.ts.map +1 -0
- package/dist/affix/PluginLoader.js +321 -0
- package/dist/affix/PluginLoader.js.map +1 -0
- package/dist/affix/builtin.d.ts +6 -0
- package/dist/affix/builtin.d.ts.map +1 -0
- package/dist/affix/builtin.js +311 -0
- package/dist/affix/builtin.js.map +1 -0
- package/dist/affix/index.d.ts +8 -0
- package/dist/affix/index.d.ts.map +1 -0
- package/dist/affix/index.js +11 -0
- package/dist/affix/index.js.map +1 -0
- package/dist/affix/types.d.ts +152 -0
- package/dist/affix/types.d.ts.map +1 -0
- package/dist/affix/types.js +8 -0
- package/dist/affix/types.js.map +1 -0
- package/dist/ai/PlayKitClient.d.ts +208 -0
- package/dist/ai/PlayKitClient.d.ts.map +1 -0
- package/dist/ai/PlayKitClient.js +721 -0
- package/dist/ai/PlayKitClient.js.map +1 -0
- package/dist/ai/index.d.ts +5 -0
- package/dist/ai/index.d.ts.map +1 -0
- package/dist/ai/index.js +8 -0
- package/dist/ai/index.js.map +1 -0
- package/dist/app/App.d.ts +85 -0
- package/dist/app/App.d.ts.map +1 -0
- package/dist/app/App.js +296 -0
- package/dist/app/App.js.map +1 -0
- package/dist/app/EventBus.d.ts +222 -0
- package/dist/app/EventBus.d.ts.map +1 -0
- package/dist/app/EventBus.js +88 -0
- package/dist/app/EventBus.js.map +1 -0
- package/dist/app/Keybind.d.ts +83 -0
- package/dist/app/Keybind.d.ts.map +1 -0
- package/dist/app/Keybind.js +184 -0
- package/dist/app/Keybind.js.map +1 -0
- package/dist/app/Router.d.ts +123 -0
- package/dist/app/Router.d.ts.map +1 -0
- package/dist/app/Router.js +142 -0
- package/dist/app/Router.js.map +1 -0
- package/dist/app/ScreenManager.d.ts +97 -0
- package/dist/app/ScreenManager.d.ts.map +1 -0
- package/dist/app/ScreenManager.js +216 -0
- package/dist/app/ScreenManager.js.map +1 -0
- package/dist/app/index.d.ts +14 -0
- package/dist/app/index.d.ts.map +1 -0
- package/dist/app/index.js +19 -0
- package/dist/app/index.js.map +1 -0
- package/dist/app/screens/BaseScreen.d.ts +101 -0
- package/dist/app/screens/BaseScreen.d.ts.map +1 -0
- package/dist/app/screens/BaseScreen.js +132 -0
- package/dist/app/screens/BaseScreen.js.map +1 -0
- package/dist/app/screens/CharacterCreationScreen.d.ts +42 -0
- package/dist/app/screens/CharacterCreationScreen.d.ts.map +1 -0
- package/dist/app/screens/CharacterCreationScreen.js +467 -0
- package/dist/app/screens/CharacterCreationScreen.js.map +1 -0
- package/dist/app/screens/CombatScreen.d.ts +30 -0
- package/dist/app/screens/CombatScreen.d.ts.map +1 -0
- package/dist/app/screens/CombatScreen.js +309 -0
- package/dist/app/screens/CombatScreen.js.map +1 -0
- package/dist/app/screens/DialogScreen.d.ts +29 -0
- package/dist/app/screens/DialogScreen.d.ts.map +1 -0
- package/dist/app/screens/DialogScreen.js +295 -0
- package/dist/app/screens/DialogScreen.js.map +1 -0
- package/dist/app/screens/ExploreScreen.d.ts +50 -0
- package/dist/app/screens/ExploreScreen.d.ts.map +1 -0
- package/dist/app/screens/ExploreScreen.js +308 -0
- package/dist/app/screens/ExploreScreen.js.map +1 -0
- package/dist/app/screens/HelpScreen.d.ts +12 -0
- package/dist/app/screens/HelpScreen.d.ts.map +1 -0
- package/dist/app/screens/HelpScreen.js +155 -0
- package/dist/app/screens/HelpScreen.js.map +1 -0
- package/dist/app/screens/InventoryScreen.d.ts +27 -0
- package/dist/app/screens/InventoryScreen.d.ts.map +1 -0
- package/dist/app/screens/InventoryScreen.js +326 -0
- package/dist/app/screens/InventoryScreen.js.map +1 -0
- package/dist/app/screens/PrologueScreen.d.ts +24 -0
- package/dist/app/screens/PrologueScreen.d.ts.map +1 -0
- package/dist/app/screens/PrologueScreen.js +176 -0
- package/dist/app/screens/PrologueScreen.js.map +1 -0
- package/dist/app/screens/TitleScreen.d.ts +42 -0
- package/dist/app/screens/TitleScreen.d.ts.map +1 -0
- package/dist/app/screens/TitleScreen.js +380 -0
- package/dist/app/screens/TitleScreen.js.map +1 -0
- package/dist/app/screens/TravelScreen.d.ts +22 -0
- package/dist/app/screens/TravelScreen.d.ts.map +1 -0
- package/dist/app/screens/TravelScreen.js +122 -0
- package/dist/app/screens/TravelScreen.js.map +1 -0
- package/dist/app/screens/index.d.ts +14 -0
- package/dist/app/screens/index.d.ts.map +1 -0
- package/dist/app/screens/index.js +17 -0
- package/dist/app/screens/index.js.map +1 -0
- package/dist/commands/CommandRegistry.d.ts +91 -0
- package/dist/commands/CommandRegistry.d.ts.map +1 -0
- package/dist/commands/CommandRegistry.js +159 -0
- package/dist/commands/CommandRegistry.js.map +1 -0
- package/dist/commands/index.d.ts +7 -0
- package/dist/commands/index.d.ts.map +1 -0
- package/dist/commands/index.js +10 -0
- package/dist/commands/index.js.map +1 -0
- package/dist/core/Actor.d.ts +103 -0
- package/dist/core/Actor.d.ts.map +1 -0
- package/dist/core/Actor.js +409 -0
- package/dist/core/Actor.js.map +1 -0
- package/dist/core/Combat.d.ts +37 -0
- package/dist/core/Combat.d.ts.map +1 -0
- package/dist/core/Combat.js +294 -0
- package/dist/core/Combat.js.map +1 -0
- package/dist/core/DungeonRunner.d.ts +169 -0
- package/dist/core/DungeonRunner.d.ts.map +1 -0
- package/dist/core/DungeonRunner.js +627 -0
- package/dist/core/DungeonRunner.js.map +1 -0
- package/dist/core/Game.d.ts +133 -0
- package/dist/core/Game.d.ts.map +1 -0
- package/dist/core/Game.js +644 -0
- package/dist/core/Game.js.map +1 -0
- package/dist/core/IdleCombat.d.ts +61 -0
- package/dist/core/IdleCombat.d.ts.map +1 -0
- package/dist/core/IdleCombat.js +461 -0
- package/dist/core/IdleCombat.js.map +1 -0
- package/dist/core/IdleGameManager.d.ts +198 -0
- package/dist/core/IdleGameManager.d.ts.map +1 -0
- package/dist/core/IdleGameManager.js +688 -0
- package/dist/core/IdleGameManager.js.map +1 -0
- package/dist/core/IdleSaveManager.d.ts +109 -0
- package/dist/core/IdleSaveManager.d.ts.map +1 -0
- package/dist/core/IdleSaveManager.js +296 -0
- package/dist/core/IdleSaveManager.js.map +1 -0
- package/dist/core/NewGameFlowManager.d.ts +64 -0
- package/dist/core/NewGameFlowManager.d.ts.map +1 -0
- package/dist/core/NewGameFlowManager.js +153 -0
- package/dist/core/NewGameFlowManager.js.map +1 -0
- package/dist/core/Player.d.ts +65 -0
- package/dist/core/Player.d.ts.map +1 -0
- package/dist/core/Player.js +261 -0
- package/dist/core/Player.js.map +1 -0
- package/dist/core/RoomHandlers.d.ts +75 -0
- package/dist/core/RoomHandlers.d.ts.map +1 -0
- package/dist/core/RoomHandlers.js +383 -0
- package/dist/core/RoomHandlers.js.map +1 -0
- package/dist/core/SaveManager.d.ts +84 -0
- package/dist/core/SaveManager.d.ts.map +1 -0
- package/dist/core/SaveManager.js +281 -0
- package/dist/core/SaveManager.js.map +1 -0
- package/dist/core/SaveMigration.d.ts +69 -0
- package/dist/core/SaveMigration.d.ts.map +1 -0
- package/dist/core/SaveMigration.js +408 -0
- package/dist/core/SaveMigration.js.map +1 -0
- package/dist/core/StateAdapter.d.ts +79 -0
- package/dist/core/StateAdapter.d.ts.map +1 -0
- package/dist/core/StateAdapter.js +397 -0
- package/dist/core/StateAdapter.js.map +1 -0
- package/dist/core/Team.d.ts +145 -0
- package/dist/core/Team.d.ts.map +1 -0
- package/dist/core/Team.js +371 -0
- package/dist/core/Team.js.map +1 -0
- package/dist/core/TeamCombat.d.ts +88 -0
- package/dist/core/TeamCombat.d.ts.map +1 -0
- package/dist/core/TeamCombat.js +405 -0
- package/dist/core/TeamCombat.js.map +1 -0
- package/dist/core/TeamDungeonRunner.d.ts +186 -0
- package/dist/core/TeamDungeonRunner.d.ts.map +1 -0
- package/dist/core/TeamDungeonRunner.js +758 -0
- package/dist/core/TeamDungeonRunner.js.map +1 -0
- package/dist/core/TimeManager.d.ts +114 -0
- package/dist/core/TimeManager.d.ts.map +1 -0
- package/dist/core/TimeManager.js +318 -0
- package/dist/core/TimeManager.js.map +1 -0
- package/dist/core/index.d.ts +9 -0
- package/dist/core/index.d.ts.map +1 -0
- package/dist/core/index.js +12 -0
- package/dist/core/index.js.map +1 -0
- package/dist/core/timeConstants.d.ts +135 -0
- package/dist/core/timeConstants.d.ts.map +1 -0
- package/dist/core/timeConstants.js +157 -0
- package/dist/core/timeConstants.js.map +1 -0
- package/dist/core/types.d.ts +780 -0
- package/dist/core/types.d.ts.map +1 -0
- package/dist/core/types.js +16 -0
- package/dist/core/types.js.map +1 -0
- package/dist/data/continents/index.d.ts +163 -0
- package/dist/data/continents/index.d.ts.map +1 -0
- package/dist/data/continents/index.js +31 -0
- package/dist/data/continents/index.js.map +1 -0
- package/dist/data/continents/verdantia.d.ts +294 -0
- package/dist/data/continents/verdantia.d.ts.map +1 -0
- package/dist/data/continents/verdantia.js +327 -0
- package/dist/data/continents/verdantia.js.map +1 -0
- package/dist/handlers/DialogHandler.d.ts +95 -0
- package/dist/handlers/DialogHandler.d.ts.map +1 -0
- package/dist/handlers/DialogHandler.js +450 -0
- package/dist/handlers/DialogHandler.js.map +1 -0
- package/dist/handlers/SaveLoadHandler.d.ts +60 -0
- package/dist/handlers/SaveLoadHandler.d.ts.map +1 -0
- package/dist/handlers/SaveLoadHandler.js +187 -0
- package/dist/handlers/SaveLoadHandler.js.map +1 -0
- package/dist/handlers/TitleScreenHandler.d.ts +43 -0
- package/dist/handlers/TitleScreenHandler.d.ts.map +1 -0
- package/dist/handlers/TitleScreenHandler.js +508 -0
- package/dist/handlers/TitleScreenHandler.js.map +1 -0
- package/dist/handlers/WorkshopHandler.d.ts +75 -0
- package/dist/handlers/WorkshopHandler.d.ts.map +1 -0
- package/dist/handlers/WorkshopHandler.js +401 -0
- package/dist/handlers/WorkshopHandler.js.map +1 -0
- package/dist/handlers/index.d.ts +12 -0
- package/dist/handlers/index.d.ts.map +1 -0
- package/dist/handlers/index.js +14 -0
- package/dist/handlers/index.js.map +1 -0
- package/dist/handlers/types.d.ts +34 -0
- package/dist/handlers/types.d.ts.map +1 -0
- package/dist/handlers/types.js +8 -0
- package/dist/handlers/types.js.map +1 -0
- package/dist/i18n/en.d.ts +3 -0
- package/dist/i18n/en.d.ts.map +1 -0
- package/dist/i18n/en.js +130 -0
- package/dist/i18n/en.js.map +1 -0
- package/dist/i18n/index.d.ts +40 -0
- package/dist/i18n/index.d.ts.map +1 -0
- package/dist/i18n/index.js +105 -0
- package/dist/i18n/index.js.map +1 -0
- package/dist/i18n/types.d.ts +133 -0
- package/dist/i18n/types.d.ts.map +1 -0
- package/dist/i18n/types.js +8 -0
- package/dist/i18n/types.js.map +1 -0
- package/dist/i18n/zh.d.ts +3 -0
- package/dist/i18n/zh.d.ts.map +1 -0
- package/dist/i18n/zh.js +130 -0
- package/dist/i18n/zh.js.map +1 -0
- package/dist/instrument.d.ts +8 -0
- package/dist/instrument.d.ts.map +1 -0
- package/dist/instrument.js +33 -0
- package/dist/instrument.js.map +1 -0
- package/dist/main-new.d.ts +12 -0
- package/dist/main-new.d.ts.map +1 -0
- package/dist/main-new.js +32 -0
- package/dist/main-new.js.map +1 -0
- package/dist/main.d.ts +7 -0
- package/dist/main.d.ts.map +1 -0
- package/dist/main.js +2816 -0
- package/dist/main.js.map +1 -0
- package/dist/map/ContinentManager.d.ts +88 -0
- package/dist/map/ContinentManager.d.ts.map +1 -0
- package/dist/map/ContinentManager.js +241 -0
- package/dist/map/ContinentManager.js.map +1 -0
- package/dist/map/DungeonGenerator.d.ts +32 -0
- package/dist/map/DungeonGenerator.d.ts.map +1 -0
- package/dist/map/DungeonGenerator.js +615 -0
- package/dist/map/DungeonGenerator.js.map +1 -0
- package/dist/map/MapGenerator.d.ts +27 -0
- package/dist/map/MapGenerator.d.ts.map +1 -0
- package/dist/map/MapGenerator.js +485 -0
- package/dist/map/MapGenerator.js.map +1 -0
- package/dist/map/index.d.ts +5 -0
- package/dist/map/index.d.ts.map +1 -0
- package/dist/map/index.js +8 -0
- package/dist/map/index.js.map +1 -0
- package/dist/npc/NPCGenerator.d.ts +68 -0
- package/dist/npc/NPCGenerator.d.ts.map +1 -0
- package/dist/npc/NPCGenerator.js +468 -0
- package/dist/npc/NPCGenerator.js.map +1 -0
- package/dist/npc/NPCManager.d.ts +86 -0
- package/dist/npc/NPCManager.d.ts.map +1 -0
- package/dist/npc/NPCManager.js +217 -0
- package/dist/npc/NPCManager.js.map +1 -0
- package/dist/npc/fixedNPCs.d.ts +7 -0
- package/dist/npc/fixedNPCs.d.ts.map +1 -0
- package/dist/npc/fixedNPCs.js +196 -0
- package/dist/npc/fixedNPCs.js.map +1 -0
- package/dist/npc/index.d.ts +9 -0
- package/dist/npc/index.d.ts.map +1 -0
- package/dist/npc/index.js +12 -0
- package/dist/npc/index.js.map +1 -0
- package/dist/npc/traits.d.ts +33 -0
- package/dist/npc/traits.d.ts.map +1 -0
- package/dist/npc/traits.js +795 -0
- package/dist/npc/traits.js.map +1 -0
- package/dist/npc/types.d.ts +193 -0
- package/dist/npc/types.d.ts.map +1 -0
- package/dist/npc/types.js +9 -0
- package/dist/npc/types.js.map +1 -0
- package/dist/quest/QuestManager.d.ts +79 -0
- package/dist/quest/QuestManager.d.ts.map +1 -0
- package/dist/quest/QuestManager.js +273 -0
- package/dist/quest/QuestManager.js.map +1 -0
- package/dist/quest/index.d.ts +6 -0
- package/dist/quest/index.d.ts.map +1 -0
- package/dist/quest/index.js +9 -0
- package/dist/quest/index.js.map +1 -0
- package/dist/quest/types.d.ts +81 -0
- package/dist/quest/types.d.ts.map +1 -0
- package/dist/quest/types.js +8 -0
- package/dist/quest/types.js.map +1 -0
- package/dist/strategy/StrategyExecutor.d.ts +159 -0
- package/dist/strategy/StrategyExecutor.d.ts.map +1 -0
- package/dist/strategy/StrategyExecutor.js +479 -0
- package/dist/strategy/StrategyExecutor.js.map +1 -0
- package/dist/strategy/StrategyParser.d.ts +48 -0
- package/dist/strategy/StrategyParser.d.ts.map +1 -0
- package/dist/strategy/StrategyParser.js +321 -0
- package/dist/strategy/StrategyParser.js.map +1 -0
- package/dist/strategy/defaultStrategy.d.ts +40 -0
- package/dist/strategy/defaultStrategy.d.ts.map +1 -0
- package/dist/strategy/defaultStrategy.js +254 -0
- package/dist/strategy/defaultStrategy.js.map +1 -0
- package/dist/strategy/index.d.ts +8 -0
- package/dist/strategy/index.d.ts.map +1 -0
- package/dist/strategy/index.js +14 -0
- package/dist/strategy/index.js.map +1 -0
- package/dist/tui/ExploreMenu.d.ts +106 -0
- package/dist/tui/ExploreMenu.d.ts.map +1 -0
- package/dist/tui/ExploreMenu.js +282 -0
- package/dist/tui/ExploreMenu.js.map +1 -0
- package/dist/tui/GameUI.d.ts +313 -0
- package/dist/tui/GameUI.d.ts.map +1 -0
- package/dist/tui/GameUI.js +2116 -0
- package/dist/tui/GameUI.js.map +1 -0
- package/dist/tui/GameUIAdapter.d.ts +207 -0
- package/dist/tui/GameUIAdapter.d.ts.map +1 -0
- package/dist/tui/GameUIAdapter.js +1342 -0
- package/dist/tui/GameUIAdapter.js.map +1 -0
- package/dist/tui/Input.d.ts +139 -0
- package/dist/tui/Input.d.ts.map +1 -0
- package/dist/tui/Input.js +278 -0
- package/dist/tui/Input.js.map +1 -0
- package/dist/tui/Menu.d.ts +110 -0
- package/dist/tui/Menu.d.ts.map +1 -0
- package/dist/tui/Menu.js +365 -0
- package/dist/tui/Menu.js.map +1 -0
- package/dist/tui/Screen.d.ts +228 -0
- package/dist/tui/Screen.d.ts.map +1 -0
- package/dist/tui/Screen.js +502 -0
- package/dist/tui/Screen.js.map +1 -0
- package/dist/tui/components/Box.d.ts +36 -0
- package/dist/tui/components/Box.d.ts.map +1 -0
- package/dist/tui/components/Box.js +43 -0
- package/dist/tui/components/Box.js.map +1 -0
- package/dist/tui/components/List.d.ts +69 -0
- package/dist/tui/components/List.d.ts.map +1 -0
- package/dist/tui/components/List.js +136 -0
- package/dist/tui/components/List.js.map +1 -0
- package/dist/tui/components/ProgressBar.d.ts +42 -0
- package/dist/tui/components/ProgressBar.d.ts.map +1 -0
- package/dist/tui/components/ProgressBar.js +75 -0
- package/dist/tui/components/ProgressBar.js.map +1 -0
- package/dist/tui/components/index.d.ts +8 -0
- package/dist/tui/components/index.d.ts.map +1 -0
- package/dist/tui/components/index.js +11 -0
- package/dist/tui/components/index.js.map +1 -0
- package/dist/tui/core/BaseSection.d.ts +98 -0
- package/dist/tui/core/BaseSection.d.ts.map +1 -0
- package/dist/tui/core/BaseSection.js +174 -0
- package/dist/tui/core/BaseSection.js.map +1 -0
- package/dist/tui/core/Component.d.ts +61 -0
- package/dist/tui/core/Component.d.ts.map +1 -0
- package/dist/tui/core/Component.js +32 -0
- package/dist/tui/core/Component.js.map +1 -0
- package/dist/tui/core/Section.d.ts +101 -0
- package/dist/tui/core/Section.d.ts.map +1 -0
- package/dist/tui/core/Section.js +24 -0
- package/dist/tui/core/Section.js.map +1 -0
- package/dist/tui/core/SectionManager.d.ts +108 -0
- package/dist/tui/core/SectionManager.d.ts.map +1 -0
- package/dist/tui/core/SectionManager.js +258 -0
- package/dist/tui/core/SectionManager.js.map +1 -0
- package/dist/tui/core/index.d.ts +9 -0
- package/dist/tui/core/index.d.ts.map +1 -0
- package/dist/tui/core/index.js +12 -0
- package/dist/tui/core/index.js.map +1 -0
- package/dist/tui/index.d.ts +15 -0
- package/dist/tui/index.d.ts.map +1 -0
- package/dist/tui/index.js +23 -0
- package/dist/tui/index.js.map +1 -0
- package/dist/tui/screens/BaseScreen.d.ts +62 -0
- package/dist/tui/screens/BaseScreen.d.ts.map +1 -0
- package/dist/tui/screens/BaseScreen.js +55 -0
- package/dist/tui/screens/BaseScreen.js.map +1 -0
- package/dist/tui/screens/CombatScreen.d.ts +43 -0
- package/dist/tui/screens/CombatScreen.d.ts.map +1 -0
- package/dist/tui/screens/CombatScreen.js +125 -0
- package/dist/tui/screens/CombatScreen.js.map +1 -0
- package/dist/tui/screens/DialogScreen.d.ts +53 -0
- package/dist/tui/screens/DialogScreen.d.ts.map +1 -0
- package/dist/tui/screens/DialogScreen.js +90 -0
- package/dist/tui/screens/DialogScreen.js.map +1 -0
- package/dist/tui/screens/DungeonScreen.d.ts +80 -0
- package/dist/tui/screens/DungeonScreen.d.ts.map +1 -0
- package/dist/tui/screens/DungeonScreen.js +317 -0
- package/dist/tui/screens/DungeonScreen.js.map +1 -0
- package/dist/tui/screens/ExploreScreen.d.ts +69 -0
- package/dist/tui/screens/ExploreScreen.d.ts.map +1 -0
- package/dist/tui/screens/ExploreScreen.js +224 -0
- package/dist/tui/screens/ExploreScreen.js.map +1 -0
- package/dist/tui/screens/SectionScreen.d.ts +84 -0
- package/dist/tui/screens/SectionScreen.d.ts.map +1 -0
- package/dist/tui/screens/SectionScreen.js +156 -0
- package/dist/tui/screens/SectionScreen.js.map +1 -0
- package/dist/tui/screens/TitleScreen.d.ts +40 -0
- package/dist/tui/screens/TitleScreen.d.ts.map +1 -0
- package/dist/tui/screens/TitleScreen.js +253 -0
- package/dist/tui/screens/TitleScreen.js.map +1 -0
- package/dist/tui/screens/TownScreen.d.ts +98 -0
- package/dist/tui/screens/TownScreen.d.ts.map +1 -0
- package/dist/tui/screens/TownScreen.js +370 -0
- package/dist/tui/screens/TownScreen.js.map +1 -0
- package/dist/tui/screens/TravelScreen.d.ts +67 -0
- package/dist/tui/screens/TravelScreen.d.ts.map +1 -0
- package/dist/tui/screens/TravelScreen.js +286 -0
- package/dist/tui/screens/TravelScreen.js.map +1 -0
- package/dist/tui/screens/index.d.ts +8 -0
- package/dist/tui/screens/index.d.ts.map +1 -0
- package/dist/tui/screens/index.js +17 -0
- package/dist/tui/screens/index.js.map +1 -0
- package/dist/tui/sections/ActionsSection.d.ts +71 -0
- package/dist/tui/sections/ActionsSection.d.ts.map +1 -0
- package/dist/tui/sections/ActionsSection.js +184 -0
- package/dist/tui/sections/ActionsSection.js.map +1 -0
- package/dist/tui/sections/DungeonSection.d.ts +65 -0
- package/dist/tui/sections/DungeonSection.d.ts.map +1 -0
- package/dist/tui/sections/DungeonSection.js +144 -0
- package/dist/tui/sections/DungeonSection.js.map +1 -0
- package/dist/tui/sections/EventsSection.d.ts +50 -0
- package/dist/tui/sections/EventsSection.d.ts.map +1 -0
- package/dist/tui/sections/EventsSection.js +134 -0
- package/dist/tui/sections/EventsSection.js.map +1 -0
- package/dist/tui/sections/MapSection.d.ts +66 -0
- package/dist/tui/sections/MapSection.d.ts.map +1 -0
- package/dist/tui/sections/MapSection.js +669 -0
- package/dist/tui/sections/MapSection.js.map +1 -0
- package/dist/tui/sections/StatusSection.d.ts +47 -0
- package/dist/tui/sections/StatusSection.d.ts.map +1 -0
- package/dist/tui/sections/StatusSection.js +133 -0
- package/dist/tui/sections/StatusSection.js.map +1 -0
- package/dist/tui/sections/TeamSection.d.ts +71 -0
- package/dist/tui/sections/TeamSection.d.ts.map +1 -0
- package/dist/tui/sections/TeamSection.js +224 -0
- package/dist/tui/sections/TeamSection.js.map +1 -0
- package/dist/tui/sections/TravelingSection.d.ts +51 -0
- package/dist/tui/sections/TravelingSection.d.ts.map +1 -0
- package/dist/tui/sections/TravelingSection.js +106 -0
- package/dist/tui/sections/TravelingSection.js.map +1 -0
- package/dist/tui/sections/index.d.ts +9 -0
- package/dist/tui/sections/index.d.ts.map +1 -0
- package/dist/tui/sections/index.js +12 -0
- package/dist/tui/sections/index.js.map +1 -0
- package/dist/ui/Terminal.d.ts +68 -0
- package/dist/ui/Terminal.d.ts.map +1 -0
- package/dist/ui/Terminal.js +297 -0
- package/dist/ui/Terminal.js.map +1 -0
- package/dist/ui/index.d.ts +5 -0
- package/dist/ui/index.d.ts.map +1 -0
- package/dist/ui/index.js +8 -0
- package/dist/ui/index.js.map +1 -0
- package/dist/utils/configMigration.d.ts +14 -0
- package/dist/utils/configMigration.d.ts.map +1 -0
- package/dist/utils/configMigration.js +92 -0
- package/dist/utils/configMigration.js.map +1 -0
- package/dist/utils/errorHandler.d.ts +86 -0
- package/dist/utils/errorHandler.d.ts.map +1 -0
- package/dist/utils/errorHandler.js +224 -0
- package/dist/utils/errorHandler.js.map +1 -0
- package/dist/utils/logger.d.ts +14 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +43 -0
- package/dist/utils/logger.js.map +1 -0
- package/dist/weapon/WeaponFactory.d.ts +32 -0
- package/dist/weapon/WeaponFactory.d.ts.map +1 -0
- package/dist/weapon/WeaponFactory.js +216 -0
- package/dist/weapon/WeaponFactory.js.map +1 -0
- package/dist/weapon/index.d.ts +5 -0
- package/dist/weapon/index.d.ts.map +1 -0
- package/dist/weapon/index.js +8 -0
- package/dist/weapon/index.js.map +1 -0
- package/package.json +46 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ActionsSection.js","sources":["tui/sections/ActionsSection.ts"],"sourceRoot":"/","sourcesContent":["/**\r\n * Actions Section - NPC list and quick actions menu\r\n */\r\n\r\nimport { BaseSection, type BaseSectionConfig } from '../core/BaseSection.js';\r\nimport type { RenderContext } from '../core/Component.js';\r\nimport type { KeyEvent } from '../Input.js';\r\nimport { ANSI } from '../Screen.js';\r\nimport type { ExtendedNPC } from '../../npc/types.js';\r\nimport type { Quest } from '../../quest/types.js';\r\n\r\n/**\r\n * Action item types\r\n */\r\nexport interface ActionItem {\r\n type: 'npc' | 'action';\r\n id: string;\r\n label: string;\r\n}\r\n\r\n/**\r\n * Actions section data\r\n */\r\nexport interface ActionsData {\r\n npcs: ExtendedNPC[];\r\n quests: Quest[];\r\n}\r\n\r\n/**\r\n * Actions Section - Shows NPCs and quick actions\r\n */\r\nexport class ActionsSection extends BaseSection {\r\n private npcs: ExtendedNPC[] = [];\r\n private quests: Quest[] = [];\r\n private items: ActionItem[] = [];\r\n\r\n // Callbacks for actions\r\n private onNpcSelect?: (npcIndex: number) => void;\r\n private onOpenModal?: (modal: 'inventory' | 'character' | 'quests' | 'workshop') => void;\r\n\r\n constructor() {\r\n const config: BaseSectionConfig = {\r\n id: 'actions',\r\n title: 'Actions',\r\n canEnter: true,\r\n hints: {\r\n focused: 'Enter: enter',\r\n entered: 'Up/Down: select Enter: confirm Esc: exit',\r\n },\r\n };\r\n super(config);\r\n }\r\n\r\n /**\r\n * Set callback for NPC selection\r\n */\r\n setOnNpcSelect(callback: (npcIndex: number) => void): void {\r\n this.onNpcSelect = callback;\r\n }\r\n\r\n /**\r\n * Set callback for opening modals\r\n */\r\n setOnOpenModal(callback: (modal: 'inventory' | 'character' | 'quests' | 'workshop') => void): void {\r\n this.onOpenModal = callback;\r\n }\r\n\r\n /**\r\n * Update section data\r\n */\r\n update(data: ActionsData): void {\r\n this.npcs = data.npcs;\r\n this.quests = data.quests;\r\n this.buildItems();\r\n }\r\n\r\n /**\r\n * Build the items list\r\n */\r\n private buildItems(): void {\r\n this.items = [];\r\n\r\n // Add NPCs\r\n for (let i = 0; i < this.npcs.length; i++) {\r\n const npc = this.npcs[i];\r\n this.items.push({\r\n type: 'npc',\r\n id: `npc_${i}`,\r\n label: npc.name,\r\n });\r\n }\r\n\r\n // Add quick actions\r\n const quickActions = [\r\n { id: 'inventory', label: '[I] Inventory' },\r\n { id: 'character', label: '[C] Character' },\r\n { id: 'quests', label: `[Q] Quests (${this.quests.length})` },\r\n { id: 'workshop', label: '[W] Workshop' },\r\n ];\r\n\r\n for (const action of quickActions) {\r\n this.items.push({\r\n type: 'action',\r\n id: action.id,\r\n label: action.label,\r\n });\r\n }\r\n }\r\n\r\n /**\r\n * Render actions content\r\n */\r\n protected renderContent(ctx: RenderContext): void {\r\n const { screen, bounds } = ctx;\r\n const { x, y, width, height } = bounds;\r\n\r\n let lineY = y + 1;\r\n const maxItems = height - 3;\r\n let itemIndex = 0;\r\n\r\n // NPCs section\r\n if (this.npcs.length > 0 && lineY < y + maxItems) {\r\n screen.write(x + 2, lineY, '* NPCs', ANSI.fg.cyan, undefined, ANSI.bold);\r\n lineY++;\r\n\r\n for (let i = 0; i < Math.min(this.npcs.length, 4); i++) {\r\n if (lineY >= y + maxItems) break;\r\n const npc = this.npcs[i];\r\n const rel = npc.playerRelationship > 0 ? '+' : npc.playerRelationship < 0 ? '-' : '';\r\n const label = `${npc.name} ${rel}`;\r\n\r\n this.renderActionItem(ctx, itemIndex, label, lineY);\r\n lineY++;\r\n itemIndex++;\r\n }\r\n lineY++;\r\n }\r\n\r\n // Quick actions section (no header, directly show actions)\r\n if (lineY < y + height - 2) {\r\n // Start from where NPCs left off\r\n const actionsStartIndex = this.npcs.length;\r\n for (let i = actionsStartIndex; i < this.items.length; i++) {\r\n if (lineY >= y + height - 2) break;\r\n const item = this.items[i];\r\n this.renderActionItem(ctx, i, item.label, lineY);\r\n lineY++;\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Render a single action item\r\n */\r\n private renderActionItem(ctx: RenderContext, index: number, label: string, lineY: number): void {\r\n const { screen, bounds } = ctx;\r\n const { x, width } = bounds;\r\n\r\n const isSelected = this.state.entered && this.state.selectedIndex === index;\r\n const fg = isSelected ? ANSI.fg.black : ANSI.fg.white;\r\n const bg = isSelected ? ANSI.bg.cyan : undefined;\r\n const indicator = isSelected ? '>' : ' ';\r\n\r\n screen.write(x + 1, lineY, indicator, ANSI.fg.yellow);\r\n screen.write(x + 3, lineY, label.slice(0, width - 5).padEnd(width - 5), fg, bg);\r\n }\r\n\r\n /**\r\n * Get number of items\r\n */\r\n getItemCount(): number {\r\n return this.items.length;\r\n }\r\n\r\n /**\r\n * Activate selected item\r\n */\r\n activateItem(): boolean {\r\n const item = this.items[this.state.selectedIndex];\r\n if (!item) return false;\r\n\r\n if (item.type === 'npc') {\r\n const npcIndex = parseInt(item.id.replace('npc_', ''), 10);\r\n this.onNpcSelect?.(npcIndex);\r\n return true;\r\n }\r\n\r\n if (item.type === 'action') {\r\n const modalActions: Record<string, 'inventory' | 'character' | 'quests' | 'workshop'> = {\r\n 'inventory': 'inventory',\r\n 'character': 'character',\r\n 'quests': 'quests',\r\n 'workshop': 'workshop',\r\n };\r\n if (modalActions[item.id]) {\r\n this.onOpenModal?.(modalActions[item.id]);\r\n return true;\r\n }\r\n }\r\n\r\n return false;\r\n }\r\n\r\n /**\r\n * Handle custom keys (shortcuts)\r\n */\r\n protected handleCustomKey(key: KeyEvent): boolean {\r\n // Quick shortcuts for actions\r\n if (key.raw) {\r\n const shortcuts: Record<string, 'inventory' | 'character' | 'quests' | 'workshop'> = {\r\n 'i': 'inventory',\r\n 'c': 'character',\r\n 'q': 'quests',\r\n 'w': 'workshop',\r\n };\r\n const modal = shortcuts[key.raw.toLowerCase()];\r\n if (modal) {\r\n this.onOpenModal?.(modal);\r\n return true;\r\n }\r\n }\r\n return false;\r\n }\r\n}\r\n"],"names":[],"mappings":"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","debug_id":"704eb02d-f3de-515d-9383-9594e4393a38"}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Dungeon Section - Shows dungeon progress and ETA during dungeon exploration
|
|
3
|
+
*/
|
|
4
|
+
import { BaseSection } from '../core/BaseSection.js';
|
|
5
|
+
import type { RenderContext } from '../core/Component.js';
|
|
6
|
+
import type { KeyEvent } from '../Input.js';
|
|
7
|
+
/**
|
|
8
|
+
* Dungeon progress data
|
|
9
|
+
*/
|
|
10
|
+
export interface DungeonData {
|
|
11
|
+
dungeonName: string;
|
|
12
|
+
currentFloor: number;
|
|
13
|
+
totalFloors: number;
|
|
14
|
+
roomsExplored: number;
|
|
15
|
+
totalRooms: number;
|
|
16
|
+
enemiesDefeated: number;
|
|
17
|
+
totalEnemies: number;
|
|
18
|
+
treasuresFound: number;
|
|
19
|
+
currentRoomType: string;
|
|
20
|
+
playerHp: number;
|
|
21
|
+
playerMaxHp: number;
|
|
22
|
+
estimatedTimeRemaining: number;
|
|
23
|
+
elapsedTime: number;
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Dungeon Section - Shows dungeon exploration progress
|
|
27
|
+
*/
|
|
28
|
+
export declare class DungeonSection extends BaseSection {
|
|
29
|
+
private data;
|
|
30
|
+
private onAbort?;
|
|
31
|
+
constructor();
|
|
32
|
+
/**
|
|
33
|
+
* Set callback for abort dungeon
|
|
34
|
+
*/
|
|
35
|
+
setOnAbort(callback: () => void): void;
|
|
36
|
+
/**
|
|
37
|
+
* Update dungeon data
|
|
38
|
+
*/
|
|
39
|
+
update(data: DungeonData): void;
|
|
40
|
+
/**
|
|
41
|
+
* Render dungeon content
|
|
42
|
+
*/
|
|
43
|
+
protected renderContent(ctx: RenderContext): void;
|
|
44
|
+
/**
|
|
45
|
+
* Get icon for room type
|
|
46
|
+
*/
|
|
47
|
+
private getRoomIcon;
|
|
48
|
+
/**
|
|
49
|
+
* Format time in seconds to mm:ss
|
|
50
|
+
*/
|
|
51
|
+
private formatTime;
|
|
52
|
+
/**
|
|
53
|
+
* Get item count (none)
|
|
54
|
+
*/
|
|
55
|
+
getItemCount(): number;
|
|
56
|
+
/**
|
|
57
|
+
* Activate item (no-op)
|
|
58
|
+
*/
|
|
59
|
+
activateItem(): boolean;
|
|
60
|
+
/**
|
|
61
|
+
* Handle custom keys - 'q' to abort dungeon
|
|
62
|
+
*/
|
|
63
|
+
protected handleCustomKey(key: KeyEvent): boolean;
|
|
64
|
+
}
|
|
65
|
+
//# sourceMappingURL=DungeonSection.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DungeonSection.d.ts","sourceRoot":"/","sources":["tui/sections/DungeonSection.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,WAAW,EAA0B,MAAM,wBAAwB,CAAC;AAC7E,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAG5C;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,MAAM,CAAC;IACtB,UAAU,EAAE,MAAM,CAAC;IACnB,eAAe,EAAE,MAAM,CAAC;IACxB,YAAY,EAAE,MAAM,CAAC;IACrB,cAAc,EAAE,MAAM,CAAC;IACvB,eAAe,EAAE,MAAM,CAAC;IACxB,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,sBAAsB,EAAE,MAAM,CAAC;IAC/B,WAAW,EAAE,MAAM,CAAC;CACrB;AAED;;GAEG;AACH,qBAAa,cAAe,SAAQ,WAAW;IAC7C,OAAO,CAAC,IAAI,CAA4B;IACxC,OAAO,CAAC,OAAO,CAAC,CAAa;;IAgB7B;;OAEG;IACH,UAAU,CAAC,QAAQ,EAAE,MAAM,IAAI,GAAG,IAAI;IAItC;;OAEG;IACH,MAAM,CAAC,IAAI,EAAE,WAAW,GAAG,IAAI;IAI/B;;OAEG;IACH,SAAS,CAAC,aAAa,CAAC,GAAG,EAAE,aAAa,GAAG,IAAI;IAmEjD;;OAEG;IACH,OAAO,CAAC,WAAW;IAanB;;OAEG;IACH,OAAO,CAAC,UAAU;IAMlB;;OAEG;IACH,YAAY,IAAI,MAAM;IAItB;;OAEG;IACH,YAAY,IAAI,OAAO;IAIvB;;OAEG;IACH,SAAS,CAAC,eAAe,CAAC,GAAG,EAAE,QAAQ,GAAG,OAAO;CAOlD"}
|
|
@@ -0,0 +1,144 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Dungeon Section - Shows dungeon progress and ETA during dungeon exploration
|
|
3
|
+
*/
|
|
4
|
+
|
|
5
|
+
!function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="f459b9be-c625-54e5-9e64-a026ad4943f7")}catch(e){}}();
|
|
6
|
+
import { BaseSection } from '../core/BaseSection.js';
|
|
7
|
+
import { ANSI } from '../Screen.js';
|
|
8
|
+
/**
|
|
9
|
+
* Dungeon Section - Shows dungeon exploration progress
|
|
10
|
+
*/
|
|
11
|
+
export class DungeonSection extends BaseSection {
|
|
12
|
+
data = null;
|
|
13
|
+
onAbort;
|
|
14
|
+
constructor() {
|
|
15
|
+
const config = {
|
|
16
|
+
id: 'dungeon',
|
|
17
|
+
title: 'Dungeon',
|
|
18
|
+
canEnter: true,
|
|
19
|
+
hints: {
|
|
20
|
+
focused: 'Enter: enter section',
|
|
21
|
+
entered: '[Q] Abort dungeon [Esc] Exit section',
|
|
22
|
+
unfocused: '',
|
|
23
|
+
},
|
|
24
|
+
};
|
|
25
|
+
super(config);
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Set callback for abort dungeon
|
|
29
|
+
*/
|
|
30
|
+
setOnAbort(callback) {
|
|
31
|
+
this.onAbort = callback;
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Update dungeon data
|
|
35
|
+
*/
|
|
36
|
+
update(data) {
|
|
37
|
+
this.data = data;
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Render dungeon content
|
|
41
|
+
*/
|
|
42
|
+
renderContent(ctx) {
|
|
43
|
+
if (!this.data)
|
|
44
|
+
return;
|
|
45
|
+
const { screen, bounds } = ctx;
|
|
46
|
+
const { x, y, width, height } = bounds;
|
|
47
|
+
let lineY = y + 2;
|
|
48
|
+
// Dungeon name
|
|
49
|
+
const nameText = this.data.dungeonName.slice(0, width - 4);
|
|
50
|
+
screen.write(x + 2, lineY++, nameText, ANSI.fg.cyan, undefined, ANSI.bold);
|
|
51
|
+
lineY++;
|
|
52
|
+
// Floor progress
|
|
53
|
+
const floorText = `Floor: ${this.data.currentFloor}/${this.data.totalFloors}`;
|
|
54
|
+
screen.write(x + 2, lineY++, floorText, ANSI.fg.yellow);
|
|
55
|
+
// Room progress bar
|
|
56
|
+
const roomProgress = this.data.totalRooms > 0
|
|
57
|
+
? this.data.roomsExplored / this.data.totalRooms
|
|
58
|
+
: 0;
|
|
59
|
+
const barWidth = Math.min(width - 6, 16);
|
|
60
|
+
screen.write(x + 2, lineY++, 'Rooms:', ANSI.fg.gray);
|
|
61
|
+
screen.drawProgressBar(x + 2, lineY++, barWidth, roomProgress, 1, ANSI.fg.green);
|
|
62
|
+
const roomPct = Math.floor(roomProgress * 100);
|
|
63
|
+
screen.write(x + 2 + barWidth + 1, lineY - 1, `${roomPct}%`, ANSI.fg.green);
|
|
64
|
+
lineY++;
|
|
65
|
+
// Current room type
|
|
66
|
+
const roomIcon = this.getRoomIcon(this.data.currentRoomType);
|
|
67
|
+
screen.write(x + 2, lineY++, `Room: ${roomIcon} ${this.data.currentRoomType}`, ANSI.fg.white);
|
|
68
|
+
lineY++;
|
|
69
|
+
// Stats
|
|
70
|
+
screen.write(x + 2, lineY++, '--- Progress ---', ANSI.fg.cyan);
|
|
71
|
+
screen.write(x + 2, lineY++, `Enemies: ${this.data.enemiesDefeated}/${this.data.totalEnemies}`, ANSI.fg.red);
|
|
72
|
+
screen.write(x + 2, lineY++, `Treasure: ${this.data.treasuresFound}`, ANSI.fg.yellow);
|
|
73
|
+
lineY++;
|
|
74
|
+
// Time
|
|
75
|
+
screen.write(x + 2, lineY++, '--- Time ---', ANSI.fg.cyan);
|
|
76
|
+
const elapsed = this.formatTime(this.data.elapsedTime);
|
|
77
|
+
screen.write(x + 2, lineY++, `Elapsed: ${elapsed}`, ANSI.fg.gray);
|
|
78
|
+
// ETA
|
|
79
|
+
if (this.data.estimatedTimeRemaining > 0) {
|
|
80
|
+
const eta = this.formatTime(this.data.estimatedTimeRemaining);
|
|
81
|
+
screen.write(x + 2, lineY++, `ETA: ~${eta}`, ANSI.fg.yellow);
|
|
82
|
+
}
|
|
83
|
+
else {
|
|
84
|
+
screen.write(x + 2, lineY++, 'ETA: calculating...', ANSI.fg.gray);
|
|
85
|
+
}
|
|
86
|
+
// HP bar at bottom
|
|
87
|
+
if (lineY < y + height - 3) {
|
|
88
|
+
lineY = y + height - 4;
|
|
89
|
+
const hpPct = this.data.playerMaxHp > 0
|
|
90
|
+
? this.data.playerHp / this.data.playerMaxHp
|
|
91
|
+
: 0;
|
|
92
|
+
const hpColor = hpPct > 0.5 ? ANSI.fg.green : hpPct > 0.25 ? ANSI.fg.yellow : ANSI.fg.red;
|
|
93
|
+
screen.write(x + 2, lineY++, 'HP:', ANSI.fg.gray);
|
|
94
|
+
screen.drawProgressBar(x + 2, lineY, barWidth, hpPct, 1, hpColor);
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
* Get icon for room type
|
|
99
|
+
*/
|
|
100
|
+
getRoomIcon(roomType) {
|
|
101
|
+
const icons = {
|
|
102
|
+
'combat': '!',
|
|
103
|
+
'treasure': '$',
|
|
104
|
+
'rest': 'R',
|
|
105
|
+
'event': '?',
|
|
106
|
+
'dungeon_entrance': '>',
|
|
107
|
+
'shop': 'S',
|
|
108
|
+
'empty': '.',
|
|
109
|
+
};
|
|
110
|
+
return icons[roomType] || '?';
|
|
111
|
+
}
|
|
112
|
+
/**
|
|
113
|
+
* Format time in seconds to mm:ss
|
|
114
|
+
*/
|
|
115
|
+
formatTime(seconds) {
|
|
116
|
+
const mins = Math.floor(seconds / 60);
|
|
117
|
+
const secs = Math.floor(seconds % 60);
|
|
118
|
+
return `${mins}:${secs.toString().padStart(2, '0')}`;
|
|
119
|
+
}
|
|
120
|
+
/**
|
|
121
|
+
* Get item count (none)
|
|
122
|
+
*/
|
|
123
|
+
getItemCount() {
|
|
124
|
+
return 0;
|
|
125
|
+
}
|
|
126
|
+
/**
|
|
127
|
+
* Activate item (no-op)
|
|
128
|
+
*/
|
|
129
|
+
activateItem() {
|
|
130
|
+
return false;
|
|
131
|
+
}
|
|
132
|
+
/**
|
|
133
|
+
* Handle custom keys - 'q' to abort dungeon
|
|
134
|
+
*/
|
|
135
|
+
handleCustomKey(key) {
|
|
136
|
+
if (this.state.entered && key.raw?.toLowerCase() === 'q') {
|
|
137
|
+
this.onAbort?.();
|
|
138
|
+
return true;
|
|
139
|
+
}
|
|
140
|
+
return false;
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
//# sourceMappingURL=DungeonSection.js.map
|
|
144
|
+
//# debugId=f459b9be-c625-54e5-9e64-a026ad4943f7
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DungeonSection.js","sources":["tui/sections/DungeonSection.ts"],"sourceRoot":"/","sourcesContent":["/**\r\n * Dungeon Section - Shows dungeon progress and ETA during dungeon exploration\r\n */\r\n\r\nimport { BaseSection, type BaseSectionConfig } from '../core/BaseSection.js';\r\nimport type { RenderContext } from '../core/Component.js';\r\nimport type { KeyEvent } from '../Input.js';\r\nimport { ANSI } from '../Screen.js';\r\n\r\n/**\r\n * Dungeon progress data\r\n */\r\nexport interface DungeonData {\r\n dungeonName: string;\r\n currentFloor: number;\r\n totalFloors: number;\r\n roomsExplored: number;\r\n totalRooms: number;\r\n enemiesDefeated: number;\r\n totalEnemies: number;\r\n treasuresFound: number;\r\n currentRoomType: string;\r\n playerHp: number;\r\n playerMaxHp: number;\r\n estimatedTimeRemaining: number; // seconds\r\n elapsedTime: number; // seconds\r\n}\r\n\r\n/**\r\n * Dungeon Section - Shows dungeon exploration progress\r\n */\r\nexport class DungeonSection extends BaseSection {\r\n private data: DungeonData | null = null;\r\n private onAbort?: () => void;\r\n\r\n constructor() {\r\n const config: BaseSectionConfig = {\r\n id: 'dungeon',\r\n title: 'Dungeon',\r\n canEnter: true,\r\n hints: {\r\n focused: 'Enter: enter section',\r\n entered: '[Q] Abort dungeon [Esc] Exit section',\r\n unfocused: '',\r\n },\r\n };\r\n super(config);\r\n }\r\n\r\n /**\r\n * Set callback for abort dungeon\r\n */\r\n setOnAbort(callback: () => void): void {\r\n this.onAbort = callback;\r\n }\r\n\r\n /**\r\n * Update dungeon data\r\n */\r\n update(data: DungeonData): void {\r\n this.data = data;\r\n }\r\n\r\n /**\r\n * Render dungeon content\r\n */\r\n protected renderContent(ctx: RenderContext): void {\r\n if (!this.data) return;\r\n\r\n const { screen, bounds } = ctx;\r\n const { x, y, width, height } = bounds;\r\n\r\n let lineY = y + 2;\r\n\r\n // Dungeon name\r\n const nameText = this.data.dungeonName.slice(0, width - 4);\r\n screen.write(x + 2, lineY++, nameText, ANSI.fg.cyan, undefined, ANSI.bold);\r\n lineY++;\r\n\r\n // Floor progress\r\n const floorText = `Floor: ${this.data.currentFloor}/${this.data.totalFloors}`;\r\n screen.write(x + 2, lineY++, floorText, ANSI.fg.yellow);\r\n\r\n // Room progress bar\r\n const roomProgress = this.data.totalRooms > 0\r\n ? this.data.roomsExplored / this.data.totalRooms\r\n : 0;\r\n const barWidth = Math.min(width - 6, 16);\r\n screen.write(x + 2, lineY++, 'Rooms:', ANSI.fg.gray);\r\n screen.drawProgressBar(x + 2, lineY++, barWidth, roomProgress, 1, ANSI.fg.green);\r\n const roomPct = Math.floor(roomProgress * 100);\r\n screen.write(x + 2 + barWidth + 1, lineY - 1, `${roomPct}%`, ANSI.fg.green);\r\n\r\n lineY++;\r\n\r\n // Current room type\r\n const roomIcon = this.getRoomIcon(this.data.currentRoomType);\r\n screen.write(x + 2, lineY++, `Room: ${roomIcon} ${this.data.currentRoomType}`, ANSI.fg.white);\r\n\r\n lineY++;\r\n\r\n // Stats\r\n screen.write(x + 2, lineY++, '--- Progress ---', ANSI.fg.cyan);\r\n screen.write(x + 2, lineY++, `Enemies: ${this.data.enemiesDefeated}/${this.data.totalEnemies}`, ANSI.fg.red);\r\n screen.write(x + 2, lineY++, `Treasure: ${this.data.treasuresFound}`, ANSI.fg.yellow);\r\n\r\n lineY++;\r\n\r\n // Time\r\n screen.write(x + 2, lineY++, '--- Time ---', ANSI.fg.cyan);\r\n const elapsed = this.formatTime(this.data.elapsedTime);\r\n screen.write(x + 2, lineY++, `Elapsed: ${elapsed}`, ANSI.fg.gray);\r\n\r\n // ETA\r\n if (this.data.estimatedTimeRemaining > 0) {\r\n const eta = this.formatTime(this.data.estimatedTimeRemaining);\r\n screen.write(x + 2, lineY++, `ETA: ~${eta}`, ANSI.fg.yellow);\r\n } else {\r\n screen.write(x + 2, lineY++, 'ETA: calculating...', ANSI.fg.gray);\r\n }\r\n\r\n // HP bar at bottom\r\n if (lineY < y + height - 3) {\r\n lineY = y + height - 4;\r\n const hpPct = this.data.playerMaxHp > 0\r\n ? this.data.playerHp / this.data.playerMaxHp\r\n : 0;\r\n const hpColor = hpPct > 0.5 ? ANSI.fg.green : hpPct > 0.25 ? ANSI.fg.yellow : ANSI.fg.red;\r\n screen.write(x + 2, lineY++, 'HP:', ANSI.fg.gray);\r\n screen.drawProgressBar(x + 2, lineY, barWidth, hpPct, 1, hpColor);\r\n }\r\n }\r\n\r\n /**\r\n * Get icon for room type\r\n */\r\n private getRoomIcon(roomType: string): string {\r\n const icons: Record<string, string> = {\r\n 'combat': '!',\r\n 'treasure': '$',\r\n 'rest': 'R',\r\n 'event': '?',\r\n 'dungeon_entrance': '>',\r\n 'shop': 'S',\r\n 'empty': '.',\r\n };\r\n return icons[roomType] || '?';\r\n }\r\n\r\n /**\r\n * Format time in seconds to mm:ss\r\n */\r\n private formatTime(seconds: number): string {\r\n const mins = Math.floor(seconds / 60);\r\n const secs = Math.floor(seconds % 60);\r\n return `${mins}:${secs.toString().padStart(2, '0')}`;\r\n }\r\n\r\n /**\r\n * Get item count (none)\r\n */\r\n getItemCount(): number {\r\n return 0;\r\n }\r\n\r\n /**\r\n * Activate item (no-op)\r\n */\r\n activateItem(): boolean {\r\n return false;\r\n }\r\n\r\n /**\r\n * Handle custom keys - 'q' to abort dungeon\r\n */\r\n protected handleCustomKey(key: KeyEvent): boolean {\r\n if (this.state.entered && key.raw?.toLowerCase() === 'q') {\r\n this.onAbort?.();\r\n return true;\r\n }\r\n return false;\r\n }\r\n}\r\n"],"names":[],"mappings":"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","debug_id":"f459b9be-c625-54e5-9e64-a026ad4943f7"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Events Section - Displays scrollable event log
|
|
3
|
+
*/
|
|
4
|
+
import { BaseSection } from '../core/BaseSection.js';
|
|
5
|
+
import type { RenderContext } from '../core/Component.js';
|
|
6
|
+
/**
|
|
7
|
+
* Events Section - Shows game event log with scrolling
|
|
8
|
+
*/
|
|
9
|
+
export declare class EventsSection extends BaseSection {
|
|
10
|
+
private events;
|
|
11
|
+
private maxEvents;
|
|
12
|
+
constructor();
|
|
13
|
+
/**
|
|
14
|
+
* Update events list
|
|
15
|
+
*/
|
|
16
|
+
update(events: string[]): void;
|
|
17
|
+
/**
|
|
18
|
+
* Add a single event
|
|
19
|
+
*/
|
|
20
|
+
addEvent(message: string): void;
|
|
21
|
+
/**
|
|
22
|
+
* Get all events
|
|
23
|
+
*/
|
|
24
|
+
getEvents(): string[];
|
|
25
|
+
/**
|
|
26
|
+
* Clear all events
|
|
27
|
+
*/
|
|
28
|
+
clearEvents(): void;
|
|
29
|
+
/**
|
|
30
|
+
* Scroll to the bottom of the log
|
|
31
|
+
*/
|
|
32
|
+
private scrollToBottom;
|
|
33
|
+
/**
|
|
34
|
+
* Render events content
|
|
35
|
+
*/
|
|
36
|
+
protected renderContent(ctx: RenderContext): void;
|
|
37
|
+
/**
|
|
38
|
+
* Get number of events
|
|
39
|
+
*/
|
|
40
|
+
getItemCount(): number;
|
|
41
|
+
/**
|
|
42
|
+
* Events are read-only, activation does nothing
|
|
43
|
+
*/
|
|
44
|
+
activateItem(): boolean;
|
|
45
|
+
/**
|
|
46
|
+
* Override max visible items for events
|
|
47
|
+
*/
|
|
48
|
+
protected getMaxVisibleItems(): number;
|
|
49
|
+
}
|
|
50
|
+
//# sourceMappingURL=EventsSection.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"EventsSection.d.ts","sourceRoot":"/","sources":["tui/sections/EventsSection.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,WAAW,EAA0B,MAAM,wBAAwB,CAAC;AAC7E,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAG1D;;GAEG;AACH,qBAAa,aAAc,SAAQ,WAAW;IAC5C,OAAO,CAAC,MAAM,CAAgB;IAC9B,OAAO,CAAC,SAAS,CAAe;;IAehC;;OAEG;IACH,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,IAAI;IAQ9B;;OAEG;IACH,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAW/B;;OAEG;IACH,SAAS,IAAI,MAAM,EAAE;IAIrB;;OAEG;IACH,WAAW,IAAI,IAAI;IAMnB;;OAEG;IACH,OAAO,CAAC,cAAc;IAMtB;;OAEG;IACH,SAAS,CAAC,aAAa,CAAC,GAAG,EAAE,aAAa,GAAG,IAAI;IAkDjD;;OAEG;IACH,YAAY,IAAI,MAAM;IAItB;;OAEG;IACH,YAAY,IAAI,OAAO;IAIvB;;OAEG;IACH,SAAS,CAAC,kBAAkB,IAAI,MAAM;CAGvC"}
|
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Events Section - Displays scrollable event log
|
|
3
|
+
*/
|
|
4
|
+
|
|
5
|
+
!function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="e42bacaf-b18f-5e50-8e5a-df8e54f139be")}catch(e){}}();
|
|
6
|
+
import { BaseSection } from '../core/BaseSection.js';
|
|
7
|
+
import { ANSI } from '../Screen.js';
|
|
8
|
+
/**
|
|
9
|
+
* Events Section - Shows game event log with scrolling
|
|
10
|
+
*/
|
|
11
|
+
export class EventsSection extends BaseSection {
|
|
12
|
+
events = [];
|
|
13
|
+
maxEvents = 100;
|
|
14
|
+
constructor() {
|
|
15
|
+
const config = {
|
|
16
|
+
id: 'events',
|
|
17
|
+
title: 'Events',
|
|
18
|
+
canEnter: true,
|
|
19
|
+
hints: {
|
|
20
|
+
focused: 'Enter: scroll',
|
|
21
|
+
entered: 'Up/Down: scroll Esc: exit',
|
|
22
|
+
},
|
|
23
|
+
};
|
|
24
|
+
super(config);
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Update events list
|
|
28
|
+
*/
|
|
29
|
+
update(events) {
|
|
30
|
+
this.events = events;
|
|
31
|
+
// Auto-scroll to bottom when new events arrive (if not entered)
|
|
32
|
+
if (!this.state.entered) {
|
|
33
|
+
this.scrollToBottom();
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Add a single event
|
|
38
|
+
*/
|
|
39
|
+
addEvent(message) {
|
|
40
|
+
const time = new Date().toLocaleTimeString('en-US', { hour12: false }).slice(0, 5);
|
|
41
|
+
this.events.push(`[${time}] ${message}`);
|
|
42
|
+
if (this.events.length > this.maxEvents) {
|
|
43
|
+
this.events.shift();
|
|
44
|
+
}
|
|
45
|
+
if (!this.state.entered) {
|
|
46
|
+
this.scrollToBottom();
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Get all events
|
|
51
|
+
*/
|
|
52
|
+
getEvents() {
|
|
53
|
+
return this.events;
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Clear all events
|
|
57
|
+
*/
|
|
58
|
+
clearEvents() {
|
|
59
|
+
this.events = [];
|
|
60
|
+
this.state.scrollOffset = 0;
|
|
61
|
+
this.state.selectedIndex = 0;
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Scroll to the bottom of the log
|
|
65
|
+
*/
|
|
66
|
+
scrollToBottom() {
|
|
67
|
+
const maxVisible = this.getMaxVisibleItems();
|
|
68
|
+
this.state.scrollOffset = Math.max(0, this.events.length - maxVisible);
|
|
69
|
+
this.state.selectedIndex = this.events.length - 1;
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Render events content
|
|
73
|
+
*/
|
|
74
|
+
renderContent(ctx) {
|
|
75
|
+
const { screen, bounds } = ctx;
|
|
76
|
+
const { x, y, width, height } = bounds;
|
|
77
|
+
const maxLogLines = height - 2;
|
|
78
|
+
const logStartY = y + 1;
|
|
79
|
+
// Calculate scroll offset
|
|
80
|
+
let scrollOffset;
|
|
81
|
+
if (this.state.entered) {
|
|
82
|
+
scrollOffset = this.state.scrollOffset;
|
|
83
|
+
}
|
|
84
|
+
else {
|
|
85
|
+
// Auto-scroll to bottom when not entered
|
|
86
|
+
scrollOffset = Math.max(0, this.events.length - maxLogLines);
|
|
87
|
+
}
|
|
88
|
+
// Render visible events
|
|
89
|
+
for (let i = 0; i < Math.min(this.events.length, maxLogLines); i++) {
|
|
90
|
+
const logIndex = scrollOffset + i;
|
|
91
|
+
if (logIndex >= this.events.length)
|
|
92
|
+
break;
|
|
93
|
+
const isSelected = this.state.entered && logIndex === this.state.selectedIndex;
|
|
94
|
+
const fg = isSelected ? ANSI.fg.white : ANSI.fg.gray;
|
|
95
|
+
const bg = isSelected ? ANSI.bg.blue : undefined;
|
|
96
|
+
const indicator = isSelected ? '>' : ' ';
|
|
97
|
+
screen.write(x, logStartY + i, indicator, ANSI.fg.yellow);
|
|
98
|
+
screen.write(x + 1, logStartY + i, this.events[logIndex].slice(0, width - 3).padEnd(width - 3), fg, bg);
|
|
99
|
+
}
|
|
100
|
+
// Empty state message
|
|
101
|
+
if (this.events.length === 0) {
|
|
102
|
+
screen.write(x + 2, logStartY + 1, 'No events yet...', ANSI.fg.gray);
|
|
103
|
+
}
|
|
104
|
+
// Scroll indicators
|
|
105
|
+
if (this.events.length > maxLogLines) {
|
|
106
|
+
const canScrollUp = scrollOffset > 0;
|
|
107
|
+
const canScrollDown = scrollOffset + maxLogLines < this.events.length;
|
|
108
|
+
if (canScrollUp)
|
|
109
|
+
screen.write(x + width - 2, y, '^', ANSI.fg.yellow);
|
|
110
|
+
if (canScrollDown)
|
|
111
|
+
screen.write(x + width - 2, y + height - 1, 'v', ANSI.fg.yellow);
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
/**
|
|
115
|
+
* Get number of events
|
|
116
|
+
*/
|
|
117
|
+
getItemCount() {
|
|
118
|
+
return this.events.length;
|
|
119
|
+
}
|
|
120
|
+
/**
|
|
121
|
+
* Events are read-only, activation does nothing
|
|
122
|
+
*/
|
|
123
|
+
activateItem() {
|
|
124
|
+
return false;
|
|
125
|
+
}
|
|
126
|
+
/**
|
|
127
|
+
* Override max visible items for events
|
|
128
|
+
*/
|
|
129
|
+
getMaxVisibleItems() {
|
|
130
|
+
return Math.max(1, this.bounds.height - 2);
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
//# sourceMappingURL=EventsSection.js.map
|
|
134
|
+
//# debugId=e42bacaf-b18f-5e50-8e5a-df8e54f139be
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"EventsSection.js","sources":["tui/sections/EventsSection.ts"],"sourceRoot":"/","sourcesContent":["/**\r\n * Events Section - Displays scrollable event log\r\n */\r\n\r\nimport { BaseSection, type BaseSectionConfig } from '../core/BaseSection.js';\r\nimport type { RenderContext } from '../core/Component.js';\r\nimport { ANSI } from '../Screen.js';\r\n\r\n/**\r\n * Events Section - Shows game event log with scrolling\r\n */\r\nexport class EventsSection extends BaseSection {\r\n private events: string[] = [];\r\n private maxEvents: number = 100;\r\n\r\n constructor() {\r\n const config: BaseSectionConfig = {\r\n id: 'events',\r\n title: 'Events',\r\n canEnter: true,\r\n hints: {\r\n focused: 'Enter: scroll',\r\n entered: 'Up/Down: scroll Esc: exit',\r\n },\r\n };\r\n super(config);\r\n }\r\n\r\n /**\r\n * Update events list\r\n */\r\n update(events: string[]): void {\r\n this.events = events;\r\n // Auto-scroll to bottom when new events arrive (if not entered)\r\n if (!this.state.entered) {\r\n this.scrollToBottom();\r\n }\r\n }\r\n\r\n /**\r\n * Add a single event\r\n */\r\n addEvent(message: string): void {\r\n const time = new Date().toLocaleTimeString('en-US', { hour12: false }).slice(0, 5);\r\n this.events.push(`[${time}] ${message}`);\r\n if (this.events.length > this.maxEvents) {\r\n this.events.shift();\r\n }\r\n if (!this.state.entered) {\r\n this.scrollToBottom();\r\n }\r\n }\r\n\r\n /**\r\n * Get all events\r\n */\r\n getEvents(): string[] {\r\n return this.events;\r\n }\r\n\r\n /**\r\n * Clear all events\r\n */\r\n clearEvents(): void {\r\n this.events = [];\r\n this.state.scrollOffset = 0;\r\n this.state.selectedIndex = 0;\r\n }\r\n\r\n /**\r\n * Scroll to the bottom of the log\r\n */\r\n private scrollToBottom(): void {\r\n const maxVisible = this.getMaxVisibleItems();\r\n this.state.scrollOffset = Math.max(0, this.events.length - maxVisible);\r\n this.state.selectedIndex = this.events.length - 1;\r\n }\r\n\r\n /**\r\n * Render events content\r\n */\r\n protected renderContent(ctx: RenderContext): void {\r\n const { screen, bounds } = ctx;\r\n const { x, y, width, height } = bounds;\r\n\r\n const maxLogLines = height - 2;\r\n const logStartY = y + 1;\r\n\r\n // Calculate scroll offset\r\n let scrollOffset: number;\r\n if (this.state.entered) {\r\n scrollOffset = this.state.scrollOffset;\r\n } else {\r\n // Auto-scroll to bottom when not entered\r\n scrollOffset = Math.max(0, this.events.length - maxLogLines);\r\n }\r\n\r\n // Render visible events\r\n for (let i = 0; i < Math.min(this.events.length, maxLogLines); i++) {\r\n const logIndex = scrollOffset + i;\r\n if (logIndex >= this.events.length) break;\r\n\r\n const isSelected = this.state.entered && logIndex === this.state.selectedIndex;\r\n const fg = isSelected ? ANSI.fg.white : ANSI.fg.gray;\r\n const bg = isSelected ? ANSI.bg.blue : undefined;\r\n const indicator = isSelected ? '>' : ' ';\r\n\r\n screen.write(x, logStartY + i, indicator, ANSI.fg.yellow);\r\n screen.write(\r\n x + 1,\r\n logStartY + i,\r\n this.events[logIndex].slice(0, width - 3).padEnd(width - 3),\r\n fg,\r\n bg\r\n );\r\n }\r\n\r\n // Empty state message\r\n if (this.events.length === 0) {\r\n screen.write(x + 2, logStartY + 1, 'No events yet...', ANSI.fg.gray);\r\n }\r\n\r\n // Scroll indicators\r\n if (this.events.length > maxLogLines) {\r\n const canScrollUp = scrollOffset > 0;\r\n const canScrollDown = scrollOffset + maxLogLines < this.events.length;\r\n if (canScrollUp) screen.write(x + width - 2, y, '^', ANSI.fg.yellow);\r\n if (canScrollDown) screen.write(x + width - 2, y + height - 1, 'v', ANSI.fg.yellow);\r\n }\r\n }\r\n\r\n /**\r\n * Get number of events\r\n */\r\n getItemCount(): number {\r\n return this.events.length;\r\n }\r\n\r\n /**\r\n * Events are read-only, activation does nothing\r\n */\r\n activateItem(): boolean {\r\n return false;\r\n }\r\n\r\n /**\r\n * Override max visible items for events\r\n */\r\n protected getMaxVisibleItems(): number {\r\n return Math.max(1, this.bounds.height - 2);\r\n }\r\n}\r\n"],"names":[],"mappings":"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","debug_id":"e42bacaf-b18f-5e50-8e5a-df8e54f139be"}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Map Section - Visual map with two rendering modes:
|
|
3
|
+
* 1. Dungeon: Tile-based grid (classic roguelike style)
|
|
4
|
+
* 2. Town: Node-link diagram with box-drawing characters
|
|
5
|
+
*/
|
|
6
|
+
import { BaseSection } from '../core/BaseSection.js';
|
|
7
|
+
import type { RenderContext } from '../core/Component.js';
|
|
8
|
+
import type { KeyEvent } from '../Input.js';
|
|
9
|
+
import type { GameState } from '../../core/types.js';
|
|
10
|
+
/**
|
|
11
|
+
* Map Section - Shows current location and connected rooms
|
|
12
|
+
*/
|
|
13
|
+
export declare class MapSection extends BaseSection {
|
|
14
|
+
private state_data;
|
|
15
|
+
private onTravel?;
|
|
16
|
+
private travelState;
|
|
17
|
+
private zoom;
|
|
18
|
+
private centerX;
|
|
19
|
+
private centerY;
|
|
20
|
+
private readonly MIN_ZOOM;
|
|
21
|
+
private readonly MAX_ZOOM;
|
|
22
|
+
private readonly ZOOM_STEP;
|
|
23
|
+
private readonly BASE_PAN_STEP;
|
|
24
|
+
constructor();
|
|
25
|
+
setOnTravel(callback: (roomIndex: number) => void): void;
|
|
26
|
+
update(state: GameState): void;
|
|
27
|
+
/**
|
|
28
|
+
* Set travel state for showing player movement on map
|
|
29
|
+
*/
|
|
30
|
+
setTravelState(state: {
|
|
31
|
+
fromRoomId: string;
|
|
32
|
+
toRoomId: string;
|
|
33
|
+
progress: number;
|
|
34
|
+
} | null): void;
|
|
35
|
+
/**
|
|
36
|
+
* Get map rendering mode from GameMap type
|
|
37
|
+
*/
|
|
38
|
+
private getMapMode;
|
|
39
|
+
protected renderContent(ctx: RenderContext): void;
|
|
40
|
+
private renderDungeonMap;
|
|
41
|
+
private drawCorridor;
|
|
42
|
+
private renderTownMap;
|
|
43
|
+
private drawBoxConnection;
|
|
44
|
+
private calculateRoomBounds;
|
|
45
|
+
private isInBounds;
|
|
46
|
+
private getRoomSymbol;
|
|
47
|
+
getItemCount(): number;
|
|
48
|
+
activateItem(): boolean;
|
|
49
|
+
protected getMaxVisibleItems(): number;
|
|
50
|
+
/**
|
|
51
|
+
* Helper to check if a key matches a character (checks both raw and name)
|
|
52
|
+
*/
|
|
53
|
+
private isKey;
|
|
54
|
+
/**
|
|
55
|
+
* Handle zoom/pan controls - works when focused (not just entered)
|
|
56
|
+
* Pan moves the center in data coordinates (like mapscii)
|
|
57
|
+
*/
|
|
58
|
+
handleZoomPan(key: KeyEvent): boolean;
|
|
59
|
+
protected handleCustomKey(key: KeyEvent): boolean;
|
|
60
|
+
/**
|
|
61
|
+
* Override handleKey to allow zoom/pan when focused OR entered
|
|
62
|
+
*/
|
|
63
|
+
handleKey(key: KeyEvent): boolean;
|
|
64
|
+
resetView(): void;
|
|
65
|
+
}
|
|
66
|
+
//# sourceMappingURL=MapSection.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MapSection.d.ts","sourceRoot":"/","sources":["tui/sections/MapSection.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,WAAW,EAA0B,MAAM,wBAAwB,CAAC;AAC7E,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAE5C,OAAO,KAAK,EAAE,SAAS,EAAkB,MAAM,qBAAqB,CAAC;AAoCrE;;GAEG;AACH,qBAAa,UAAW,SAAQ,WAAW;IACzC,OAAO,CAAC,UAAU,CAA0B;IAC5C,OAAO,CAAC,QAAQ,CAAC,CAA8B;IAG/C,OAAO,CAAC,WAAW,CAIH;IAGhB,OAAO,CAAC,IAAI,CAAe;IAG3B,OAAO,CAAC,OAAO,CAAuB;IACtC,OAAO,CAAC,OAAO,CAAuB;IACtC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAO;IAChC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAO;IAChC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAQ;IAElC,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAO;;IAerC,WAAW,CAAC,QAAQ,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,IAAI,GAAG,IAAI;IAIxD,MAAM,CAAC,KAAK,EAAE,SAAS,GAAG,IAAI;IAI9B;;OAEG;IACH,cAAc,CAAC,KAAK,EAAE;QAAE,UAAU,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,GAAG,IAAI;IAI9F;;OAEG;IACH,OAAO,CAAC,UAAU;IAKlB,SAAS,CAAC,aAAa,CAAC,GAAG,EAAE,aAAa,GAAG,IAAI;IAgBjD,OAAO,CAAC,gBAAgB;IAoMxB,OAAO,CAAC,YAAY;IA0CpB,OAAO,CAAC,aAAa;IAyNrB,OAAO,CAAC,iBAAiB;IAsCzB,OAAO,CAAC,mBAAmB;IAkB3B,OAAO,CAAC,UAAU;IAIlB,OAAO,CAAC,aAAa;IAgBrB,YAAY,IAAI,MAAM;IAItB,YAAY,IAAI,OAAO;IAYvB,SAAS,CAAC,kBAAkB,IAAI,MAAM;IAItC;;OAEG;IACH,OAAO,CAAC,KAAK;IAUb;;;OAGG;IACH,aAAa,CAAC,GAAG,EAAE,QAAQ,GAAG,OAAO;IAqDrC,SAAS,CAAC,eAAe,CAAC,GAAG,EAAE,QAAQ,GAAG,OAAO;IAIjD;;OAEG;IACH,SAAS,CAAC,GAAG,EAAE,QAAQ,GAAG,OAAO;IAUjC,SAAS,IAAI,IAAI;CAKlB"}
|