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,123 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Route-based Navigation System
|
|
3
|
+
* Inspired by opencode's RouteProvider pattern
|
|
4
|
+
*/
|
|
5
|
+
import { EventEmitter } from 'events';
|
|
6
|
+
/**
|
|
7
|
+
* Route definitions
|
|
8
|
+
*/
|
|
9
|
+
export type RouteType = {
|
|
10
|
+
type: 'title';
|
|
11
|
+
} | {
|
|
12
|
+
type: 'home';
|
|
13
|
+
} | {
|
|
14
|
+
type: 'explore';
|
|
15
|
+
roomId?: string;
|
|
16
|
+
} | {
|
|
17
|
+
type: 'dialog';
|
|
18
|
+
npcId: string;
|
|
19
|
+
} | {
|
|
20
|
+
type: 'combat';
|
|
21
|
+
encounterId: string;
|
|
22
|
+
} | {
|
|
23
|
+
type: 'travel';
|
|
24
|
+
targetRoomId: string;
|
|
25
|
+
phase?: 'traveling_to_dungeon' | 'returning_to_town';
|
|
26
|
+
} | {
|
|
27
|
+
type: 'inventory';
|
|
28
|
+
} | {
|
|
29
|
+
type: 'character';
|
|
30
|
+
} | {
|
|
31
|
+
type: 'quests';
|
|
32
|
+
} | {
|
|
33
|
+
type: 'workshop';
|
|
34
|
+
subMode?: 'main' | 'view' | 'forge' | 'research';
|
|
35
|
+
} | {
|
|
36
|
+
type: 'save';
|
|
37
|
+
} | {
|
|
38
|
+
type: 'load';
|
|
39
|
+
} | {
|
|
40
|
+
type: 'help';
|
|
41
|
+
} | {
|
|
42
|
+
type: 'settings';
|
|
43
|
+
} | {
|
|
44
|
+
type: 'gameover';
|
|
45
|
+
} | {
|
|
46
|
+
type: 'npcSelection';
|
|
47
|
+
npcs: string[];
|
|
48
|
+
} | {
|
|
49
|
+
type: 'dungeonSelection';
|
|
50
|
+
dungeons: string[];
|
|
51
|
+
} | {
|
|
52
|
+
type: 'prologue';
|
|
53
|
+
} | {
|
|
54
|
+
type: 'characterCreation';
|
|
55
|
+
} | {
|
|
56
|
+
type: 'dungeon';
|
|
57
|
+
dungeonId: string;
|
|
58
|
+
} | {
|
|
59
|
+
type: 'dead';
|
|
60
|
+
};
|
|
61
|
+
/**
|
|
62
|
+
* Router events
|
|
63
|
+
*/
|
|
64
|
+
export interface RouterEvents {
|
|
65
|
+
'navigate': (route: RouteType, prev: RouteType | null) => void;
|
|
66
|
+
'back': (route: RouteType) => void;
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Router class - manages navigation between game screens
|
|
70
|
+
*/
|
|
71
|
+
declare class Router extends EventEmitter {
|
|
72
|
+
private currentRoute;
|
|
73
|
+
private history;
|
|
74
|
+
private maxHistoryLength;
|
|
75
|
+
constructor();
|
|
76
|
+
/**
|
|
77
|
+
* Get current route
|
|
78
|
+
*/
|
|
79
|
+
get current(): RouteType;
|
|
80
|
+
/**
|
|
81
|
+
* Navigate to a new route
|
|
82
|
+
*/
|
|
83
|
+
navigate(route: RouteType): void;
|
|
84
|
+
/**
|
|
85
|
+
* Go back to previous route
|
|
86
|
+
*/
|
|
87
|
+
back(): boolean;
|
|
88
|
+
/**
|
|
89
|
+
* Check if can go back
|
|
90
|
+
*/
|
|
91
|
+
canGoBack(): boolean;
|
|
92
|
+
/**
|
|
93
|
+
* Replace current route (no history)
|
|
94
|
+
*/
|
|
95
|
+
replace(route: RouteType): void;
|
|
96
|
+
/**
|
|
97
|
+
* Clear history
|
|
98
|
+
*/
|
|
99
|
+
clearHistory(): void;
|
|
100
|
+
/**
|
|
101
|
+
* Get route type name
|
|
102
|
+
*/
|
|
103
|
+
getRouteName(route?: RouteType): string;
|
|
104
|
+
/**
|
|
105
|
+
* Check if on a specific route type
|
|
106
|
+
*/
|
|
107
|
+
isRoute(type: RouteType['type']): boolean;
|
|
108
|
+
/**
|
|
109
|
+
* Check if two routes are the same
|
|
110
|
+
*/
|
|
111
|
+
private isSameRoute;
|
|
112
|
+
/**
|
|
113
|
+
* Subscribe to navigation events
|
|
114
|
+
*/
|
|
115
|
+
onNavigate(callback: (route: RouteType, prev: RouteType | null) => void): () => void;
|
|
116
|
+
/**
|
|
117
|
+
* Subscribe to back events
|
|
118
|
+
*/
|
|
119
|
+
onBack(callback: (route: RouteType) => void): () => void;
|
|
120
|
+
}
|
|
121
|
+
export declare function getRouter(): Router;
|
|
122
|
+
export { Router };
|
|
123
|
+
//# sourceMappingURL=Router.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Router.d.ts","sourceRoot":"/","sources":["app/Router.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,142 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Route-based Navigation System
|
|
3
|
+
* Inspired by opencode's RouteProvider pattern
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
!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]="f8cd351e-b4ce-57e2-986e-a4a518de54a2")}catch(e){}}();
|
|
7
|
+
import { EventEmitter } from 'events';
|
|
8
|
+
/**
|
|
9
|
+
* Router class - manages navigation between game screens
|
|
10
|
+
*/
|
|
11
|
+
class Router extends EventEmitter {
|
|
12
|
+
currentRoute = { type: 'title' };
|
|
13
|
+
history = [];
|
|
14
|
+
maxHistoryLength = 50;
|
|
15
|
+
constructor() {
|
|
16
|
+
super();
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Get current route
|
|
20
|
+
*/
|
|
21
|
+
get current() {
|
|
22
|
+
return this.currentRoute;
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Navigate to a new route
|
|
26
|
+
*/
|
|
27
|
+
navigate(route) {
|
|
28
|
+
const prev = this.currentRoute;
|
|
29
|
+
// Don't navigate to same route
|
|
30
|
+
if (this.isSameRoute(route, prev)) {
|
|
31
|
+
return;
|
|
32
|
+
}
|
|
33
|
+
// Add to history
|
|
34
|
+
this.history.push({
|
|
35
|
+
route: prev,
|
|
36
|
+
timestamp: Date.now(),
|
|
37
|
+
});
|
|
38
|
+
// Trim history
|
|
39
|
+
if (this.history.length > this.maxHistoryLength) {
|
|
40
|
+
this.history = this.history.slice(-this.maxHistoryLength);
|
|
41
|
+
}
|
|
42
|
+
this.currentRoute = route;
|
|
43
|
+
this.emit('navigate', route, prev);
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Go back to previous route
|
|
47
|
+
*/
|
|
48
|
+
back() {
|
|
49
|
+
if (this.history.length === 0) {
|
|
50
|
+
return false;
|
|
51
|
+
}
|
|
52
|
+
const entry = this.history.pop();
|
|
53
|
+
this.currentRoute = entry.route;
|
|
54
|
+
this.emit('back', entry.route);
|
|
55
|
+
return true;
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Check if can go back
|
|
59
|
+
*/
|
|
60
|
+
canGoBack() {
|
|
61
|
+
return this.history.length > 0;
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Replace current route (no history)
|
|
65
|
+
*/
|
|
66
|
+
replace(route) {
|
|
67
|
+
const prev = this.currentRoute;
|
|
68
|
+
this.currentRoute = route;
|
|
69
|
+
this.emit('navigate', route, prev);
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Clear history
|
|
73
|
+
*/
|
|
74
|
+
clearHistory() {
|
|
75
|
+
this.history = [];
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* Get route type name
|
|
79
|
+
*/
|
|
80
|
+
getRouteName(route = this.currentRoute) {
|
|
81
|
+
return route.type;
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* Check if on a specific route type
|
|
85
|
+
*/
|
|
86
|
+
isRoute(type) {
|
|
87
|
+
return this.currentRoute.type === type;
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* Check if two routes are the same
|
|
91
|
+
*/
|
|
92
|
+
isSameRoute(a, b) {
|
|
93
|
+
if (a.type !== b.type)
|
|
94
|
+
return false;
|
|
95
|
+
switch (a.type) {
|
|
96
|
+
case 'dialog':
|
|
97
|
+
return b.npcId === a.npcId;
|
|
98
|
+
case 'combat':
|
|
99
|
+
return b.encounterId === a.encounterId;
|
|
100
|
+
case 'travel':
|
|
101
|
+
return b.targetRoomId === a.targetRoomId &&
|
|
102
|
+
b.phase === a.phase;
|
|
103
|
+
case 'explore':
|
|
104
|
+
return b.roomId === a.roomId;
|
|
105
|
+
case 'workshop':
|
|
106
|
+
return b.subMode === a.subMode;
|
|
107
|
+
case 'dungeon':
|
|
108
|
+
return b.dungeonId === a.dungeonId;
|
|
109
|
+
case 'npcSelection':
|
|
110
|
+
return JSON.stringify(b.npcs) === JSON.stringify(a.npcs);
|
|
111
|
+
case 'dungeonSelection':
|
|
112
|
+
return JSON.stringify(b.dungeons) === JSON.stringify(a.dungeons);
|
|
113
|
+
default:
|
|
114
|
+
return true;
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
/**
|
|
118
|
+
* Subscribe to navigation events
|
|
119
|
+
*/
|
|
120
|
+
onNavigate(callback) {
|
|
121
|
+
this.on('navigate', callback);
|
|
122
|
+
return () => this.off('navigate', callback);
|
|
123
|
+
}
|
|
124
|
+
/**
|
|
125
|
+
* Subscribe to back events
|
|
126
|
+
*/
|
|
127
|
+
onBack(callback) {
|
|
128
|
+
this.on('back', callback);
|
|
129
|
+
return () => this.off('back', callback);
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
// Singleton instance
|
|
133
|
+
let routerInstance = null;
|
|
134
|
+
export function getRouter() {
|
|
135
|
+
if (!routerInstance) {
|
|
136
|
+
routerInstance = new Router();
|
|
137
|
+
}
|
|
138
|
+
return routerInstance;
|
|
139
|
+
}
|
|
140
|
+
export { Router };
|
|
141
|
+
//# sourceMappingURL=Router.js.map
|
|
142
|
+
//# debugId=f8cd351e-b4ce-57e2-986e-a4a518de54a2
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Router.js","sources":["app/Router.ts"],"sourceRoot":"/","sourcesContent":["/**\r\n * Route-based Navigation System\r\n * Inspired by opencode's RouteProvider pattern\r\n */\r\n\r\nimport { EventEmitter } from 'events';\r\n\r\n/**\r\n * Route definitions\r\n */\r\nexport type RouteType =\r\n | { type: 'title' }\r\n | { type: 'home' }\r\n | { type: 'explore'; roomId?: string }\r\n | { type: 'dialog'; npcId: string }\r\n | { type: 'combat'; encounterId: string }\r\n | { type: 'travel'; targetRoomId: string; phase?: 'traveling_to_dungeon' | 'returning_to_town' }\r\n | { type: 'inventory' }\r\n | { type: 'character' }\r\n | { type: 'quests' }\r\n | { type: 'workshop'; subMode?: 'main' | 'view' | 'forge' | 'research' }\r\n | { type: 'save' }\r\n | { type: 'load' }\r\n | { type: 'help' }\r\n | { type: 'settings' }\r\n | { type: 'gameover' }\r\n // Selection modes (sub-routes)\r\n | { type: 'npcSelection'; npcs: string[] }\r\n | { type: 'dungeonSelection'; dungeons: string[] }\r\n // Full-screen modes\r\n | { type: 'prologue' }\r\n | { type: 'characterCreation' }\r\n | { type: 'dungeon'; dungeonId: string }\r\n | { type: 'dead' };\r\n\r\n/**\r\n * Navigation history entry\r\n */\r\ninterface HistoryEntry {\r\n route: RouteType;\r\n timestamp: number;\r\n}\r\n\r\n/**\r\n * Router events\r\n */\r\nexport interface RouterEvents {\r\n 'navigate': (route: RouteType, prev: RouteType | null) => void;\r\n 'back': (route: RouteType) => void;\r\n}\r\n\r\n/**\r\n * Router class - manages navigation between game screens\r\n */\r\nclass Router extends EventEmitter {\r\n private currentRoute: RouteType = { type: 'title' };\r\n private history: HistoryEntry[] = [];\r\n private maxHistoryLength = 50;\r\n\r\n constructor() {\r\n super();\r\n }\r\n\r\n /**\r\n * Get current route\r\n */\r\n get current(): RouteType {\r\n return this.currentRoute;\r\n }\r\n\r\n /**\r\n * Navigate to a new route\r\n */\r\n navigate(route: RouteType): void {\r\n const prev = this.currentRoute;\r\n \r\n // Don't navigate to same route\r\n if (this.isSameRoute(route, prev)) {\r\n return;\r\n }\r\n\r\n // Add to history\r\n this.history.push({\r\n route: prev,\r\n timestamp: Date.now(),\r\n });\r\n\r\n // Trim history\r\n if (this.history.length > this.maxHistoryLength) {\r\n this.history = this.history.slice(-this.maxHistoryLength);\r\n }\r\n\r\n this.currentRoute = route;\r\n this.emit('navigate', route, prev);\r\n }\r\n\r\n /**\r\n * Go back to previous route\r\n */\r\n back(): boolean {\r\n if (this.history.length === 0) {\r\n return false;\r\n }\r\n\r\n const entry = this.history.pop()!;\r\n this.currentRoute = entry.route;\r\n this.emit('back', entry.route);\r\n return true;\r\n }\r\n\r\n /**\r\n * Check if can go back\r\n */\r\n canGoBack(): boolean {\r\n return this.history.length > 0;\r\n }\r\n\r\n /**\r\n * Replace current route (no history)\r\n */\r\n replace(route: RouteType): void {\r\n const prev = this.currentRoute;\r\n this.currentRoute = route;\r\n this.emit('navigate', route, prev);\r\n }\r\n\r\n /**\r\n * Clear history\r\n */\r\n clearHistory(): void {\r\n this.history = [];\r\n }\r\n\r\n /**\r\n * Get route type name\r\n */\r\n getRouteName(route: RouteType = this.currentRoute): string {\r\n return route.type;\r\n }\r\n\r\n /**\r\n * Check if on a specific route type\r\n */\r\n isRoute(type: RouteType['type']): boolean {\r\n return this.currentRoute.type === type;\r\n }\r\n\r\n /**\r\n * Check if two routes are the same\r\n */\r\n private isSameRoute(a: RouteType, b: RouteType): boolean {\r\n if (a.type !== b.type) return false;\r\n\r\n switch (a.type) {\r\n case 'dialog':\r\n return (b as typeof a).npcId === a.npcId;\r\n case 'combat':\r\n return (b as typeof a).encounterId === a.encounterId;\r\n case 'travel':\r\n return (b as typeof a).targetRoomId === a.targetRoomId &&\r\n (b as typeof a).phase === a.phase;\r\n case 'explore':\r\n return (b as typeof a).roomId === a.roomId;\r\n case 'workshop':\r\n return (b as typeof a).subMode === a.subMode;\r\n case 'dungeon':\r\n return (b as typeof a).dungeonId === a.dungeonId;\r\n case 'npcSelection':\r\n return JSON.stringify((b as typeof a).npcs) === JSON.stringify(a.npcs);\r\n case 'dungeonSelection':\r\n return JSON.stringify((b as typeof a).dungeons) === JSON.stringify(a.dungeons);\r\n default:\r\n return true;\r\n }\r\n }\r\n\r\n /**\r\n * Subscribe to navigation events\r\n */\r\n onNavigate(callback: (route: RouteType, prev: RouteType | null) => void): () => void {\r\n this.on('navigate', callback);\r\n return () => this.off('navigate', callback);\r\n }\r\n\r\n /**\r\n * Subscribe to back events\r\n */\r\n onBack(callback: (route: RouteType) => void): () => void {\r\n this.on('back', callback);\r\n return () => this.off('back', callback);\r\n }\r\n}\r\n\r\n// Singleton instance\r\nlet routerInstance: Router | null = null;\r\n\r\nexport function getRouter(): Router {\r\n if (!routerInstance) {\r\n routerInstance = new Router();\r\n }\r\n return routerInstance;\r\n}\r\n\r\nexport { Router };\r\n"],"names":[],"mappings":"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","debug_id":"f8cd351e-b4ce-57e2-986e-a4a518de54a2"}
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Screen Manager - Orchestrates screen lifecycle and transitions
|
|
3
|
+
*/
|
|
4
|
+
import type { BaseScreen } from './screens/BaseScreen.js';
|
|
5
|
+
import { TitleScreen } from './screens/TitleScreen.js';
|
|
6
|
+
import { ExploreScreen } from './screens/ExploreScreen.js';
|
|
7
|
+
import { DialogScreen } from './screens/DialogScreen.js';
|
|
8
|
+
import { InventoryScreen } from './screens/InventoryScreen.js';
|
|
9
|
+
import { HelpScreen } from './screens/HelpScreen.js';
|
|
10
|
+
import { TravelScreen } from './screens/TravelScreen.js';
|
|
11
|
+
import { CombatScreen } from './screens/CombatScreen.js';
|
|
12
|
+
/**
|
|
13
|
+
* Screen registry
|
|
14
|
+
*/
|
|
15
|
+
type ScreenRegistry = {
|
|
16
|
+
title: TitleScreen;
|
|
17
|
+
home: TitleScreen;
|
|
18
|
+
explore: ExploreScreen;
|
|
19
|
+
dialog: DialogScreen;
|
|
20
|
+
combat: CombatScreen;
|
|
21
|
+
travel: TravelScreen;
|
|
22
|
+
inventory: InventoryScreen;
|
|
23
|
+
character: BaseScreen;
|
|
24
|
+
quests: BaseScreen;
|
|
25
|
+
workshop: BaseScreen;
|
|
26
|
+
save: BaseScreen;
|
|
27
|
+
load: BaseScreen;
|
|
28
|
+
help: HelpScreen;
|
|
29
|
+
settings: BaseScreen;
|
|
30
|
+
gameover: BaseScreen;
|
|
31
|
+
};
|
|
32
|
+
/**
|
|
33
|
+
* Screen Manager class
|
|
34
|
+
*/
|
|
35
|
+
declare class ScreenManager {
|
|
36
|
+
private screens;
|
|
37
|
+
private currentScreen;
|
|
38
|
+
private currentRoute;
|
|
39
|
+
private keyHandler;
|
|
40
|
+
private isInitialized;
|
|
41
|
+
constructor();
|
|
42
|
+
/**
|
|
43
|
+
* Initialize all screens
|
|
44
|
+
*/
|
|
45
|
+
private initializeScreens;
|
|
46
|
+
/**
|
|
47
|
+
* Setup router listeners
|
|
48
|
+
*/
|
|
49
|
+
private setupRouterListeners;
|
|
50
|
+
/**
|
|
51
|
+
* Setup input handler
|
|
52
|
+
*/
|
|
53
|
+
private setupInputHandler;
|
|
54
|
+
/**
|
|
55
|
+
* Setup resize handler
|
|
56
|
+
*/
|
|
57
|
+
private setupResizeHandler;
|
|
58
|
+
/**
|
|
59
|
+
* Handle navigation between screens
|
|
60
|
+
*/
|
|
61
|
+
private handleNavigation;
|
|
62
|
+
/**
|
|
63
|
+
* Extract params from route
|
|
64
|
+
*/
|
|
65
|
+
private getRouteParams;
|
|
66
|
+
/**
|
|
67
|
+
* Handle global keyboard shortcuts
|
|
68
|
+
*/
|
|
69
|
+
private handleGlobalKey;
|
|
70
|
+
/**
|
|
71
|
+
* Initialize and start
|
|
72
|
+
*/
|
|
73
|
+
start(): Promise<void>;
|
|
74
|
+
/**
|
|
75
|
+
* Cleanup
|
|
76
|
+
*/
|
|
77
|
+
cleanup(): Promise<void>;
|
|
78
|
+
/**
|
|
79
|
+
* Get a screen instance
|
|
80
|
+
*/
|
|
81
|
+
getScreen<K extends keyof ScreenRegistry>(key: K): ScreenRegistry[K] | undefined;
|
|
82
|
+
/**
|
|
83
|
+
* Register a custom screen
|
|
84
|
+
*/
|
|
85
|
+
registerScreen(key: string, screen: BaseScreen): void;
|
|
86
|
+
/**
|
|
87
|
+
* Get current screen
|
|
88
|
+
*/
|
|
89
|
+
getCurrentScreen(): BaseScreen | null;
|
|
90
|
+
/**
|
|
91
|
+
* Refresh current screen
|
|
92
|
+
*/
|
|
93
|
+
refresh(): void;
|
|
94
|
+
}
|
|
95
|
+
export declare function getScreenManager(): ScreenManager;
|
|
96
|
+
export { ScreenManager };
|
|
97
|
+
//# sourceMappingURL=ScreenManager.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ScreenManager.d.ts","sourceRoot":"/","sources":["app/ScreenManager.ts"],"names":[],"mappings":"AAAA;;GAEG;AAMH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AAE1D,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AACvD,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAC3D,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AACzD,OAAO,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAC/D,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AACrD,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AACzD,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAEzD;;GAEG;AACH,KAAK,cAAc,GAAG;IACpB,KAAK,EAAE,WAAW,CAAC;IACnB,IAAI,EAAE,WAAW,CAAC;IAClB,OAAO,EAAE,aAAa,CAAC;IACvB,MAAM,EAAE,YAAY,CAAC;IACrB,MAAM,EAAE,YAAY,CAAC;IACrB,MAAM,EAAE,YAAY,CAAC;IACrB,SAAS,EAAE,eAAe,CAAC;IAC3B,SAAS,EAAE,UAAU,CAAC;IACtB,MAAM,EAAE,UAAU,CAAC;IACnB,QAAQ,EAAE,UAAU,CAAC;IACrB,IAAI,EAAE,UAAU,CAAC;IACjB,IAAI,EAAE,UAAU,CAAC;IACjB,IAAI,EAAE,UAAU,CAAC;IACjB,QAAQ,EAAE,UAAU,CAAC;IACrB,QAAQ,EAAE,UAAU,CAAC;CACtB,CAAC;AAEF;;GAEG;AACH,cAAM,aAAa;IACjB,OAAO,CAAC,OAAO,CAAsC;IACrD,OAAO,CAAC,aAAa,CAA2B;IAChD,OAAO,CAAC,YAAY,CAA0B;IAC9C,OAAO,CAAC,UAAU,CAA0C;IAC5D,OAAO,CAAC,aAAa,CAAkB;;IASvC;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAqBzB;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAY5B;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAuBzB;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAU1B;;OAEG;YACW,gBAAgB;IA0B9B;;OAEG;IACH,OAAO,CAAC,cAAc;IAetB;;OAEG;YACW,eAAe;IAc7B;;OAEG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAW5B;;OAEG;IACG,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAY9B;;OAEG;IACH,SAAS,CAAC,CAAC,SAAS,MAAM,cAAc,EAAE,GAAG,EAAE,CAAC,GAAG,cAAc,CAAC,CAAC,CAAC,GAAG,SAAS;IAIhF;;OAEG;IACH,cAAc,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,GAAG,IAAI;IAIrD;;OAEG;IACH,gBAAgB,IAAI,UAAU,GAAG,IAAI;IAIrC;;OAEG;IACH,OAAO,IAAI,IAAI;CAKhB;AAKD,wBAAgB,gBAAgB,IAAI,aAAa,CAKhD;AAED,OAAO,EAAE,aAAa,EAAE,CAAC"}
|
|
@@ -0,0 +1,216 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Screen Manager - Orchestrates screen lifecycle and transitions
|
|
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]="44f25950-bd6c-5b96-9103-a2cb407219c5")}catch(e){}}();
|
|
6
|
+
import { getRouter } from './Router.js';
|
|
7
|
+
import { getEventBus } from './EventBus.js';
|
|
8
|
+
import { getScreen } from '../tui/Screen.js';
|
|
9
|
+
import { getInput } from '../tui/Input.js';
|
|
10
|
+
import { TitleScreen } from './screens/TitleScreen.js';
|
|
11
|
+
import { ExploreScreen } from './screens/ExploreScreen.js';
|
|
12
|
+
import { DialogScreen } from './screens/DialogScreen.js';
|
|
13
|
+
import { InventoryScreen } from './screens/InventoryScreen.js';
|
|
14
|
+
import { HelpScreen } from './screens/HelpScreen.js';
|
|
15
|
+
import { TravelScreen } from './screens/TravelScreen.js';
|
|
16
|
+
import { CombatScreen } from './screens/CombatScreen.js';
|
|
17
|
+
/**
|
|
18
|
+
* Screen Manager class
|
|
19
|
+
*/
|
|
20
|
+
class ScreenManager {
|
|
21
|
+
screens = new Map();
|
|
22
|
+
currentScreen = null;
|
|
23
|
+
currentRoute = null;
|
|
24
|
+
keyHandler = null;
|
|
25
|
+
isInitialized = false;
|
|
26
|
+
constructor() {
|
|
27
|
+
this.initializeScreens();
|
|
28
|
+
this.setupRouterListeners();
|
|
29
|
+
this.setupInputHandler();
|
|
30
|
+
this.setupResizeHandler();
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Initialize all screens
|
|
34
|
+
*/
|
|
35
|
+
initializeScreens() {
|
|
36
|
+
// Create screen instances
|
|
37
|
+
this.screens.set('title', new TitleScreen());
|
|
38
|
+
this.screens.set('home', this.screens.get('title'));
|
|
39
|
+
this.screens.set('explore', new ExploreScreen());
|
|
40
|
+
this.screens.set('dialog', new DialogScreen());
|
|
41
|
+
this.screens.set('inventory', new InventoryScreen());
|
|
42
|
+
this.screens.set('help', new HelpScreen());
|
|
43
|
+
this.screens.set('combat', new CombatScreen());
|
|
44
|
+
this.screens.set('travel', new TravelScreen());
|
|
45
|
+
// TODO: Add remaining screens
|
|
46
|
+
// this.screens.set('character', new CharacterScreen());
|
|
47
|
+
// this.screens.set('quests', new QuestsScreen());
|
|
48
|
+
// this.screens.set('workshop', new WorkshopScreen());
|
|
49
|
+
// this.screens.set('save', new SaveScreen());
|
|
50
|
+
// this.screens.set('load', new LoadScreen());
|
|
51
|
+
// this.screens.set('settings', new SettingsScreen());
|
|
52
|
+
// this.screens.set('gameover', new GameOverScreen());
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Setup router listeners
|
|
56
|
+
*/
|
|
57
|
+
setupRouterListeners() {
|
|
58
|
+
const router = getRouter();
|
|
59
|
+
router.onNavigate(async (route, prev) => {
|
|
60
|
+
await this.handleNavigation(route, prev);
|
|
61
|
+
});
|
|
62
|
+
router.onBack(async (route) => {
|
|
63
|
+
await this.handleNavigation(route, this.currentRoute);
|
|
64
|
+
});
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Setup input handler
|
|
68
|
+
*/
|
|
69
|
+
setupInputHandler() {
|
|
70
|
+
const input = getInput();
|
|
71
|
+
this.keyHandler = async (key) => {
|
|
72
|
+
// Global exit
|
|
73
|
+
if (key.ctrl && key.name === 'c') {
|
|
74
|
+
await this.cleanup();
|
|
75
|
+
process.exit(0);
|
|
76
|
+
}
|
|
77
|
+
// Delegate to current screen
|
|
78
|
+
if (this.currentScreen) {
|
|
79
|
+
const handled = await this.currentScreen.handleKey(key);
|
|
80
|
+
if (!handled) {
|
|
81
|
+
// Handle global shortcuts
|
|
82
|
+
await this.handleGlobalKey(key);
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
};
|
|
86
|
+
input.onKey(this.keyHandler);
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* Setup resize handler
|
|
90
|
+
*/
|
|
91
|
+
setupResizeHandler() {
|
|
92
|
+
const screen = getScreen();
|
|
93
|
+
screen.onResize((width, height) => {
|
|
94
|
+
if (this.currentScreen) {
|
|
95
|
+
this.currentScreen.onResize(width, height);
|
|
96
|
+
}
|
|
97
|
+
});
|
|
98
|
+
}
|
|
99
|
+
/**
|
|
100
|
+
* Handle navigation between screens
|
|
101
|
+
*/
|
|
102
|
+
async handleNavigation(route, prev) {
|
|
103
|
+
const screenKey = route.type;
|
|
104
|
+
const newScreen = this.screens.get(screenKey);
|
|
105
|
+
if (!newScreen) {
|
|
106
|
+
console.error(`No screen registered for route: ${screenKey}`);
|
|
107
|
+
getEventBus().toast(`Screen not available: ${screenKey}`, 'warning');
|
|
108
|
+
return;
|
|
109
|
+
}
|
|
110
|
+
// Leave current screen
|
|
111
|
+
if (this.currentScreen) {
|
|
112
|
+
await this.currentScreen.onLeave();
|
|
113
|
+
}
|
|
114
|
+
// Enter new screen
|
|
115
|
+
this.currentScreen = newScreen;
|
|
116
|
+
this.currentRoute = route;
|
|
117
|
+
// Pass route params to screen
|
|
118
|
+
await this.currentScreen.onEnter(this.getRouteParams(route));
|
|
119
|
+
// Render
|
|
120
|
+
this.currentScreen.render();
|
|
121
|
+
}
|
|
122
|
+
/**
|
|
123
|
+
* Extract params from route
|
|
124
|
+
*/
|
|
125
|
+
getRouteParams(route) {
|
|
126
|
+
switch (route.type) {
|
|
127
|
+
case 'dialog':
|
|
128
|
+
return { npcId: route.npcId };
|
|
129
|
+
case 'combat':
|
|
130
|
+
return { encounterId: route.encounterId };
|
|
131
|
+
case 'travel':
|
|
132
|
+
return { targetRoomId: route.targetRoomId };
|
|
133
|
+
case 'explore':
|
|
134
|
+
return { roomId: route.roomId };
|
|
135
|
+
default:
|
|
136
|
+
return undefined;
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
/**
|
|
140
|
+
* Handle global keyboard shortcuts
|
|
141
|
+
*/
|
|
142
|
+
async handleGlobalKey(key) {
|
|
143
|
+
// Global shortcuts that work in all screens
|
|
144
|
+
if (key.ctrl) {
|
|
145
|
+
switch (key.name) {
|
|
146
|
+
case 's':
|
|
147
|
+
getRouter().navigate({ type: 'save' });
|
|
148
|
+
break;
|
|
149
|
+
case 'l':
|
|
150
|
+
getRouter().navigate({ type: 'load' });
|
|
151
|
+
break;
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
/**
|
|
156
|
+
* Initialize and start
|
|
157
|
+
*/
|
|
158
|
+
async start() {
|
|
159
|
+
if (this.isInitialized)
|
|
160
|
+
return;
|
|
161
|
+
this.isInitialized = true;
|
|
162
|
+
// Start input
|
|
163
|
+
getInput().start();
|
|
164
|
+
// Navigate to title screen
|
|
165
|
+
getRouter().navigate({ type: 'title' });
|
|
166
|
+
}
|
|
167
|
+
/**
|
|
168
|
+
* Cleanup
|
|
169
|
+
*/
|
|
170
|
+
async cleanup() {
|
|
171
|
+
if (this.currentScreen) {
|
|
172
|
+
await this.currentScreen.onLeave();
|
|
173
|
+
}
|
|
174
|
+
if (this.keyHandler) {
|
|
175
|
+
getInput().offKey(this.keyHandler);
|
|
176
|
+
}
|
|
177
|
+
getScreen().cleanup();
|
|
178
|
+
}
|
|
179
|
+
/**
|
|
180
|
+
* Get a screen instance
|
|
181
|
+
*/
|
|
182
|
+
getScreen(key) {
|
|
183
|
+
return this.screens.get(key);
|
|
184
|
+
}
|
|
185
|
+
/**
|
|
186
|
+
* Register a custom screen
|
|
187
|
+
*/
|
|
188
|
+
registerScreen(key, screen) {
|
|
189
|
+
this.screens.set(key, screen);
|
|
190
|
+
}
|
|
191
|
+
/**
|
|
192
|
+
* Get current screen
|
|
193
|
+
*/
|
|
194
|
+
getCurrentScreen() {
|
|
195
|
+
return this.currentScreen;
|
|
196
|
+
}
|
|
197
|
+
/**
|
|
198
|
+
* Refresh current screen
|
|
199
|
+
*/
|
|
200
|
+
refresh() {
|
|
201
|
+
if (this.currentScreen) {
|
|
202
|
+
this.currentScreen.render();
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
// Singleton
|
|
207
|
+
let screenManagerInstance = null;
|
|
208
|
+
export function getScreenManager() {
|
|
209
|
+
if (!screenManagerInstance) {
|
|
210
|
+
screenManagerInstance = new ScreenManager();
|
|
211
|
+
}
|
|
212
|
+
return screenManagerInstance;
|
|
213
|
+
}
|
|
214
|
+
export { ScreenManager };
|
|
215
|
+
//# sourceMappingURL=ScreenManager.js.map
|
|
216
|
+
//# debugId=44f25950-bd6c-5b96-9103-a2cb407219c5
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ScreenManager.js","sources":["app/ScreenManager.ts"],"sourceRoot":"/","sourcesContent":["/**\r\n * Screen Manager - Orchestrates screen lifecycle and transitions\r\n */\r\n\r\nimport { getRouter, type RouteType } from './Router.js';\r\nimport { getEventBus } from './EventBus.js';\r\nimport { getScreen } from '../tui/Screen.js';\r\nimport { getInput, type KeyEvent } from '../tui/Input.js';\r\nimport type { BaseScreen } from './screens/BaseScreen.js';\r\n\r\nimport { TitleScreen } from './screens/TitleScreen.js';\r\nimport { ExploreScreen } from './screens/ExploreScreen.js';\r\nimport { DialogScreen } from './screens/DialogScreen.js';\r\nimport { InventoryScreen } from './screens/InventoryScreen.js';\r\nimport { HelpScreen } from './screens/HelpScreen.js';\r\nimport { TravelScreen } from './screens/TravelScreen.js';\r\nimport { CombatScreen } from './screens/CombatScreen.js';\r\n\r\n/**\r\n * Screen registry\r\n */\r\ntype ScreenRegistry = {\r\n title: TitleScreen;\r\n home: TitleScreen; // Same as title for now\r\n explore: ExploreScreen;\r\n dialog: DialogScreen;\r\n combat: CombatScreen;\r\n travel: TravelScreen;\r\n inventory: InventoryScreen;\r\n character: BaseScreen;\r\n quests: BaseScreen;\r\n workshop: BaseScreen;\r\n save: BaseScreen;\r\n load: BaseScreen;\r\n help: HelpScreen;\r\n settings: BaseScreen;\r\n gameover: BaseScreen;\r\n};\r\n\r\n/**\r\n * Screen Manager class\r\n */\r\nclass ScreenManager {\r\n private screens: Map<string, BaseScreen> = new Map();\r\n private currentScreen: BaseScreen | null = null;\r\n private currentRoute: RouteType | null = null;\r\n private keyHandler: ((key: KeyEvent) => void) | null = null;\r\n private isInitialized: boolean = false;\r\n\r\n constructor() {\r\n this.initializeScreens();\r\n this.setupRouterListeners();\r\n this.setupInputHandler();\r\n this.setupResizeHandler();\r\n }\r\n\r\n /**\r\n * Initialize all screens\r\n */\r\n private initializeScreens(): void {\r\n // Create screen instances\r\n this.screens.set('title', new TitleScreen());\r\n this.screens.set('home', this.screens.get('title')!);\r\n this.screens.set('explore', new ExploreScreen());\r\n this.screens.set('dialog', new DialogScreen());\r\n this.screens.set('inventory', new InventoryScreen());\r\n this.screens.set('help', new HelpScreen());\r\n this.screens.set('combat', new CombatScreen());\r\n this.screens.set('travel', new TravelScreen());\r\n \r\n // TODO: Add remaining screens\r\n // this.screens.set('character', new CharacterScreen());\r\n // this.screens.set('quests', new QuestsScreen());\r\n // this.screens.set('workshop', new WorkshopScreen());\r\n // this.screens.set('save', new SaveScreen());\r\n // this.screens.set('load', new LoadScreen());\r\n // this.screens.set('settings', new SettingsScreen());\r\n // this.screens.set('gameover', new GameOverScreen());\r\n }\r\n\r\n /**\r\n * Setup router listeners\r\n */\r\n private setupRouterListeners(): void {\r\n const router = getRouter();\r\n\r\n router.onNavigate(async (route, prev) => {\r\n await this.handleNavigation(route, prev);\r\n });\r\n\r\n router.onBack(async (route) => {\r\n await this.handleNavigation(route, this.currentRoute);\r\n });\r\n }\r\n\r\n /**\r\n * Setup input handler\r\n */\r\n private setupInputHandler(): void {\r\n const input = getInput();\r\n\r\n this.keyHandler = async (key: KeyEvent) => {\r\n // Global exit\r\n if (key.ctrl && key.name === 'c') {\r\n await this.cleanup();\r\n process.exit(0);\r\n }\r\n\r\n // Delegate to current screen\r\n if (this.currentScreen) {\r\n const handled = await this.currentScreen.handleKey(key);\r\n if (!handled) {\r\n // Handle global shortcuts\r\n await this.handleGlobalKey(key);\r\n }\r\n }\r\n };\r\n\r\n input.onKey(this.keyHandler);\r\n }\r\n\r\n /**\r\n * Setup resize handler\r\n */\r\n private setupResizeHandler(): void {\r\n const screen = getScreen();\r\n\r\n screen.onResize((width, height) => {\r\n if (this.currentScreen) {\r\n this.currentScreen.onResize(width, height);\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Handle navigation between screens\r\n */\r\n private async handleNavigation(route: RouteType, prev: RouteType | null): Promise<void> {\r\n const screenKey = route.type;\r\n const newScreen = this.screens.get(screenKey);\r\n\r\n if (!newScreen) {\r\n console.error(`No screen registered for route: ${screenKey}`);\r\n getEventBus().toast(`Screen not available: ${screenKey}`, 'warning');\r\n return;\r\n }\r\n\r\n // Leave current screen\r\n if (this.currentScreen) {\r\n await this.currentScreen.onLeave();\r\n }\r\n\r\n // Enter new screen\r\n this.currentScreen = newScreen;\r\n this.currentRoute = route;\r\n\r\n // Pass route params to screen\r\n await this.currentScreen.onEnter(this.getRouteParams(route));\r\n\r\n // Render\r\n this.currentScreen.render();\r\n }\r\n\r\n /**\r\n * Extract params from route\r\n */\r\n private getRouteParams(route: RouteType): unknown {\r\n switch (route.type) {\r\n case 'dialog':\r\n return { npcId: route.npcId };\r\n case 'combat':\r\n return { encounterId: route.encounterId };\r\n case 'travel':\r\n return { targetRoomId: route.targetRoomId };\r\n case 'explore':\r\n return { roomId: route.roomId };\r\n default:\r\n return undefined;\r\n }\r\n }\r\n\r\n /**\r\n * Handle global keyboard shortcuts\r\n */\r\n private async handleGlobalKey(key: KeyEvent): Promise<void> {\r\n // Global shortcuts that work in all screens\r\n if (key.ctrl) {\r\n switch (key.name) {\r\n case 's':\r\n getRouter().navigate({ type: 'save' });\r\n break;\r\n case 'l':\r\n getRouter().navigate({ type: 'load' });\r\n break;\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Initialize and start\r\n */\r\n async start(): Promise<void> {\r\n if (this.isInitialized) return;\r\n this.isInitialized = true;\r\n\r\n // Start input\r\n getInput().start();\r\n\r\n // Navigate to title screen\r\n getRouter().navigate({ type: 'title' });\r\n }\r\n\r\n /**\r\n * Cleanup\r\n */\r\n async cleanup(): Promise<void> {\r\n if (this.currentScreen) {\r\n await this.currentScreen.onLeave();\r\n }\r\n\r\n if (this.keyHandler) {\r\n getInput().offKey(this.keyHandler);\r\n }\r\n\r\n getScreen().cleanup();\r\n }\r\n\r\n /**\r\n * Get a screen instance\r\n */\r\n getScreen<K extends keyof ScreenRegistry>(key: K): ScreenRegistry[K] | undefined {\r\n return this.screens.get(key) as ScreenRegistry[K] | undefined;\r\n }\r\n\r\n /**\r\n * Register a custom screen\r\n */\r\n registerScreen(key: string, screen: BaseScreen): void {\r\n this.screens.set(key, screen);\r\n }\r\n\r\n /**\r\n * Get current screen\r\n */\r\n getCurrentScreen(): BaseScreen | null {\r\n return this.currentScreen;\r\n }\r\n\r\n /**\r\n * Refresh current screen\r\n */\r\n refresh(): void {\r\n if (this.currentScreen) {\r\n this.currentScreen.render();\r\n }\r\n }\r\n}\r\n\r\n// Singleton\r\nlet screenManagerInstance: ScreenManager | null = null;\r\n\r\nexport function getScreenManager(): ScreenManager {\r\n if (!screenManagerInstance) {\r\n screenManagerInstance = new ScreenManager();\r\n }\r\n return screenManagerInstance;\r\n}\r\n\r\nexport { ScreenManager };\r\n"],"names":[],"mappings":"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","debug_id":"44f25950-bd6c-5b96-9103-a2cb407219c5"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* App Module - Application architecture components
|
|
3
|
+
*
|
|
4
|
+
* This module provides core infrastructure:
|
|
5
|
+
* - Router: Navigation and route management
|
|
6
|
+
* - EventBus: Cross-component event communication
|
|
7
|
+
* - KeybindManager: Keyboard shortcut handling
|
|
8
|
+
* - Screens: Reusable UI screens (Prologue, CharacterCreation)
|
|
9
|
+
*/
|
|
10
|
+
export { Router, getRouter, type RouteType } from './Router.js';
|
|
11
|
+
export { EventBus, getEventBus, type GameEvents, type IdleGamePhase } from './EventBus.js';
|
|
12
|
+
export { KeybindManager, getKeybindManager, type KeybindDef, type KeyAction } from './Keybind.js';
|
|
13
|
+
export * from './screens/index.js';
|
|
14
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"/","sources":["app/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAGH,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,KAAK,SAAS,EAAE,MAAM,aAAa,CAAC;AAChE,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,KAAK,UAAU,EAAE,KAAK,aAAa,EAAE,MAAM,eAAe,CAAC;AAC3F,OAAO,EAAE,cAAc,EAAE,iBAAiB,EAAE,KAAK,UAAU,EAAE,KAAK,SAAS,EAAE,MAAM,cAAc,CAAC;AAGlG,cAAc,oBAAoB,CAAC"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* App Module - Application architecture components
|
|
3
|
+
*
|
|
4
|
+
* This module provides core infrastructure:
|
|
5
|
+
* - Router: Navigation and route management
|
|
6
|
+
* - EventBus: Cross-component event communication
|
|
7
|
+
* - KeybindManager: Keyboard shortcut handling
|
|
8
|
+
* - Screens: Reusable UI screens (Prologue, CharacterCreation)
|
|
9
|
+
*/
|
|
10
|
+
// Core systems
|
|
11
|
+
|
|
12
|
+
!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]="1951712d-f7b4-587a-9d6f-0330a5948a9c")}catch(e){}}();
|
|
13
|
+
export { Router, getRouter } from './Router.js';
|
|
14
|
+
export { EventBus, getEventBus } from './EventBus.js';
|
|
15
|
+
export { KeybindManager, getKeybindManager } from './Keybind.js';
|
|
16
|
+
// Screens
|
|
17
|
+
export * from './screens/index.js';
|
|
18
|
+
//# sourceMappingURL=index.js.map
|
|
19
|
+
//# debugId=1951712d-f7b4-587a-9d6f-0330a5948a9c
|