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,397 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* State Adapter - Converts IdleGameState to GameState format for UI compatibility
|
|
3
|
+
*
|
|
4
|
+
* This adapter bridges the new IdleGameManager with the existing GameUI
|
|
5
|
+
* by converting the IdleRPG state structure to the legacy GameState format.
|
|
6
|
+
*
|
|
7
|
+
* Also provides team-aware state conversion for the new multi-character system.
|
|
8
|
+
*/
|
|
9
|
+
|
|
10
|
+
!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]="6df3027b-b65b-5cb9-bc3c-073f22c9770e")}catch(e){}}();
|
|
11
|
+
import { actorToPlayer } from './Actor.js';
|
|
12
|
+
import { getActiveMembers, getTeamLeaderId } from './Team.js';
|
|
13
|
+
/**
|
|
14
|
+
* Convert IdleGamePhase to legacy GamePhase
|
|
15
|
+
*/
|
|
16
|
+
function convertPhase(phase) {
|
|
17
|
+
switch (phase) {
|
|
18
|
+
case 'in_town':
|
|
19
|
+
case 'resting':
|
|
20
|
+
case 'dead':
|
|
21
|
+
return 'exploring';
|
|
22
|
+
case 'traveling_to_dungeon':
|
|
23
|
+
case 'returning_to_town':
|
|
24
|
+
return 'traveling';
|
|
25
|
+
case 'in_dungeon':
|
|
26
|
+
return 'exploring'; // or 'combat' if in combat
|
|
27
|
+
default:
|
|
28
|
+
return 'exploring';
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Pre-defined positions for facilities around the town center
|
|
33
|
+
* Creates a radial layout around the center (which is at 2, 2)
|
|
34
|
+
*/
|
|
35
|
+
const FACILITY_POSITIONS = [
|
|
36
|
+
{ x: 2, y: 0 }, // North
|
|
37
|
+
{ x: 4, y: 1 }, // NE
|
|
38
|
+
{ x: 4, y: 3 }, // SE
|
|
39
|
+
{ x: 2, y: 4 }, // South
|
|
40
|
+
{ x: 0, y: 3 }, // SW
|
|
41
|
+
{ x: 0, y: 1 }, // NW
|
|
42
|
+
{ x: 3, y: 0 }, // N-extra
|
|
43
|
+
{ x: 1, y: 4 }, // S-extra
|
|
44
|
+
];
|
|
45
|
+
/**
|
|
46
|
+
* Create a Room from a TownFacility
|
|
47
|
+
*/
|
|
48
|
+
function facilityToRoom(facility, index, townId) {
|
|
49
|
+
const typeMap = {
|
|
50
|
+
inn: 'rest',
|
|
51
|
+
shop: 'shop',
|
|
52
|
+
blacksmith: 'shop',
|
|
53
|
+
tavern: 'rest',
|
|
54
|
+
guild: 'event',
|
|
55
|
+
temple: 'rest',
|
|
56
|
+
bank: 'shop',
|
|
57
|
+
};
|
|
58
|
+
// Use pre-defined positions or fallback to grid layout
|
|
59
|
+
const pos = FACILITY_POSITIONS[index] || { x: (index % 3) * 2, y: Math.floor(index / 3) * 2 };
|
|
60
|
+
return {
|
|
61
|
+
id: `${townId}_facility_${index}`,
|
|
62
|
+
type: typeMap[facility.type] || 'empty',
|
|
63
|
+
position: { x: pos.x, y: pos.y, floor: 1 },
|
|
64
|
+
name: facility.name,
|
|
65
|
+
description: facility.description,
|
|
66
|
+
isExplored: true,
|
|
67
|
+
isCleared: true,
|
|
68
|
+
connections: [],
|
|
69
|
+
};
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Create a GameMap from a Town
|
|
73
|
+
*/
|
|
74
|
+
function townToGameMap(town) {
|
|
75
|
+
const rooms = new Map();
|
|
76
|
+
// Town center at (2, 2) - center of the radial layout
|
|
77
|
+
const centerRoom = {
|
|
78
|
+
id: `${town.id}_center`,
|
|
79
|
+
type: 'town',
|
|
80
|
+
position: { x: 2, y: 2, floor: 1 },
|
|
81
|
+
name: town.name,
|
|
82
|
+
description: town.description,
|
|
83
|
+
isExplored: true,
|
|
84
|
+
isCleared: true,
|
|
85
|
+
connections: [],
|
|
86
|
+
};
|
|
87
|
+
rooms.set(centerRoom.id, centerRoom);
|
|
88
|
+
// Create rooms for each facility (positioned around center)
|
|
89
|
+
town.facilities.forEach((facility, index) => {
|
|
90
|
+
const room = facilityToRoom(facility, index, town.id);
|
|
91
|
+
room.connections.push(centerRoom.id);
|
|
92
|
+
centerRoom.connections.push(room.id);
|
|
93
|
+
rooms.set(room.id, room);
|
|
94
|
+
});
|
|
95
|
+
// Dungeon exits positioned to the right of the town
|
|
96
|
+
const dungeonExitPositions = [
|
|
97
|
+
{ x: 5, y: 2 }, // East
|
|
98
|
+
{ x: 5, y: 1 }, // NE
|
|
99
|
+
{ x: 5, y: 3 }, // SE
|
|
100
|
+
];
|
|
101
|
+
// Create exit rooms for connected dungeons
|
|
102
|
+
town.connectedDungeons.forEach((dungeonId, index) => {
|
|
103
|
+
const pos = dungeonExitPositions[index] || { x: 5, y: index };
|
|
104
|
+
const exitRoom = {
|
|
105
|
+
id: `${town.id}_dungeon_exit_${index}`,
|
|
106
|
+
type: 'dungeon_entrance',
|
|
107
|
+
position: { x: pos.x, y: pos.y, floor: 1 },
|
|
108
|
+
name: `→ ${dungeonId}`,
|
|
109
|
+
description: 'A path leading to adventure...',
|
|
110
|
+
isExplored: true,
|
|
111
|
+
isCleared: true,
|
|
112
|
+
connections: [centerRoom.id],
|
|
113
|
+
};
|
|
114
|
+
centerRoom.connections.push(exitRoom.id);
|
|
115
|
+
rooms.set(exitRoom.id, exitRoom);
|
|
116
|
+
});
|
|
117
|
+
return {
|
|
118
|
+
id: town.id,
|
|
119
|
+
name: town.name,
|
|
120
|
+
type: 'town',
|
|
121
|
+
floor: 1,
|
|
122
|
+
rooms,
|
|
123
|
+
startRoomId: centerRoom.id,
|
|
124
|
+
generatedAt: Date.now(),
|
|
125
|
+
};
|
|
126
|
+
}
|
|
127
|
+
/**
|
|
128
|
+
* Convert DungeonRoom to Room
|
|
129
|
+
*/
|
|
130
|
+
function dungeonRoomToRoom(dungeonRoom) {
|
|
131
|
+
const typeMap = {
|
|
132
|
+
entrance: 'dungeon_entrance',
|
|
133
|
+
combat: 'combat',
|
|
134
|
+
treasure: 'treasure',
|
|
135
|
+
rest: 'rest',
|
|
136
|
+
puzzle: 'event',
|
|
137
|
+
trap: 'event',
|
|
138
|
+
boss: 'combat',
|
|
139
|
+
exit: 'dungeon_entrance',
|
|
140
|
+
empty: 'empty',
|
|
141
|
+
shop: 'shop',
|
|
142
|
+
shrine: 'event',
|
|
143
|
+
dead_end: 'empty',
|
|
144
|
+
safe_room: 'rest',
|
|
145
|
+
};
|
|
146
|
+
return {
|
|
147
|
+
id: dungeonRoom.id,
|
|
148
|
+
type: typeMap[dungeonRoom.type] || 'empty',
|
|
149
|
+
position: { ...dungeonRoom.position, floor: 1 },
|
|
150
|
+
name: dungeonRoom.name,
|
|
151
|
+
description: dungeonRoom.description,
|
|
152
|
+
isExplored: dungeonRoom.isExplored,
|
|
153
|
+
isCleared: dungeonRoom.isCleared,
|
|
154
|
+
connections: dungeonRoom.connections.map(c => c.targetRoomId),
|
|
155
|
+
enemies: dungeonRoom.content.enemies,
|
|
156
|
+
items: dungeonRoom.content.items,
|
|
157
|
+
};
|
|
158
|
+
}
|
|
159
|
+
/**
|
|
160
|
+
* Create a GameMap from Dungeon and DungeonRunnerState
|
|
161
|
+
*/
|
|
162
|
+
function dungeonToGameMap(dungeon, runnerState) {
|
|
163
|
+
const rooms = new Map();
|
|
164
|
+
// Get current level
|
|
165
|
+
const currentLevelIndex = runnerState?.currentLevel ?? 0;
|
|
166
|
+
const currentLevel = dungeon.levels[currentLevelIndex];
|
|
167
|
+
if (currentLevel) {
|
|
168
|
+
// Convert all rooms in current level
|
|
169
|
+
for (const dungeonRoom of currentLevel.rooms) {
|
|
170
|
+
const room = dungeonRoomToRoom(dungeonRoom);
|
|
171
|
+
// Mark explored rooms
|
|
172
|
+
if (runnerState?.exploredRooms.has(dungeonRoom.id)) {
|
|
173
|
+
room.isExplored = true;
|
|
174
|
+
}
|
|
175
|
+
if (runnerState?.clearedRooms.has(dungeonRoom.id)) {
|
|
176
|
+
room.isCleared = true;
|
|
177
|
+
}
|
|
178
|
+
rooms.set(room.id, room);
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
const startRoomId = currentLevel?.entranceRoomId || '';
|
|
182
|
+
return {
|
|
183
|
+
id: dungeon.id,
|
|
184
|
+
name: `${dungeon.name} - Level ${currentLevelIndex + 1}`,
|
|
185
|
+
type: 'dungeon',
|
|
186
|
+
floor: currentLevelIndex + 1,
|
|
187
|
+
rooms,
|
|
188
|
+
startRoomId,
|
|
189
|
+
bossRoomId: currentLevel?.bossRoomId,
|
|
190
|
+
generatedAt: Date.now(),
|
|
191
|
+
};
|
|
192
|
+
}
|
|
193
|
+
/**
|
|
194
|
+
* Create TravelState from IdleGameState
|
|
195
|
+
*/
|
|
196
|
+
function createTravelState(state) {
|
|
197
|
+
if (state.phase !== 'traveling_to_dungeon' && state.phase !== 'returning_to_town') {
|
|
198
|
+
return undefined;
|
|
199
|
+
}
|
|
200
|
+
const fromId = state.phase === 'traveling_to_dungeon'
|
|
201
|
+
? `${state.currentTown.id}_center`
|
|
202
|
+
: state.currentDungeon?.id || 'dungeon';
|
|
203
|
+
const toId = state.phase === 'traveling_to_dungeon'
|
|
204
|
+
? state.currentDungeon?.id || 'dungeon'
|
|
205
|
+
: `${state.currentTown.id}_center`;
|
|
206
|
+
return {
|
|
207
|
+
fromRoomId: fromId,
|
|
208
|
+
toRoomId: toId,
|
|
209
|
+
startTime: Date.now() - (state.travelProgress * state.travelDuration * 1000),
|
|
210
|
+
duration: state.travelDuration,
|
|
211
|
+
progress: state.travelProgress,
|
|
212
|
+
events: [],
|
|
213
|
+
};
|
|
214
|
+
}
|
|
215
|
+
/**
|
|
216
|
+
* Convert IdleGameState to GameState
|
|
217
|
+
*/
|
|
218
|
+
export function adaptIdleGameStateToGameState(idleState) {
|
|
219
|
+
let gameMap;
|
|
220
|
+
let currentRoom;
|
|
221
|
+
if (idleState.phase === 'in_dungeon' && idleState.currentDungeon && idleState.dungeonRunner) {
|
|
222
|
+
// In dungeon - use dungeon map
|
|
223
|
+
const runnerState = idleState.dungeonRunner.getState();
|
|
224
|
+
gameMap = dungeonToGameMap(idleState.currentDungeon, runnerState);
|
|
225
|
+
// Get current room
|
|
226
|
+
const currentRoomId = runnerState?.currentRoomId || gameMap.startRoomId;
|
|
227
|
+
currentRoom = gameMap.rooms.get(currentRoomId) || {
|
|
228
|
+
id: 'unknown',
|
|
229
|
+
type: 'empty',
|
|
230
|
+
position: { x: 0, y: 0, floor: 1 },
|
|
231
|
+
name: 'Unknown',
|
|
232
|
+
description: 'You are lost...',
|
|
233
|
+
isExplored: true,
|
|
234
|
+
isCleared: false,
|
|
235
|
+
connections: [],
|
|
236
|
+
};
|
|
237
|
+
}
|
|
238
|
+
else {
|
|
239
|
+
// In town or traveling - use town map
|
|
240
|
+
gameMap = townToGameMap(idleState.currentTown);
|
|
241
|
+
currentRoom = gameMap.rooms.get(gameMap.startRoomId) || {
|
|
242
|
+
id: idleState.currentTown.id,
|
|
243
|
+
type: 'town',
|
|
244
|
+
position: { x: 0, y: 0, floor: 1 },
|
|
245
|
+
name: idleState.currentTown.name,
|
|
246
|
+
description: idleState.currentTown.description,
|
|
247
|
+
isExplored: true,
|
|
248
|
+
isCleared: true,
|
|
249
|
+
connections: [],
|
|
250
|
+
};
|
|
251
|
+
}
|
|
252
|
+
// Convert phase
|
|
253
|
+
let phase = convertPhase(idleState.phase);
|
|
254
|
+
// Check if in combat
|
|
255
|
+
if (idleState.phase === 'in_dungeon' && idleState.dungeonRunner) {
|
|
256
|
+
const runnerState = idleState.dungeonRunner.getState();
|
|
257
|
+
if (runnerState?.activeCombat) {
|
|
258
|
+
phase = 'combat';
|
|
259
|
+
}
|
|
260
|
+
}
|
|
261
|
+
// Build GameState
|
|
262
|
+
const gameState = {
|
|
263
|
+
phase,
|
|
264
|
+
player: idleState.player,
|
|
265
|
+
currentMap: gameMap,
|
|
266
|
+
currentRoom,
|
|
267
|
+
pendingEvents: [],
|
|
268
|
+
travelState: createTravelState(idleState),
|
|
269
|
+
gameTime: idleState.statistics.totalPlayTime,
|
|
270
|
+
lastUpdateTime: Date.now(),
|
|
271
|
+
isPaused: false,
|
|
272
|
+
};
|
|
273
|
+
// Add combat state if in combat
|
|
274
|
+
if (phase === 'combat' && idleState.dungeonRunner) {
|
|
275
|
+
const runnerState = idleState.dungeonRunner.getState();
|
|
276
|
+
if (runnerState?.activeCombat) {
|
|
277
|
+
gameState.combat = {
|
|
278
|
+
isActive: true,
|
|
279
|
+
enemies: runnerState.activeCombat.enemies.map(e => ({
|
|
280
|
+
...e,
|
|
281
|
+
id: e.id || `enemy_${Math.random().toString(36).substr(2, 9)}`,
|
|
282
|
+
})),
|
|
283
|
+
turn: runnerState.activeCombat.turn,
|
|
284
|
+
playerHp: idleState.player.stats.hp,
|
|
285
|
+
log: runnerState.activeCombat.log || [],
|
|
286
|
+
strategy: 'balanced',
|
|
287
|
+
startTime: Date.now(),
|
|
288
|
+
estimatedEndTime: Date.now() + 60000,
|
|
289
|
+
};
|
|
290
|
+
}
|
|
291
|
+
}
|
|
292
|
+
return gameState;
|
|
293
|
+
}
|
|
294
|
+
/**
|
|
295
|
+
* Get connected rooms for UI display
|
|
296
|
+
* Returns facilities in town or adjacent rooms in dungeon
|
|
297
|
+
*/
|
|
298
|
+
export function getConnectedRoomsForUI(idleState) {
|
|
299
|
+
if (idleState.phase === 'in_town' || idleState.phase === 'resting') {
|
|
300
|
+
// Show facilities as connected rooms
|
|
301
|
+
return idleState.currentTown.facilities.map((facility, index) => facilityToRoom(facility, index, idleState.currentTown.id));
|
|
302
|
+
}
|
|
303
|
+
if (idleState.phase === 'in_dungeon' && idleState.currentDungeon && idleState.dungeonRunner) {
|
|
304
|
+
const runnerState = idleState.dungeonRunner.getState();
|
|
305
|
+
if (!runnerState)
|
|
306
|
+
return [];
|
|
307
|
+
const currentLevelIndex = runnerState.currentLevel;
|
|
308
|
+
const currentLevel = idleState.currentDungeon.levels[currentLevelIndex];
|
|
309
|
+
if (!currentLevel)
|
|
310
|
+
return [];
|
|
311
|
+
const currentRoom = currentLevel.rooms.find(r => r.id === runnerState.currentRoomId);
|
|
312
|
+
if (!currentRoom)
|
|
313
|
+
return [];
|
|
314
|
+
// Get connected rooms
|
|
315
|
+
return currentRoom.connections
|
|
316
|
+
.map(conn => {
|
|
317
|
+
const room = currentLevel.rooms.find(r => r.id === conn.targetRoomId);
|
|
318
|
+
return room ? dungeonRoomToRoom(room) : null;
|
|
319
|
+
})
|
|
320
|
+
.filter((r) => r !== null);
|
|
321
|
+
}
|
|
322
|
+
return [];
|
|
323
|
+
}
|
|
324
|
+
/**
|
|
325
|
+
* Get the team leader as a Player for legacy UI components
|
|
326
|
+
*/
|
|
327
|
+
export function getTeamLeaderAsPlayer(team, actors) {
|
|
328
|
+
const leaderId = getTeamLeaderId(team);
|
|
329
|
+
if (!leaderId)
|
|
330
|
+
return null;
|
|
331
|
+
const leader = actors[leaderId];
|
|
332
|
+
if (!leader)
|
|
333
|
+
return null;
|
|
334
|
+
// Convert actor to player, using team's shared gold
|
|
335
|
+
const player = actorToPlayer(leader);
|
|
336
|
+
player.stats.gold = team.sharedGold;
|
|
337
|
+
player.inventory = [...leader.inventory, ...team.sharedInventory];
|
|
338
|
+
return player;
|
|
339
|
+
}
|
|
340
|
+
export function getTeamStatsSummary(team, actors) {
|
|
341
|
+
const activeActors = getActiveMembers(team, actors);
|
|
342
|
+
const aliveActors = activeActors.filter(a => a.stats.hp > 0);
|
|
343
|
+
return {
|
|
344
|
+
totalHp: activeActors.reduce((sum, a) => sum + a.stats.hp, 0),
|
|
345
|
+
totalMaxHp: activeActors.reduce((sum, a) => sum + a.stats.maxHp, 0),
|
|
346
|
+
averageLevel: activeActors.length > 0
|
|
347
|
+
? Math.floor(activeActors.reduce((sum, a) => sum + a.stats.level, 0) / activeActors.length)
|
|
348
|
+
: 0,
|
|
349
|
+
totalAttack: activeActors.reduce((sum, a) => sum + a.stats.attack, 0),
|
|
350
|
+
totalDefense: activeActors.reduce((sum, a) => sum + a.stats.defense, 0),
|
|
351
|
+
activeCount: activeActors.length,
|
|
352
|
+
aliveCount: aliveActors.length,
|
|
353
|
+
};
|
|
354
|
+
}
|
|
355
|
+
/**
|
|
356
|
+
* Get HP status string for all team members
|
|
357
|
+
* Format: "Alice: 80/100 | Bob: 50/80 | ..."
|
|
358
|
+
*/
|
|
359
|
+
export function getTeamHpStatusString(team, actors) {
|
|
360
|
+
const activeActors = getActiveMembers(team, actors);
|
|
361
|
+
return activeActors
|
|
362
|
+
.map(a => `${a.name}: ${a.stats.hp}/${a.stats.maxHp}`)
|
|
363
|
+
.join(' | ');
|
|
364
|
+
}
|
|
365
|
+
/**
|
|
366
|
+
* Get compact team status for status bar
|
|
367
|
+
* Format: "Team (3/4): Lv5 HP:85%"
|
|
368
|
+
*/
|
|
369
|
+
export function getCompactTeamStatus(team, actors) {
|
|
370
|
+
const summary = getTeamStatsSummary(team, actors);
|
|
371
|
+
const hpPercent = summary.totalMaxHp > 0
|
|
372
|
+
? Math.floor((summary.totalHp / summary.totalMaxHp) * 100)
|
|
373
|
+
: 0;
|
|
374
|
+
return `Team (${summary.aliveCount}/${summary.activeCount}): Lv${summary.averageLevel} HP:${hpPercent}%`;
|
|
375
|
+
}
|
|
376
|
+
/**
|
|
377
|
+
* Convert team combat state to legacy combat state for UI
|
|
378
|
+
* Uses the team leader's perspective
|
|
379
|
+
*/
|
|
380
|
+
export function teamCombatToLegacyCombat(teamCombat, team, actors) {
|
|
381
|
+
// Calculate total team HP for legacy display
|
|
382
|
+
const totalHp = team.activeMembers.reduce((sum, id) => {
|
|
383
|
+
return sum + (teamCombat.actorHp[id] ?? 0);
|
|
384
|
+
}, 0);
|
|
385
|
+
return {
|
|
386
|
+
isActive: teamCombat.isActive,
|
|
387
|
+
turn: teamCombat.turn,
|
|
388
|
+
playerHp: totalHp,
|
|
389
|
+
enemies: teamCombat.enemies,
|
|
390
|
+
log: teamCombat.log,
|
|
391
|
+
strategy: 'balanced',
|
|
392
|
+
startTime: teamCombat.startTime,
|
|
393
|
+
estimatedEndTime: teamCombat.estimatedEndTime,
|
|
394
|
+
};
|
|
395
|
+
}
|
|
396
|
+
//# sourceMappingURL=StateAdapter.js.map
|
|
397
|
+
//# debugId=6df3027b-b65b-5cb9-bc3c-073f22c9770e
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"StateAdapter.js","sources":["core/StateAdapter.ts"],"sourceRoot":"/","sourcesContent":["/**\r\n * State Adapter - Converts IdleGameState to GameState format for UI compatibility\r\n *\r\n * This adapter bridges the new IdleGameManager with the existing GameUI\r\n * by converting the IdleRPG state structure to the legacy GameState format.\r\n *\r\n * Also provides team-aware state conversion for the new multi-character system.\r\n */\r\n\r\nimport type {\r\n GameState,\r\n GameMap,\r\n Room,\r\n RoomType,\r\n Player,\r\n TravelState,\r\n GameEvent,\r\n Town,\r\n Dungeon,\r\n DungeonRoom,\r\n TownFacility,\r\n Actor,\r\n Team,\r\n TeamCombatState,\r\n} from './types.js';\r\nimport type { IdleGameState, IdleGamePhase } from './IdleGameManager.js';\r\nimport type { DungeonRunnerState } from './DungeonRunner.js';\r\nimport { actorToPlayer } from './Actor.js';\r\nimport { getActiveMembers, getTeamLeaderId } from './Team.js';\r\n\r\n/**\r\n * Convert IdleGamePhase to legacy GamePhase\r\n */\r\nfunction convertPhase(phase: IdleGamePhase): 'exploring' | 'traveling' | 'combat' | 'dialog' {\r\n switch (phase) {\r\n case 'in_town':\r\n case 'resting':\r\n case 'dead':\r\n return 'exploring';\r\n case 'traveling_to_dungeon':\r\n case 'returning_to_town':\r\n return 'traveling';\r\n case 'in_dungeon':\r\n return 'exploring'; // or 'combat' if in combat\r\n default:\r\n return 'exploring';\r\n }\r\n}\r\n\r\n/**\r\n * Pre-defined positions for facilities around the town center\r\n * Creates a radial layout around the center (which is at 2, 2)\r\n */\r\nconst FACILITY_POSITIONS: Array<{ x: number; y: number }> = [\r\n { x: 2, y: 0 }, // North\r\n { x: 4, y: 1 }, // NE\r\n { x: 4, y: 3 }, // SE\r\n { x: 2, y: 4 }, // South\r\n { x: 0, y: 3 }, // SW\r\n { x: 0, y: 1 }, // NW\r\n { x: 3, y: 0 }, // N-extra\r\n { x: 1, y: 4 }, // S-extra\r\n];\r\n\r\n/**\r\n * Create a Room from a TownFacility\r\n */\r\nfunction facilityToRoom(facility: TownFacility, index: number, townId: string): Room {\r\n const typeMap: Record<string, RoomType> = {\r\n inn: 'rest',\r\n shop: 'shop',\r\n blacksmith: 'shop',\r\n tavern: 'rest',\r\n guild: 'event',\r\n temple: 'rest',\r\n bank: 'shop',\r\n };\r\n\r\n // Use pre-defined positions or fallback to grid layout\r\n const pos = FACILITY_POSITIONS[index] || { x: (index % 3) * 2, y: Math.floor(index / 3) * 2 };\r\n\r\n return {\r\n id: `${townId}_facility_${index}`,\r\n type: typeMap[facility.type] || 'empty',\r\n position: { x: pos.x, y: pos.y, floor: 1 },\r\n name: facility.name,\r\n description: facility.description,\r\n isExplored: true,\r\n isCleared: true,\r\n connections: [],\r\n };\r\n}\r\n\r\n/**\r\n * Create a GameMap from a Town\r\n */\r\nfunction townToGameMap(town: Town): GameMap {\r\n const rooms = new Map<string, Room>();\r\n\r\n // Town center at (2, 2) - center of the radial layout\r\n const centerRoom: Room = {\r\n id: `${town.id}_center`,\r\n type: 'town',\r\n position: { x: 2, y: 2, floor: 1 },\r\n name: town.name,\r\n description: town.description,\r\n isExplored: true,\r\n isCleared: true,\r\n connections: [],\r\n };\r\n rooms.set(centerRoom.id, centerRoom);\r\n\r\n // Create rooms for each facility (positioned around center)\r\n town.facilities.forEach((facility, index) => {\r\n const room = facilityToRoom(facility, index, town.id);\r\n room.connections.push(centerRoom.id);\r\n centerRoom.connections.push(room.id);\r\n rooms.set(room.id, room);\r\n });\r\n\r\n // Dungeon exits positioned to the right of the town\r\n const dungeonExitPositions = [\r\n { x: 5, y: 2 }, // East\r\n { x: 5, y: 1 }, // NE\r\n { x: 5, y: 3 }, // SE\r\n ];\r\n\r\n // Create exit rooms for connected dungeons\r\n town.connectedDungeons.forEach((dungeonId, index) => {\r\n const pos = dungeonExitPositions[index] || { x: 5, y: index };\r\n const exitRoom: Room = {\r\n id: `${town.id}_dungeon_exit_${index}`,\r\n type: 'dungeon_entrance',\r\n position: { x: pos.x, y: pos.y, floor: 1 },\r\n name: `→ ${dungeonId}`,\r\n description: 'A path leading to adventure...',\r\n isExplored: true,\r\n isCleared: true,\r\n connections: [centerRoom.id],\r\n };\r\n centerRoom.connections.push(exitRoom.id);\r\n rooms.set(exitRoom.id, exitRoom);\r\n });\r\n\r\n return {\r\n id: town.id,\r\n name: town.name,\r\n type: 'town',\r\n floor: 1,\r\n rooms,\r\n startRoomId: centerRoom.id,\r\n generatedAt: Date.now(),\r\n };\r\n}\r\n\r\n/**\r\n * Convert DungeonRoom to Room\r\n */\r\nfunction dungeonRoomToRoom(dungeonRoom: DungeonRoom): Room {\r\n const typeMap: Record<string, RoomType> = {\r\n entrance: 'dungeon_entrance',\r\n combat: 'combat',\r\n treasure: 'treasure',\r\n rest: 'rest',\r\n puzzle: 'event',\r\n trap: 'event',\r\n boss: 'combat',\r\n exit: 'dungeon_entrance',\r\n empty: 'empty',\r\n shop: 'shop',\r\n shrine: 'event',\r\n dead_end: 'empty',\r\n safe_room: 'rest',\r\n };\r\n\r\n return {\r\n id: dungeonRoom.id,\r\n type: typeMap[dungeonRoom.type] || 'empty',\r\n position: { ...dungeonRoom.position, floor: 1 },\r\n name: dungeonRoom.name,\r\n description: dungeonRoom.description,\r\n isExplored: dungeonRoom.isExplored,\r\n isCleared: dungeonRoom.isCleared,\r\n connections: dungeonRoom.connections.map(c => c.targetRoomId),\r\n enemies: dungeonRoom.content.enemies,\r\n items: dungeonRoom.content.items,\r\n };\r\n}\r\n\r\n/**\r\n * Create a GameMap from Dungeon and DungeonRunnerState\r\n */\r\nfunction dungeonToGameMap(dungeon: Dungeon, runnerState: DungeonRunnerState | null): GameMap {\r\n const rooms = new Map<string, Room>();\r\n\r\n // Get current level\r\n const currentLevelIndex = runnerState?.currentLevel ?? 0;\r\n const currentLevel = dungeon.levels[currentLevelIndex];\r\n\r\n if (currentLevel) {\r\n // Convert all rooms in current level\r\n for (const dungeonRoom of currentLevel.rooms) {\r\n const room = dungeonRoomToRoom(dungeonRoom);\r\n\r\n // Mark explored rooms\r\n if (runnerState?.exploredRooms.has(dungeonRoom.id)) {\r\n room.isExplored = true;\r\n }\r\n if (runnerState?.clearedRooms.has(dungeonRoom.id)) {\r\n room.isCleared = true;\r\n }\r\n\r\n rooms.set(room.id, room);\r\n }\r\n }\r\n\r\n const startRoomId = currentLevel?.entranceRoomId || '';\r\n\r\n return {\r\n id: dungeon.id,\r\n name: `${dungeon.name} - Level ${currentLevelIndex + 1}`,\r\n type: 'dungeon',\r\n floor: currentLevelIndex + 1,\r\n rooms,\r\n startRoomId,\r\n bossRoomId: currentLevel?.bossRoomId,\r\n generatedAt: Date.now(),\r\n };\r\n}\r\n\r\n/**\r\n * Create TravelState from IdleGameState\r\n */\r\nfunction createTravelState(state: IdleGameState): TravelState | undefined {\r\n if (state.phase !== 'traveling_to_dungeon' && state.phase !== 'returning_to_town') {\r\n return undefined;\r\n }\r\n\r\n const fromId = state.phase === 'traveling_to_dungeon'\r\n ? `${state.currentTown.id}_center`\r\n : state.currentDungeon?.id || 'dungeon';\r\n\r\n const toId = state.phase === 'traveling_to_dungeon'\r\n ? state.currentDungeon?.id || 'dungeon'\r\n : `${state.currentTown.id}_center`;\r\n\r\n return {\r\n fromRoomId: fromId,\r\n toRoomId: toId,\r\n startTime: Date.now() - (state.travelProgress * state.travelDuration * 1000),\r\n duration: state.travelDuration,\r\n progress: state.travelProgress,\r\n events: [],\r\n };\r\n}\r\n\r\n/**\r\n * Convert IdleGameState to GameState\r\n */\r\nexport function adaptIdleGameStateToGameState(idleState: IdleGameState): GameState {\r\n let gameMap: GameMap;\r\n let currentRoom: Room;\r\n\r\n if (idleState.phase === 'in_dungeon' && idleState.currentDungeon && idleState.dungeonRunner) {\r\n // In dungeon - use dungeon map\r\n const runnerState = idleState.dungeonRunner.getState();\r\n gameMap = dungeonToGameMap(idleState.currentDungeon, runnerState);\r\n\r\n // Get current room\r\n const currentRoomId = runnerState?.currentRoomId || gameMap.startRoomId;\r\n currentRoom = gameMap.rooms.get(currentRoomId) || {\r\n id: 'unknown',\r\n type: 'empty',\r\n position: { x: 0, y: 0, floor: 1 },\r\n name: 'Unknown',\r\n description: 'You are lost...',\r\n isExplored: true,\r\n isCleared: false,\r\n connections: [],\r\n };\r\n } else {\r\n // In town or traveling - use town map\r\n gameMap = townToGameMap(idleState.currentTown);\r\n currentRoom = gameMap.rooms.get(gameMap.startRoomId) || {\r\n id: idleState.currentTown.id,\r\n type: 'town',\r\n position: { x: 0, y: 0, floor: 1 },\r\n name: idleState.currentTown.name,\r\n description: idleState.currentTown.description,\r\n isExplored: true,\r\n isCleared: true,\r\n connections: [],\r\n };\r\n }\r\n\r\n // Convert phase\r\n let phase = convertPhase(idleState.phase);\r\n\r\n // Check if in combat\r\n if (idleState.phase === 'in_dungeon' && idleState.dungeonRunner) {\r\n const runnerState = idleState.dungeonRunner.getState();\r\n if (runnerState?.activeCombat) {\r\n phase = 'combat';\r\n }\r\n }\r\n\r\n // Build GameState\r\n const gameState: GameState = {\r\n phase,\r\n player: idleState.player,\r\n currentMap: gameMap,\r\n currentRoom,\r\n pendingEvents: [],\r\n travelState: createTravelState(idleState),\r\n gameTime: idleState.statistics.totalPlayTime,\r\n lastUpdateTime: Date.now(),\r\n isPaused: false,\r\n };\r\n\r\n // Add combat state if in combat\r\n if (phase === 'combat' && idleState.dungeonRunner) {\r\n const runnerState = idleState.dungeonRunner.getState();\r\n if (runnerState?.activeCombat) {\r\n gameState.combat = {\r\n isActive: true,\r\n enemies: runnerState.activeCombat.enemies.map(e => ({\r\n ...e,\r\n id: e.id || `enemy_${Math.random().toString(36).substr(2, 9)}`,\r\n })),\r\n turn: runnerState.activeCombat.turn,\r\n playerHp: idleState.player.stats.hp,\r\n log: runnerState.activeCombat.log || [],\r\n strategy: 'balanced',\r\n startTime: Date.now(),\r\n estimatedEndTime: Date.now() + 60000,\r\n };\r\n }\r\n }\r\n\r\n return gameState;\r\n}\r\n\r\n/**\r\n * Get connected rooms for UI display\r\n * Returns facilities in town or adjacent rooms in dungeon\r\n */\r\nexport function getConnectedRoomsForUI(idleState: IdleGameState): Room[] {\r\n if (idleState.phase === 'in_town' || idleState.phase === 'resting') {\r\n // Show facilities as connected rooms\r\n return idleState.currentTown.facilities.map((facility, index) =>\r\n facilityToRoom(facility, index, idleState.currentTown.id)\r\n );\r\n }\r\n\r\n if (idleState.phase === 'in_dungeon' && idleState.currentDungeon && idleState.dungeonRunner) {\r\n const runnerState = idleState.dungeonRunner.getState();\r\n if (!runnerState) return [];\r\n\r\n const currentLevelIndex = runnerState.currentLevel;\r\n const currentLevel = idleState.currentDungeon.levels[currentLevelIndex];\r\n if (!currentLevel) return [];\r\n\r\n const currentRoom = currentLevel.rooms.find(r => r.id === runnerState.currentRoomId);\r\n if (!currentRoom) return [];\r\n\r\n // Get connected rooms\r\n return currentRoom.connections\r\n .map(conn => {\r\n const room = currentLevel.rooms.find(r => r.id === conn.targetRoomId);\r\n return room ? dungeonRoomToRoom(room) : null;\r\n })\r\n .filter((r): r is Room => r !== null);\r\n }\r\n\r\n return [];\r\n}\r\n\r\n// ============================================================================\r\n// Team-aware State Adapters\r\n// ============================================================================\r\n\r\n/**\r\n * Team-aware game state for the new multi-character system\r\n */\r\nexport interface TeamGameState {\r\n phase: 'exploring' | 'traveling' | 'combat' | 'dialog';\r\n team: Team;\r\n actors: Record<string, Actor>;\r\n activeActors: Actor[]; // Currently active team members\r\n leader: Actor | null; // Team leader for display\r\n currentMap: GameMap;\r\n currentRoom: Room;\r\n combat?: TeamCombatState;\r\n pendingEvents: GameEvent[];\r\n travelState?: TravelState;\r\n gameTime: number;\r\n lastUpdateTime: number;\r\n isPaused: boolean;\r\n}\r\n\r\n/**\r\n * Get the team leader as a Player for legacy UI components\r\n */\r\nexport function getTeamLeaderAsPlayer(team: Team, actors: Record<string, Actor>): Player | null {\r\n const leaderId = getTeamLeaderId(team);\r\n if (!leaderId) return null;\r\n\r\n const leader = actors[leaderId];\r\n if (!leader) return null;\r\n\r\n // Convert actor to player, using team's shared gold\r\n const player = actorToPlayer(leader);\r\n player.stats.gold = team.sharedGold;\r\n player.inventory = [...leader.inventory, ...team.sharedInventory];\r\n return player;\r\n}\r\n\r\n/**\r\n * Get summary stats for the entire team\r\n */\r\nexport interface TeamStatsSummary {\r\n totalHp: number;\r\n totalMaxHp: number;\r\n averageLevel: number;\r\n totalAttack: number;\r\n totalDefense: number;\r\n activeCount: number;\r\n aliveCount: number;\r\n}\r\n\r\nexport function getTeamStatsSummary(team: Team, actors: Record<string, Actor>): TeamStatsSummary {\r\n const activeActors = getActiveMembers(team, actors);\r\n const aliveActors = activeActors.filter(a => a.stats.hp > 0);\r\n\r\n return {\r\n totalHp: activeActors.reduce((sum, a) => sum + a.stats.hp, 0),\r\n totalMaxHp: activeActors.reduce((sum, a) => sum + a.stats.maxHp, 0),\r\n averageLevel: activeActors.length > 0\r\n ? Math.floor(activeActors.reduce((sum, a) => sum + a.stats.level, 0) / activeActors.length)\r\n : 0,\r\n totalAttack: activeActors.reduce((sum, a) => sum + a.stats.attack, 0),\r\n totalDefense: activeActors.reduce((sum, a) => sum + a.stats.defense, 0),\r\n activeCount: activeActors.length,\r\n aliveCount: aliveActors.length,\r\n };\r\n}\r\n\r\n/**\r\n * Get HP status string for all team members\r\n * Format: \"Alice: 80/100 | Bob: 50/80 | ...\"\r\n */\r\nexport function getTeamHpStatusString(team: Team, actors: Record<string, Actor>): string {\r\n const activeActors = getActiveMembers(team, actors);\r\n return activeActors\r\n .map(a => `${a.name}: ${a.stats.hp}/${a.stats.maxHp}`)\r\n .join(' | ');\r\n}\r\n\r\n/**\r\n * Get compact team status for status bar\r\n * Format: \"Team (3/4): Lv5 HP:85%\"\r\n */\r\nexport function getCompactTeamStatus(team: Team, actors: Record<string, Actor>): string {\r\n const summary = getTeamStatsSummary(team, actors);\r\n const hpPercent = summary.totalMaxHp > 0\r\n ? Math.floor((summary.totalHp / summary.totalMaxHp) * 100)\r\n : 0;\r\n return `Team (${summary.aliveCount}/${summary.activeCount}): Lv${summary.averageLevel} HP:${hpPercent}%`;\r\n}\r\n\r\n/**\r\n * Convert team combat state to legacy combat state for UI\r\n * Uses the team leader's perspective\r\n */\r\nexport function teamCombatToLegacyCombat(\r\n teamCombat: TeamCombatState,\r\n team: Team,\r\n actors: Record<string, Actor>\r\n): {\r\n isActive: boolean;\r\n turn: number;\r\n playerHp: number;\r\n enemies: typeof teamCombat.enemies;\r\n log: typeof teamCombat.log;\r\n strategy: 'balanced';\r\n startTime: number;\r\n estimatedEndTime: number;\r\n} {\r\n // Calculate total team HP for legacy display\r\n const totalHp = team.activeMembers.reduce((sum, id) => {\r\n return sum + (teamCombat.actorHp[id] ?? 0);\r\n }, 0);\r\n\r\n return {\r\n isActive: teamCombat.isActive,\r\n turn: teamCombat.turn,\r\n playerHp: totalHp,\r\n enemies: teamCombat.enemies,\r\n log: teamCombat.log,\r\n strategy: 'balanced',\r\n startTime: teamCombat.startTime,\r\n estimatedEndTime: teamCombat.estimatedEndTime,\r\n };\r\n}\r\n"],"names":[],"mappings":"AAAA;;;;;;;GAOG;;;AAoBH,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAC3C,OAAO,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AAE9D;;GAEG;AACH,SAAS,YAAY,CAAC,KAAoB;IACxC,QAAQ,KAAK,EAAE,CAAC;QACd,KAAK,SAAS,CAAC;QACf,KAAK,SAAS,CAAC;QACf,KAAK,MAAM;YACT,OAAO,WAAW,CAAC;QACrB,KAAK,sBAAsB,CAAC;QAC5B,KAAK,mBAAmB;YACtB,OAAO,WAAW,CAAC;QACrB,KAAK,YAAY;YACf,OAAO,WAAW,CAAC,CAAC,2BAA2B;QACjD;YACE,OAAO,WAAW,CAAC;IACvB,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,MAAM,kBAAkB,GAAoC;IAC1D,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAG,QAAQ;IACzB,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAG,KAAK;IACtB,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAG,KAAK;IACtB,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAG,QAAQ;IACzB,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAG,KAAK;IACtB,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAG,KAAK;IACtB,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAG,UAAU;IAC3B,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAG,UAAU;CAC5B,CAAC;AAEF;;GAEG;AACH,SAAS,cAAc,CAAC,QAAsB,EAAE,KAAa,EAAE,MAAc;IAC3E,MAAM,OAAO,GAA6B;QACxC,GAAG,EAAE,MAAM;QACX,IAAI,EAAE,MAAM;QACZ,UAAU,EAAE,MAAM;QAClB,MAAM,EAAE,MAAM;QACd,KAAK,EAAE,OAAO;QACd,MAAM,EAAE,MAAM;QACd,IAAI,EAAE,MAAM;KACb,CAAC;IAEF,uDAAuD;IACvD,MAAM,GAAG,GAAG,kBAAkB,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,KAAK,GAAG,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC;IAE9F,OAAO;QACL,EAAE,EAAE,GAAG,MAAM,aAAa,KAAK,EAAE;QACjC,IAAI,EAAE,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,OAAO;QACvC,QAAQ,EAAE,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE;QAC1C,IAAI,EAAE,QAAQ,CAAC,IAAI;QACnB,WAAW,EAAE,QAAQ,CAAC,WAAW;QACjC,UAAU,EAAE,IAAI;QAChB,SAAS,EAAE,IAAI;QACf,WAAW,EAAE,EAAE;KAChB,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,SAAS,aAAa,CAAC,IAAU;IAC/B,MAAM,KAAK,GAAG,IAAI,GAAG,EAAgB,CAAC;IAEtC,sDAAsD;IACtD,MAAM,UAAU,GAAS;QACvB,EAAE,EAAE,GAAG,IAAI,CAAC,EAAE,SAAS;QACvB,IAAI,EAAE,MAAM;QACZ,QAAQ,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE;QAClC,IAAI,EAAE,IAAI,CAAC,IAAI;QACf,WAAW,EAAE,IAAI,CAAC,WAAW;QAC7B,UAAU,EAAE,IAAI;QAChB,SAAS,EAAE,IAAI;QACf,WAAW,EAAE,EAAE;KAChB,CAAC;IACF,KAAK,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,EAAE,UAAU,CAAC,CAAC;IAErC,4DAA4D;IAC5D,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,QAAQ,EAAE,KAAK,EAAE,EAAE;QAC1C,MAAM,IAAI,GAAG,cAAc,CAAC,QAAQ,EAAE,KAAK,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC;QACtD,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC;QACrC,UAAU,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACrC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;IAC3B,CAAC,CAAC,CAAC;IAEH,oDAAoD;IACpD,MAAM,oBAAoB,GAAG;QAC3B,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAG,OAAO;QACxB,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAG,KAAK;QACtB,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAG,KAAK;KACvB,CAAC;IAEF,2CAA2C;IAC3C,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC,SAAS,EAAE,KAAK,EAAE,EAAE;QAClD,MAAM,GAAG,GAAG,oBAAoB,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC;QAC9D,MAAM,QAAQ,GAAS;YACrB,EAAE,EAAE,GAAG,IAAI,CAAC,EAAE,iBAAiB,KAAK,EAAE;YACtC,IAAI,EAAE,kBAAkB;YACxB,QAAQ,EAAE,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE;YAC1C,IAAI,EAAE,KAAK,SAAS,EAAE;YACtB,WAAW,EAAE,gCAAgC;YAC7C,UAAU,EAAE,IAAI;YAChB,SAAS,EAAE,IAAI;YACf,WAAW,EAAE,CAAC,UAAU,CAAC,EAAE,CAAC;SAC7B,CAAC;QACF,UAAU,CAAC,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;QACzC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,EAAE,QAAQ,CAAC,CAAC;IACnC,CAAC,CAAC,CAAC;IAEH,OAAO;QACL,EAAE,EAAE,IAAI,CAAC,EAAE;QACX,IAAI,EAAE,IAAI,CAAC,IAAI;QACf,IAAI,EAAE,MAAM;QACZ,KAAK,EAAE,CAAC;QACR,KAAK;QACL,WAAW,EAAE,UAAU,CAAC,EAAE;QAC1B,WAAW,EAAE,IAAI,CAAC,GAAG,EAAE;KACxB,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,SAAS,iBAAiB,CAAC,WAAwB;IACjD,MAAM,OAAO,GAA6B;QACxC,QAAQ,EAAE,kBAAkB;QAC5B,MAAM,EAAE,QAAQ;QAChB,QAAQ,EAAE,UAAU;QACpB,IAAI,EAAE,MAAM;QACZ,MAAM,EAAE,OAAO;QACf,IAAI,EAAE,OAAO;QACb,IAAI,EAAE,QAAQ;QACd,IAAI,EAAE,kBAAkB;QACxB,KAAK,EAAE,OAAO;QACd,IAAI,EAAE,MAAM;QACZ,MAAM,EAAE,OAAO;QACf,QAAQ,EAAE,OAAO;QACjB,SAAS,EAAE,MAAM;KAClB,CAAC;IAEF,OAAO;QACL,EAAE,EAAE,WAAW,CAAC,EAAE;QAClB,IAAI,EAAE,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,OAAO;QAC1C,QAAQ,EAAE,EAAE,GAAG,WAAW,CAAC,QAAQ,EAAE,KAAK,EAAE,CAAC,EAAE;QAC/C,IAAI,EAAE,WAAW,CAAC,IAAI;QACtB,WAAW,EAAE,WAAW,CAAC,WAAW;QACpC,UAAU,EAAE,WAAW,CAAC,UAAU;QAClC,SAAS,EAAE,WAAW,CAAC,SAAS;QAChC,WAAW,EAAE,WAAW,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,YAAY,CAAC;QAC7D,OAAO,EAAE,WAAW,CAAC,OAAO,CAAC,OAAO;QACpC,KAAK,EAAE,WAAW,CAAC,OAAO,CAAC,KAAK;KACjC,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,SAAS,gBAAgB,CAAC,OAAgB,EAAE,WAAsC;IAChF,MAAM,KAAK,GAAG,IAAI,GAAG,EAAgB,CAAC;IAEtC,oBAAoB;IACpB,MAAM,iBAAiB,GAAG,WAAW,EAAE,YAAY,IAAI,CAAC,CAAC;IACzD,MAAM,YAAY,GAAG,OAAO,CAAC,MAAM,CAAC,iBAAiB,CAAC,CAAC;IAEvD,IAAI,YAAY,EAAE,CAAC;QACjB,qCAAqC;QACrC,KAAK,MAAM,WAAW,IAAI,YAAY,CAAC,KAAK,EAAE,CAAC;YAC7C,MAAM,IAAI,GAAG,iBAAiB,CAAC,WAAW,CAAC,CAAC;YAE5C,sBAAsB;YACtB,IAAI,WAAW,EAAE,aAAa,CAAC,GAAG,CAAC,WAAW,CAAC,EAAE,CAAC,EAAE,CAAC;gBACnD,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;YACzB,CAAC;YACD,IAAI,WAAW,EAAE,YAAY,CAAC,GAAG,CAAC,WAAW,CAAC,EAAE,CAAC,EAAE,CAAC;gBAClD,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;YACxB,CAAC;YAED,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;QAC3B,CAAC;IACH,CAAC;IAED,MAAM,WAAW,GAAG,YAAY,EAAE,cAAc,IAAI,EAAE,CAAC;IAEvD,OAAO;QACL,EAAE,EAAE,OAAO,CAAC,EAAE;QACd,IAAI,EAAE,GAAG,OAAO,CAAC,IAAI,YAAY,iBAAiB,GAAG,CAAC,EAAE;QACxD,IAAI,EAAE,SAAS;QACf,KAAK,EAAE,iBAAiB,GAAG,CAAC;QAC5B,KAAK;QACL,WAAW;QACX,UAAU,EAAE,YAAY,EAAE,UAAU;QACpC,WAAW,EAAE,IAAI,CAAC,GAAG,EAAE;KACxB,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,SAAS,iBAAiB,CAAC,KAAoB;IAC7C,IAAI,KAAK,CAAC,KAAK,KAAK,sBAAsB,IAAI,KAAK,CAAC,KAAK,KAAK,mBAAmB,EAAE,CAAC;QAClF,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,MAAM,MAAM,GAAG,KAAK,CAAC,KAAK,KAAK,sBAAsB;QACnD,CAAC,CAAC,GAAG,KAAK,CAAC,WAAW,CAAC,EAAE,SAAS;QAClC,CAAC,CAAC,KAAK,CAAC,cAAc,EAAE,EAAE,IAAI,SAAS,CAAC;IAE1C,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,KAAK,sBAAsB;QACjD,CAAC,CAAC,KAAK,CAAC,cAAc,EAAE,EAAE,IAAI,SAAS;QACvC,CAAC,CAAC,GAAG,KAAK,CAAC,WAAW,CAAC,EAAE,SAAS,CAAC;IAErC,OAAO;QACL,UAAU,EAAE,MAAM;QAClB,QAAQ,EAAE,IAAI;QACd,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,KAAK,CAAC,cAAc,GAAG,KAAK,CAAC,cAAc,GAAG,IAAI,CAAC;QAC5E,QAAQ,EAAE,KAAK,CAAC,cAAc;QAC9B,QAAQ,EAAE,KAAK,CAAC,cAAc;QAC9B,MAAM,EAAE,EAAE;KACX,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,6BAA6B,CAAC,SAAwB;IACpE,IAAI,OAAgB,CAAC;IACrB,IAAI,WAAiB,CAAC;IAEtB,IAAI,SAAS,CAAC,KAAK,KAAK,YAAY,IAAI,SAAS,CAAC,cAAc,IAAI,SAAS,CAAC,aAAa,EAAE,CAAC;QAC5F,+BAA+B;QAC/B,MAAM,WAAW,GAAG,SAAS,CAAC,aAAa,CAAC,QAAQ,EAAE,CAAC;QACvD,OAAO,GAAG,gBAAgB,CAAC,SAAS,CAAC,cAAc,EAAE,WAAW,CAAC,CAAC;QAElE,mBAAmB;QACnB,MAAM,aAAa,GAAG,WAAW,EAAE,aAAa,IAAI,OAAO,CAAC,WAAW,CAAC;QACxE,WAAW,GAAG,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,aAAa,CAAC,IAAI;YAChD,EAAE,EAAE,SAAS;YACb,IAAI,EAAE,OAAO;YACb,QAAQ,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE;YAClC,IAAI,EAAE,SAAS;YACf,WAAW,EAAE,iBAAiB;YAC9B,UAAU,EAAE,IAAI;YAChB,SAAS,EAAE,KAAK;YAChB,WAAW,EAAE,EAAE;SAChB,CAAC;IACJ,CAAC;SAAM,CAAC;QACN,sCAAsC;QACtC,OAAO,GAAG,aAAa,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC;QAC/C,WAAW,GAAG,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,WAAW,CAAC,IAAI;YACtD,EAAE,EAAE,SAAS,CAAC,WAAW,CAAC,EAAE;YAC5B,IAAI,EAAE,MAAM;YACZ,QAAQ,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE;YAClC,IAAI,EAAE,SAAS,CAAC,WAAW,CAAC,IAAI;YAChC,WAAW,EAAE,SAAS,CAAC,WAAW,CAAC,WAAW;YAC9C,UAAU,EAAE,IAAI;YAChB,SAAS,EAAE,IAAI;YACf,WAAW,EAAE,EAAE;SAChB,CAAC;IACJ,CAAC;IAED,gBAAgB;IAChB,IAAI,KAAK,GAAG,YAAY,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;IAE1C,qBAAqB;IACrB,IAAI,SAAS,CAAC,KAAK,KAAK,YAAY,IAAI,SAAS,CAAC,aAAa,EAAE,CAAC;QAChE,MAAM,WAAW,GAAG,SAAS,CAAC,aAAa,CAAC,QAAQ,EAAE,CAAC;QACvD,IAAI,WAAW,EAAE,YAAY,EAAE,CAAC;YAC9B,KAAK,GAAG,QAAQ,CAAC;QACnB,CAAC;IACH,CAAC;IAED,kBAAkB;IAClB,MAAM,SAAS,GAAc;QAC3B,KAAK;QACL,MAAM,EAAE,SAAS,CAAC,MAAM;QACxB,UAAU,EAAE,OAAO;QACnB,WAAW;QACX,aAAa,EAAE,EAAE;QACjB,WAAW,EAAE,iBAAiB,CAAC,SAAS,CAAC;QACzC,QAAQ,EAAE,SAAS,CAAC,UAAU,CAAC,aAAa;QAC5C,cAAc,EAAE,IAAI,CAAC,GAAG,EAAE;QAC1B,QAAQ,EAAE,KAAK;KAChB,CAAC;IAEF,gCAAgC;IAChC,IAAI,KAAK,KAAK,QAAQ,IAAI,SAAS,CAAC,aAAa,EAAE,CAAC;QAClD,MAAM,WAAW,GAAG,SAAS,CAAC,aAAa,CAAC,QAAQ,EAAE,CAAC;QACvD,IAAI,WAAW,EAAE,YAAY,EAAE,CAAC;YAC9B,SAAS,CAAC,MAAM,GAAG;gBACjB,QAAQ,EAAE,IAAI;gBACd,OAAO,EAAE,WAAW,CAAC,YAAY,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;oBAClD,GAAG,CAAC;oBACJ,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,SAAS,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE;iBAC/D,CAAC,CAAC;gBACH,IAAI,EAAE,WAAW,CAAC,YAAY,CAAC,IAAI;gBACnC,QAAQ,EAAE,SAAS,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE;gBACnC,GAAG,EAAE,WAAW,CAAC,YAAY,CAAC,GAAG,IAAI,EAAE;gBACvC,QAAQ,EAAE,UAAU;gBACpB,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;gBACrB,gBAAgB,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK;aACrC,CAAC;QACJ,CAAC;IACH,CAAC;IAED,OAAO,SAAS,CAAC;AACnB,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,sBAAsB,CAAC,SAAwB;IAC7D,IAAI,SAAS,CAAC,KAAK,KAAK,SAAS,IAAI,SAAS,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;QACnE,qCAAqC;QACrC,OAAO,SAAS,CAAC,WAAW,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,KAAK,EAAE,EAAE,CAC9D,cAAc,CAAC,QAAQ,EAAE,KAAK,EAAE,SAAS,CAAC,WAAW,CAAC,EAAE,CAAC,CAC1D,CAAC;IACJ,CAAC;IAED,IAAI,SAAS,CAAC,KAAK,KAAK,YAAY,IAAI,SAAS,CAAC,cAAc,IAAI,SAAS,CAAC,aAAa,EAAE,CAAC;QAC5F,MAAM,WAAW,GAAG,SAAS,CAAC,aAAa,CAAC,QAAQ,EAAE,CAAC;QACvD,IAAI,CAAC,WAAW;YAAE,OAAO,EAAE,CAAC;QAE5B,MAAM,iBAAiB,GAAG,WAAW,CAAC,YAAY,CAAC;QACnD,MAAM,YAAY,GAAG,SAAS,CAAC,cAAc,CAAC,MAAM,CAAC,iBAAiB,CAAC,CAAC;QACxE,IAAI,CAAC,YAAY;YAAE,OAAO,EAAE,CAAC;QAE7B,MAAM,WAAW,GAAG,YAAY,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,WAAW,CAAC,aAAa,CAAC,CAAC;QACrF,IAAI,CAAC,WAAW;YAAE,OAAO,EAAE,CAAC;QAE5B,sBAAsB;QACtB,OAAO,WAAW,CAAC,WAAW;aAC3B,GAAG,CAAC,IAAI,CAAC,EAAE;YACV,MAAM,IAAI,GAAG,YAAY,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,IAAI,CAAC,YAAY,CAAC,CAAC;YACtE,OAAO,IAAI,CAAC,CAAC,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;QAC/C,CAAC,CAAC;aACD,MAAM,CAAC,CAAC,CAAC,EAAa,EAAE,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC;IAC1C,CAAC;IAED,OAAO,EAAE,CAAC;AACZ,CAAC;AAyBD;;GAEG;AACH,MAAM,UAAU,qBAAqB,CAAC,IAAU,EAAE,MAA6B;IAC7E,MAAM,QAAQ,GAAG,eAAe,CAAC,IAAI,CAAC,CAAC;IACvC,IAAI,CAAC,QAAQ;QAAE,OAAO,IAAI,CAAC;IAE3B,MAAM,MAAM,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC;IAChC,IAAI,CAAC,MAAM;QAAE,OAAO,IAAI,CAAC;IAEzB,oDAAoD;IACpD,MAAM,MAAM,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC;IACrC,MAAM,CAAC,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC;IACpC,MAAM,CAAC,SAAS,GAAG,CAAC,GAAG,MAAM,CAAC,SAAS,EAAE,GAAG,IAAI,CAAC,eAAe,CAAC,CAAC;IAClE,OAAO,MAAM,CAAC;AAChB,CAAC;AAeD,MAAM,UAAU,mBAAmB,CAAC,IAAU,EAAE,MAA6B;IAC3E,MAAM,YAAY,GAAG,gBAAgB,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IACpD,MAAM,WAAW,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;IAE7D,OAAO;QACL,OAAO,EAAE,YAAY,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC;QAC7D,UAAU,EAAE,YAAY,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC;QACnE,YAAY,EAAE,YAAY,CAAC,MAAM,GAAG,CAAC;YACnC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC,GAAG,YAAY,CAAC,MAAM,CAAC;YAC3F,CAAC,CAAC,CAAC;QACL,WAAW,EAAE,YAAY,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC;QACrE,YAAY,EAAE,YAAY,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;QACvE,WAAW,EAAE,YAAY,CAAC,MAAM;QAChC,UAAU,EAAE,WAAW,CAAC,MAAM;KAC/B,CAAC;AACJ,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,qBAAqB,CAAC,IAAU,EAAE,MAA6B;IAC7E,MAAM,YAAY,GAAG,gBAAgB,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IACpD,OAAO,YAAY;SAChB,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,KAAK,CAAC,EAAE,IAAI,CAAC,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;SACrD,IAAI,CAAC,KAAK,CAAC,CAAC;AACjB,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,oBAAoB,CAAC,IAAU,EAAE,MAA6B;IAC5E,MAAM,OAAO,GAAG,mBAAmB,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IAClD,MAAM,SAAS,GAAG,OAAO,CAAC,UAAU,GAAG,CAAC;QACtC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,OAAO,GAAG,OAAO,CAAC,UAAU,CAAC,GAAG,GAAG,CAAC;QAC1D,CAAC,CAAC,CAAC,CAAC;IACN,OAAO,SAAS,OAAO,CAAC,UAAU,IAAI,OAAO,CAAC,WAAW,QAAQ,OAAO,CAAC,YAAY,OAAO,SAAS,GAAG,CAAC;AAC3G,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,wBAAwB,CACtC,UAA2B,EAC3B,IAAU,EACV,MAA6B;IAW7B,6CAA6C;IAC7C,MAAM,OAAO,GAAG,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,EAAE,EAAE;QACpD,OAAO,GAAG,GAAG,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC;IAC7C,CAAC,EAAE,CAAC,CAAC,CAAC;IAEN,OAAO;QACL,QAAQ,EAAE,UAAU,CAAC,QAAQ;QAC7B,IAAI,EAAE,UAAU,CAAC,IAAI;QACrB,QAAQ,EAAE,OAAO;QACjB,OAAO,EAAE,UAAU,CAAC,OAAO;QAC3B,GAAG,EAAE,UAAU,CAAC,GAAG;QACnB,QAAQ,EAAE,UAAU;QACpB,SAAS,EAAE,UAAU,CAAC,SAAS;QAC/B,gBAAgB,EAAE,UAAU,CAAC,gBAAgB;KAC9C,CAAC;AACJ,CAAC","debug_id":"6df3027b-b65b-5cb9-bc3c-073f22c9770e"}
|
|
@@ -0,0 +1,145 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Team - Functions for creating and managing character teams
|
|
3
|
+
*
|
|
4
|
+
* A Team consists of up to 4 active members and any number of reserve members.
|
|
5
|
+
* Teams share inventory, gold, and position on the map.
|
|
6
|
+
*/
|
|
7
|
+
import type { Team, Actor, Player, TeamFormation, StrategyStateMachine, CurrentLocation, Position, InventoryItem } from './types.js';
|
|
8
|
+
/**
|
|
9
|
+
* Maximum number of active members in a team
|
|
10
|
+
*/
|
|
11
|
+
export declare const MAX_ACTIVE_MEMBERS = 4;
|
|
12
|
+
/**
|
|
13
|
+
* Default team location (starting town)
|
|
14
|
+
*/
|
|
15
|
+
export declare const DEFAULT_LOCATION: CurrentLocation;
|
|
16
|
+
/**
|
|
17
|
+
* Create a new empty team
|
|
18
|
+
*/
|
|
19
|
+
export declare function createTeam(name: string, leaderId?: string): Team;
|
|
20
|
+
/**
|
|
21
|
+
* Create a team with a single actor (for migration from single-player)
|
|
22
|
+
*/
|
|
23
|
+
export declare function createTeamWithActor(actor: Actor, teamName?: string): Team;
|
|
24
|
+
/**
|
|
25
|
+
* Create a team from a legacy Player
|
|
26
|
+
* Used for save migration
|
|
27
|
+
*/
|
|
28
|
+
export declare function createTeamFromPlayer(player: Player): {
|
|
29
|
+
team: Team;
|
|
30
|
+
actor: Actor;
|
|
31
|
+
};
|
|
32
|
+
/**
|
|
33
|
+
* Add an actor to the team's active roster
|
|
34
|
+
* Returns false if team is full
|
|
35
|
+
*/
|
|
36
|
+
export declare function addActiveTeamMember(team: Team, actor: Actor): boolean;
|
|
37
|
+
/**
|
|
38
|
+
* Move an actor to the reserve roster
|
|
39
|
+
*/
|
|
40
|
+
export declare function moveToReserve(team: Team, actor: Actor): void;
|
|
41
|
+
/**
|
|
42
|
+
* Remove an actor from the team entirely
|
|
43
|
+
*/
|
|
44
|
+
export declare function removeFromTeam(team: Team, actor: Actor): void;
|
|
45
|
+
/**
|
|
46
|
+
* Swap positions of two active members
|
|
47
|
+
*/
|
|
48
|
+
export declare function swapActivePositions(team: Team, index1: number, index2: number): boolean;
|
|
49
|
+
/**
|
|
50
|
+
* Set the team leader (move to position 0)
|
|
51
|
+
*/
|
|
52
|
+
export declare function setTeamLeader(team: Team, actorId: string): boolean;
|
|
53
|
+
/**
|
|
54
|
+
* Get the team leader ID
|
|
55
|
+
*/
|
|
56
|
+
export declare function getTeamLeaderId(team: Team): string | null;
|
|
57
|
+
/**
|
|
58
|
+
* Get actors that can fight (active status, HP > 0)
|
|
59
|
+
*/
|
|
60
|
+
export declare function getActiveActorsForCombat(team: Team, actors: Record<string, Actor>): Actor[];
|
|
61
|
+
/**
|
|
62
|
+
* Get all active members regardless of combat status
|
|
63
|
+
*/
|
|
64
|
+
export declare function getActiveMembers(team: Team, actors: Record<string, Actor>): Actor[];
|
|
65
|
+
/**
|
|
66
|
+
* Get reserve members
|
|
67
|
+
*/
|
|
68
|
+
export declare function getReserveMembers(team: Team, actors: Record<string, Actor>): Actor[];
|
|
69
|
+
/**
|
|
70
|
+
* Check if all active members are dead
|
|
71
|
+
*/
|
|
72
|
+
export declare function isTeamWiped(team: Team, actors: Record<string, Actor>): boolean;
|
|
73
|
+
/**
|
|
74
|
+
* Get total team level (sum of all active members)
|
|
75
|
+
*/
|
|
76
|
+
export declare function getTeamTotalLevel(team: Team, actors: Record<string, Actor>): number;
|
|
77
|
+
/**
|
|
78
|
+
* Get average team level
|
|
79
|
+
*/
|
|
80
|
+
export declare function getTeamAverageLevel(team: Team, actors: Record<string, Actor>): number;
|
|
81
|
+
/**
|
|
82
|
+
* Set the team's formation
|
|
83
|
+
*/
|
|
84
|
+
export declare function setTeamFormation(team: Team, formation: TeamFormation): void;
|
|
85
|
+
/**
|
|
86
|
+
* Get the position index for an actor in the team
|
|
87
|
+
* Returns -1 if not found
|
|
88
|
+
*/
|
|
89
|
+
export declare function getActorFormationPosition(team: Team, actorId: string): number;
|
|
90
|
+
/**
|
|
91
|
+
* Check if an actor is on the frontline based on formation
|
|
92
|
+
*/
|
|
93
|
+
export declare function isActorOnFrontline(team: Team, actorId: string): boolean;
|
|
94
|
+
/**
|
|
95
|
+
* Get damage multiplier for an actor based on formation
|
|
96
|
+
*/
|
|
97
|
+
export declare function getFormationDamageMultiplier(team: Team, actorId: string): number;
|
|
98
|
+
/**
|
|
99
|
+
* Add gold to team's shared pool
|
|
100
|
+
*/
|
|
101
|
+
export declare function addTeamGold(team: Team, amount: number): void;
|
|
102
|
+
/**
|
|
103
|
+
* Spend gold from team's shared pool
|
|
104
|
+
* Returns true if successful
|
|
105
|
+
*/
|
|
106
|
+
export declare function spendTeamGold(team: Team, amount: number): boolean;
|
|
107
|
+
/**
|
|
108
|
+
* Add item to team's shared inventory
|
|
109
|
+
*/
|
|
110
|
+
export declare function addItemToTeam(team: Team, item: InventoryItem): void;
|
|
111
|
+
/**
|
|
112
|
+
* Remove item from team's shared inventory
|
|
113
|
+
* Returns true if successful
|
|
114
|
+
*/
|
|
115
|
+
export declare function removeItemFromTeam(team: Team, itemId: string, quantity?: number): boolean;
|
|
116
|
+
/**
|
|
117
|
+
* Distribute experience evenly among active team members
|
|
118
|
+
* Returns actors that leveled up
|
|
119
|
+
*/
|
|
120
|
+
export declare function distributeTeamExperience(team: Team, actors: Record<string, Actor>, totalExp: number, addExperienceFn: (actor: Actor, exp: number) => boolean): Actor[];
|
|
121
|
+
/**
|
|
122
|
+
* Update team position
|
|
123
|
+
*/
|
|
124
|
+
export declare function setTeamPosition(team: Team, position: Position): void;
|
|
125
|
+
/**
|
|
126
|
+
* Update team location
|
|
127
|
+
*/
|
|
128
|
+
export declare function setTeamLocation(team: Team, location: CurrentLocation): void;
|
|
129
|
+
/**
|
|
130
|
+
* Update team strategy
|
|
131
|
+
*/
|
|
132
|
+
export declare function setTeamStrategy(team: Team, strategy: StrategyStateMachine): void;
|
|
133
|
+
/**
|
|
134
|
+
* Get team summary for display
|
|
135
|
+
*/
|
|
136
|
+
export declare function getTeamSummary(team: Team, actors: Record<string, Actor>): string;
|
|
137
|
+
/**
|
|
138
|
+
* Get formation display name
|
|
139
|
+
*/
|
|
140
|
+
export declare function getFormationDisplayName(formation: TeamFormation): string;
|
|
141
|
+
/**
|
|
142
|
+
* Get formation description
|
|
143
|
+
*/
|
|
144
|
+
export declare function getFormationDescription(formation: TeamFormation): string;
|
|
145
|
+
//# sourceMappingURL=Team.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Team.d.ts","sourceRoot":"/","sources":["core/Team.ts"],"names":[],"mappings":"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"}
|