playlist-data-engine 1.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/LICENSE +21 -0
- package/README.md +352 -0
- package/dist/__vite-browser-external-DYxpcVy9.js +4 -0
- package/dist/constants/DefaultClasses.d.ts +46 -0
- package/dist/constants/DefaultClasses.d.ts.map +1 -0
- package/dist/constants/DefaultEnchantments.d.ts +337 -0
- package/dist/constants/DefaultEnchantments.d.ts.map +1 -0
- package/dist/constants/DefaultEnemies.d.ts +83 -0
- package/dist/constants/DefaultEnemies.d.ts.map +1 -0
- package/dist/constants/DefaultEquipment.d.ts +23 -0
- package/dist/constants/DefaultEquipment.d.ts.map +1 -0
- package/dist/constants/DefaultFeatures.d.ts +22 -0
- package/dist/constants/DefaultFeatures.d.ts.map +1 -0
- package/dist/constants/DefaultRaces.d.ts +102 -0
- package/dist/constants/DefaultRaces.d.ts.map +1 -0
- package/dist/constants/DefaultSkills.d.ts +26 -0
- package/dist/constants/DefaultSkills.d.ts.map +1 -0
- package/dist/constants/DefaultSpells.d.ts +41 -0
- package/dist/constants/DefaultSpells.d.ts.map +1 -0
- package/dist/constants/EncounterBalance.d.ts +208 -0
- package/dist/constants/EncounterBalance.d.ts.map +1 -0
- package/dist/constants/EnemyEquipment.d.ts +71 -0
- package/dist/constants/EnemyEquipment.d.ts.map +1 -0
- package/dist/constants/EnemyRarity.d.ts +79 -0
- package/dist/constants/EnemyRarity.d.ts.map +1 -0
- package/dist/constants/EnemyTemplates/Construct.d.ts +63 -0
- package/dist/constants/EnemyTemplates/Construct.d.ts.map +1 -0
- package/dist/constants/EnemyTemplates/Dragon.d.ts +68 -0
- package/dist/constants/EnemyTemplates/Dragon.d.ts.map +1 -0
- package/dist/constants/EnemyTemplates/Elemental.d.ts +64 -0
- package/dist/constants/EnemyTemplates/Elemental.d.ts.map +1 -0
- package/dist/constants/EnemyTemplates/Fiend.d.ts +62 -0
- package/dist/constants/EnemyTemplates/Fiend.d.ts.map +1 -0
- package/dist/constants/EnemyTemplates/Monstrosity.d.ts +63 -0
- package/dist/constants/EnemyTemplates/Monstrosity.d.ts.map +1 -0
- package/dist/constants/EnemyTemplates/Undead.d.ts +61 -0
- package/dist/constants/EnemyTemplates/Undead.d.ts.map +1 -0
- package/dist/constants/ItemTemplates.d.ts +40 -0
- package/dist/constants/ItemTemplates.d.ts.map +1 -0
- package/dist/constants/MagicItems.d.ts +30 -0
- package/dist/constants/MagicItems.d.ts.map +1 -0
- package/dist/constants/SpellSlots.d.ts +30 -0
- package/dist/constants/SpellSlots.d.ts.map +1 -0
- package/dist/constants/StatScaling.d.ts +113 -0
- package/dist/constants/StatScaling.d.ts.map +1 -0
- package/dist/core/analysis/AudioAnalyzer.d.ts +599 -0
- package/dist/core/analysis/AudioAnalyzer.d.ts.map +1 -0
- package/dist/core/analysis/ColorExtractor.d.ts +64 -0
- package/dist/core/analysis/ColorExtractor.d.ts.map +1 -0
- package/dist/core/analysis/EssentiaPitchDetector.d.ts +282 -0
- package/dist/core/analysis/EssentiaPitchDetector.d.ts.map +1 -0
- package/dist/core/analysis/LevelSerializer.d.ts +265 -0
- package/dist/core/analysis/LevelSerializer.d.ts.map +1 -0
- package/dist/core/analysis/MelodyContourAnalyzer.d.ts +283 -0
- package/dist/core/analysis/MelodyContourAnalyzer.d.ts.map +1 -0
- package/dist/core/analysis/MultiBandAnalyzer.d.ts +214 -0
- package/dist/core/analysis/MultiBandAnalyzer.d.ts.map +1 -0
- package/dist/core/analysis/MusicClassifier.d.ts +524 -0
- package/dist/core/analysis/MusicClassifier.d.ts.map +1 -0
- package/dist/core/analysis/PitchAnalyzer.d.ts +266 -0
- package/dist/core/analysis/PitchAnalyzer.d.ts.map +1 -0
- package/dist/core/analysis/PitchDetector.d.ts +251 -0
- package/dist/core/analysis/PitchDetector.d.ts.map +1 -0
- package/dist/core/analysis/SpectrumScanner.d.ts +52 -0
- package/dist/core/analysis/SpectrumScanner.d.ts.map +1 -0
- package/dist/core/analysis/beat/BeatInterpolator.d.ts +477 -0
- package/dist/core/analysis/beat/BeatInterpolator.d.ts.map +1 -0
- package/dist/core/analysis/beat/BeatMapGenerator.d.ts +170 -0
- package/dist/core/analysis/beat/BeatMapGenerator.d.ts.map +1 -0
- package/dist/core/analysis/beat/BeatStream.d.ts +316 -0
- package/dist/core/analysis/beat/BeatStream.d.ts.map +1 -0
- package/dist/core/analysis/beat/BeatSubdivider.d.ts +205 -0
- package/dist/core/analysis/beat/BeatSubdivider.d.ts.map +1 -0
- package/dist/core/analysis/beat/BeatTracker.d.ts +137 -0
- package/dist/core/analysis/beat/BeatTracker.d.ts.map +1 -0
- package/dist/core/analysis/beat/CompositeStreamGenerator.d.ts +180 -0
- package/dist/core/analysis/beat/CompositeStreamGenerator.d.ts.map +1 -0
- package/dist/core/analysis/beat/DensityAnalyzer.d.ts +246 -0
- package/dist/core/analysis/beat/DensityAnalyzer.d.ts.map +1 -0
- package/dist/core/analysis/beat/DifficultyVariantGenerator.d.ts +1082 -0
- package/dist/core/analysis/beat/DifficultyVariantGenerator.d.ts.map +1 -0
- package/dist/core/analysis/beat/GrooveAnalyzer.d.ts +192 -0
- package/dist/core/analysis/beat/GrooveAnalyzer.d.ts.map +1 -0
- package/dist/core/analysis/beat/OnsetStrengthEnvelope.d.ts +133 -0
- package/dist/core/analysis/beat/OnsetStrengthEnvelope.d.ts.map +1 -0
- package/dist/core/analysis/beat/PhraseAnalyzer.d.ts +230 -0
- package/dist/core/analysis/beat/PhraseAnalyzer.d.ts.map +1 -0
- package/dist/core/analysis/beat/RhythmQuantizer.d.ts +399 -0
- package/dist/core/analysis/beat/RhythmQuantizer.d.ts.map +1 -0
- package/dist/core/analysis/beat/RhythmicBalancer.d.ts +262 -0
- package/dist/core/analysis/beat/RhythmicBalancer.d.ts.map +1 -0
- package/dist/core/analysis/beat/StreamScorer.d.ts +275 -0
- package/dist/core/analysis/beat/StreamScorer.d.ts.map +1 -0
- package/dist/core/analysis/beat/TempoAwareQuantizer.d.ts +256 -0
- package/dist/core/analysis/beat/TempoAwareQuantizer.d.ts.map +1 -0
- package/dist/core/analysis/beat/TempoDetector.d.ts +220 -0
- package/dist/core/analysis/beat/TempoDetector.d.ts.map +1 -0
- package/dist/core/analysis/beat/TransientDetector.d.ts +303 -0
- package/dist/core/analysis/beat/TransientDetector.d.ts.map +1 -0
- package/dist/core/analysis/beat/beatKeyHelpers.d.ts +180 -0
- package/dist/core/analysis/beat/beatKeyHelpers.d.ts.map +1 -0
- package/dist/core/analysis/beat/index.d.ts +41 -0
- package/dist/core/analysis/beat/index.d.ts.map +1 -0
- package/dist/core/analysis/beat/utils/audioUtils.d.ts +204 -0
- package/dist/core/analysis/beat/utils/audioUtils.d.ts.map +1 -0
- package/dist/core/analysis/beat/utils/beatInterpolationDebug.d.ts +404 -0
- package/dist/core/analysis/beat/utils/beatInterpolationDebug.d.ts.map +1 -0
- package/dist/core/analysis/beat/utils/subdivideBeatMap.d.ts +61 -0
- package/dist/core/analysis/beat/utils/subdivideBeatMap.d.ts.map +1 -0
- package/dist/core/analysis/beat/utils/unifyBeatMap.d.ts +33 -0
- package/dist/core/analysis/beat/utils/unifyBeatMap.d.ts.map +1 -0
- package/dist/core/analysis/index.d.ts +18 -0
- package/dist/core/analysis/index.d.ts.map +1 -0
- package/dist/core/combat/AI/AICombatRunner.d.ts +108 -0
- package/dist/core/combat/AI/AICombatRunner.d.ts.map +1 -0
- package/dist/core/combat/AI/CombatAI.d.ts +179 -0
- package/dist/core/combat/AI/CombatAI.d.ts.map +1 -0
- package/dist/core/combat/AI/CombatMetricsTracker.d.ts +30 -0
- package/dist/core/combat/AI/CombatMetricsTracker.d.ts.map +1 -0
- package/dist/core/combat/Analysis/BalanceValidator.d.ts +170 -0
- package/dist/core/combat/Analysis/BalanceValidator.d.ts.map +1 -0
- package/dist/core/combat/Analysis/ComparativeAnalyzer.d.ts +231 -0
- package/dist/core/combat/Analysis/ComparativeAnalyzer.d.ts.map +1 -0
- package/dist/core/combat/Analysis/DifficultyCalculator.d.ts +203 -0
- package/dist/core/combat/Analysis/DifficultyCalculator.d.ts.map +1 -0
- package/dist/core/combat/Analysis/ParameterSweep.d.ts +201 -0
- package/dist/core/combat/Analysis/ParameterSweep.d.ts.map +1 -0
- package/dist/core/combat/AttackResolver.d.ts +220 -0
- package/dist/core/combat/AttackResolver.d.ts.map +1 -0
- package/dist/core/combat/CombatEngine.d.ts +388 -0
- package/dist/core/combat/CombatEngine.d.ts.map +1 -0
- package/dist/core/combat/DiceRoller.d.ts +115 -0
- package/dist/core/combat/DiceRoller.d.ts.map +1 -0
- package/dist/core/combat/InitiativeRoller.d.ts +62 -0
- package/dist/core/combat/InitiativeRoller.d.ts.map +1 -0
- package/dist/core/combat/PartyAnalyzer.d.ts +215 -0
- package/dist/core/combat/PartyAnalyzer.d.ts.map +1 -0
- package/dist/core/combat/SeededDiceRoller.d.ts +120 -0
- package/dist/core/combat/SeededDiceRoller.d.ts.map +1 -0
- package/dist/core/combat/Simulation/CombatSimulator.d.ts +366 -0
- package/dist/core/combat/Simulation/CombatSimulator.d.ts.map +1 -0
- package/dist/core/combat/SpellCaster.d.ts +113 -0
- package/dist/core/combat/SpellCaster.d.ts.map +1 -0
- package/dist/core/config/index.d.ts +24 -0
- package/dist/core/config/index.d.ts.map +1 -0
- package/dist/core/config/progressionConfig.d.ts +73 -0
- package/dist/core/config/progressionConfig.d.ts.map +1 -0
- package/dist/core/config/sensorConfig.d.ts +134 -0
- package/dist/core/config/sensorConfig.d.ts.map +1 -0
- package/dist/core/equipment/BoxOpener.d.ts +175 -0
- package/dist/core/equipment/BoxOpener.d.ts.map +1 -0
- package/dist/core/equipment/EquipmentEffectApplier.d.ts +189 -0
- package/dist/core/equipment/EquipmentEffectApplier.d.ts.map +1 -0
- package/dist/core/equipment/EquipmentModifier.d.ts +327 -0
- package/dist/core/equipment/EquipmentModifier.d.ts.map +1 -0
- package/dist/core/equipment/EquipmentSpawnHelper.d.ts +246 -0
- package/dist/core/equipment/EquipmentSpawnHelper.d.ts.map +1 -0
- package/dist/core/equipment/EquipmentValidator.d.ts +173 -0
- package/dist/core/equipment/EquipmentValidator.d.ts.map +1 -0
- package/dist/core/extensions/ExtensionManager.d.ts +517 -0
- package/dist/core/extensions/ExtensionManager.d.ts.map +1 -0
- package/dist/core/extensions/WeightedSelector.d.ts +156 -0
- package/dist/core/extensions/WeightedSelector.d.ts.map +1 -0
- package/dist/core/extensions/index.d.ts +11 -0
- package/dist/core/extensions/index.d.ts.map +1 -0
- package/dist/core/extensions/initializeDefaults.d.ts +170 -0
- package/dist/core/extensions/initializeDefaults.d.ts.map +1 -0
- package/dist/core/features/FeatureEffectApplier.d.ts +102 -0
- package/dist/core/features/FeatureEffectApplier.d.ts.map +1 -0
- package/dist/core/features/FeatureQuery.d.ts +368 -0
- package/dist/core/features/FeatureQuery.d.ts.map +1 -0
- package/dist/core/features/FeatureTypes.d.ts +199 -0
- package/dist/core/features/FeatureTypes.d.ts.map +1 -0
- package/dist/core/features/FeatureValidator.d.ts +149 -0
- package/dist/core/features/FeatureValidator.d.ts.map +1 -0
- package/dist/core/features/index.d.ts +12 -0
- package/dist/core/features/index.d.ts.map +1 -0
- package/dist/core/generation/AbilityScoreCalculator.d.ts +83 -0
- package/dist/core/generation/AbilityScoreCalculator.d.ts.map +1 -0
- package/dist/core/generation/AppearanceGenerator.d.ts +32 -0
- package/dist/core/generation/AppearanceGenerator.d.ts.map +1 -0
- package/dist/core/generation/BeatConverter.d.ts +127 -0
- package/dist/core/generation/BeatConverter.d.ts.map +1 -0
- package/dist/core/generation/ButtonMapper.d.ts +346 -0
- package/dist/core/generation/ButtonMapper.d.ts.map +1 -0
- package/dist/core/generation/ButtonPatternLibrary.d.ts +92 -0
- package/dist/core/generation/ButtonPatternLibrary.d.ts.map +1 -0
- package/dist/core/generation/CRLevelConverter.d.ts +242 -0
- package/dist/core/generation/CRLevelConverter.d.ts.map +1 -0
- package/dist/core/generation/CharacterGenerator.d.ts +194 -0
- package/dist/core/generation/CharacterGenerator.d.ts.map +1 -0
- package/dist/core/generation/ClassSuggester.d.ts +184 -0
- package/dist/core/generation/ClassSuggester.d.ts.map +1 -0
- package/dist/core/generation/EnemyEquipmentGenerator.d.ts +151 -0
- package/dist/core/generation/EnemyEquipmentGenerator.d.ts.map +1 -0
- package/dist/core/generation/EnemyGenerator.d.ts +595 -0
- package/dist/core/generation/EnemyGenerator.d.ts.map +1 -0
- package/dist/core/generation/EquipmentGenerator.d.ts +204 -0
- package/dist/core/generation/EquipmentGenerator.d.ts.map +1 -0
- package/dist/core/generation/LegendaryGenerator.d.ts +213 -0
- package/dist/core/generation/LegendaryGenerator.d.ts.map +1 -0
- package/dist/core/generation/LevelGenerator.d.ts +390 -0
- package/dist/core/generation/LevelGenerator.d.ts.map +1 -0
- package/dist/core/generation/NamingEngine.d.ts +136 -0
- package/dist/core/generation/NamingEngine.d.ts.map +1 -0
- package/dist/core/generation/PitchBeatLinker.d.ts +150 -0
- package/dist/core/generation/PitchBeatLinker.d.ts.map +1 -0
- package/dist/core/generation/RaceSelector.d.ts +58 -0
- package/dist/core/generation/RaceSelector.d.ts.map +1 -0
- package/dist/core/generation/RhythmGenerator.d.ts +597 -0
- package/dist/core/generation/RhythmGenerator.d.ts.map +1 -0
- package/dist/core/generation/SkillAssigner.d.ts +78 -0
- package/dist/core/generation/SkillAssigner.d.ts.map +1 -0
- package/dist/core/generation/SpellManager.d.ts +132 -0
- package/dist/core/generation/SpellManager.d.ts.map +1 -0
- package/dist/core/generation/SpellcastingGenerator.d.ts +255 -0
- package/dist/core/generation/SpellcastingGenerator.d.ts.map +1 -0
- package/dist/core/generation/index.d.ts +41 -0
- package/dist/core/generation/index.d.ts.map +1 -0
- package/dist/core/parser/MetadataExtractor.d.ts +66 -0
- package/dist/core/parser/MetadataExtractor.d.ts.map +1 -0
- package/dist/core/parser/PlaylistParser.d.ts +45 -0
- package/dist/core/parser/PlaylistParser.d.ts.map +1 -0
- package/dist/core/playback/SubdivisionPlaybackController.d.ts +333 -0
- package/dist/core/playback/SubdivisionPlaybackController.d.ts.map +1 -0
- package/dist/core/playback/index.d.ts +5 -0
- package/dist/core/playback/index.d.ts.map +1 -0
- package/dist/core/progression/CharacterUpdater.d.ts +203 -0
- package/dist/core/progression/CharacterUpdater.d.ts.map +1 -0
- package/dist/core/progression/LevelUpProcessor.d.ts +234 -0
- package/dist/core/progression/LevelUpProcessor.d.ts.map +1 -0
- package/dist/core/progression/PrestigeSystem.d.ts +217 -0
- package/dist/core/progression/PrestigeSystem.d.ts.map +1 -0
- package/dist/core/progression/RhythmXPCalculator.d.ts +182 -0
- package/dist/core/progression/RhythmXPCalculator.d.ts.map +1 -0
- package/dist/core/progression/SessionTracker.d.ts +169 -0
- package/dist/core/progression/SessionTracker.d.ts.map +1 -0
- package/dist/core/progression/XPCalculator.d.ts +128 -0
- package/dist/core/progression/XPCalculator.d.ts.map +1 -0
- package/dist/core/progression/stat/StatIncreaseStrategy.d.ts +97 -0
- package/dist/core/progression/stat/StatIncreaseStrategy.d.ts.map +1 -0
- package/dist/core/progression/stat/StatManager.d.ts +179 -0
- package/dist/core/progression/stat/StatManager.d.ts.map +1 -0
- package/dist/core/sensors/EnvironmentalSensors.d.ts +301 -0
- package/dist/core/sensors/EnvironmentalSensors.d.ts.map +1 -0
- package/dist/core/sensors/GamingPlatformSensors.d.ts +162 -0
- package/dist/core/sensors/GamingPlatformSensors.d.ts.map +1 -0
- package/dist/core/sensors/GeolocationProvider.d.ts +156 -0
- package/dist/core/sensors/GeolocationProvider.d.ts.map +1 -0
- package/dist/core/sensors/MotionDetector.d.ts +58 -0
- package/dist/core/sensors/MotionDetector.d.ts.map +1 -0
- package/dist/core/sensors/SteamAPIClient.d.ts +108 -0
- package/dist/core/sensors/SteamAPIClient.d.ts.map +1 -0
- package/dist/core/sensors/WeatherAPIClient.d.ts +360 -0
- package/dist/core/sensors/WeatherAPIClient.d.ts.map +1 -0
- package/dist/core/sensors/schemas/weather.schema.d.ts +144 -0
- package/dist/core/sensors/schemas/weather.schema.d.ts.map +1 -0
- package/dist/core/skills/SkillQuery.d.ts +159 -0
- package/dist/core/skills/SkillQuery.d.ts.map +1 -0
- package/dist/core/skills/SkillTypes.d.ts +233 -0
- package/dist/core/skills/SkillTypes.d.ts.map +1 -0
- package/dist/core/skills/SkillValidator.d.ts +146 -0
- package/dist/core/skills/SkillValidator.d.ts.map +1 -0
- package/dist/core/skills/index.d.ts +11 -0
- package/dist/core/skills/index.d.ts.map +1 -0
- package/dist/core/spells/SpellQuery.d.ts +194 -0
- package/dist/core/spells/SpellQuery.d.ts.map +1 -0
- package/dist/core/spells/SpellTypes.d.ts +71 -0
- package/dist/core/spells/SpellTypes.d.ts.map +1 -0
- package/dist/core/spells/SpellValidator.d.ts +129 -0
- package/dist/core/spells/SpellValidator.d.ts.map +1 -0
- package/dist/core/spells/index.d.ts +11 -0
- package/dist/core/spells/index.d.ts.map +1 -0
- package/dist/core/types/AudioProfile.d.ts +143 -0
- package/dist/core/types/AudioProfile.d.ts.map +1 -0
- package/dist/core/types/BeatMap.d.ts +1825 -0
- package/dist/core/types/BeatMap.d.ts.map +1 -0
- package/dist/core/types/ButtonMapping.d.ts +345 -0
- package/dist/core/types/ButtonMapping.d.ts.map +1 -0
- package/dist/core/types/Character.d.ts +397 -0
- package/dist/core/types/Character.d.ts.map +1 -0
- package/dist/core/types/ChartedBeatMap.d.ts +169 -0
- package/dist/core/types/ChartedBeatMap.d.ts.map +1 -0
- package/dist/core/types/Combat.d.ts +268 -0
- package/dist/core/types/Combat.d.ts.map +1 -0
- package/dist/core/types/CombatAI.d.ts +143 -0
- package/dist/core/types/CombatAI.d.ts.map +1 -0
- package/dist/core/types/Enemy.d.ts +447 -0
- package/dist/core/types/Enemy.d.ts.map +1 -0
- package/dist/core/types/Environmental.d.ts +213 -0
- package/dist/core/types/Environmental.d.ts.map +1 -0
- package/dist/core/types/Equipment.d.ts +309 -0
- package/dist/core/types/Equipment.d.ts.map +1 -0
- package/dist/core/types/ISessionTracker.d.ts +48 -0
- package/dist/core/types/ISessionTracker.d.ts.map +1 -0
- package/dist/core/types/LevelExport.d.ts +366 -0
- package/dist/core/types/LevelExport.d.ts.map +1 -0
- package/dist/core/types/Playlist.d.ts +70 -0
- package/dist/core/types/Playlist.d.ts.map +1 -0
- package/dist/core/types/Prestige.d.ts +94 -0
- package/dist/core/types/Prestige.d.ts.map +1 -0
- package/dist/core/types/Progression.d.ts +214 -0
- package/dist/core/types/Progression.d.ts.map +1 -0
- package/dist/core/types/RhythmXP.d.ts +398 -0
- package/dist/core/types/RhythmXP.d.ts.map +1 -0
- package/dist/core/utils/AbilityConstants.d.ts +31 -0
- package/dist/core/utils/AbilityConstants.d.ts.map +1 -0
- package/dist/core/utils/EffectApplierUtils.d.ts +56 -0
- package/dist/core/utils/EffectApplierUtils.d.ts.map +1 -0
- package/dist/core/utils/ImageValidator.d.ts +66 -0
- package/dist/core/utils/ImageValidator.d.ts.map +1 -0
- package/dist/core/utils/PrerequisiteValidator.d.ts +88 -0
- package/dist/core/utils/PrerequisiteValidator.d.ts.map +1 -0
- package/dist/essentia-wasm.es-BUEnKUts.js +2990 -0
- package/dist/essentia.js-model.es-CGA0xotH.js +306 -0
- package/dist/index.d.ts +176 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/playlist-data-engine.js +124 -0
- package/dist/playlist-data-engine.mjs +49251 -0
- package/dist/utils/EnchantmentLibrary.d.ts +378 -0
- package/dist/utils/EnchantmentLibrary.d.ts.map +1 -0
- package/dist/utils/arweaveGatewayManager.d.ts +485 -0
- package/dist/utils/arweaveGatewayManager.d.ts.map +1 -0
- package/dist/utils/arweaveUtils.d.ts +118 -0
- package/dist/utils/arweaveUtils.d.ts.map +1 -0
- package/dist/utils/constants.d.ts +439 -0
- package/dist/utils/constants.d.ts.map +1 -0
- package/dist/utils/equipmentConstants.d.ts +60 -0
- package/dist/utils/equipmentConstants.d.ts.map +1 -0
- package/dist/utils/hash.d.ts +33 -0
- package/dist/utils/hash.d.ts.map +1 -0
- package/dist/utils/logger.d.ts +192 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/magicItemExamples.d.ts +46 -0
- package/dist/utils/magicItemExamples.d.ts.map +1 -0
- package/dist/utils/playlistUtils.d.ts +149 -0
- package/dist/utils/playlistUtils.d.ts.map +1 -0
- package/dist/utils/random.d.ts +34 -0
- package/dist/utils/random.d.ts.map +1 -0
- package/dist/utils/sensorDashboard.d.ts +60 -0
- package/dist/utils/sensorDashboard.d.ts.map +1 -0
- package/dist/utils/validators.d.ts +189 -0
- package/dist/utils/validators.d.ts.map +1 -0
- package/dist/vite.svg +1 -0
- package/package.json +82 -0
|
@@ -0,0 +1,333 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Subdivision Playback Controller
|
|
3
|
+
*
|
|
4
|
+
* Real-time subdivision controller for practice mode. Enables instant
|
|
5
|
+
* switching between subdivision types during playback.
|
|
6
|
+
*
|
|
7
|
+
* Key features:
|
|
8
|
+
* - Real-time beat generation based on current subdivision type
|
|
9
|
+
* - Instant subdivision switching with configurable transition modes
|
|
10
|
+
* - Continuity across subdivision changes
|
|
11
|
+
* - Integration with Web Audio API for precise timing
|
|
12
|
+
*
|
|
13
|
+
* @example
|
|
14
|
+
* ```typescript
|
|
15
|
+
* const controller = new SubdivisionPlaybackController(unifiedMap, audioContext, {
|
|
16
|
+
* initialSubdivision: 'quarter',
|
|
17
|
+
* transitionMode: 'next-downbeat',
|
|
18
|
+
* onSubdivisionChange: (oldType, newType) => {
|
|
19
|
+
* console.log(`Switched from ${oldType} to ${newType}`);
|
|
20
|
+
* },
|
|
21
|
+
* });
|
|
22
|
+
*
|
|
23
|
+
* // Subscribe to beat events
|
|
24
|
+
* controller.subscribe((event) => {
|
|
25
|
+
* if (event.type === 'exact') {
|
|
26
|
+
* playBeatSound(event.beat);
|
|
27
|
+
* }
|
|
28
|
+
* });
|
|
29
|
+
*
|
|
30
|
+
* controller.play();
|
|
31
|
+
*
|
|
32
|
+
* // User clicks "Eighth Notes" button in practice mode
|
|
33
|
+
* controller.setSubdivision('eighth'); // Switches in real-time!
|
|
34
|
+
* ```
|
|
35
|
+
*/
|
|
36
|
+
import type { UnifiedBeatMap, SubdividedBeat, SubdividedBeatMap, SubdivisionType, SubdivisionPlaybackOptions, SubdivisionTransitionMode, SubdivisionCallback, AccuracyThresholds, ButtonPressResult } from '../types/BeatMap.js';
|
|
37
|
+
/**
|
|
38
|
+
* Subdivision Playback Controller
|
|
39
|
+
*
|
|
40
|
+
* Provides real-time subdivision switching for practice mode.
|
|
41
|
+
* Wraps a UnifiedBeatMap and generates beats on-the-fly based on
|
|
42
|
+
* the current subdivision type.
|
|
43
|
+
*/
|
|
44
|
+
export declare class SubdivisionPlaybackController {
|
|
45
|
+
private unifiedMap;
|
|
46
|
+
private audioContext;
|
|
47
|
+
private options;
|
|
48
|
+
private state;
|
|
49
|
+
private subscribers;
|
|
50
|
+
private subdivider;
|
|
51
|
+
/**
|
|
52
|
+
* Create a new SubdivisionPlaybackController
|
|
53
|
+
*
|
|
54
|
+
* @param unifiedMap - The unified beat map to use for subdivision
|
|
55
|
+
* @param audioContext - The Web Audio API AudioContext for timing
|
|
56
|
+
* @param options - Configuration options
|
|
57
|
+
*
|
|
58
|
+
* @example
|
|
59
|
+
* ```typescript
|
|
60
|
+
* const beatMap = await generator.generateBeatMap('song.mp3', 'track-1');
|
|
61
|
+
* const interpolatedMap = interpolator.interpolate(beatMap);
|
|
62
|
+
* const unifiedMap = unifyBeatMap(interpolatedMap);
|
|
63
|
+
*
|
|
64
|
+
* const controller = new SubdivisionPlaybackController(
|
|
65
|
+
* unifiedMap,
|
|
66
|
+
* audioContext,
|
|
67
|
+
* {
|
|
68
|
+
* initialSubdivision: 'quarter',
|
|
69
|
+
* transitionMode: 'next-downbeat',
|
|
70
|
+
* }
|
|
71
|
+
* );
|
|
72
|
+
* ```
|
|
73
|
+
*/
|
|
74
|
+
constructor(unifiedMap: UnifiedBeatMap, audioContext: AudioContext, options?: SubdivisionPlaybackOptions);
|
|
75
|
+
/**
|
|
76
|
+
* Get the current subdivision type
|
|
77
|
+
*/
|
|
78
|
+
get subdivision(): SubdivisionType;
|
|
79
|
+
/**
|
|
80
|
+
* Get the unified beat map
|
|
81
|
+
*/
|
|
82
|
+
get beatMap(): UnifiedBeatMap;
|
|
83
|
+
/**
|
|
84
|
+
* Get the current playback options
|
|
85
|
+
*/
|
|
86
|
+
getOptions(): Required<SubdivisionPlaybackOptions>;
|
|
87
|
+
/**
|
|
88
|
+
* Subscribe to beat events
|
|
89
|
+
*
|
|
90
|
+
* @param callback - Function to call when beat events occur
|
|
91
|
+
* @returns Unsubscribe function
|
|
92
|
+
*
|
|
93
|
+
* @example
|
|
94
|
+
* ```typescript
|
|
95
|
+
* const unsubscribe = controller.subscribe((event) => {
|
|
96
|
+
* if (event.type === 'upcoming') {
|
|
97
|
+
* // Pre-render beat visual
|
|
98
|
+
* } else if (event.type === 'exact') {
|
|
99
|
+
* // Beat is happening now
|
|
100
|
+
* }
|
|
101
|
+
* });
|
|
102
|
+
*
|
|
103
|
+
* // Later, to unsubscribe
|
|
104
|
+
* unsubscribe();
|
|
105
|
+
* ```
|
|
106
|
+
*/
|
|
107
|
+
subscribe(callback: SubdivisionCallback): () => void;
|
|
108
|
+
/**
|
|
109
|
+
* Change subdivision type in real-time
|
|
110
|
+
*
|
|
111
|
+
* The transition behavior depends on the transitionMode option:
|
|
112
|
+
* - 'immediate': Switch instantly at the current position
|
|
113
|
+
* - 'next-downbeat': Wait for the next downbeat before switching
|
|
114
|
+
* - 'next-measure': Wait for the next measure before switching
|
|
115
|
+
*
|
|
116
|
+
* @param type - The new subdivision type
|
|
117
|
+
*
|
|
118
|
+
* @example
|
|
119
|
+
* ```typescript
|
|
120
|
+
* // Switch to eighth notes immediately
|
|
121
|
+
* controller.setSubdivision('eighth');
|
|
122
|
+
*
|
|
123
|
+
* // Switch to half notes
|
|
124
|
+
* controller.setSubdivision('half');
|
|
125
|
+
* ```
|
|
126
|
+
*/
|
|
127
|
+
setSubdivision(type: SubdivisionType): void;
|
|
128
|
+
/**
|
|
129
|
+
* Set the transition mode for subdivision changes.
|
|
130
|
+
* Updates how pending subdivision changes are applied.
|
|
131
|
+
*
|
|
132
|
+
* @param mode - The transition mode ('immediate', 'next-downbeat', 'next-measure')
|
|
133
|
+
*
|
|
134
|
+
* @example
|
|
135
|
+
* ```typescript
|
|
136
|
+
* // Change to immediate mode during playback
|
|
137
|
+
* controller.setTransitionMode('immediate');
|
|
138
|
+
*
|
|
139
|
+
* // Any pending subdivision change will apply immediately
|
|
140
|
+
* controller.setSubdivision('eighth');
|
|
141
|
+
* ```
|
|
142
|
+
*/
|
|
143
|
+
setTransitionMode(mode: SubdivisionTransitionMode): void;
|
|
144
|
+
/**
|
|
145
|
+
* Apply the subdivision change immediately
|
|
146
|
+
*/
|
|
147
|
+
private applySubdivisionChange;
|
|
148
|
+
/**
|
|
149
|
+
* Regenerate beats for the current subdivision.
|
|
150
|
+
* When fromTimestamp is provided, only regenerates beats from that point onwards,
|
|
151
|
+
* preserving old beats before the transition point for smooth visual transitions.
|
|
152
|
+
*
|
|
153
|
+
* @param fromTimestamp - Optional timestamp to start regeneration from. Beats before this
|
|
154
|
+
* timestamp are preserved. Used for deferred transitions.
|
|
155
|
+
*/
|
|
156
|
+
private regenerateBeats;
|
|
157
|
+
/**
|
|
158
|
+
* Get a unique key for a beat
|
|
159
|
+
*/
|
|
160
|
+
private getBeatKey;
|
|
161
|
+
/**
|
|
162
|
+
* Start streaming beat events
|
|
163
|
+
*
|
|
164
|
+
* Begins emitting events synchronized with audio playback.
|
|
165
|
+
* Should be called when audio starts playing.
|
|
166
|
+
*/
|
|
167
|
+
play(): void;
|
|
168
|
+
/**
|
|
169
|
+
* Stop streaming beat events
|
|
170
|
+
*
|
|
171
|
+
* Stops all event emission and resets state.
|
|
172
|
+
*/
|
|
173
|
+
stop(): void;
|
|
174
|
+
/**
|
|
175
|
+
* Pause the playback
|
|
176
|
+
*
|
|
177
|
+
* Temporarily stops event emission but preserves position.
|
|
178
|
+
*/
|
|
179
|
+
pause(): void;
|
|
180
|
+
/**
|
|
181
|
+
* Resume a paused playback
|
|
182
|
+
*/
|
|
183
|
+
resume(): void;
|
|
184
|
+
/**
|
|
185
|
+
* Seek to a specific time position
|
|
186
|
+
*
|
|
187
|
+
* @param time - Time in seconds to seek to
|
|
188
|
+
*/
|
|
189
|
+
seek(time: number): void;
|
|
190
|
+
/**
|
|
191
|
+
* Get beats for a time range (generated on-the-fly)
|
|
192
|
+
*
|
|
193
|
+
* This method generates beats based on the current subdivision type
|
|
194
|
+
* within the specified time range.
|
|
195
|
+
*
|
|
196
|
+
* @param startTime - Start time in seconds
|
|
197
|
+
* @param endTime - End time in seconds
|
|
198
|
+
* @returns Array of subdivided beats in the range
|
|
199
|
+
*
|
|
200
|
+
* @example
|
|
201
|
+
* ```typescript
|
|
202
|
+
* // Get beats for the next 5 seconds
|
|
203
|
+
* const beats = controller.getBeatsInRange(currentTime, currentTime + 5);
|
|
204
|
+
* ```
|
|
205
|
+
*/
|
|
206
|
+
getBeatsInRange(startTime: number, endTime: number): SubdividedBeat[];
|
|
207
|
+
/**
|
|
208
|
+
* Get upcoming beats for pre-rendering
|
|
209
|
+
*
|
|
210
|
+
* Returns beats that will occur within the anticipation window.
|
|
211
|
+
*
|
|
212
|
+
* @param count - Maximum number of beats to return
|
|
213
|
+
* @returns Array of upcoming beats
|
|
214
|
+
*/
|
|
215
|
+
getUpcomingBeats(count: number): SubdividedBeat[];
|
|
216
|
+
/**
|
|
217
|
+
* Get the beat at a specific time
|
|
218
|
+
*
|
|
219
|
+
* Returns the beat closest to the given time within the timing tolerance.
|
|
220
|
+
*
|
|
221
|
+
* @param time - Time in seconds
|
|
222
|
+
* @returns Beat at the time, or null if no beat is near
|
|
223
|
+
*/
|
|
224
|
+
getBeatAtTime(time: number): SubdividedBeat | null;
|
|
225
|
+
/**
|
|
226
|
+
* Get the current beat (the beat that is currently playing or most recently passed)
|
|
227
|
+
*
|
|
228
|
+
* @returns Current beat, or null if before first beat
|
|
229
|
+
*/
|
|
230
|
+
getCurrentBeat(): SubdividedBeat | null;
|
|
231
|
+
/**
|
|
232
|
+
* Get the next beat (the beat that will occur next)
|
|
233
|
+
*
|
|
234
|
+
* @returns Next beat, or null if after last beat
|
|
235
|
+
*/
|
|
236
|
+
getNextBeat(): SubdividedBeat | null;
|
|
237
|
+
/**
|
|
238
|
+
* Get the current audio time with latency compensation
|
|
239
|
+
*
|
|
240
|
+
* @returns Current audio time in seconds
|
|
241
|
+
*/
|
|
242
|
+
private getCurrentAudioTime;
|
|
243
|
+
/**
|
|
244
|
+
* Get total latency compensation in seconds
|
|
245
|
+
*
|
|
246
|
+
* Combines output latency, base latency, and user offset
|
|
247
|
+
*/
|
|
248
|
+
private getTotalLatencyCompensation;
|
|
249
|
+
/**
|
|
250
|
+
* Schedule the next update frame
|
|
251
|
+
*/
|
|
252
|
+
private scheduleUpdate;
|
|
253
|
+
/**
|
|
254
|
+
* Main update loop - checks for beat events to emit
|
|
255
|
+
*/
|
|
256
|
+
private update;
|
|
257
|
+
/**
|
|
258
|
+
* Check for pending subdivision changes
|
|
259
|
+
*/
|
|
260
|
+
private checkPendingSubdivisionChange;
|
|
261
|
+
/**
|
|
262
|
+
* Emit a beat event to all subscribers
|
|
263
|
+
*/
|
|
264
|
+
private emitEvent;
|
|
265
|
+
/**
|
|
266
|
+
* Check if the controller is currently running
|
|
267
|
+
*/
|
|
268
|
+
isRunning(): boolean;
|
|
269
|
+
/**
|
|
270
|
+
* Check if the controller is paused
|
|
271
|
+
*/
|
|
272
|
+
isPaused(): boolean;
|
|
273
|
+
/**
|
|
274
|
+
* Get the current playback position
|
|
275
|
+
*
|
|
276
|
+
* @returns Current time in seconds
|
|
277
|
+
*/
|
|
278
|
+
getCurrentTime(): number;
|
|
279
|
+
/**
|
|
280
|
+
* Get the beat map duration
|
|
281
|
+
*/
|
|
282
|
+
getDuration(): number;
|
|
283
|
+
/**
|
|
284
|
+
* Check a button press against the current subdivision's beats.
|
|
285
|
+
*
|
|
286
|
+
* This method evaluates tap accuracy against the subdivided beat grid,
|
|
287
|
+
* not the original quarter notes. Use this when real-time subdivision
|
|
288
|
+
* is active to ensure tap feedback matches the visual beat positions.
|
|
289
|
+
*
|
|
290
|
+
* Note: Key matching is not supported in subdivision mode - all beats are
|
|
291
|
+
* treated as tap-only. This differs from BeatStream.checkButtonPress which
|
|
292
|
+
* supports key-matching beats.
|
|
293
|
+
*
|
|
294
|
+
* @param timestamp - The time of the button press (audio time in seconds)
|
|
295
|
+
* @param thresholds - Optional accuracy thresholds to override defaults
|
|
296
|
+
* @returns Button press result with accuracy level and matched beat
|
|
297
|
+
*/
|
|
298
|
+
checkButtonPress(timestamp: number, thresholds?: AccuracyThresholds): ButtonPressResult;
|
|
299
|
+
/**
|
|
300
|
+
* Update the unified beat map (e.g., after re-analysis)
|
|
301
|
+
*
|
|
302
|
+
* @param unifiedMap - New unified beat map to use
|
|
303
|
+
*/
|
|
304
|
+
setBeatMap(unifiedMap: UnifiedBeatMap): void;
|
|
305
|
+
/**
|
|
306
|
+
* Force an update cycle (primarily for testing).
|
|
307
|
+
*
|
|
308
|
+
* This manually triggers the update loop which checks for pending
|
|
309
|
+
* subdivision changes and emits beat events. Useful in tests where
|
|
310
|
+
* the animation frame loop doesn't run automatically.
|
|
311
|
+
*/
|
|
312
|
+
forceUpdate(): void;
|
|
313
|
+
/**
|
|
314
|
+
* Get the current SubdividedBeatMap with partial regeneration applied.
|
|
315
|
+
*
|
|
316
|
+
* This returns a SubdividedBeatMap containing all beats from the
|
|
317
|
+
* scheduled beats map. When a deferred transition has occurred,
|
|
318
|
+
* this will include:
|
|
319
|
+
* - Beats before the transition point with the OLD subdivision
|
|
320
|
+
* - Beats from the transition point onwards with the NEW subdivision
|
|
321
|
+
*
|
|
322
|
+
* Use this for visualization when you need to show the actual beat
|
|
323
|
+
* grid that the player will encounter, including partial transitions.
|
|
324
|
+
*
|
|
325
|
+
* @returns A SubdividedBeatMap with all scheduled beats
|
|
326
|
+
*/
|
|
327
|
+
getSubdividedBeatMap(): SubdividedBeatMap;
|
|
328
|
+
/**
|
|
329
|
+
* Clean up resources
|
|
330
|
+
*/
|
|
331
|
+
dispose(): void;
|
|
332
|
+
}
|
|
333
|
+
//# sourceMappingURL=SubdivisionPlaybackController.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SubdivisionPlaybackController.d.ts","sourceRoot":"","sources":["../../../src/core/playback/SubdivisionPlaybackController.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AAEH,OAAO,KAAK,EACR,cAAc,EACd,cAAc,EACd,iBAAiB,EACjB,eAAe,EAEf,0BAA0B,EAC1B,yBAAyB,EAEzB,mBAAmB,EAEnB,kBAAkB,EAClB,iBAAiB,EAEpB,MAAM,qBAAqB,CAAC;AAyC7B;;;;;;GAMG;AACH,qBAAa,6BAA6B;IACtC,OAAO,CAAC,UAAU,CAAiB;IACnC,OAAO,CAAC,YAAY,CAAe;IACnC,OAAO,CAAC,OAAO,CAAuC;IACtD,OAAO,CAAC,KAAK,CAAgB;IAC7B,OAAO,CAAC,WAAW,CAA2B;IAC9C,OAAO,CAAC,UAAU,CAAiB;IAEnC;;;;;;;;;;;;;;;;;;;;;;OAsBG;gBAEC,UAAU,EAAE,cAAc,EAC1B,YAAY,EAAE,YAAY,EAC1B,OAAO,GAAE,0BAA+B;IA+C5C;;OAEG;IACH,IAAI,WAAW,IAAI,eAAe,CAEjC;IAED;;OAEG;IACH,IAAI,OAAO,IAAI,cAAc,CAE5B;IAED;;OAEG;IACH,UAAU,IAAI,QAAQ,CAAC,0BAA0B,CAAC;IAMlD;;;;;;;;;;;;;;;;;;;OAmBG;IACH,SAAS,CAAC,QAAQ,EAAE,mBAAmB,GAAG,MAAM,IAAI;IAQpD;;;;;;;;;;;;;;;;;;OAkBG;IACH,cAAc,CAAC,IAAI,EAAE,eAAe,GAAG,IAAI;IAqD3C;;;;;;;;;;;;;;OAcG;IACH,iBAAiB,CAAC,IAAI,EAAE,yBAAyB,GAAG,IAAI;IAmCxD;;OAEG;IACH,OAAO,CAAC,sBAAsB;IAyB9B;;;;;;;OAOG;IACH,OAAO,CAAC,eAAe;IAwDvB;;OAEG;IACH,OAAO,CAAC,UAAU;IAMlB;;;;;OAKG;IACH,IAAI,IAAI,IAAI;IAkBZ;;;;OAIG;IACH,IAAI,IAAI,IAAI;IAgBZ;;;;OAIG;IACH,KAAK,IAAI,IAAI;IAgBb;;OAEG;IACH,MAAM,IAAI,IAAI;IAYd;;;;OAIG;IACH,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAkBxB;;;;;;;;;;;;;;;OAeG;IACH,eAAe,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,cAAc,EAAE;IAgBrE;;;;;;;OAOG;IACH,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,cAAc,EAAE;IA0BjD;;;;;;;OAOG;IACH,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,cAAc,GAAG,IAAI;IAYlD;;;;OAIG;IACH,cAAc,IAAI,cAAc,GAAG,IAAI;IAevC;;;;OAIG;IACH,WAAW,IAAI,cAAc,GAAG,IAAI;IAkBpC;;;;OAIG;IACH,OAAO,CAAC,mBAAmB;IAc3B;;;;OAIG;IACH,OAAO,CAAC,2BAA2B;IAoBnC;;OAEG;IACH,OAAO,CAAC,cAAc;IAWtB;;OAEG;IACH,OAAO,CAAC,MAAM;IA6Cd;;OAEG;IACH,OAAO,CAAC,6BAA6B;IAoDrC;;OAEG;IACH,OAAO,CAAC,SAAS;IAyBjB;;OAEG;IACH,SAAS,IAAI,OAAO;IAIpB;;OAEG;IACH,QAAQ,IAAI,OAAO;IAInB;;;;OAIG;IACH,cAAc,IAAI,MAAM;IAIxB;;OAEG;IACH,WAAW,IAAI,MAAM;IAIrB;;;;;;;;;;;;;;OAcG;IACH,gBAAgB,CAAC,SAAS,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,kBAAkB,GAAG,iBAAiB;IA6DvF;;;;OAIG;IACH,UAAU,CAAC,UAAU,EAAE,cAAc,GAAG,IAAI;IAU5C;;;;;;OAMG;IACH,WAAW,IAAI,IAAI;IAInB;;;;;;;;;;;;;OAaG;IACH,oBAAoB,IAAI,iBAAiB;IAsCzC;;OAEG;IACH,OAAO,IAAI,IAAI;CAOlB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/core/playback/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EACH,6BAA6B,GAChC,MAAM,oCAAoC,CAAC"}
|
|
@@ -0,0 +1,203 @@
|
|
|
1
|
+
import type { CharacterSheet, Ability } from '../types/Character.js';
|
|
2
|
+
import type { ListeningSession, LevelUpDetail, ApplyPendingStatIncreaseResult } from '../types/Progression.js';
|
|
3
|
+
import type { PlaylistTrack } from '../types/Playlist.js';
|
|
4
|
+
import type { PrestigeLevel, PrestigeResult } from '../types/Prestige.js';
|
|
5
|
+
import type { AudioProfile } from '../types/AudioProfile.js';
|
|
6
|
+
import type { ISessionTracker } from '../types/ISessionTracker.js';
|
|
7
|
+
import type { RhythmXPResult } from '../types/RhythmXP.js';
|
|
8
|
+
import { StatManager } from './stat/StatManager.js';
|
|
9
|
+
import { PrestigeSystem } from './PrestigeSystem.js';
|
|
10
|
+
export type { ApplyPendingStatIncreaseResult } from '../types/Progression.js';
|
|
11
|
+
export interface CharacterUpdateResult {
|
|
12
|
+
character: CharacterSheet;
|
|
13
|
+
xpEarned: number;
|
|
14
|
+
leveledUp: boolean;
|
|
15
|
+
newLevel?: number;
|
|
16
|
+
masteredTrack: boolean;
|
|
17
|
+
masteryBonusXP: number;
|
|
18
|
+
/** Detailed breakdown of each level-up (NEW) */
|
|
19
|
+
levelUpDetails?: LevelUpDetail[];
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Result type for rhythm XP additions (excludes track mastery fields)
|
|
23
|
+
* Rhythm game XP doesn't involve track mastery mechanics
|
|
24
|
+
*/
|
|
25
|
+
export type RhythmXPUpdateResult = Omit<CharacterUpdateResult, 'masteredTrack' | 'masteryBonusXP'>;
|
|
26
|
+
/**
|
|
27
|
+
* CharacterUpdater - Orchestrates character updates from listening sessions
|
|
28
|
+
*/
|
|
29
|
+
export declare class CharacterUpdater {
|
|
30
|
+
private xpCalculator;
|
|
31
|
+
private statManager?;
|
|
32
|
+
constructor(statManager?: StatManager);
|
|
33
|
+
/**
|
|
34
|
+
* Add XP from any source (combat, quests, custom activities)
|
|
35
|
+
* Triggers level-up system with detailed breakdowns
|
|
36
|
+
*
|
|
37
|
+
* @param character - The character to update
|
|
38
|
+
* @param xpAmount - Amount of XP to add
|
|
39
|
+
* @param source - Source of the XP (for tracking)
|
|
40
|
+
* @returns Result object containing updated character and level-up details
|
|
41
|
+
*
|
|
42
|
+
* @example
|
|
43
|
+
* ```typescript
|
|
44
|
+
* // Combat victory XP
|
|
45
|
+
* const result = updater.addXP(character, 500, 'combat');
|
|
46
|
+
*
|
|
47
|
+
* // Quest completion XP
|
|
48
|
+
* const questResult = updater.addXP(character, 1000, 'quest');
|
|
49
|
+
*
|
|
50
|
+
* // Custom activity XP
|
|
51
|
+
* const customResult = updater.addXP(character, 250, 'exploration');
|
|
52
|
+
*
|
|
53
|
+
* if (result.leveledUp) {
|
|
54
|
+
* console.log(`🎉 LEVELED UP to ${result.newLevel}!`);
|
|
55
|
+
* for (const detail of result.levelUpDetails) {
|
|
56
|
+
* console.log(`HP: +${detail.hpIncrease}`);
|
|
57
|
+
* console.log(`Stats:`, detail.statIncreases);
|
|
58
|
+
* }
|
|
59
|
+
* }
|
|
60
|
+
* ```
|
|
61
|
+
*/
|
|
62
|
+
addXP(character: CharacterSheet, xpAmount: number, _source?: string): Omit<CharacterUpdateResult, 'masteredTrack' | 'masteryBonusXP'>;
|
|
63
|
+
/**
|
|
64
|
+
* Add XP from rhythm game button presses.
|
|
65
|
+
* Triggers level-up system just like addXP() does.
|
|
66
|
+
*
|
|
67
|
+
* This method is designed to work with RhythmXPCalculator results.
|
|
68
|
+
* Rhythm XP doesn't involve track mastery mechanics.
|
|
69
|
+
*
|
|
70
|
+
* @param character - The character to update
|
|
71
|
+
* @param xpResult - Result from RhythmXPCalculator.calculateButtonPressXP()
|
|
72
|
+
* @param source - Source label for tracking (default: 'rhythm_game')
|
|
73
|
+
* @returns Result object containing updated character and level-up details
|
|
74
|
+
*
|
|
75
|
+
* @example
|
|
76
|
+
* ```typescript
|
|
77
|
+
* const calculator = new RhythmXPCalculator();
|
|
78
|
+
* const xpResult = calculator.calculateButtonPressXP('perfect', { comboLength: 50 });
|
|
79
|
+
*
|
|
80
|
+
* const updateResult = updater.addRhythmXP(character, xpResult);
|
|
81
|
+
*
|
|
82
|
+
* if (updateResult.leveledUp) {
|
|
83
|
+
* console.log(`LEVELED UP to ${updateResult.newLevel}!`);
|
|
84
|
+
* for (const detail of updateResult.levelUpDetails ?? []) {
|
|
85
|
+
* console.log(`HP: +${detail.hpIncrease}`);
|
|
86
|
+
* }
|
|
87
|
+
* }
|
|
88
|
+
* ```
|
|
89
|
+
*/
|
|
90
|
+
addRhythmXP(character: CharacterSheet, xpResult: RhythmXPResult, source?: string): RhythmXPUpdateResult;
|
|
91
|
+
/**
|
|
92
|
+
* Helper method to check if a level grants stat increases
|
|
93
|
+
*/
|
|
94
|
+
private isStatIncreaseLevel;
|
|
95
|
+
/**
|
|
96
|
+
* Updates a character based on a completed listening session
|
|
97
|
+
* Calculates XP, checks for level ups, and handles track mastery
|
|
98
|
+
*
|
|
99
|
+
* @param character - The character to update
|
|
100
|
+
* @param session - The completed listening session
|
|
101
|
+
* @param track - The track that was listened to (optional, but needed for mastery/completion bonus)
|
|
102
|
+
* @param options - Optional parameters for mastery calculation
|
|
103
|
+
* @param options.previousListenCount - Listen count before this session (defaults to 0)
|
|
104
|
+
* @param options.previousXP - Total track XP before this session (defaults to 0)
|
|
105
|
+
* @param options.prestigeLevel - Character's prestige level (defaults to character's prestige_level or 0)
|
|
106
|
+
* @returns Result object containing updated character and event details
|
|
107
|
+
*/
|
|
108
|
+
updateCharacterFromSession(character: CharacterSheet, session: ListeningSession, track?: PlaylistTrack, options?: {
|
|
109
|
+
previousListenCount?: number;
|
|
110
|
+
previousXP?: number;
|
|
111
|
+
prestigeLevel?: PrestigeLevel;
|
|
112
|
+
}): CharacterUpdateResult;
|
|
113
|
+
/**
|
|
114
|
+
* Apply pending stat increase with user-selected stats
|
|
115
|
+
* Only works if pendingStatIncreases counter > 0
|
|
116
|
+
*
|
|
117
|
+
* @param character - Character with pending stat increases
|
|
118
|
+
* @param primaryStat - The stat to get +2 (or one of the +1s if using two stats)
|
|
119
|
+
* @param secondaryStats - Optional array of 1 additional stat for +1/+1 distribution
|
|
120
|
+
* @returns Result with updated character
|
|
121
|
+
*
|
|
122
|
+
* @example
|
|
123
|
+
* ```typescript
|
|
124
|
+
* // +2 to STR only
|
|
125
|
+
* const result = updater.applyPendingStatIncrease(character, 'STR');
|
|
126
|
+
*
|
|
127
|
+
* // +1 to STR and +1 to DEX
|
|
128
|
+
* const result = updater.applyPendingStatIncrease(character, 'STR', ['DEX']);
|
|
129
|
+
* ```
|
|
130
|
+
*/
|
|
131
|
+
applyPendingStatIncrease(character: CharacterSheet, primaryStat: Ability, secondaryStats?: Ability[]): ApplyPendingStatIncreaseResult;
|
|
132
|
+
/**
|
|
133
|
+
* Check if character has pending stat increases
|
|
134
|
+
*
|
|
135
|
+
* @param character - Character to check
|
|
136
|
+
* @returns true if character has pending stat increases
|
|
137
|
+
*/
|
|
138
|
+
hasPendingStatIncreases(character: CharacterSheet): boolean;
|
|
139
|
+
/**
|
|
140
|
+
* Get the count of pending stat increases
|
|
141
|
+
*
|
|
142
|
+
* @param character - Character to check
|
|
143
|
+
* @returns Number of pending stat increases
|
|
144
|
+
*/
|
|
145
|
+
getPendingStatIncreaseCount(character: CharacterSheet): number;
|
|
146
|
+
/**
|
|
147
|
+
* Reset a character for prestige after mastering a track.
|
|
148
|
+
*
|
|
149
|
+
* This is the main prestige execution function that handles the full prestige operation:
|
|
150
|
+
* 1. Validates: Check can prestige (not at max, meets thresholds)
|
|
151
|
+
* 2. Preserves equipment
|
|
152
|
+
* 3. Clears track sessions (calls sessionTracker.clearTrackSessions(trackUuid))
|
|
153
|
+
* 4. Regenerates base level 1 character from seed
|
|
154
|
+
* 5. Restores equipment
|
|
155
|
+
* 6. Re-applies equipment effects
|
|
156
|
+
* 7. Increments prestige_level
|
|
157
|
+
* 8. Returns result with success/failure info
|
|
158
|
+
*
|
|
159
|
+
* @param character - The character to prestige
|
|
160
|
+
* @param sessionTracker - SessionTracker instance to clear track sessions
|
|
161
|
+
* @param trackUuid - UUID of the track being prestiged
|
|
162
|
+
* @param audioProfile - Audio profile for character regeneration
|
|
163
|
+
* @param track - Track metadata for character regeneration
|
|
164
|
+
* @returns PrestigeResult indicating success/failure and new prestige level
|
|
165
|
+
*
|
|
166
|
+
* @example
|
|
167
|
+
* ```typescript
|
|
168
|
+
* const result = updater.resetCharacterForPrestige(
|
|
169
|
+
* character,
|
|
170
|
+
* sessionTracker,
|
|
171
|
+
* trackUuid,
|
|
172
|
+
* audioProfile,
|
|
173
|
+
* track
|
|
174
|
+
* );
|
|
175
|
+
*
|
|
176
|
+
* if (result.success) {
|
|
177
|
+
* console.log(result.message); // "Successfully prestiged to level I! ..."
|
|
178
|
+
* } else {
|
|
179
|
+
* console.log(result.message); // "Prestige failed: ..."
|
|
180
|
+
* }
|
|
181
|
+
* ```
|
|
182
|
+
*/
|
|
183
|
+
resetCharacterForPrestige(character: CharacterSheet, sessionTracker: ISessionTracker, trackUuid: string, audioProfile: AudioProfile, track: PlaylistTrack): PrestigeResult;
|
|
184
|
+
/**
|
|
185
|
+
* Check if a character can prestige for a specific track.
|
|
186
|
+
*
|
|
187
|
+
* @param character - The character to check
|
|
188
|
+
* @param sessionTracker - SessionTracker instance for getting track stats
|
|
189
|
+
* @param trackUuid - UUID of the track to check
|
|
190
|
+
* @returns True if the character can prestige
|
|
191
|
+
*/
|
|
192
|
+
canPrestige(character: CharacterSheet, sessionTracker: ISessionTracker, trackUuid: string): boolean;
|
|
193
|
+
/**
|
|
194
|
+
* Get prestige info for a character and track combination.
|
|
195
|
+
*
|
|
196
|
+
* @param character - The character to get info for
|
|
197
|
+
* @param sessionTracker - SessionTracker instance for getting track stats
|
|
198
|
+
* @param trackUuid - UUID of the track
|
|
199
|
+
* @returns PrestigeInfo object with current progress
|
|
200
|
+
*/
|
|
201
|
+
getPrestigeInfo(character: CharacterSheet, sessionTracker: ISessionTracker, trackUuid: string): ReturnType<typeof PrestigeSystem.getPrestigeInfo>;
|
|
202
|
+
}
|
|
203
|
+
//# sourceMappingURL=CharacterUpdater.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CharacterUpdater.d.ts","sourceRoot":"","sources":["../../../src/core/progression/CharacterUpdater.ts"],"names":[],"mappings":"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"}
|