├── .config └── dotnet-tools.json ├── .editorconfig ├── .git-blame-ignore-revs ├── .gitattributes ├── .github ├── CODEOWNERS ├── labeler.yml └── workflows │ ├── ci.yml │ ├── crowdin.yml │ ├── dotnet-format.yml │ ├── labeler.yml │ └── release.yml ├── .gitignore ├── .globalconfig ├── CONTRIBUTING.md ├── CodeAnalysis ├── BannedSymbols.txt └── osu.ruleset ├── Directory.Build.props ├── LICENSE ├── README.md ├── appveyor.yml ├── assets └── logo.png ├── cake.config ├── osu.Game.Rulesets.Karaoke.Architectures ├── BaseTest.cs ├── Edit │ └── Checks │ │ ├── TestCheck.cs │ │ └── TestCheckTest.cs ├── Extensions.cs ├── MethodUtils.cs ├── Program.cs ├── Project.cs ├── TestClass.cs ├── TestTestClass.cs └── osu.Game.Rulesets.Karaoke.Architectures.csproj ├── osu.Game.Rulesets.Karaoke.Tests ├── .vscode │ ├── launch.json │ └── tasks.json ├── Asserts │ ├── ObjectAssert.cs │ ├── RubyTagAssert.cs │ └── TimeTagAssert.cs ├── Beatmaps │ ├── ElementIdTest.cs │ ├── Formats │ │ ├── KaraokeLegacyBeatmapDecoderTest.cs │ │ └── KaraokeLegacyBeatmapEncoderTest.cs │ ├── KaraokeBeatmapConversionTest.cs │ ├── Metadatas │ │ ├── PageInfoTest.cs │ │ └── SingerInfoTest.cs │ ├── TestKaraokeBeatmap.cs │ ├── TestSceneBeatmapInfoWedge.cs │ └── Utils │ │ └── SingerUtilsTest.cs ├── Bindables │ ├── BindableCultureInfoTest.cs │ └── BindableFontUsageTest.cs ├── Difficulty │ └── KaraokeDifficultyCalculatorTest.cs ├── Editor │ ├── ChangeHandlers │ │ ├── BaseChangeHandlerTest.cs │ │ ├── BaseHitObjectChangeHandlerTest.cs │ │ ├── BaseHitObjectPropertyChangeHandlerTest.cs │ │ ├── Beatmaps │ │ │ ├── BeatmapPagesChangeHandlerTest.cs │ │ │ ├── BeatmapSingersChangeHandlerTest.cs │ │ │ └── BeatmapTranslationsChangeHandlerTest.cs │ │ ├── ImportBeatmapChangeHandlerTest.cs │ │ ├── LockChangeHandlerTest.cs │ │ ├── Lyrics │ │ │ ├── LyricLanguageChangeHandlerTest.cs │ │ │ ├── LyricPropertyAutoGenerateChangeHandlerTest.cs │ │ │ ├── LyricPropertyChangeHandlerTest.cs │ │ │ ├── LyricReferenceChangeHandlerTest.cs │ │ │ ├── LyricRubyTagsChangeHandlerTest.cs │ │ │ ├── LyricSingerChangeHandlerTest.cs │ │ │ ├── LyricTextChangeHandlerTest.cs │ │ │ ├── LyricTimeTagsChangeHandlerTest.cs │ │ │ ├── LyricTranslationChangeHandlerTest.cs │ │ │ └── LyricsChangeHandlerTest.cs │ │ ├── Notes │ │ │ ├── NotePropertyChangeHandlerTest.cs │ │ │ └── NotesChangeHandlerTest.cs │ │ └── Stages │ │ │ ├── BaseStageInfoChangeHandlerTest.cs │ │ │ ├── ClassicStageChangeHandlerTest.cs │ │ │ ├── StageElementCategoryChangeHandlerTest.cs │ │ │ └── StagesChangeHandlerTest.cs │ ├── Checks │ │ ├── BaseCheckTest.cs │ │ ├── BeatmapPropertyCheckTest.cs │ │ ├── CheckBeatmapAvailableTranslationsTest.cs │ │ ├── CheckBeatmapNoteInfoTest.cs │ │ ├── CheckBeatmapPageInfoTest.cs │ │ ├── CheckClassicStageInfoTest.cs │ │ ├── CheckLyricLanguageTest.cs │ │ ├── CheckLyricReferenceLyricTest.cs │ │ ├── CheckLyricRubyTagTest.cs │ │ ├── CheckLyricSingerTest.cs │ │ ├── CheckLyricTextTest.cs │ │ ├── CheckLyricTimeTagTest.cs │ │ ├── CheckLyricTranslationsTest.cs │ │ ├── CheckNoteReferenceLyricTest.cs │ │ ├── CheckNoteTextTest.cs │ │ ├── CheckNoteTimeTest.cs │ │ ├── CheckStageInfoTest.cs │ │ └── HitObjectCheckTest.cs │ ├── Generator │ │ ├── BaseGeneratorSelectorTest.cs │ │ ├── BasePropertyDetectorTest.cs │ │ ├── BasePropertyGeneratorTest.cs │ │ ├── Beatmaps │ │ │ ├── BaseBeatmapDetectorTest.cs │ │ │ ├── BaseBeatmapGeneratorTest.cs │ │ │ └── Pages │ │ │ │ └── PageGeneratorTest.cs │ │ ├── GeneratorConfigExtensionTest.cs │ │ ├── GeneratorConfigHelper.cs │ │ ├── Lyrics │ │ │ ├── BaseLyricDetectorTest.cs │ │ │ ├── BaseLyricGeneratorSelectorTest.cs │ │ │ ├── BaseLyricGeneratorTest.cs │ │ │ ├── Language │ │ │ │ └── LanguageDetectorTest.cs │ │ │ ├── Notes │ │ │ │ └── NoteGeneratorTest.cs │ │ │ ├── ReferenceLyric │ │ │ │ └── ReferenceLyricDetectorTest.cs │ │ │ ├── Romanisation │ │ │ │ ├── BaseRomanisationGeneratorTest.cs │ │ │ │ ├── Ja │ │ │ │ │ └── JaRomanisationGeneratorTest.cs │ │ │ │ ├── RomanisationGenerateResultHelper.cs │ │ │ │ └── RomanisationGeneratorSelectorTest.cs │ │ │ ├── RubyTags │ │ │ │ ├── BaseRubyTagGeneratorTest.cs │ │ │ │ ├── Ja │ │ │ │ │ └── JaRubyTagGeneratorTest.cs │ │ │ │ └── RubyTagGeneratorSelectorTest.cs │ │ │ └── TimeTags │ │ │ │ ├── BaseTimeTagGeneratorTest.cs │ │ │ │ ├── Ja │ │ │ │ └── JaTimeTagGeneratorTest.cs │ │ │ │ ├── TimeTagGeneratorSelectorTest.cs │ │ │ │ └── Zh │ │ │ │ └── ZhTimeTagGeneratorTest.cs │ │ └── Stages │ │ │ ├── BaseStageElementCategoryGeneratorTest.cs │ │ │ ├── BaseStageInfoGeneratorTest.cs │ │ │ ├── BaseStageInfoPropertyGeneratorTest.cs │ │ │ ├── Classic │ │ │ ├── ClassicLyricLayoutCategoryGeneratorTest.cs │ │ │ ├── ClassicLyricTimingInfoGeneratorTest.cs │ │ │ └── ClassicStageInfoGeneratorTest.cs │ │ │ ├── Preview │ │ │ └── PreviewStageInfoGeneratorTest.cs │ │ │ └── StageInfoGeneratorSelectorTest.cs │ ├── TestSceneEditor.cs │ ├── TestSceneSetupScreen.cs │ ├── TestSceneTimeTagTooltip.cs │ └── Utils │ │ ├── HitObjectWritableUtilsTest.cs │ │ ├── LockStateUtilsTest.cs │ │ └── ValueChangedEventUtilsTest.cs ├── Extensions │ ├── EnumerableExtensionsTest.cs │ ├── PlayerTestSceneExtensions.cs │ └── PrimaryKeyObjectExtension.cs ├── Flags │ └── FlagStateTest.cs ├── Graphics │ ├── Sprites │ │ ├── DisplayLyricProcessorTest.cs │ │ └── Processor │ │ │ ├── DisplayProcessorTestScene.cs │ │ │ ├── TestSceneLyricFirstDisplayProcessor.cs │ │ │ └── TestSceneRomanisedSyllableFirstDisplayProcessor.cs │ ├── TestSceneFontSelector.cs │ ├── TestSceneLanguageSelector.cs │ ├── TestSceneLyricTooltip.cs │ ├── TestSceneRightTriangle.cs │ └── TestSceneSingerToolTip.cs ├── Helper │ ├── TestCaseCheckHelper.cs │ ├── TestCaseElementIdHelper.cs │ ├── TestCaseNoteHelper.cs │ ├── TestCaseTagHelper.cs │ └── TestCaseToneHelper.cs ├── IO │ ├── Serialization │ │ ├── Converters │ │ │ ├── BaseSingleConverterTest.cs │ │ │ ├── ColourConverterTest.cs │ │ │ ├── CultureInfoConverterTest.cs │ │ │ ├── ElementIdConverterTest.cs │ │ │ ├── FontUsageConverterTest.cs │ │ │ ├── KaraokeSkinElementConverterTest.cs │ │ │ ├── LyricConverterTest.cs │ │ │ ├── ReferenceLyricPropertyConfigConverterTest.cs │ │ │ ├── RubyTagConverterTest.cs │ │ │ ├── RubyTagsConverterTest.cs │ │ │ ├── ShaderConverterTest.cs │ │ │ ├── StageInfoConverterTest.cs │ │ │ ├── TimeTagConverterTest.cs │ │ │ ├── TimeTagsConverterTest.cs │ │ │ ├── ToneConverterTest.cs │ │ │ └── TranslationConverterTest.cs │ │ ├── KaraokeJsonSerializableExtensionsTest.cs │ │ └── SkinJsonSerializableExtensionsTest.cs │ └── Stores │ │ ├── BaseGlyphStoreTest.cs │ │ └── TtfGlyphStoreTest.cs ├── Integration │ └── Formats │ │ ├── KarDecoderTest.cs │ │ ├── KarEncoderTest.cs │ │ ├── KarFileTest.cs │ │ ├── LrcDecoderTest.cs │ │ ├── LrcEncoderTest.cs │ │ ├── LrcParserUtilsTest.cs │ │ ├── LyricTextDecoderTest.cs │ │ └── LyricTextEncoderTest.cs ├── KaraokeTestBrowser.cs ├── Mods │ ├── KaraokeModStageTestScene.cs │ ├── KaraokeModTestScene.cs │ ├── ModsTest.cs │ ├── TestSceneKaraokeModAutoplay.cs │ ├── TestSceneKaraokeModAutoplayBySinger.cs │ ├── TestSceneKaraokeModClassicStage.cs │ ├── TestSceneKaraokeModDisableNote.cs │ ├── TestSceneKaraokeModFlashlight.cs │ ├── TestSceneKaraokeModFun.cs │ ├── TestSceneKaraokeModLyricConfiguration.cs │ ├── TestSceneKaraokeModPerfect.cs │ ├── TestSceneKaraokeModPractice.cs │ ├── TestSceneKaraokeModPreviewStage.cs │ ├── TestSceneKaraokeModSuddenDeath.cs │ └── TestSceneKaraokeModTranslation.cs ├── Objects │ ├── LyricTest.cs │ ├── NoteTest.cs │ ├── RubyTagTest.cs │ ├── TimeTagTest.cs │ ├── ToneCalculationTest.cs │ ├── Utils │ │ ├── LyricUtilsTest.cs │ │ ├── LyricsUtilsTest.cs │ │ ├── NoteUtilsTest.cs │ │ ├── NotesUtilsTest.cs │ │ ├── OrderUtilsTest.cs │ │ ├── RubyTagUtilsTest.cs │ │ ├── RubyTagsUtilsTest.cs │ │ ├── TimeTagUtilsTest.cs │ │ └── TimeTagsUtilsTest.cs │ └── Workings │ │ ├── HitObjectWorkingPropertyValidatorTest.cs │ │ ├── LyricWorkingPropertyValidatorTest.cs │ │ └── NoteWorkingPropertyValidatorTest.cs ├── Overlays │ ├── Changelog │ │ ├── ChangelogPullRequestInfoTest.cs │ │ ├── TestSceneKaraokeChangeLogMarkdownContainer.cs │ │ └── TestSceneKaraokeChangeLogOverlay.cs │ └── TestSceneOverlayColourProvider.cs ├── Ranking │ ├── TestKaraokeScoreInfo.cs │ ├── TestSceneBeatmapInfoGraph.cs │ ├── TestSceneBeatmapMetadataGraph.cs │ ├── TestSceneHitEventTimingDistributionGraph.cs │ ├── TestSceneNotScorableGraph.cs │ ├── TestSceneScoringResultGraph.cs │ └── TestSceneStatisticsPanel.cs ├── Replays │ ├── TestSceneAutoGeneration.cs │ └── TestSceneAutoGenerationBySinger.cs ├── Resources │ ├── TestResources.cs │ ├── Testing │ │ ├── Beatmaps │ │ │ ├── karaoke-file-samples-expected-conversion.json │ │ │ ├── karaoke-file-samples-without-note.osu │ │ │ ├── karaoke-file-samples.osu │ │ │ ├── karaoke-note-samples.osu │ │ │ └── karaoke-translation-samples.osu │ │ ├── Fonts │ │ │ ├── Fnt │ │ │ │ └── OpenSans │ │ │ │ │ ├── LICENSE.txt │ │ │ │ │ ├── OpenSans-Bold.bin │ │ │ │ │ ├── OpenSans-BoldItalic.bin │ │ │ │ │ ├── OpenSans-BoldItalic_0.png │ │ │ │ │ ├── OpenSans-Bold_0.png │ │ │ │ │ ├── OpenSans-Regular.bin │ │ │ │ │ ├── OpenSans-RegularItalic.bin │ │ │ │ │ ├── OpenSans-RegularItalic_0.png │ │ │ │ │ └── OpenSans-Regular_0.png │ │ │ └── Ttf │ │ │ │ └── OpenSans-Regular.ttf │ │ ├── Kar │ │ │ ├── default.kar │ │ │ └── light.kar │ │ └── Track │ │ │ ├── demo.json │ │ │ └── demo.mp3 │ ├── metrics-skin │ │ ├── karaoke-judgement-line-body@2x.png │ │ ├── karaoke-judgement-line-head@2x.png │ │ ├── karaoke-judgement-line-tail@2x.png │ │ ├── karaoke-lighting-0@2x.png │ │ ├── karaoke-lighting-1@2x.png │ │ ├── karaoke-lighting-2@2x.png │ │ ├── karaoke-lighting-3@2x.png │ │ ├── karaoke-lighting-4@2x.png │ │ ├── karaoke-lighting-5@2x.png │ │ ├── karaoke-note-background-body@2x.png │ │ ├── karaoke-note-background-head@2x.png │ │ ├── karaoke-note-background-tail@2x.png │ │ ├── karaoke-note-border-body@2x.png │ │ ├── karaoke-note-border-head@2x.png │ │ ├── karaoke-note-border-tail@2x.png │ │ └── karaoke-stage-background@2x.png │ └── special-skin │ │ ├── default.json │ │ ├── karaoke-judgement-line-body@2x.png │ │ ├── karaoke-judgement-line-head@2x.png │ │ ├── karaoke-judgement-line-tail@2x.png │ │ ├── karaoke-lighting-0@2x.png │ │ ├── karaoke-lighting-1@2x.png │ │ ├── karaoke-lighting-2@2x.png │ │ ├── karaoke-lighting-3@2x.png │ │ ├── karaoke-lighting-4@2x.png │ │ ├── karaoke-lighting-5@2x.png │ │ ├── karaoke-note-background-body@2x.png │ │ ├── karaoke-note-background-head@2x.png │ │ ├── karaoke-note-background-tail@2x.png │ │ ├── karaoke-note-border-body@2x.png │ │ ├── karaoke-note-border-head@2x.png │ │ ├── karaoke-note-border-tail@2x.png │ │ ├── karaoke-stage-background@2x.png │ │ ├── lyric-font-infos.json │ │ └── note-styles.json ├── Screens │ ├── Edit │ │ ├── Beatmap │ │ │ ├── BeatmapEditorScreenTestScene.cs │ │ │ ├── Components │ │ │ │ └── TestSceneLyricSelector.cs │ │ │ ├── Lyrics │ │ │ │ ├── CaretPosition │ │ │ │ │ ├── Algorithms │ │ │ │ │ │ ├── BaseCaretPositionAlgorithmTest.cs │ │ │ │ │ │ ├── BaseCharIndexCaretPositionAlgorithmTest.cs │ │ │ │ │ │ ├── BaseIndexCaretPositionAlgorithmTest.cs │ │ │ │ │ │ ├── ClickingCaretPositionAlgorithmTest.cs │ │ │ │ │ │ ├── CreateRemoveTimeTagCaretPositionAlgorithmTest.cs │ │ │ │ │ │ ├── CreateRubyTagCaretPositionAlgorithmTest.cs │ │ │ │ │ │ ├── CuttingCaretPositionAlgorithmTest.cs │ │ │ │ │ │ ├── NavigateCaretPositionAlgorithmTest.cs │ │ │ │ │ │ ├── RecordingTimeTagCaretPositionAlgorithmTest.cs │ │ │ │ │ │ └── TypingCaretPositionAlgorithmTest.cs │ │ │ │ │ └── IndexCaretPositionTest.cs │ │ │ │ ├── Content │ │ │ │ │ ├── SingleLyricEditorTest.cs │ │ │ │ │ ├── TestSceneInteractableLyric.cs │ │ │ │ │ └── TestScenePreviewKaraokeSpriteText.cs │ │ │ │ ├── LyricEditorTest.cs │ │ │ │ ├── LyricEditorVerifierTest.cs │ │ │ │ ├── Settings │ │ │ │ │ └── TestSceneLyricEditorDescriptionTextFlowContainer.cs │ │ │ │ ├── States │ │ │ │ │ ├── BaseLyricCaretStateTest.cs │ │ │ │ │ ├── LyricCaretStateActionTest.cs │ │ │ │ │ ├── LyricCaretStateMoveCaretTest.cs │ │ │ │ │ └── LyricCaretStateSwitchModeTest.cs │ │ │ │ └── TestSceneLyricEditorColourProvider.cs │ │ │ ├── TestSceneEditorMenuBar.cs │ │ │ ├── TestSceneKaraokeBeatmapEditor.cs │ │ │ ├── TestSceneLyricEditorScreen.cs │ │ │ ├── TestScenePageScreen.cs │ │ │ ├── TestSceneSingerScreen.cs │ │ │ └── TestSceneTranslationsScreen.cs │ │ ├── Components │ │ │ ├── Issues │ │ │ │ ├── TestSceneIssueIcon.cs │ │ │ │ └── TestSceneIssuesToolTip.cs │ │ │ └── Markdown │ │ │ │ └── TestSceneDescriptionTextFlowContainer.cs │ │ ├── GenericEditorScreenTestScene.cs │ │ ├── GenericEditorTestScene.cs │ │ ├── Import │ │ │ └── TestSceneLyricImporter.cs │ │ └── Stages │ │ │ └── Classic │ │ │ ├── ClassicStageScreenTestScene.cs │ │ │ ├── TestSceneClassicStageEditor.cs │ │ │ ├── TestSceneConfigScreen.cs │ │ │ └── TestSceneStageScreen.cs │ ├── ScreenTestScene.cs │ ├── Settings │ │ ├── Previews │ │ │ └── TestSceneMicrophoneSoundVisualizer.cs │ │ └── TestSceneKaraokeSettings.cs │ ├── Skin │ │ ├── KaraokeSkinEditorScreenTestScene.cs │ │ ├── TestSceneConfigScreen.cs │ │ ├── TestSceneKaraokeSkinEditor.cs │ │ └── TestSceneStyleScreen.cs │ ├── TestManageFontPreview.cs │ └── TestSceneGeneratorConfigPopover.cs ├── Skinning │ ├── Fonts │ │ ├── BitmapFontCompressorTest.cs │ │ └── BitmapFontImageGeneratorTest.cs │ ├── KaraokeBeatmapSkinDecodingTest.cs │ ├── KaraokeHitObjectTestScene.cs │ ├── KaraokeSkinDecodingTest.cs │ ├── KaraokeSkinnableColumnTestScene.cs │ ├── KaraokeSkinnableTestScene.cs │ ├── NotePlayfieldTestContainer.cs │ ├── TestSceneColumnBackground.cs │ ├── TestSceneDrawableJudgement.cs │ ├── TestSceneHitExplosion.cs │ ├── TestSceneLyric.cs │ ├── TestSceneNote.cs │ └── TestSceneNotePlayfield.cs ├── Stages │ ├── Drawables │ │ └── TestSceneDrawableStageBeatmapCoverInfo.cs │ └── Infos │ │ ├── Classic │ │ └── ClassicLyricTimingInfoTest.cs │ │ ├── Preview │ │ └── PreviewStageTimingCalculatorTest.cs │ │ └── StageElementCategoryTest.cs ├── TestSceneOsuGame.cs ├── UI │ ├── Position │ │ └── NotePositionCalculatorTest.cs │ ├── TestSceneControlLayer.cs │ ├── TestSceneKaraokePlayer.cs │ ├── TestSceneNotePlayfield.cs │ ├── TestSceneRulesetIcon.cs │ └── TestSceneScoringStatus.cs ├── Utils │ ├── BindablesUtilsTest.cs │ ├── CharUtilsTest.cs │ ├── ComparableUtilsTest.cs │ ├── CultureInfoUtilsTest.cs │ ├── EnumUtilsTest.cs │ ├── FontUsageUtilsTest.cs │ ├── FontUtilsTest.cs │ ├── JpStringUtilsTest.cs │ ├── RectangleFUtilsTest.cs │ ├── TextIndexUtilsTest.cs │ ├── TypeUtilsTest.cs │ └── VersionUtilsTest.cs ├── VisualTestRunner.cs └── osu.Game.Rulesets.Karaoke.Tests.csproj ├── osu.Game.Rulesets.Karaoke.sln ├── osu.Game.Rulesets.Karaoke.sln.DotSettings ├── osu.Game.Rulesets.Karaoke ├── Beatmaps │ ├── ElementId.cs │ ├── Formats │ │ ├── KaraokeJsonBeatmapDecoder.cs │ │ ├── KaraokeJsonBeatmapEncoder.cs │ │ ├── KaraokeLegacyBeatmapDecoder.cs │ │ └── KaraokeLegacyBeatmapEncoder.cs │ ├── IHasPrimaryKey.cs │ ├── IKaraokeBeatmapResourcesProvider.cs │ ├── KaraokeBeatmap.cs │ ├── KaraokeBeatmapConverter.cs │ ├── KaraokeBeatmapExtension.cs │ ├── KaraokeBeatmapProcessor.cs │ ├── KaraokeBeatmapResourcesProvider.cs │ ├── Metadatas │ │ ├── NoteInfo.cs │ │ ├── Page.cs │ │ ├── PageInfo.cs │ │ ├── Singer.cs │ │ ├── SingerInfo.cs │ │ ├── SingerState.cs │ │ └── Types │ │ │ └── ISinger.cs │ └── Utils │ │ └── SingerUtils.cs ├── Bindables │ ├── BindableCultureInfo.cs │ └── BindableFontUsage.cs ├── Configuration │ ├── KaraokeRulesetConfigManager.cs │ ├── KaraokeRulesetEditCheckerConfigManager.cs │ ├── KaraokeRulesetEditConfigManager.cs │ ├── KaraokeRulesetEditGeneratorConfigManager.cs │ ├── KaraokeRulesetLyricEditorConfigManager.cs │ └── KaraokeSessionStatics.cs ├── Difficulty │ ├── KaraokeDifficultyAttributes.cs │ ├── KaraokeDifficultyCalculator.cs │ ├── KaraokePerformanceAttributes.cs │ ├── KaraokePerformanceCalculator.cs │ ├── Preprocessing │ │ └── KaraokeDifficultyHitObject.cs │ └── Skills │ │ └── Strain.cs ├── Edit │ ├── Blueprints │ │ ├── KaraokeSelectionBlueprint.cs │ │ ├── Lyrics │ │ │ └── LyricSelectionBlueprint.cs │ │ └── Notes │ │ │ ├── Components │ │ │ └── EditBodyPiece.cs │ │ │ └── NoteSelectionBlueprint.cs │ ├── ChangeHandlers │ │ ├── BeatmapListPropertyChangeHandler.cs │ │ ├── BeatmapPropertyChangeHandler.cs │ │ ├── Beatmaps │ │ │ ├── BeatmapPagesChangeHandler.cs │ │ │ ├── BeatmapSingersChangeHandler.cs │ │ │ ├── BeatmapTranslationsChangeHandler.cs │ │ │ ├── IBeatmapPagesChangeHandler.cs │ │ │ ├── IBeatmapSingersChangeHandler.cs │ │ │ └── IBeatmapTranslationsChangeHandler.cs │ │ ├── ChangeForbiddenException.cs │ │ ├── HitObjectChangeHandler.cs │ │ ├── HitObjectPropertyChangeHandler.cs │ │ ├── HitObjectsChangeHandler.cs │ │ ├── IAutoGenerateChangeHandler.cs │ │ ├── IHitObjectPropertyChangeHandler.cs │ │ ├── IImportBeatmapChangeHandler.cs │ │ ├── ILockChangeHandler.cs │ │ ├── ImportBeatmapChangeHandler.cs │ │ ├── LockChangeHandler.cs │ │ ├── Lyrics │ │ │ ├── ILyricLanguageChangeHandler.cs │ │ │ ├── ILyricListPropertyChangeHandler.cs │ │ │ ├── ILyricPropertyAutoGenerateChangeHandler.cs │ │ │ ├── ILyricPropertyChangeHandler.cs │ │ │ ├── ILyricReferenceChangeHandler.cs │ │ │ ├── ILyricRubyTagsChangeHandler.cs │ │ │ ├── ILyricSingerChangeHandler.cs │ │ │ ├── ILyricTextChangeHandler.cs │ │ │ ├── ILyricTimeTagsChangeHandler.cs │ │ │ ├── ILyricTranslationChangeHandler.cs │ │ │ ├── ILyricsChangeHandler.cs │ │ │ ├── LyricLanguageChangeHandler.cs │ │ │ ├── LyricPropertyAutoGenerateChangeHandler.cs │ │ │ ├── LyricPropertyChangeHandler.cs │ │ │ ├── LyricReferenceChangeHandler.cs │ │ │ ├── LyricRubyTagsChangeHandler.cs │ │ │ ├── LyricSingerChangeHandler.cs │ │ │ ├── LyricTextChangeHandler.cs │ │ │ ├── LyricTimeTagsChangeHandler.cs │ │ │ ├── LyricTranslationChangeHandler.cs │ │ │ └── LyricsChangeHandler.cs │ │ ├── Notes │ │ │ ├── INotePropertyChangeHandler.cs │ │ │ ├── INotesChangeHandler.cs │ │ │ ├── NotePropertyChangeHandler.cs │ │ │ └── NotesChangeHandler.cs │ │ └── Stages │ │ │ ├── ClassicStageChangeHandler.cs │ │ │ ├── IClassicStageChangeHandler.cs │ │ │ ├── IStageElementCategoryChangeHandler.cs │ │ │ ├── IStagesChangeHandler.cs │ │ │ ├── StageElementCategoryChangeHandler.cs │ │ │ ├── StagePropertyChangeHandler.cs │ │ │ └── StagesChangeHandler.cs │ ├── Checks │ │ ├── CheckBeatmapAvailableTranslations.cs │ │ ├── CheckBeatmapNoteInfo.cs │ │ ├── CheckBeatmapPageInfo.cs │ │ ├── CheckBeatmapProperty.cs │ │ ├── CheckClassicStageInfo.cs │ │ ├── CheckHitObjectProperty.cs │ │ ├── CheckHitObjectReferenceProperty.cs │ │ ├── CheckLyricLanguage.cs │ │ ├── CheckLyricReferenceLyric.cs │ │ ├── CheckLyricRubyTag.cs │ │ ├── CheckLyricSinger.cs │ │ ├── CheckLyricText.cs │ │ ├── CheckLyricTimeTag.cs │ │ ├── CheckLyricTranslations.cs │ │ ├── CheckNoteReferenceLyric.cs │ │ ├── CheckNoteText.cs │ │ ├── CheckNoteTime.cs │ │ ├── CheckStageInfo.cs │ │ └── Issues │ │ │ ├── BeatmapClassicLyricTimingPointIssue.cs │ │ │ ├── BeatmapPageIssue.cs │ │ │ ├── LyricIssue.cs │ │ │ ├── LyricRubyTagIssue.cs │ │ │ ├── LyricTimeTagIssue.cs │ │ │ └── NoteIssue.cs │ ├── Components │ │ ├── ContextMenu │ │ │ ├── LyricLockContextMenu.cs │ │ │ └── SingerContextMenu.cs │ │ ├── Cursor │ │ │ └── TimeTagTooltip.cs │ │ ├── Menus │ │ │ ├── KaraokeEditorMenu.cs │ │ │ └── KaraokeSkinEditorMenu.cs │ │ └── Sprites │ │ │ ├── DrawableTextIndex.cs │ │ │ └── DrawableTimeTag.cs │ ├── Debugging │ │ └── DebugBeatmapManager.cs │ ├── DrawableKaraokeEditorRuleset.cs │ ├── EditorNotePlayfield.cs │ ├── Export │ │ └── ExportLyricManager.cs │ ├── Generator │ │ ├── Beatmaps │ │ │ ├── BeatmapPropertyDetector.cs │ │ │ ├── BeatmapPropertyGenerator.cs │ │ │ └── Pages │ │ │ │ ├── PageGenerator.cs │ │ │ │ └── PageGeneratorConfig.cs │ │ ├── ConfigCategoryAttribute.cs │ │ ├── ConfigSourceAttribute.cs │ │ ├── DetectorNotSupportedException.cs │ │ ├── GeneratorConfig.cs │ │ ├── GeneratorConfigExtension.cs │ │ ├── GeneratorNotSupportedException.cs │ │ ├── GeneratorSelector.cs │ │ ├── Lyrics │ │ │ ├── Language │ │ │ │ ├── LanguageDetector.cs │ │ │ │ └── LanguageDetectorConfig.cs │ │ │ ├── LyricGeneratorSelector.cs │ │ │ ├── LyricPropertyDetector.cs │ │ │ ├── LyricPropertyGenerator.cs │ │ │ ├── Notes │ │ │ │ ├── NoteGenerator.cs │ │ │ │ └── NoteGeneratorConfig.cs │ │ │ ├── ReferenceLyric │ │ │ │ ├── ReferenceLyricDetector.cs │ │ │ │ └── ReferenceLyricDetectorConfig.cs │ │ │ ├── Romanisation │ │ │ │ ├── Ja │ │ │ │ │ ├── JaRomanisationGenerator.cs │ │ │ │ │ └── JaRomanisationGeneratorConfig.cs │ │ │ │ ├── RomanisationGenerateResult.cs │ │ │ │ ├── RomanisationGenerator.cs │ │ │ │ ├── RomanisationGeneratorConfig.cs │ │ │ │ └── RomanisationGeneratorSelector.cs │ │ │ ├── RubyTags │ │ │ │ ├── Ja │ │ │ │ │ ├── JaRubyTagGenerator.cs │ │ │ │ │ └── JaRubyTagGeneratorConfig.cs │ │ │ │ ├── RubyTagGenerator.cs │ │ │ │ ├── RubyTagGeneratorConfig.cs │ │ │ │ └── RubyTagGeneratorSelector.cs │ │ │ └── TimeTags │ │ │ │ ├── Ja │ │ │ │ ├── JaTimeTagGenerator.cs │ │ │ │ └── JaTimeTagGeneratorConfig.cs │ │ │ │ ├── TimeTagGenerator.cs │ │ │ │ ├── TimeTagGeneratorConfig.cs │ │ │ │ ├── TimeTagGeneratorSelector.cs │ │ │ │ └── Zh │ │ │ │ ├── ZhTimeTagGenerator.cs │ │ │ │ └── ZhTimeTagGeneratorConfig.cs │ │ ├── PropertyDetector.cs │ │ ├── PropertyGenerator.cs │ │ └── Stages │ │ │ ├── Classic │ │ │ ├── ClassicLyricLayoutCategoryGenerator.cs │ │ │ ├── ClassicLyricLayoutCategoryGeneratorConfig.cs │ │ │ ├── ClassicLyricTimingInfoGenerator.cs │ │ │ ├── ClassicLyricTimingInfoGeneratorConfig.cs │ │ │ ├── ClassicStageInfoGenerator.cs │ │ │ └── ClassicStageInfoGeneratorConfig.cs │ │ │ ├── Preview │ │ │ ├── PreviewStageInfoGenerator.cs │ │ │ └── PreviewStageInfoGeneratorConfig.cs │ │ │ ├── StageInfoGenerator.cs │ │ │ ├── StageInfoGeneratorConfig.cs │ │ │ ├── StageInfoGeneratorSelector.cs │ │ │ └── StageInfoPropertyGenerator.cs │ ├── KaraokeBeatmapVerifier.cs │ ├── KaraokeBlueprintContainer.cs │ ├── KaraokeEditorPlayfield.cs │ ├── KaraokeHitObjectComposer.cs │ ├── KaraokeSelectionHandler.cs │ ├── Setup │ │ ├── Components │ │ │ ├── FormLanguageList.cs │ │ │ └── FormSingerList.cs │ │ ├── KaraokeNoteSection.cs │ │ ├── KaraokeSingerSection.cs │ │ └── KaraokeTranslationSection.cs │ └── Utils │ │ ├── EditorBeatmapUtils.cs │ │ ├── HitObjectWritableUtils.cs │ │ ├── LockStateUtils.cs │ │ ├── ValueChangedEventUtils.cs │ │ └── ZoomableScrollContainerUtils.cs ├── Extensions │ ├── EnumerableExtensions.cs │ ├── OsuGameExtensions.cs │ ├── RegexExtensions.cs │ ├── ScrollContainerExtensions.cs │ ├── TrickyCompositeDrawableExtension.cs │ └── TypeExtensions.cs ├── Flags │ └── FlagState.cs ├── Graphics │ ├── Containers │ │ ├── OrderRearrangeableListContainer.cs │ │ └── RearrangeableTextFlowListContainer.cs │ ├── Cursor │ │ ├── BackgroundToolTip.cs │ │ ├── LyricToolTip.cs │ │ └── SingerToolTip.cs │ ├── Drawables │ │ ├── DrawableCircleSingerAvatar.cs │ │ ├── DrawableSingerAvatar.cs │ │ └── SingerDisplay.cs │ ├── KaraokeIcon.cs │ ├── Shapes │ │ ├── CornerBackground.cs │ │ └── RightTriangle.cs │ ├── Sprites │ │ ├── DisplayLyricProcessor.cs │ │ ├── DrawableKaraokeSpriteText.cs │ │ ├── DrawableLyricSpriteText.cs │ │ ├── LyricDisplayProperty.cs │ │ ├── LyricDisplayType.cs │ │ ├── LyricStyle.cs │ │ └── Processor │ │ │ ├── BaseDisplayProcessor.cs │ │ │ ├── LyricFirstDisplayProcessor.cs │ │ │ └── RomanisedSyllableFirstDisplayProcessor.cs │ ├── UserInterface │ │ ├── BindableBoolMenuItem.cs │ │ └── BindableEnumMenuItem.cs │ └── UserInterfaceV2 │ │ ├── FontSelector.cs │ │ ├── LabelledColourSelector.cs │ │ ├── LabelledHueSelector.cs │ │ ├── LabelledImageSelector.cs │ │ ├── LabelledRealTimeSliderBar.cs │ │ ├── LanguageSelector.cs │ │ └── LanguageSelectorPopover.cs ├── IO │ ├── Archives │ │ └── CachedFontArchiveReader.cs │ ├── Serialization │ │ ├── Converters │ │ │ ├── ColourConverter.cs │ │ │ ├── CultureInfoConverter.cs │ │ │ ├── DictionaryConverter.cs │ │ │ ├── ElementIdConverter.cs │ │ │ ├── FontUsageConverter.cs │ │ │ ├── GenericTypeConverter.cs │ │ │ ├── KaraokeSkinElementConverter.cs │ │ │ ├── LyricConverter.cs │ │ │ ├── ReferenceLyricPropertyConfigConverter.cs │ │ │ ├── RubyTagConverter.cs │ │ │ ├── RubyTagsConverter.cs │ │ │ ├── ShaderConverter.cs │ │ │ ├── SortableJsonConverter.cs │ │ │ ├── StageInfoConverter.cs │ │ │ ├── TimeTagConverter.cs │ │ │ ├── TimeTagsConverter.cs │ │ │ ├── ToneConverter.cs │ │ │ └── TranslationConverter.cs │ │ ├── KaraokeJsonSerializableExtensions.cs │ │ ├── SkinJsonSerializableExtensions.cs │ │ └── WritablePropertiesOnlyResolver.cs │ └── Stores │ │ ├── FntGlyphStore.cs │ │ ├── KaraokeLocalFontStore.cs │ │ └── TtfGlyphStore.cs ├── Integration │ └── Formats │ │ ├── IDecoder.cs │ │ ├── IEncoder.cs │ │ ├── KarDecoder.cs │ │ ├── KarEncoder.cs │ │ ├── LrcDecoder.cs │ │ ├── LrcEncoder.cs │ │ ├── LrcParserUtils.cs │ │ ├── LyricTextDecoder.cs │ │ └── LyricTextEncoder.cs ├── Judgements │ ├── KaraokeJudgement.cs │ ├── KaraokeJudgementResult.cs │ ├── KaraokeLyricJudgement.cs │ └── KaraokeNoteJudgement.cs ├── KaraokeControlInputManager.cs ├── KaraokeEditInputManager.cs ├── KaraokeInputManager.cs ├── KaraokeRuleset.cs ├── KaraokeSkinComponentLookup.cs ├── KaraokeSkinComponents.cs ├── Localisation │ ├── ChangelogStrings.cs │ ├── CommonStrings.cs │ └── KaraokeSettingsSubsectionStrings.cs ├── Mods │ ├── IApplicableToMicrophone.cs │ ├── IApplicableToSettingHUDOverlay.cs │ ├── IApplicableToStage.cs │ ├── IApplicableToStageElement.cs │ ├── IApplicableToStageHitObjectCommand.cs │ ├── IApplicableToStageInfo.cs │ ├── IApplicableToStagePlayfieldCommand.cs │ ├── KaraokeModAutoplay.cs │ ├── KaraokeModAutoplayBySinger.cs │ ├── KaraokeModClassicStage.cs │ ├── KaraokeModDisableNote.cs │ ├── KaraokeModFlashlight.cs │ ├── KaraokeModHiddenNote.cs │ ├── KaraokeModLyricConfiguration.cs │ ├── KaraokeModNoFail.cs │ ├── KaraokeModPerfect.cs │ ├── KaraokeModPractice.cs │ ├── KaraokeModPreviewStage.cs │ ├── KaraokeModSnow.cs │ ├── KaraokeModSuddenDeath.cs │ ├── KaraokeModTranslation.cs │ ├── KaraokeModWindowsUpdate.cs │ ├── LanguageSettingsControl.cs │ └── ModStage.cs ├── Objects │ ├── BarLine.cs │ ├── Drawables │ │ ├── DrawableBarLine.cs │ │ ├── DrawableKaraokeHitObject.cs │ │ ├── DrawableKaraokeScrollingHitObject.cs │ │ ├── DrawableLyric.cs │ │ └── DrawableNote.cs │ ├── KaraokeHitObject.cs │ ├── LegacyProperties.cs │ ├── Lyric.cs │ ├── Lyric_Binding.cs │ ├── Lyric_Working.cs │ ├── Note.cs │ ├── Note_Binding.cs │ ├── Note_Working.cs │ ├── Properties │ │ ├── IReferenceLyricPropertyConfig.cs │ │ ├── ReferenceLyricConfig.cs │ │ └── SyncLyricConfig.cs │ ├── RubyTag.cs │ ├── TimeTag.cs │ ├── Title.cs │ ├── TitlePart.cs │ ├── Tone.cs │ ├── Types │ │ ├── IHasLock.cs │ │ ├── IHasOrder.cs │ │ ├── IHasPage.cs │ │ ├── IHasSingers.cs │ │ ├── IHasText.cs │ │ └── IHasWorkingProperty.cs │ ├── Utils │ │ ├── LyricUtils.cs │ │ ├── LyricsUtils.cs │ │ ├── NoteUtils.cs │ │ ├── NotesUtils.cs │ │ ├── OrderUtils.cs │ │ ├── RubyTagUtils.cs │ │ ├── RubyTagsUtils.cs │ │ ├── TimeTagUtils.cs │ │ └── TimeTagsUtils.cs │ └── Workings │ │ ├── HitObjectWorkingPropertyValidator.cs │ │ ├── InvalidWorkingPropertyAssignException.cs │ │ ├── LyricWorkingProperty.cs │ │ ├── LyricWorkingPropertyValidator.cs │ │ ├── NoteWorkingProperty.cs │ │ └── NoteWorkingPropertyValidator.cs ├── Online │ └── API │ │ └── Requests │ │ ├── ChangelogRequestUtils.cs │ │ ├── GetChangelogBuildRequest.cs │ │ ├── GetChangelogRequest.cs │ │ ├── GithubAPIRequest.cs │ │ └── Responses │ │ ├── APIChangelogBuild.cs │ │ └── APIChangelogIndex.cs ├── Overlays │ ├── Changelog │ │ ├── ChangeLogMarkdownContainer.cs │ │ ├── ChangelogBadgeInfo.cs │ │ ├── ChangelogBuild.cs │ │ ├── ChangelogContent.cs │ │ ├── ChangelogHeader.cs │ │ ├── ChangelogListing.cs │ │ ├── ChangelogPullRequestInfo.cs │ │ ├── ChangelogSingleBuild.cs │ │ └── Sidebar │ │ │ ├── ChangelogSection.cs │ │ │ ├── ChangelogSidebar.cs │ │ │ └── YearsPanel.cs │ ├── Dialog │ │ └── OkPopupDialog.cs │ └── KaraokeChangelogOverlay.cs ├── Replays │ ├── KaraokeAutoGenerator.cs │ ├── KaraokeAutoGeneratorBySinger.cs │ ├── KaraokeFramedReplayInputHandler.cs │ └── KaraokeReplayFrame.cs ├── Resources │ └── Skin │ │ └── Default │ │ ├── default.json │ │ ├── lyric-font-infos.json │ │ └── note-styles.json ├── Scoring │ ├── KaraokeHitWindows.cs │ ├── KaraokeLyricHitWindows.cs │ ├── KaraokeNoteHitWindows.cs │ └── KaraokeScoreProcessor.cs ├── Screens │ ├── Edit │ │ ├── AutoGenerateSection.cs │ │ ├── AutoGenerateSubsection.cs │ │ ├── Beatmaps │ │ │ ├── BeatmapEditorRoundedScreen.cs │ │ │ ├── BeatmapEditorScreen.cs │ │ │ ├── Components │ │ │ │ ├── Menus │ │ │ │ │ ├── AutoFocusToEditLyricMenu.cs │ │ │ │ │ ├── GeneratorConfigMenu.cs │ │ │ │ │ ├── ImportLyricMenu.cs │ │ │ │ │ ├── LockStateMenu.cs │ │ │ │ │ ├── LyricEditorModeMenu.cs │ │ │ │ │ ├── LyricEditorPreferLayoutMenu.cs │ │ │ │ │ └── LyricEditorTextSizeMenu.cs │ │ │ │ └── UserInterfaceV2 │ │ │ │ │ └── LyricSelector.cs │ │ │ ├── ILyricsProvider.cs │ │ │ ├── KaraokeBeatmapEditor.cs │ │ │ ├── KaraokeBeatmapEditorScreenMode.cs │ │ │ ├── Lyrics │ │ │ │ ├── BindableBlueprintContainer.cs │ │ │ │ ├── CaretPosition │ │ │ │ │ ├── Algorithms │ │ │ │ │ │ ├── CaretPositionAlgorithm.cs │ │ │ │ │ │ ├── CharGapCaretPositionAlgorithm.cs │ │ │ │ │ │ ├── CharIndexCaretPositionAlgorithm.cs │ │ │ │ │ │ ├── ClickingCaretPositionAlgorithm.cs │ │ │ │ │ │ ├── CreateRemoveTimeTagCaretPositionAlgorithm.cs │ │ │ │ │ │ ├── CreateRubyTagCaretPositionAlgorithm.cs │ │ │ │ │ │ ├── CuttingCaretPositionAlgorithm.cs │ │ │ │ │ │ ├── ICaretPositionAlgorithm.cs │ │ │ │ │ │ ├── IIndexCaretPositionAlgorithm.cs │ │ │ │ │ │ ├── IndexCaretPositionAlgorithm.cs │ │ │ │ │ │ ├── NavigateCaretPositionAlgorithm.cs │ │ │ │ │ │ ├── RecordingTimeTagCaretMoveMode.cs │ │ │ │ │ │ ├── RecordingTimeTagCaretPositionAlgorithm.cs │ │ │ │ │ │ └── TypingCaretPositionAlgorithm.cs │ │ │ │ │ ├── ClickingCaretPosition.cs │ │ │ │ │ ├── CreateRemoveTimeTagCaretPosition.cs │ │ │ │ │ ├── CreateRubyTagCaretPosition.cs │ │ │ │ │ ├── CuttingCaretPosition.cs │ │ │ │ │ ├── ICaretPosition.cs │ │ │ │ │ ├── ICharGapCaretPosition.cs │ │ │ │ │ ├── ICharIndexCaretPosition.cs │ │ │ │ │ ├── IIndexCaretPosition.cs │ │ │ │ │ ├── NavigateCaretPosition.cs │ │ │ │ │ ├── RecordingTimeTagCaretPosition.cs │ │ │ │ │ └── TypingCaretPosition.cs │ │ │ │ ├── ClipboardToast.cs │ │ │ │ ├── Content │ │ │ │ │ ├── ApplySelectingArea.cs │ │ │ │ │ ├── CircleCheckbox.cs │ │ │ │ │ ├── Components │ │ │ │ │ │ ├── Badges │ │ │ │ │ │ │ ├── Badge.cs │ │ │ │ │ │ │ ├── LanguageBadge.cs │ │ │ │ │ │ │ ├── ReferenceLyricBadge.cs │ │ │ │ │ │ │ ├── SingerBadge.cs │ │ │ │ │ │ │ └── TimeTagBadge.cs │ │ │ │ │ │ ├── FixedInfo │ │ │ │ │ │ │ ├── InvalidInfo.cs │ │ │ │ │ │ │ ├── LockInfo.cs │ │ │ │ │ │ │ └── OrderInfo.cs │ │ │ │ │ │ └── Lyrics │ │ │ │ │ │ │ ├── BlueprintLayer.cs │ │ │ │ │ │ │ ├── Blueprints │ │ │ │ │ │ │ ├── LyricPropertyBlueprintContainer.cs │ │ │ │ │ │ │ ├── RubyBlueprintContainer.cs │ │ │ │ │ │ │ ├── RubyTagSelectionBlueprint.cs │ │ │ │ │ │ │ ├── TimeTagBlueprintContainer.cs │ │ │ │ │ │ │ └── TimeTagSelectionBlueprint.cs │ │ │ │ │ │ │ ├── CaretLayer.cs │ │ │ │ │ │ │ ├── Carets │ │ │ │ │ │ │ ├── DrawableCaret.cs │ │ │ │ │ │ │ ├── DrawableCaretState.cs │ │ │ │ │ │ │ ├── DrawableCreateRemoveTimeTagCaret.cs │ │ │ │ │ │ │ ├── DrawableCreateRubyTagCaret.cs │ │ │ │ │ │ │ ├── DrawableCuttingCaret.cs │ │ │ │ │ │ │ ├── DrawableRangeCaret.cs │ │ │ │ │ │ │ ├── DrawableRecordingTimeTagCaret.cs │ │ │ │ │ │ │ ├── DrawableTypingCaret.cs │ │ │ │ │ │ │ └── ICanAcceptRangeIndex.cs │ │ │ │ │ │ │ ├── EditLyricLayer.cs │ │ │ │ │ │ │ ├── GridLayer.cs │ │ │ │ │ │ │ ├── IInteractableLyricState.cs │ │ │ │ │ │ │ ├── IPreviewLyricPositionProvider.cs │ │ │ │ │ │ │ ├── InteractLyricLayer.cs │ │ │ │ │ │ │ ├── InteractableLyric.cs │ │ │ │ │ │ │ ├── Layer.cs │ │ │ │ │ │ │ ├── LayerLoader.cs │ │ │ │ │ │ │ ├── LyricLayer.cs │ │ │ │ │ │ │ ├── PreviewKaraokeSpriteText.cs │ │ │ │ │ │ │ ├── TimeTagLayer.cs │ │ │ │ │ │ │ └── UIEventLayer.cs │ │ │ │ │ ├── Compose │ │ │ │ │ │ ├── BottomEditor │ │ │ │ │ │ │ ├── AdjustTimeTagBottomEditor.cs │ │ │ │ │ │ │ ├── AdjustTimeTags │ │ │ │ │ │ │ │ ├── AdjustTimeTagBlueprintContainer.cs │ │ │ │ │ │ │ │ ├── AdjustTimeTagScrollContainer.cs │ │ │ │ │ │ │ │ ├── AdjustTimeTagSelectionBlueprint.cs │ │ │ │ │ │ │ │ ├── CurrentTimeMarker.cs │ │ │ │ │ │ │ │ └── TimeTagOrderedSelectionContainer.cs │ │ │ │ │ │ │ ├── BaseBottomEditor.cs │ │ │ │ │ │ │ ├── NoteBottomEditor.cs │ │ │ │ │ │ │ ├── Notes │ │ │ │ │ │ │ │ ├── NoteEditPopover.cs │ │ │ │ │ │ │ │ ├── NoteEditor.cs │ │ │ │ │ │ │ │ ├── NoteEditorBlueprintContainer.cs │ │ │ │ │ │ │ │ └── NoteEditorSelectionBlueprint.cs │ │ │ │ │ │ │ ├── RecordingTimeTagBottomEditor.cs │ │ │ │ │ │ │ ├── RecordingTimeTags │ │ │ │ │ │ │ │ ├── CentreMarker.cs │ │ │ │ │ │ │ │ ├── RecordingTimeTagPart.cs │ │ │ │ │ │ │ │ ├── RecordingTimeTagScrollContainer.cs │ │ │ │ │ │ │ │ └── TimeTagsVisualisation.cs │ │ │ │ │ │ │ └── TimeTagScrollContainer.cs │ │ │ │ │ │ ├── ComposeContent.cs │ │ │ │ │ │ ├── CreateNewLyricDetailRow.cs │ │ │ │ │ │ ├── DetailLyricList.cs │ │ │ │ │ │ ├── DetailRow.cs │ │ │ │ │ │ ├── EditLyricDetailRow.cs │ │ │ │ │ │ ├── LyricComposer.cs │ │ │ │ │ │ ├── LyricEditor.cs │ │ │ │ │ │ ├── Panel.cs │ │ │ │ │ │ ├── PanelDirection.cs │ │ │ │ │ │ ├── Panels │ │ │ │ │ │ │ ├── InvalidPanel.cs │ │ │ │ │ │ │ ├── IssueSection.cs │ │ │ │ │ │ │ ├── PanelSection.cs │ │ │ │ │ │ │ └── PropertyPanel.cs │ │ │ │ │ │ ├── SpecialActionToolbar.cs │ │ │ │ │ │ └── Toolbar │ │ │ │ │ │ │ ├── Carets │ │ │ │ │ │ │ ├── MoveToCaretPositionButton.cs │ │ │ │ │ │ │ ├── MoveToFirstIndexButton.cs │ │ │ │ │ │ │ ├── MoveToLastIndexButton.cs │ │ │ │ │ │ │ ├── MoveToNextIndexButton.cs │ │ │ │ │ │ │ ├── MoveToNextLyricButton.cs │ │ │ │ │ │ │ ├── MoveToPreviousIndexButton.cs │ │ │ │ │ │ │ └── MoveToPreviousLyricButton.cs │ │ │ │ │ │ │ ├── Panels │ │ │ │ │ │ │ ├── ToggleInvalidInfoPanelButton.cs │ │ │ │ │ │ │ └── TogglePropertyPanelButton.cs │ │ │ │ │ │ │ ├── Playback │ │ │ │ │ │ │ └── PlaybackSwitchButton.cs │ │ │ │ │ │ │ ├── Separator.cs │ │ │ │ │ │ │ ├── ToolbarButton.cs │ │ │ │ │ │ │ ├── ToolbarEditActionButton.cs │ │ │ │ │ │ │ ├── ToolbarToggleButton.cs │ │ │ │ │ │ │ └── View │ │ │ │ │ │ │ └── AdjustFontSizeButton.cs │ │ │ │ │ ├── ContentWrapper.cs │ │ │ │ │ ├── List │ │ │ │ │ │ ├── CreateNewLyricPreviewRow.cs │ │ │ │ │ │ ├── EditLyricPreviewRow.cs │ │ │ │ │ │ ├── InfoControl.cs │ │ │ │ │ │ ├── ListContent.cs │ │ │ │ │ │ ├── PreviewLyricList.cs │ │ │ │ │ │ └── PreviewRow.cs │ │ │ │ │ ├── LyricList.cs │ │ │ │ │ ├── MainContent.cs │ │ │ │ │ └── Row.cs │ │ │ │ ├── DeleteLyricDialog.cs │ │ │ │ ├── IIssueNavigator.cs │ │ │ │ ├── ILyricEditorClipboard.cs │ │ │ │ ├── ILyricEditorState.cs │ │ │ │ ├── ILyricEditorVerifier.cs │ │ │ │ ├── IssueNavigator.cs │ │ │ │ ├── LyricEditor.cs │ │ │ │ ├── LyricEditorClipboard.cs │ │ │ │ ├── LyricEditorColourProvider.cs │ │ │ │ ├── LyricEditorIssueTable.cs │ │ │ │ ├── LyricEditorLayout.cs │ │ │ │ ├── LyricEditorMode.cs │ │ │ │ ├── LyricEditorScreen.cs │ │ │ │ ├── LyricEditorSkin.cs │ │ │ │ ├── LyricEditorVerifier.cs │ │ │ │ ├── OsuColourExtensions.cs │ │ │ │ ├── Settings │ │ │ │ │ ├── Components │ │ │ │ │ │ ├── BlockSectionWrapper.cs │ │ │ │ │ │ └── Markdown │ │ │ │ │ │ │ ├── LyricEditorDescriptionTextFlowContainer.cs │ │ │ │ │ │ │ ├── SwitchModeDescriptionAction.cs │ │ │ │ │ │ │ └── SwitchMoteText.cs │ │ │ │ │ ├── LabelledObjectFieldSwitchButton.cs │ │ │ │ │ ├── LabelledObjectFieldTextBox.cs │ │ │ │ │ ├── Language │ │ │ │ │ │ ├── AssignLanguageSubsection.cs │ │ │ │ │ │ ├── LanguageAutoGenerateSubsection.cs │ │ │ │ │ │ ├── LanguageEditModeSpecialAction.cs │ │ │ │ │ │ ├── LanguageIssueSection.cs │ │ │ │ │ │ ├── LanguageSettingsHeader.cs │ │ │ │ │ │ └── LanguageSwitchSpecialActionSection.cs │ │ │ │ │ ├── LanguageSettings.cs │ │ │ │ │ ├── LyricEditorAutoGenerateSubsection.cs │ │ │ │ │ ├── LyricEditorIssueSection.cs │ │ │ │ │ ├── LyricEditorSettings.cs │ │ │ │ │ ├── LyricEditorSettingsHeader.cs │ │ │ │ │ ├── LyricPropertiesSection.cs │ │ │ │ │ ├── LyricPropertySection.cs │ │ │ │ │ ├── NoteSettings.cs │ │ │ │ │ ├── Notes │ │ │ │ │ │ ├── NoteAutoGenerateSubsection.cs │ │ │ │ │ │ ├── NoteClearSubsection.cs │ │ │ │ │ │ ├── NoteConfigSection.cs │ │ │ │ │ │ ├── NoteEditModeSpecialAction.cs │ │ │ │ │ │ ├── NoteEditPropertyMode.cs │ │ │ │ │ │ ├── NoteEditPropertyModeSection.cs │ │ │ │ │ │ ├── NoteEditPropertySection.cs │ │ │ │ │ │ ├── NoteIssueSection.cs │ │ │ │ │ │ ├── NoteSettingsHeader.cs │ │ │ │ │ │ └── NoteSwitchSpecialActionSection.cs │ │ │ │ │ ├── Reference │ │ │ │ │ │ ├── LabelledReferenceLyricSelector.cs │ │ │ │ │ │ ├── ReferenceLyricAutoGenerateSection.cs │ │ │ │ │ │ ├── ReferenceLyricConfigSection.cs │ │ │ │ │ │ ├── ReferenceLyricIssueSection.cs │ │ │ │ │ │ ├── ReferenceLyricSection.cs │ │ │ │ │ │ └── ReferenceLyricSettingsHeader.cs │ │ │ │ │ ├── ReferenceSettings.cs │ │ │ │ │ ├── Romanisation │ │ │ │ │ │ ├── Components │ │ │ │ │ │ │ └── LabelledRomanisedTextBox.cs │ │ │ │ │ │ ├── RomanisationAutoGenerateSection.cs │ │ │ │ │ │ ├── RomanisationEditSection.cs │ │ │ │ │ │ ├── RomanisationIssueSection.cs │ │ │ │ │ │ └── RomanisationSettingsHeader.cs │ │ │ │ │ ├── RomanisationSettings.cs │ │ │ │ │ ├── Ruby │ │ │ │ │ │ ├── Components │ │ │ │ │ │ │ └── LabelledRubyTagTextBox.cs │ │ │ │ │ │ ├── RubyTagAutoGenerateSection.cs │ │ │ │ │ │ ├── RubyTagConfigToolSection.cs │ │ │ │ │ │ ├── RubyTagEditModeSubsection.cs │ │ │ │ │ │ ├── RubyTagEditSection.cs │ │ │ │ │ │ ├── RubyTagIssueSection.cs │ │ │ │ │ │ └── RubyTagSettingsHeader.cs │ │ │ │ │ ├── RubyTagSettings.cs │ │ │ │ │ ├── SelectLyricButton.cs │ │ │ │ │ ├── SettingsDirection.cs │ │ │ │ │ ├── SingerSettings.cs │ │ │ │ │ ├── Singers │ │ │ │ │ │ └── SingerEditSection.cs │ │ │ │ │ ├── SpecialActionSection.cs │ │ │ │ │ ├── SwitchSubsection.cs │ │ │ │ │ ├── Text │ │ │ │ │ │ ├── TextDeleteSubsection.cs │ │ │ │ │ │ ├── TextEditModeSpecialAction.cs │ │ │ │ │ │ ├── TextIssueSection.cs │ │ │ │ │ │ ├── TextSettingsHeader.cs │ │ │ │ │ │ └── TextSwitchSpecialActionSection.cs │ │ │ │ │ ├── TextSettings.cs │ │ │ │ │ ├── TimeTagSettings.cs │ │ │ │ │ └── TimeTags │ │ │ │ │ │ ├── Components │ │ │ │ │ │ └── LabelledOpacityAdjustment.cs │ │ │ │ │ │ ├── CreateTimeTagActionSection.cs │ │ │ │ │ │ ├── CreateTimeTagTypeSubsection.cs │ │ │ │ │ │ ├── RecordingTapControl.cs │ │ │ │ │ │ ├── TapButton.cs │ │ │ │ │ │ ├── TimeTagAdjustConfigSection.cs │ │ │ │ │ │ ├── TimeTagAutoGenerateSection.cs │ │ │ │ │ │ ├── TimeTagIssueSection.cs │ │ │ │ │ │ ├── TimeTagRecordingConfigSection.cs │ │ │ │ │ │ ├── TimeTagRecordingToolSection.cs │ │ │ │ │ │ └── TimeTagSettingsHeader.cs │ │ │ │ └── States │ │ │ │ │ ├── ILyricCaretState.cs │ │ │ │ │ ├── ILyricSelectionState.cs │ │ │ │ │ ├── LyricCaretState.cs │ │ │ │ │ ├── LyricEditorSelectingAction.cs │ │ │ │ │ ├── LyricSelectionState.cs │ │ │ │ │ ├── Modes │ │ │ │ │ ├── CreateTimeTagType.cs │ │ │ │ │ ├── EditLanguageModeState.cs │ │ │ │ │ ├── EditNoteModeState.cs │ │ │ │ │ ├── EditReferenceLyricModeState.cs │ │ │ │ │ ├── EditRomanisationModeState.cs │ │ │ │ │ ├── EditRubyModeState.cs │ │ │ │ │ ├── EditTextModeState.cs │ │ │ │ │ ├── EditTimeTagModeState.cs │ │ │ │ │ ├── IEditLanguageModeState.cs │ │ │ │ │ ├── IEditNoteModeState.cs │ │ │ │ │ ├── IEditReferenceLyricModeState.cs │ │ │ │ │ ├── IEditRomanisationModeState.cs │ │ │ │ │ ├── IEditRubyModeState.cs │ │ │ │ │ ├── IEditTextModeState.cs │ │ │ │ │ ├── IEditTimeTagModeState.cs │ │ │ │ │ ├── IHasBlueprintSelection.cs │ │ │ │ │ ├── IHasEditStep.cs │ │ │ │ │ ├── IHasSpecialAction.cs │ │ │ │ │ ├── LanguageEditStep.cs │ │ │ │ │ ├── ModeStateWithBlueprintContainer.cs │ │ │ │ │ ├── NoteEditStep.cs │ │ │ │ │ ├── ReferenceLyricEditStep.cs │ │ │ │ │ ├── RomanisationTagEditStep.cs │ │ │ │ │ ├── RubyTagEditMode.cs │ │ │ │ │ ├── RubyTagEditStep.cs │ │ │ │ │ ├── TextEditStep.cs │ │ │ │ │ └── TimeTagEditStep.cs │ │ │ │ │ ├── MovingCaretAction.cs │ │ │ │ │ └── RangeCaretPosition.cs │ │ │ ├── LyricsProvider.cs │ │ │ ├── Pages │ │ │ │ ├── Components │ │ │ │ │ └── Timeline │ │ │ │ │ │ ├── LyricBlueprintContainer.cs │ │ │ │ │ │ ├── PageBlueprintContainer.cs │ │ │ │ │ │ ├── PageSelectionBlueprint.cs │ │ │ │ │ │ ├── PagesTimeLine.cs │ │ │ │ │ │ └── PreviewLyricSelectionBlueprint.cs │ │ │ │ ├── IPageEditorVerifier.cs │ │ │ │ ├── IPageStateProvider.cs │ │ │ │ ├── PageEditor.cs │ │ │ │ ├── PageEditorEditMode.cs │ │ │ │ ├── PageEditorVerifier.cs │ │ │ │ ├── PageScreen.cs │ │ │ │ └── Settings │ │ │ │ │ ├── ConfirmReGeneratePageDialog.cs │ │ │ │ │ ├── PageAutoGenerateSection.cs │ │ │ │ │ ├── PageEditorIssueSection.cs │ │ │ │ │ ├── PageEditorSettingsHeader.cs │ │ │ │ │ ├── PageSettings.cs │ │ │ │ │ └── PagesSection.cs │ │ │ ├── Singers │ │ │ │ ├── DeleteSingerDialog.cs │ │ │ │ ├── Detail │ │ │ │ │ ├── AvatarSection.cs │ │ │ │ │ ├── EditSingerSection.cs │ │ │ │ │ ├── MetadataSection.cs │ │ │ │ │ └── SingerEditPopover.cs │ │ │ │ ├── ISingerScreenScrollingInfoProvider.cs │ │ │ │ ├── Rows │ │ │ │ │ ├── Components │ │ │ │ │ │ ├── SingerAvatar.cs │ │ │ │ │ │ └── Timeline │ │ │ │ │ │ │ ├── LyricTimelineSelectionBlueprint.cs │ │ │ │ │ │ │ ├── SingerLyricEditorBlueprintContainer.cs │ │ │ │ │ │ │ └── SingerLyricTimeline.cs │ │ │ │ │ ├── CreateNewLyricPlacementRow.cs │ │ │ │ │ ├── DefaultLyricPlacementRow.cs │ │ │ │ │ ├── LyricPlacementRow.cs │ │ │ │ │ └── SingerLyricPlacementRow.cs │ │ │ │ ├── SingerEditSection.cs │ │ │ │ ├── SingerRearrangeableList.cs │ │ │ │ ├── SingerRearrangeableListItem.cs │ │ │ │ └── SingerScreen.cs │ │ │ └── Translations │ │ │ │ ├── Components │ │ │ │ ├── CreateNewTranslationButton.cs │ │ │ │ ├── LanguageDropdown.cs │ │ │ │ ├── LyricTranslationTextBox.cs │ │ │ │ ├── PreviewLyricSpriteText.cs │ │ │ │ └── RemoveTranslationButton.cs │ │ │ │ ├── DeleteLanguagePopupDialog.cs │ │ │ │ ├── ITranslationInfoProvider.cs │ │ │ │ ├── TranslationEditSection.cs │ │ │ │ └── TranslationScreen.cs │ │ ├── BottomBar.cs │ │ ├── Components │ │ │ ├── Containers │ │ │ │ └── BindableScrollContainer.cs │ │ │ ├── Issues │ │ │ │ ├── IssueIcon.cs │ │ │ │ └── IssuesToolTip.cs │ │ │ ├── Markdown │ │ │ │ ├── DescriptionFormat.cs │ │ │ │ ├── DescriptionTextFlowContainer.cs │ │ │ │ ├── IDescriptionAction.cs │ │ │ │ ├── InputKeyDescriptionAction.cs │ │ │ │ └── InputKeyText.cs │ │ │ ├── Menus │ │ │ │ └── GenericScreenSelectionTabControl.cs │ │ │ ├── Timeline │ │ │ │ ├── EditableLyricTimelineSelectionBlueprint.cs │ │ │ │ ├── EditableTimeline.cs │ │ │ │ ├── EditableTimelineBlueprintContainer.cs │ │ │ │ └── EditableTimelineSelectionBlueprint.cs │ │ │ └── UserInterface │ │ │ │ ├── DeleteIconButton.cs │ │ │ │ └── LanguagesSelector.cs │ │ ├── EditorSection.cs │ │ ├── EditorSectionButton.cs │ │ ├── EditorSettings.cs │ │ ├── EditorSettingsHeader.cs │ │ ├── EditorTable.cs │ │ ├── EditorVerifier.cs │ │ ├── GeneratorConfigPopover.cs │ │ ├── GenericEditor.cs │ │ ├── GenericEditorScreen.cs │ │ ├── IEditorVerifier.cs │ │ ├── ISectionItemsEditorProvider.cs │ │ ├── Import │ │ │ └── Lyrics │ │ │ │ ├── AssignLanguage │ │ │ │ ├── AssignLanguageNavigation.cs │ │ │ │ ├── AssignLanguageStepScreen.cs │ │ │ │ └── UseLanguageDetectorPopupDialog.cs │ │ │ │ ├── DragFile │ │ │ │ ├── Components │ │ │ │ │ └── DrawableDragFile.cs │ │ │ │ ├── DragFileStepScreen.cs │ │ │ │ └── ImportLyricDialog.cs │ │ │ │ ├── EditLyric │ │ │ │ ├── EditLyricNavigation.cs │ │ │ │ └── EditLyricStepScreen.cs │ │ │ │ ├── GenerateRuby │ │ │ │ ├── GenerateRubyNavigation.cs │ │ │ │ ├── GenerateRubyStepScreen.cs │ │ │ │ └── UseAutoGenerateRubyPopupDialog.cs │ │ │ │ ├── GenerateTimeTag │ │ │ │ ├── AlreadyContainTimeTagPopupDialog.cs │ │ │ │ ├── GenerateTimeTagNavigation.cs │ │ │ │ ├── GenerateTimeTagStepScreen.cs │ │ │ │ ├── UseAutoGenerateRomanisationPopupDialog.cs │ │ │ │ └── UseAutoGenerateTimeTagPopupDialog.cs │ │ │ │ ├── IHasTopNavigation.cs │ │ │ │ ├── IImportStateResolver.cs │ │ │ │ ├── ILyricImporterStepScreen.cs │ │ │ │ ├── ImportLyricHeader.cs │ │ │ │ ├── ImportLyricManager.cs │ │ │ │ ├── ImportLyricOverlay.cs │ │ │ │ ├── LyricImporter.cs │ │ │ │ ├── LyricImporterStep.cs │ │ │ │ ├── LyricImporterStepScreen.cs │ │ │ │ ├── LyricImporterStepScreenWithLyricEditor.cs │ │ │ │ ├── LyricImporterSubScreenStack.cs │ │ │ │ ├── NotImportStepScreenException.cs │ │ │ │ ├── RollBackPopupDialog.cs │ │ │ │ ├── RollBackResetPopupDialog.cs │ │ │ │ ├── Success │ │ │ │ └── SuccessStepScreen.cs │ │ │ │ └── TopNavigation.cs │ │ ├── IssueSection.cs │ │ ├── IssueTable.cs │ │ ├── SectionItemsEditor.cs │ │ ├── SectionTimingInfoItemsEditor.cs │ │ ├── Stages │ │ │ └── Classic │ │ │ │ ├── ClassicStageEditor.cs │ │ │ │ ├── ClassicStageEditorScreenMode.cs │ │ │ │ ├── ClassicStageScreen.cs │ │ │ │ ├── Config │ │ │ │ └── ConfigScreen.cs │ │ │ │ └── Stage │ │ │ │ ├── IStageEditorStateProvider.cs │ │ │ │ ├── IStageEditorVerifier.cs │ │ │ │ ├── Settings │ │ │ │ ├── StageEditorIssueSection.cs │ │ │ │ ├── StageEditorSettingsHeader.cs │ │ │ │ ├── StageSettings.cs │ │ │ │ └── TimingPointsSection.cs │ │ │ │ ├── StageCategoryScreenStack.cs │ │ │ │ ├── StageEditor.cs │ │ │ │ ├── StageEditorEditCategory.cs │ │ │ │ ├── StageEditorEditMode.cs │ │ │ │ ├── StageEditorVerifier.cs │ │ │ │ └── StageScreen.cs │ │ ├── WorkspaceScreen.cs │ │ └── WorkspaceScreenStack.cs │ ├── Section.cs │ ├── Settings │ │ ├── Header.cs │ │ ├── KaraokeSettings.cs │ │ ├── KaraokeSettingsColourProvider.cs │ │ ├── KaraokeSettingsPanel.cs │ │ ├── KaraokeSettingsSection.cs │ │ ├── KaraokeSettingsSubsection.cs │ │ ├── KaraokeVersionManager.cs │ │ ├── Previews │ │ │ ├── DefaultPreview.cs │ │ │ ├── Gameplay │ │ │ │ ├── LyricPreview.cs │ │ │ │ ├── NotePlayfieldPreview.cs │ │ │ │ └── ShowCursorPreview.cs │ │ │ ├── Graphics │ │ │ │ └── ManageFontPreview.cs │ │ │ ├── Input │ │ │ │ ├── MicrophoneDevicePreview.cs │ │ │ │ └── MicrophoneSoundVisualizer.cs │ │ │ ├── SettingsSubsectionPreview.cs │ │ │ └── UnderConstructionPreview.cs │ │ ├── Sections │ │ │ ├── ConfigSection.cs │ │ │ ├── Gameplay │ │ │ │ ├── GeneralSettings.cs │ │ │ │ ├── NoteSettings.cs │ │ │ │ ├── PracticeSettings.cs │ │ │ │ └── ScoringSettings.cs │ │ │ ├── Graphics │ │ │ │ ├── LyricFontSettings.cs │ │ │ │ ├── ManageFontSettings.cs │ │ │ │ ├── NoteFontSettings.cs │ │ │ │ └── TransparentSettings.cs │ │ │ ├── Input │ │ │ │ └── MicrophoneSettings.cs │ │ │ ├── ScoringSection.cs │ │ │ └── StyleSection.cs │ │ ├── SettingsFont.cs │ │ └── SettingsMicrophoneDeviceDropdown.cs │ └── Skin │ │ ├── Config │ │ ├── ConfigScreen.cs │ │ ├── IntervalSection.cs │ │ ├── LyricConfigSection.cs │ │ ├── LyricFontInfoManager.cs │ │ ├── PositionSection.cs │ │ └── RubyAndRomanisationSection.cs │ │ ├── KaraokeSkinEditor.cs │ │ ├── KaraokeSkinEditorScreen.cs │ │ ├── KaraokeSkinEditorScreenMode.cs │ │ └── Style │ │ ├── LyricColorSection.cs │ │ ├── LyricFontSection.cs │ │ ├── LyricShadowSection.cs │ │ ├── LyricStylePreview.cs │ │ ├── NoteColorSection.cs │ │ ├── NoteFontSection.cs │ │ ├── NoteStylePreview.cs │ │ ├── StyleScreen.cs │ │ └── StyleSection.cs ├── Skinning │ ├── Argon │ │ └── KaraokeArgonSkinTransformer.cs │ ├── Default │ │ ├── DefaultBodyPiece.cs │ │ └── KaraokeDefaultSkinTransformer.cs │ ├── Elements │ │ ├── ElementType.cs │ │ ├── IKaraokeSkinElement.cs │ │ ├── InvalidDrawableTypeException.cs │ │ ├── LayoutGroup.cs │ │ ├── LyricFontInfo.cs │ │ └── NoteStyle.cs │ ├── Fonts │ │ ├── BitmapFontCompressor.cs │ │ ├── BitmapFontImageGenerator.cs │ │ ├── FontInfo.cs │ │ └── FontManager.cs │ ├── InternalSkinStorageResourceProvider.cs │ ├── KaraokeBeatmapSkin.cs │ ├── KaraokeIndexLookup.cs │ ├── KaraokeSkin.cs │ ├── KaraokeSkinConfigurationLookup.cs │ ├── KaraokeSkinLookup.cs │ ├── Legacy │ │ ├── KaraokeClassicSkinTransformer.cs │ │ ├── KaraokeLegacySkinTransformer.cs │ │ ├── LegacyColumnBackground.cs │ │ ├── LegacyHitExplosion.cs │ │ ├── LegacyJudgementLine.cs │ │ ├── LegacyKaraokeColumnElement.cs │ │ ├── LegacyKaraokeElement.cs │ │ ├── LegacyNotePiece.cs │ │ └── LegacyStageBackground.cs │ ├── Tools │ │ └── SkinConverterTool.cs │ └── Triangles │ │ └── KaraokeTrianglesSkinTransformer.cs ├── Stages │ ├── Commands │ │ ├── IStageCommand.cs │ │ ├── Lyrics │ │ │ └── LyricStyleCommand.cs │ │ ├── StageAlphaCommand.cs │ │ ├── StageAnchorCommand.cs │ │ ├── StageCommand.cs │ │ ├── StageHeightCommand.cs │ │ ├── StageOriginCommand.cs │ │ ├── StagePaddingCommand.cs │ │ ├── StageScaleCommand.cs │ │ ├── StageWidthCommand.cs │ │ ├── StageXCommand.cs │ │ └── StageYCommand.cs │ ├── Drawables │ │ ├── DrawableStage.cs │ │ ├── DrawableStageBeatmapCoverInfo.cs │ │ ├── IStageElementRunner.cs │ │ ├── IStageHitObjectRunner.cs │ │ ├── IStagePlayfieldRunner.cs │ │ ├── StageElementRunner.cs │ │ ├── StageHitObjectRunner.cs │ │ ├── StagePlayfieldRunner.cs │ │ └── StageRunner.cs │ ├── HitObjectCommandProvider.cs │ ├── IHitObjectCommandProvider.cs │ ├── IPlayfieldCommandProvider.cs │ ├── IStageElement.cs │ ├── IStageElementProvider.cs │ ├── IStageElementWithDuration.cs │ ├── Infos │ │ ├── Classic │ │ │ ├── ClassicLyricCommandProvider.cs │ │ │ ├── ClassicLyricLayout.cs │ │ │ ├── ClassicLyricLayoutAlignment.cs │ │ │ ├── ClassicLyricLayoutCategory.cs │ │ │ ├── ClassicLyricTimingInfo.cs │ │ │ ├── ClassicLyricTimingPoint.cs │ │ │ ├── ClassicPlayfieldCommandProvider.cs │ │ │ ├── ClassicStageDefinition.cs │ │ │ ├── ClassicStageInfo.cs │ │ │ ├── ClassicStyle.cs │ │ │ └── ClassicStyleCategory.cs │ │ ├── Preview │ │ │ ├── PreviewElementProvider.cs │ │ │ ├── PreviewLyricCommandProvider.cs │ │ │ ├── PreviewLyricLayout.cs │ │ │ ├── PreviewLyricLayoutCategory.cs │ │ │ ├── PreviewPlayfieldCommandProvider.cs │ │ │ ├── PreviewStageDefinition.cs │ │ │ ├── PreviewStageInfo.cs │ │ │ ├── PreviewStageTimingCalculator.cs │ │ │ ├── PreviewStyle.cs │ │ │ └── PreviewStyleCategory.cs │ │ ├── StageDefinition.cs │ │ ├── StageElement.cs │ │ ├── StageElementCategory.cs │ │ ├── StageInfo.cs │ │ └── Types │ │ │ └── IHasCalculatedProperty.cs │ ├── PlayfieldCommandProvider.cs │ ├── StageBeatmapCoverInfo.cs │ ├── StageElementProvider.cs │ └── StageSprite.cs ├── Statistics │ ├── BeatmapInfoGraph.cs │ ├── BeatmapMetadataGraph.cs │ ├── NotScorableGraph.cs │ └── ScoringResultGraph.cs ├── Timing │ └── StopClock.cs ├── UI │ ├── Components │ │ ├── CenterLine.cs │ │ ├── DefaultColumnBackground.cs │ │ ├── DefaultJudgementLine.cs │ │ ├── RealTimeScoringVisualization.cs │ │ ├── ReplayScoringVisualization.cs │ │ ├── ScoringMarker.cs │ │ ├── ScoringStatus.cs │ │ └── VoiceVisualization.cs │ ├── DefaultHitExplosion.cs │ ├── DrawableKaraokeRuleset.cs │ ├── DrawableNoteJudgement.cs │ ├── HUD │ │ ├── BindableNumberExtension.cs │ │ ├── GeneralSettingOverlay.cs │ │ ├── ISettingHUDOverlay.cs │ │ ├── PracticeOverlay.cs │ │ ├── SettingButton.cs │ │ ├── SettingButtonsDisplay.cs │ │ ├── SettingOverlay.cs │ │ └── SettingOverlayContainer.cs │ ├── KaraokePlayfield.cs │ ├── KaraokePlayfieldAdjustmentContainer.cs │ ├── KaraokeReplayRecorder.cs │ ├── KaraokeScrollingDirection.cs │ ├── KaraokeSettingsSubsection.cs │ ├── LyricPlayfield.cs │ ├── NotePlayfield.cs │ ├── PlayerSettings │ │ ├── ClickablePlayerSliderBar.cs │ │ ├── LyricsPreview.cs │ │ ├── PitchSettings.cs │ │ ├── PlaybackSettings.cs │ │ ├── PlayerDropdown.cs │ │ └── PracticeSettings.cs │ ├── Position │ │ ├── INotePositionInfo.cs │ │ ├── NotePositionCalculator.cs │ │ └── NotePositionInfo.cs │ └── Scrolling │ │ └── ScrollingNotePlayfield.cs ├── Utils │ ├── ActivatorUtils.cs │ ├── AssemblyUtils.cs │ ├── BindablesUtils.cs │ ├── CharUtils.cs │ ├── ComparableUtils.cs │ ├── CultureInfoUtils.cs │ ├── EnumUtils.cs │ ├── FontUsageUtils.cs │ ├── FontUtils.cs │ ├── JpStringUtils.cs │ ├── RectangleFUtils.cs │ ├── StackTraceUtils.cs │ ├── TextIndexUtils.cs │ ├── TypeUtils.cs │ └── VersionUtils.cs └── osu.Game.Rulesets.Karaoke.csproj └── osu.licenseheader /.config/dotnet-tools.json: -------------------------------------------------------------------------------- 1 | { 2 | "version": 1, 3 | "isRoot": true, 4 | "tools": { 5 | "ppy.localisationanalyser.tools": { 6 | "version": "2023.1117.0", 7 | "commands": [ 8 | "localisation" 9 | ] 10 | } 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /.git-blame-ignore-revs: -------------------------------------------------------------------------------- 1 | # Partial everything 2 | c3d76bde9f3d78b420ab6a18b8191c00a503b2be 3 | # Make test project to the file-scope namespace 4 | 3546a366f24d23dee1188758df0f8c6744dd1001 5 | # Make main project to the file-scope namespace 6 | 5597711949c30a9699c4ab3957c0d98e6ff2212c 7 | # Apply the trailing comma in the whole solution. 8 | 70fa847a40aa6a6c8ea3f1b277e4c2a23c8484a4 -------------------------------------------------------------------------------- /.gitattributes: -------------------------------------------------------------------------------- 1 | # Autodetect text files and ensure that we normalise their 2 | # line endings to lf internally. When checked out they may 3 | # use different line endings. 4 | * text=auto 5 | 6 | # Check out with crlf (Windows) line endings 7 | *.sln text eol=crlf 8 | *.csproj text eol=crlf 9 | *.cs text diff=csharp eol=crlf 10 | *.resx text eol=crlf 11 | *.vsixmanifest text eol=crlf 12 | packages.config text eol=crlf 13 | App.config text eol=crlf 14 | *.bat text eol=crlf 15 | *.cmd text eol=crlf 16 | *.snippet text eol=crlf 17 | *.manifest text eol=crlf 18 | *.licenseheader text eol=crlf 19 | 20 | # Check out with lf (UNIX) line endings 21 | *.sh text eol=lf 22 | .gitignore text eol=lf 23 | .gitattributes text eol=lf 24 | *.md text eol=lf 25 | .travis.yml text eol=lf -------------------------------------------------------------------------------- /.github/labeler.yml: -------------------------------------------------------------------------------- 1 | localization: 2 | - osu.Game.Rulesets.Karaoke/Localisation/* 3 | -------------------------------------------------------------------------------- /.github/workflows/ci.yml: -------------------------------------------------------------------------------- 1 | name: .NET Core 2 | 3 | on: 4 | push: 5 | branches: [ master ] 6 | pull_request: 7 | branches: [ master ] 8 | 9 | jobs: 10 | build: 11 | name: Build and Test 12 | runs-on: ubuntu-latest 13 | 14 | steps: 15 | - name: Checkout repository 16 | uses: actions/checkout@v2 17 | - name: Install dependencies 18 | run: dotnet restore 19 | - name: Build with .NET 20 | run: dotnet build --no-restore --configuration Release 21 | - name: Unit Tests 22 | run: dotnet test --no-build --no-restore --configuration Release 23 | -------------------------------------------------------------------------------- /.github/workflows/dotnet-format.yml: -------------------------------------------------------------------------------- 1 | name: Format check on pull request 2 | on: pull_request 3 | 4 | jobs: 5 | dotnet-format: 6 | runs-on: ubuntu-latest 7 | steps: 8 | - name: Checkout repo 9 | uses: actions/checkout@v2 10 | 11 | - name: Add dotnet-format problem matcher 12 | uses: xt0rted/dotnet-format-problem-matcher@v1 13 | 14 | - name: Restore dotnet tools 15 | uses: xt0rted/dotnet-tool-restore@v1 16 | 17 | - name: Run dotnet format 18 | uses: xt0rted/dotnet-format@v1 19 | with: 20 | only-changed-files: true 21 | -------------------------------------------------------------------------------- /.github/workflows/labeler.yml: -------------------------------------------------------------------------------- 1 | name: Pull Request Labeler 2 | 3 | on: 4 | pull_request_target: 5 | paths: 6 | # we only add use this action for add the localization label for now, so run this action if localization changed. 7 | - 'osu.Game.Rulesets.Karaoke/Localisation/**' 8 | 9 | jobs: 10 | triage: 11 | permissions: 12 | contents: read 13 | pull-requests: write 14 | runs-on: ubuntu-latest 15 | steps: 16 | - uses: actions/labeler@v4 17 | with: 18 | repo-token: "${{ secrets.GITHUB_TOKEN }}" 19 | -------------------------------------------------------------------------------- /appveyor.yml: -------------------------------------------------------------------------------- 1 | clone_depth: 1 2 | version: '{branch}-{build}' 3 | image: Visual Studio 2022 4 | branches: 5 | only: 6 | - master 7 | dotnet_csproj: 8 | patch: true 9 | file: 'osu.Game.Rulesets.Karaoke\osu.Game.Rulesets.Karaoke.csproj' # Use wildcard when it's able to exclude Xamarin projects 10 | version: '0.0.{build}' 11 | cache: 12 | - '%LOCALAPPDATA%\NuGet\v3-cache -> appveyor.yml' 13 | before_build: 14 | - ps: dotnet --info # Useful when version mismatch between CI and local 15 | - ps: nuget restore -verbosity quiet # Only nuget.exe knows both new (.NET Core) and old (Xamarin) projects 16 | build: 17 | project: osu.Game.Rulesets.Karaoke.sln 18 | parallel: true 19 | verbosity: minimal 20 | after_build: 21 | - ps: dotnet tool restore 22 | test: 23 | assemblies: 24 | except: 25 | - '**\*Android*' 26 | - '**\*iOS*' 27 | - 'build\**\*' 28 | -------------------------------------------------------------------------------- /assets/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/karaoke-dev/karaoke/36b3f92e68e1f3b8f2b835e0006ba64737e63ad9/assets/logo.png -------------------------------------------------------------------------------- /cake.config: -------------------------------------------------------------------------------- 1 | 2 | [Nuget] 3 | Source=https://api.nuget.org/v3/index.json 4 | UseInProcessClient=true 5 | LoadDependencies=true 6 | -------------------------------------------------------------------------------- /osu.Game.Rulesets.Karaoke.Architectures/Program.cs: -------------------------------------------------------------------------------- 1 | // Copyright (c) andy840119 . Licensed under the GPL Licence. 2 | // See the LICENCE file in the repository root for full licence text. 3 | 4 | using System; 5 | 6 | namespace osu.Game.Rulesets.Karaoke.Architectures; 7 | 8 | public static class Program 9 | { 10 | public static void Main() 11 | { 12 | Console.WriteLine("This is the project for checking the architecture is designed as expected!"); 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /osu.Game.Rulesets.Karaoke.Architectures/osu.Game.Rulesets.Karaoke.Architectures.csproj: -------------------------------------------------------------------------------- 1 |  2 | 3 | WinExe 4 | osu.Game.Rulesets.Karaoke.Architectures 5 | net8.0 6 | 7 | 8 | false 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | -------------------------------------------------------------------------------- /osu.Game.Rulesets.Karaoke.Tests/Editor/ChangeHandlers/BaseHitObjectPropertyChangeHandlerTest.cs: -------------------------------------------------------------------------------- 1 | // Copyright (c) andy840119 . Licensed under the GPL Licence. 2 | // See the LICENCE file in the repository root for full licence text. 3 | 4 | using osu.Game.Rulesets.Karaoke.Edit.ChangeHandlers; 5 | using osu.Game.Rulesets.Objects; 6 | 7 | namespace osu.Game.Rulesets.Karaoke.Tests.Editor.ChangeHandlers; 8 | 9 | public abstract partial class BaseHitObjectPropertyChangeHandlerTest : BaseHitObjectChangeHandlerTest 10 | where TChangeHandler : HitObjectPropertyChangeHandler, new() where THitObject : HitObject; 11 | -------------------------------------------------------------------------------- /osu.Game.Rulesets.Karaoke.Tests/Editor/Checks/BeatmapPropertyCheckTest.cs: -------------------------------------------------------------------------------- 1 | // Copyright (c) andy840119 . Licensed under the GPL Licence. 2 | // See the LICENCE file in the repository root for full licence text. 3 | 4 | using osu.Game.Rulesets.Edit.Checks.Components; 5 | 6 | namespace osu.Game.Rulesets.Karaoke.Tests.Editor.Checks; 7 | 8 | public abstract class BeatmapPropertyCheckTest : BaseCheckTest where TCheck : class, ICheck, new(); 9 | -------------------------------------------------------------------------------- /osu.Game.Rulesets.Karaoke.Tests/Editor/Generator/Beatmaps/BaseBeatmapDetectorTest.cs: -------------------------------------------------------------------------------- 1 | // Copyright (c) andy840119 . Licensed under the GPL Licence. 2 | // See the LICENCE file in the repository root for full licence text. 3 | 4 | using osu.Game.Rulesets.Karaoke.Beatmaps; 5 | using osu.Game.Rulesets.Karaoke.Edit.Generator; 6 | using osu.Game.Rulesets.Karaoke.Edit.Generator.Beatmaps; 7 | 8 | namespace osu.Game.Rulesets.Karaoke.Tests.Editor.Generator.Beatmaps; 9 | 10 | public abstract class BaseBeatmapDetectorTest 11 | : BasePropertyDetectorTest 12 | where TDetector : BeatmapPropertyDetector 13 | where TConfig : GeneratorConfig, new(); 14 | -------------------------------------------------------------------------------- /osu.Game.Rulesets.Karaoke.Tests/Editor/Generator/Beatmaps/BaseBeatmapGeneratorTest.cs: -------------------------------------------------------------------------------- 1 | // Copyright (c) andy840119 . Licensed under the GPL Licence. 2 | // See the LICENCE file in the repository root for full licence text. 3 | 4 | using osu.Game.Rulesets.Karaoke.Beatmaps; 5 | using osu.Game.Rulesets.Karaoke.Edit.Generator; 6 | using osu.Game.Rulesets.Karaoke.Edit.Generator.Beatmaps; 7 | 8 | namespace osu.Game.Rulesets.Karaoke.Tests.Editor.Generator.Beatmaps; 9 | 10 | public abstract class BaseBeatmapGeneratorTest 11 | : BasePropertyGeneratorTest 12 | where TGenerator : BeatmapPropertyGenerator 13 | where TConfig : GeneratorConfig, new(); 14 | -------------------------------------------------------------------------------- /osu.Game.Rulesets.Karaoke.Tests/Editor/Generator/Lyrics/BaseLyricDetectorTest.cs: -------------------------------------------------------------------------------- 1 | // Copyright (c) andy840119 . Licensed under the GPL Licence. 2 | // See the LICENCE file in the repository root for full licence text. 3 | 4 | using osu.Game.Rulesets.Karaoke.Edit.Generator; 5 | using osu.Game.Rulesets.Karaoke.Edit.Generator.Lyrics; 6 | using osu.Game.Rulesets.Karaoke.Objects; 7 | 8 | namespace osu.Game.Rulesets.Karaoke.Tests.Editor.Generator.Lyrics; 9 | 10 | public abstract class BaseLyricDetectorTest 11 | : BasePropertyDetectorTest 12 | where TDetector : LyricPropertyDetector 13 | where TConfig : GeneratorConfig, new(); 14 | -------------------------------------------------------------------------------- /osu.Game.Rulesets.Karaoke.Tests/Editor/Generator/Lyrics/BaseLyricGeneratorSelectorTest.cs: -------------------------------------------------------------------------------- 1 | // Copyright (c) andy840119 . Licensed under the GPL Licence. 2 | // See the LICENCE file in the repository root for full licence text. 3 | 4 | using osu.Game.Rulesets.Karaoke.Edit.Generator; 5 | using osu.Game.Rulesets.Karaoke.Objects; 6 | 7 | namespace osu.Game.Rulesets.Karaoke.Tests.Editor.Generator.Lyrics; 8 | 9 | public abstract class BaseLyricGeneratorSelectorTest 10 | : BaseGeneratorSelectorTest 11 | where TGenerator : PropertyGenerator; 12 | -------------------------------------------------------------------------------- /osu.Game.Rulesets.Karaoke.Tests/Editor/Generator/Lyrics/BaseLyricGeneratorTest.cs: -------------------------------------------------------------------------------- 1 | // Copyright (c) andy840119 . Licensed under the GPL Licence. 2 | // See the LICENCE file in the repository root for full licence text. 3 | 4 | using osu.Game.Rulesets.Karaoke.Edit.Generator; 5 | using osu.Game.Rulesets.Karaoke.Edit.Generator.Lyrics; 6 | using osu.Game.Rulesets.Karaoke.Objects; 7 | 8 | namespace osu.Game.Rulesets.Karaoke.Tests.Editor.Generator.Lyrics; 9 | 10 | public abstract class BaseLyricGeneratorTest 11 | : BasePropertyGeneratorTest 12 | where TGenerator : LyricPropertyGenerator 13 | where TConfig : GeneratorConfig, new(); 14 | -------------------------------------------------------------------------------- /osu.Game.Rulesets.Karaoke.Tests/Editor/Generator/Stages/BaseStageInfoPropertyGeneratorTest.cs: -------------------------------------------------------------------------------- 1 | // Copyright (c) andy840119 . Licensed under the GPL Licence. 2 | // See the LICENCE file in the repository root for full licence text. 3 | 4 | using osu.Game.Rulesets.Karaoke.Beatmaps; 5 | using osu.Game.Rulesets.Karaoke.Edit.Generator; 6 | using osu.Game.Rulesets.Karaoke.Edit.Generator.Stages; 7 | 8 | namespace osu.Game.Rulesets.Karaoke.Tests.Editor.Generator.Stages; 9 | 10 | public abstract class BaseStageInfoPropertyGeneratorTest 11 | : BasePropertyGeneratorTest 12 | where TGenerator : StageInfoPropertyGenerator 13 | where TConfig : GeneratorConfig, new(); 14 | -------------------------------------------------------------------------------- /osu.Game.Rulesets.Karaoke.Tests/Editor/TestSceneEditor.cs: -------------------------------------------------------------------------------- 1 | // Copyright (c) andy840119 . Licensed under the GPL Licence. 2 | // See the LICENCE file in the repository root for full licence text. 3 | 4 | using NUnit.Framework; 5 | using osu.Game.Beatmaps; 6 | using osu.Game.Rulesets.Karaoke.Tests.Beatmaps; 7 | using osu.Game.Tests.Visual; 8 | 9 | namespace osu.Game.Rulesets.Karaoke.Tests.Editor; 10 | 11 | [TestFixture] 12 | public partial class TestSceneEditor : EditorTestScene 13 | { 14 | protected override IBeatmap CreateBeatmap(RulesetInfo ruleset) => new TestKaraokeBeatmap(ruleset); 15 | 16 | protected override Ruleset CreateEditorRuleset() => new KaraokeRuleset(); 17 | } 18 | -------------------------------------------------------------------------------- /osu.Game.Rulesets.Karaoke.Tests/Extensions/PrimaryKeyObjectExtension.cs: -------------------------------------------------------------------------------- 1 | // Copyright (c) andy840119 . Licensed under the GPL Licence. 2 | // See the LICENCE file in the repository root for full licence text. 3 | 4 | using osu.Game.Rulesets.Karaoke.Beatmaps; 5 | using osu.Game.Rulesets.Karaoke.Tests.Helper; 6 | 7 | namespace osu.Game.Rulesets.Karaoke.Tests.Extensions; 8 | 9 | public static class PrimaryKeyObjectExtension 10 | { 11 | public static TObject ChangeId(this TObject obj, int id) 12 | where TObject : IHasPrimaryKey 13 | { 14 | var elementId = TestCaseElementIdHelper.CreateElementIdByNumber(id); 15 | return obj.ChangeId(elementId); 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /osu.Game.Rulesets.Karaoke.Tests/Helper/TestCaseToneHelper.cs: -------------------------------------------------------------------------------- 1 | // Copyright (c) andy840119 . Licensed under the GPL Licence. 2 | // See the LICENCE file in the repository root for full licence text. 3 | 4 | using System; 5 | using osu.Game.Rulesets.Karaoke.Objects; 6 | 7 | namespace osu.Game.Rulesets.Karaoke.Tests.Helper; 8 | 9 | public static class TestCaseToneHelper 10 | { 11 | public static Tone NumberToTone(double tone) 12 | { 13 | bool half = Math.Abs(tone) % 1 == 0.5; 14 | int scale = tone < 0 ? (int)tone - (half ? 1 : 0) : (int)tone; 15 | return new Tone(scale, half); 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /osu.Game.Rulesets.Karaoke.Tests/IO/Serialization/SkinJsonSerializableExtensionsTest.cs: -------------------------------------------------------------------------------- 1 | // Copyright (c) andy840119 . Licensed under the GPL Licence. 2 | // See the LICENCE file in the repository root for full licence text. 3 | 4 | using NUnit.Framework; 5 | using osu.Game.Rulesets.Karaoke.Tests.IO.Serialization.Converters; 6 | 7 | namespace osu.Game.Rulesets.Karaoke.Tests.IO.Serialization; 8 | 9 | [Ignore($"Test case already in the {nameof(KaraokeSkinElementConverterTest)}")] 10 | public class SkinJsonSerializableExtensionsTest; 11 | -------------------------------------------------------------------------------- /osu.Game.Rulesets.Karaoke.Tests/IO/Stores/TtfGlyphStoreTest.cs: -------------------------------------------------------------------------------- 1 | // Copyright (c) andy840119 . Licensed under the GPL Licence. 2 | // See the LICENCE file in the repository root for full licence text. 3 | 4 | using NUnit.Framework; 5 | using osu.Framework.IO.Stores; 6 | using osu.Game.Rulesets.Karaoke.IO.Stores; 7 | 8 | namespace osu.Game.Rulesets.Karaoke.Tests.IO.Stores; 9 | 10 | [Ignore("This shit is not implemented.")] 11 | public class TtfGlyphStoreTest : BaseGlyphStoreTest 12 | { 13 | protected override string FontType => "Ttf"; 14 | 15 | protected override string FontName => "OpenSans-Regular"; 16 | 17 | protected override TtfGlyphStore CreateFontStore(ResourceStore store, string assetName) 18 | => new(store, assetName); 19 | } 20 | -------------------------------------------------------------------------------- /osu.Game.Rulesets.Karaoke.Tests/KaraokeTestBrowser.cs: -------------------------------------------------------------------------------- 1 | // Copyright (c) andy840119 . Licensed under the GPL Licence. 2 | // See the LICENCE file in the repository root for full licence text. 3 | 4 | using osu.Framework.Allocation; 5 | using osu.Game.Tests; 6 | 7 | namespace osu.Game.Rulesets.Karaoke.Tests; 8 | 9 | public partial class KaraokeTestBrowser : OsuTestBrowser 10 | { 11 | [BackgroundDependencyLoader] 12 | private void load() 13 | { 14 | // note: not add resource store here unless there's no other better choice. 15 | // because it will let error related to missing resource harder to be tracked. 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /osu.Game.Rulesets.Karaoke.Tests/Mods/KaraokeModTestScene.cs: -------------------------------------------------------------------------------- 1 | // Copyright (c) andy840119 . Licensed under the GPL Licence. 2 | // See the LICENCE file in the repository root for full licence text. 3 | 4 | using osu.Game.Tests.Visual; 5 | 6 | namespace osu.Game.Rulesets.Karaoke.Tests.Mods; 7 | 8 | public abstract partial class KaraokeModTestScene : ModTestScene 9 | { 10 | protected override Ruleset CreatePlayerRuleset() => new KaraokeRuleset(); 11 | } 12 | -------------------------------------------------------------------------------- /osu.Game.Rulesets.Karaoke.Tests/Mods/TestSceneKaraokeModAutoplay.cs: -------------------------------------------------------------------------------- 1 | // Copyright (c) andy840119 . Licensed under the GPL Licence. 2 | // See the LICENCE file in the repository root for full licence text. 3 | 4 | using NUnit.Framework; 5 | using osu.Game.Rulesets.Karaoke.Mods; 6 | using osu.Game.Rulesets.Karaoke.Tests.Beatmaps; 7 | 8 | namespace osu.Game.Rulesets.Karaoke.Tests.Mods; 9 | 10 | public partial class TestSceneKaraokeModAutoplay : KaraokeModTestScene 11 | { 12 | [Ignore("mod auto-play will cause crash")] 13 | public void TestMod() => CreateModTest(new ModTestData 14 | { 15 | Mod = new KaraokeModAutoplay(), 16 | Autoplay = true, 17 | CreateBeatmap = () => new TestKaraokeBeatmap(Ruleset.Value), 18 | PassCondition = () => true, 19 | }); 20 | } 21 | -------------------------------------------------------------------------------- /osu.Game.Rulesets.Karaoke.Tests/Mods/TestSceneKaraokeModAutoplayBySinger.cs: -------------------------------------------------------------------------------- 1 | // Copyright (c) andy840119 . Licensed under the GPL Licence. 2 | // See the LICENCE file in the repository root for full licence text. 3 | 4 | using NUnit.Framework; 5 | using osu.Game.Rulesets.Karaoke.Mods; 6 | using osu.Game.Rulesets.Karaoke.Tests.Beatmaps; 7 | 8 | namespace osu.Game.Rulesets.Karaoke.Tests.Mods; 9 | 10 | public partial class TestSceneKaraokeModAutoplayBySinger : KaraokeModTestScene 11 | { 12 | [Ignore("mod auto-play will cause crash")] 13 | public void TestMod() => CreateModTest(new ModTestData 14 | { 15 | Mod = new KaraokeModAutoplayBySinger(), 16 | Autoplay = true, 17 | CreateBeatmap = () => new TestKaraokeBeatmap(Ruleset.Value), 18 | PassCondition = () => true, 19 | }); 20 | } 21 | -------------------------------------------------------------------------------- /osu.Game.Rulesets.Karaoke.Tests/Mods/TestSceneKaraokeModClassicStage.cs: -------------------------------------------------------------------------------- 1 | // Copyright (c) andy840119 . Licensed under the GPL Licence. 2 | // See the LICENCE file in the repository root for full licence text. 3 | 4 | using osu.Game.Rulesets.Karaoke.Mods; 5 | using osu.Game.Rulesets.Karaoke.Stages.Infos.Classic; 6 | 7 | namespace osu.Game.Rulesets.Karaoke.Tests.Mods; 8 | 9 | public partial class TestSceneKaraokeModClassicStage : KaraokeModStageTestScene; 10 | -------------------------------------------------------------------------------- /osu.Game.Rulesets.Karaoke.Tests/Mods/TestSceneKaraokeModLyricConfiguration.cs: -------------------------------------------------------------------------------- 1 | // Copyright (c) andy840119 . Licensed under the GPL Licence. 2 | // See the LICENCE file in the repository root for full licence text. 3 | 4 | using NUnit.Framework; 5 | using osu.Game.Rulesets.Karaoke.Mods; 6 | using osu.Game.Rulesets.Karaoke.Tests.Beatmaps; 7 | 8 | namespace osu.Game.Rulesets.Karaoke.Tests.Mods; 9 | 10 | public partial class TestSceneKaraokeModLyricConfiguration : KaraokeModTestScene 11 | { 12 | [Test] 13 | public void TestAllPanelExist() => CreateModTest(new ModTestData 14 | { 15 | Mod = new KaraokeModLyricConfiguration(), 16 | Autoplay = false, 17 | CreateBeatmap = () => new TestKaraokeBeatmap(new RulesetInfo()), 18 | PassCondition = () => true, 19 | }); 20 | } 21 | -------------------------------------------------------------------------------- /osu.Game.Rulesets.Karaoke.Tests/Mods/TestSceneKaraokeModPreviewStage.cs: -------------------------------------------------------------------------------- 1 | // Copyright (c) andy840119 . Licensed under the GPL Licence. 2 | // See the LICENCE file in the repository root for full licence text. 3 | 4 | using osu.Game.Rulesets.Karaoke.Mods; 5 | using osu.Game.Rulesets.Karaoke.Stages.Infos.Preview; 6 | 7 | namespace osu.Game.Rulesets.Karaoke.Tests.Mods; 8 | 9 | public partial class TestSceneKaraokeModPreviewStage : KaraokeModStageTestScene; 10 | -------------------------------------------------------------------------------- /osu.Game.Rulesets.Karaoke.Tests/Mods/TestSceneKaraokeModTranslation.cs: -------------------------------------------------------------------------------- 1 | // Copyright (c) andy840119 . Licensed under the GPL Licence. 2 | // See the LICENCE file in the repository root for full licence text. 3 | 4 | using NUnit.Framework; 5 | using osu.Game.Rulesets.Karaoke.Mods; 6 | using osu.Game.Rulesets.Karaoke.Tests.Beatmaps; 7 | 8 | namespace osu.Game.Rulesets.Karaoke.Tests.Mods; 9 | 10 | public partial class TestSceneKaraokeModTranslation : KaraokeModTestScene 11 | { 12 | [Test] 13 | public void TestAllPanelExist() => CreateModTest(new ModTestData 14 | { 15 | Mod = new KaraokeModTranslation(), 16 | Autoplay = false, 17 | CreateBeatmap = () => new TestKaraokeBeatmap(new RulesetInfo()), 18 | PassCondition = () => true, 19 | }); 20 | } 21 | -------------------------------------------------------------------------------- /osu.Game.Rulesets.Karaoke.Tests/Resources/Testing/Beatmaps/karaoke-file-samples-expected-conversion.json: -------------------------------------------------------------------------------- 1 | { 2 | "Mappings": [] 3 | } -------------------------------------------------------------------------------- /osu.Game.Rulesets.Karaoke.Tests/Resources/Testing/Beatmaps/karaoke-note-samples.osu: -------------------------------------------------------------------------------- 1 | karaoke file format v1 2 | 3 | [HitObjects] 4 | @[00:01.00]か[00:02.00]ら[00:03.00]お[00:04.00]け[00:05.00] 5 | @note1=1,2#,3,(3#|4) 6 | 7 | end -------------------------------------------------------------------------------- /osu.Game.Rulesets.Karaoke.Tests/Resources/Testing/Beatmaps/karaoke-translation-samples.osu: -------------------------------------------------------------------------------- 1 | karaoke file format v1 2 | 3 | [HitObjects] 4 | @[00:01.00]か[00:02.00]ら[00:03.00]お[00:04.00]け[00:05.00] 5 | @[00:06.00]大[00:07.00]好[00:08.00]き[00:09.00] 6 | 7 | @tr[zh-TW]=卡拉OK 8 | @tr[zh-TW]=喜歡 9 | 10 | @tr[en-US]=karaoke 11 | @tr[en-US]=like it 12 | 13 | end -------------------------------------------------------------------------------- /osu.Game.Rulesets.Karaoke.Tests/Resources/Testing/Fonts/Fnt/OpenSans/OpenSans-Bold.bin: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/karaoke-dev/karaoke/36b3f92e68e1f3b8f2b835e0006ba64737e63ad9/osu.Game.Rulesets.Karaoke.Tests/Resources/Testing/Fonts/Fnt/OpenSans/OpenSans-Bold.bin -------------------------------------------------------------------------------- /osu.Game.Rulesets.Karaoke.Tests/Resources/Testing/Fonts/Fnt/OpenSans/OpenSans-BoldItalic.bin: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/karaoke-dev/karaoke/36b3f92e68e1f3b8f2b835e0006ba64737e63ad9/osu.Game.Rulesets.Karaoke.Tests/Resources/Testing/Fonts/Fnt/OpenSans/OpenSans-BoldItalic.bin -------------------------------------------------------------------------------- /osu.Game.Rulesets.Karaoke.Tests/Resources/Testing/Fonts/Fnt/OpenSans/OpenSans-BoldItalic_0.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/karaoke-dev/karaoke/36b3f92e68e1f3b8f2b835e0006ba64737e63ad9/osu.Game.Rulesets.Karaoke.Tests/Resources/Testing/Fonts/Fnt/OpenSans/OpenSans-BoldItalic_0.png -------------------------------------------------------------------------------- /osu.Game.Rulesets.Karaoke.Tests/Resources/Testing/Fonts/Fnt/OpenSans/OpenSans-Bold_0.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/karaoke-dev/karaoke/36b3f92e68e1f3b8f2b835e0006ba64737e63ad9/osu.Game.Rulesets.Karaoke.Tests/Resources/Testing/Fonts/Fnt/OpenSans/OpenSans-Bold_0.png -------------------------------------------------------------------------------- /osu.Game.Rulesets.Karaoke.Tests/Resources/Testing/Fonts/Fnt/OpenSans/OpenSans-Regular.bin: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/karaoke-dev/karaoke/36b3f92e68e1f3b8f2b835e0006ba64737e63ad9/osu.Game.Rulesets.Karaoke.Tests/Resources/Testing/Fonts/Fnt/OpenSans/OpenSans-Regular.bin -------------------------------------------------------------------------------- /osu.Game.Rulesets.Karaoke.Tests/Resources/Testing/Fonts/Fnt/OpenSans/OpenSans-RegularItalic.bin: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/karaoke-dev/karaoke/36b3f92e68e1f3b8f2b835e0006ba64737e63ad9/osu.Game.Rulesets.Karaoke.Tests/Resources/Testing/Fonts/Fnt/OpenSans/OpenSans-RegularItalic.bin -------------------------------------------------------------------------------- /osu.Game.Rulesets.Karaoke.Tests/Resources/Testing/Fonts/Fnt/OpenSans/OpenSans-RegularItalic_0.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/karaoke-dev/karaoke/36b3f92e68e1f3b8f2b835e0006ba64737e63ad9/osu.Game.Rulesets.Karaoke.Tests/Resources/Testing/Fonts/Fnt/OpenSans/OpenSans-RegularItalic_0.png -------------------------------------------------------------------------------- /osu.Game.Rulesets.Karaoke.Tests/Resources/Testing/Fonts/Fnt/OpenSans/OpenSans-Regular_0.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/karaoke-dev/karaoke/36b3f92e68e1f3b8f2b835e0006ba64737e63ad9/osu.Game.Rulesets.Karaoke.Tests/Resources/Testing/Fonts/Fnt/OpenSans/OpenSans-Regular_0.png -------------------------------------------------------------------------------- /osu.Game.Rulesets.Karaoke.Tests/Resources/Testing/Fonts/Ttf/OpenSans-Regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/karaoke-dev/karaoke/36b3f92e68e1f3b8f2b835e0006ba64737e63ad9/osu.Game.Rulesets.Karaoke.Tests/Resources/Testing/Fonts/Ttf/OpenSans-Regular.ttf -------------------------------------------------------------------------------- /osu.Game.Rulesets.Karaoke.Tests/Resources/Testing/Kar/light.kar: -------------------------------------------------------------------------------- 1 | 枯れた世界に輝く 名もない永遠の華 2 | 強く生きていけるよう 私を変えていく 3 | 4 | あぁ、わかっていたの 本当は 5 | 光なんて求めちゃいけないってこと 6 | 7 | あぁ、それでもきっと人は 8 | 輝く未来なんてものを求めてさまよう 9 | 10 | 女神なんて 信じてるわけじゃない 11 | 未来をこの 手で切り開く勇気が 強さがほしい 12 | あなたを守りたい 13 | 14 | 枯れた世界に輝く 名もない永遠の華 15 | 強く生きていけるよう 私を変えていく 16 | 17 | あぁ、例えこの世が暗く 18 | 絶望に飲み込まれても 私は大丈夫 19 | 20 | あなたがいればそこは 21 | 灰色(いろ)(いろ)の景色(いろ)(いろ)さえ色づき始める 22 | 23 | 華もきっと 咲き誇るときを終え 24 | いつかきっと また蕾をつけるだろう  25 | 終わることない 26 | 生命(いのち)が続くまでは 27 | 28 | あなたの手を離さない 瞳に誓う 永遠の恋 29 | 強く儚い思いを 守り続けていたい 30 | 31 | 枯れた世界に輝く 名もない永遠の華 32 | 強く生き抜きけるように 私を変えていく 33 | あなたの手を離さない 瞳に誓う 永遠の恋 34 | 強く儚い思いを 守り続けていたい -------------------------------------------------------------------------------- /osu.Game.Rulesets.Karaoke.Tests/Resources/Testing/Track/demo.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/karaoke-dev/karaoke/36b3f92e68e1f3b8f2b835e0006ba64737e63ad9/osu.Game.Rulesets.Karaoke.Tests/Resources/Testing/Track/demo.mp3 -------------------------------------------------------------------------------- /osu.Game.Rulesets.Karaoke.Tests/Resources/metrics-skin/karaoke-judgement-line-body@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/karaoke-dev/karaoke/36b3f92e68e1f3b8f2b835e0006ba64737e63ad9/osu.Game.Rulesets.Karaoke.Tests/Resources/metrics-skin/karaoke-judgement-line-body@2x.png -------------------------------------------------------------------------------- /osu.Game.Rulesets.Karaoke.Tests/Resources/metrics-skin/karaoke-judgement-line-head@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/karaoke-dev/karaoke/36b3f92e68e1f3b8f2b835e0006ba64737e63ad9/osu.Game.Rulesets.Karaoke.Tests/Resources/metrics-skin/karaoke-judgement-line-head@2x.png -------------------------------------------------------------------------------- /osu.Game.Rulesets.Karaoke.Tests/Resources/metrics-skin/karaoke-judgement-line-tail@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/karaoke-dev/karaoke/36b3f92e68e1f3b8f2b835e0006ba64737e63ad9/osu.Game.Rulesets.Karaoke.Tests/Resources/metrics-skin/karaoke-judgement-line-tail@2x.png -------------------------------------------------------------------------------- /osu.Game.Rulesets.Karaoke.Tests/Resources/metrics-skin/karaoke-lighting-0@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/karaoke-dev/karaoke/36b3f92e68e1f3b8f2b835e0006ba64737e63ad9/osu.Game.Rulesets.Karaoke.Tests/Resources/metrics-skin/karaoke-lighting-0@2x.png -------------------------------------------------------------------------------- /osu.Game.Rulesets.Karaoke.Tests/Resources/metrics-skin/karaoke-lighting-1@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/karaoke-dev/karaoke/36b3f92e68e1f3b8f2b835e0006ba64737e63ad9/osu.Game.Rulesets.Karaoke.Tests/Resources/metrics-skin/karaoke-lighting-1@2x.png -------------------------------------------------------------------------------- /osu.Game.Rulesets.Karaoke.Tests/Resources/metrics-skin/karaoke-lighting-2@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/karaoke-dev/karaoke/36b3f92e68e1f3b8f2b835e0006ba64737e63ad9/osu.Game.Rulesets.Karaoke.Tests/Resources/metrics-skin/karaoke-lighting-2@2x.png -------------------------------------------------------------------------------- /osu.Game.Rulesets.Karaoke.Tests/Resources/metrics-skin/karaoke-lighting-3@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/karaoke-dev/karaoke/36b3f92e68e1f3b8f2b835e0006ba64737e63ad9/osu.Game.Rulesets.Karaoke.Tests/Resources/metrics-skin/karaoke-lighting-3@2x.png -------------------------------------------------------------------------------- /osu.Game.Rulesets.Karaoke.Tests/Resources/metrics-skin/karaoke-lighting-4@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/karaoke-dev/karaoke/36b3f92e68e1f3b8f2b835e0006ba64737e63ad9/osu.Game.Rulesets.Karaoke.Tests/Resources/metrics-skin/karaoke-lighting-4@2x.png -------------------------------------------------------------------------------- /osu.Game.Rulesets.Karaoke.Tests/Resources/metrics-skin/karaoke-lighting-5@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/karaoke-dev/karaoke/36b3f92e68e1f3b8f2b835e0006ba64737e63ad9/osu.Game.Rulesets.Karaoke.Tests/Resources/metrics-skin/karaoke-lighting-5@2x.png -------------------------------------------------------------------------------- /osu.Game.Rulesets.Karaoke.Tests/Resources/metrics-skin/karaoke-note-background-body@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/karaoke-dev/karaoke/36b3f92e68e1f3b8f2b835e0006ba64737e63ad9/osu.Game.Rulesets.Karaoke.Tests/Resources/metrics-skin/karaoke-note-background-body@2x.png -------------------------------------------------------------------------------- /osu.Game.Rulesets.Karaoke.Tests/Resources/metrics-skin/karaoke-note-background-head@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/karaoke-dev/karaoke/36b3f92e68e1f3b8f2b835e0006ba64737e63ad9/osu.Game.Rulesets.Karaoke.Tests/Resources/metrics-skin/karaoke-note-background-head@2x.png -------------------------------------------------------------------------------- /osu.Game.Rulesets.Karaoke.Tests/Resources/metrics-skin/karaoke-note-background-tail@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/karaoke-dev/karaoke/36b3f92e68e1f3b8f2b835e0006ba64737e63ad9/osu.Game.Rulesets.Karaoke.Tests/Resources/metrics-skin/karaoke-note-background-tail@2x.png -------------------------------------------------------------------------------- /osu.Game.Rulesets.Karaoke.Tests/Resources/metrics-skin/karaoke-note-border-body@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/karaoke-dev/karaoke/36b3f92e68e1f3b8f2b835e0006ba64737e63ad9/osu.Game.Rulesets.Karaoke.Tests/Resources/metrics-skin/karaoke-note-border-body@2x.png -------------------------------------------------------------------------------- /osu.Game.Rulesets.Karaoke.Tests/Resources/metrics-skin/karaoke-note-border-head@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/karaoke-dev/karaoke/36b3f92e68e1f3b8f2b835e0006ba64737e63ad9/osu.Game.Rulesets.Karaoke.Tests/Resources/metrics-skin/karaoke-note-border-head@2x.png -------------------------------------------------------------------------------- /osu.Game.Rulesets.Karaoke.Tests/Resources/metrics-skin/karaoke-note-border-tail@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/karaoke-dev/karaoke/36b3f92e68e1f3b8f2b835e0006ba64737e63ad9/osu.Game.Rulesets.Karaoke.Tests/Resources/metrics-skin/karaoke-note-border-tail@2x.png -------------------------------------------------------------------------------- /osu.Game.Rulesets.Karaoke.Tests/Resources/metrics-skin/karaoke-stage-background@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/karaoke-dev/karaoke/36b3f92e68e1f3b8f2b835e0006ba64737e63ad9/osu.Game.Rulesets.Karaoke.Tests/Resources/metrics-skin/karaoke-stage-background@2x.png -------------------------------------------------------------------------------- /osu.Game.Rulesets.Karaoke.Tests/Resources/special-skin/karaoke-judgement-line-body@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/karaoke-dev/karaoke/36b3f92e68e1f3b8f2b835e0006ba64737e63ad9/osu.Game.Rulesets.Karaoke.Tests/Resources/special-skin/karaoke-judgement-line-body@2x.png -------------------------------------------------------------------------------- /osu.Game.Rulesets.Karaoke.Tests/Resources/special-skin/karaoke-judgement-line-head@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/karaoke-dev/karaoke/36b3f92e68e1f3b8f2b835e0006ba64737e63ad9/osu.Game.Rulesets.Karaoke.Tests/Resources/special-skin/karaoke-judgement-line-head@2x.png -------------------------------------------------------------------------------- /osu.Game.Rulesets.Karaoke.Tests/Resources/special-skin/karaoke-judgement-line-tail@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/karaoke-dev/karaoke/36b3f92e68e1f3b8f2b835e0006ba64737e63ad9/osu.Game.Rulesets.Karaoke.Tests/Resources/special-skin/karaoke-judgement-line-tail@2x.png -------------------------------------------------------------------------------- /osu.Game.Rulesets.Karaoke.Tests/Resources/special-skin/karaoke-lighting-0@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/karaoke-dev/karaoke/36b3f92e68e1f3b8f2b835e0006ba64737e63ad9/osu.Game.Rulesets.Karaoke.Tests/Resources/special-skin/karaoke-lighting-0@2x.png -------------------------------------------------------------------------------- /osu.Game.Rulesets.Karaoke.Tests/Resources/special-skin/karaoke-lighting-1@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/karaoke-dev/karaoke/36b3f92e68e1f3b8f2b835e0006ba64737e63ad9/osu.Game.Rulesets.Karaoke.Tests/Resources/special-skin/karaoke-lighting-1@2x.png -------------------------------------------------------------------------------- /osu.Game.Rulesets.Karaoke.Tests/Resources/special-skin/karaoke-lighting-2@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/karaoke-dev/karaoke/36b3f92e68e1f3b8f2b835e0006ba64737e63ad9/osu.Game.Rulesets.Karaoke.Tests/Resources/special-skin/karaoke-lighting-2@2x.png -------------------------------------------------------------------------------- /osu.Game.Rulesets.Karaoke.Tests/Resources/special-skin/karaoke-lighting-3@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/karaoke-dev/karaoke/36b3f92e68e1f3b8f2b835e0006ba64737e63ad9/osu.Game.Rulesets.Karaoke.Tests/Resources/special-skin/karaoke-lighting-3@2x.png -------------------------------------------------------------------------------- /osu.Game.Rulesets.Karaoke.Tests/Resources/special-skin/karaoke-lighting-4@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/karaoke-dev/karaoke/36b3f92e68e1f3b8f2b835e0006ba64737e63ad9/osu.Game.Rulesets.Karaoke.Tests/Resources/special-skin/karaoke-lighting-4@2x.png -------------------------------------------------------------------------------- /osu.Game.Rulesets.Karaoke.Tests/Resources/special-skin/karaoke-lighting-5@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/karaoke-dev/karaoke/36b3f92e68e1f3b8f2b835e0006ba64737e63ad9/osu.Game.Rulesets.Karaoke.Tests/Resources/special-skin/karaoke-lighting-5@2x.png -------------------------------------------------------------------------------- /osu.Game.Rulesets.Karaoke.Tests/Resources/special-skin/karaoke-note-background-body@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/karaoke-dev/karaoke/36b3f92e68e1f3b8f2b835e0006ba64737e63ad9/osu.Game.Rulesets.Karaoke.Tests/Resources/special-skin/karaoke-note-background-body@2x.png -------------------------------------------------------------------------------- /osu.Game.Rulesets.Karaoke.Tests/Resources/special-skin/karaoke-note-background-head@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/karaoke-dev/karaoke/36b3f92e68e1f3b8f2b835e0006ba64737e63ad9/osu.Game.Rulesets.Karaoke.Tests/Resources/special-skin/karaoke-note-background-head@2x.png -------------------------------------------------------------------------------- /osu.Game.Rulesets.Karaoke.Tests/Resources/special-skin/karaoke-note-background-tail@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/karaoke-dev/karaoke/36b3f92e68e1f3b8f2b835e0006ba64737e63ad9/osu.Game.Rulesets.Karaoke.Tests/Resources/special-skin/karaoke-note-background-tail@2x.png -------------------------------------------------------------------------------- /osu.Game.Rulesets.Karaoke.Tests/Resources/special-skin/karaoke-note-border-body@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/karaoke-dev/karaoke/36b3f92e68e1f3b8f2b835e0006ba64737e63ad9/osu.Game.Rulesets.Karaoke.Tests/Resources/special-skin/karaoke-note-border-body@2x.png -------------------------------------------------------------------------------- /osu.Game.Rulesets.Karaoke.Tests/Resources/special-skin/karaoke-note-border-head@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/karaoke-dev/karaoke/36b3f92e68e1f3b8f2b835e0006ba64737e63ad9/osu.Game.Rulesets.Karaoke.Tests/Resources/special-skin/karaoke-note-border-head@2x.png -------------------------------------------------------------------------------- /osu.Game.Rulesets.Karaoke.Tests/Resources/special-skin/karaoke-note-border-tail@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/karaoke-dev/karaoke/36b3f92e68e1f3b8f2b835e0006ba64737e63ad9/osu.Game.Rulesets.Karaoke.Tests/Resources/special-skin/karaoke-note-border-tail@2x.png -------------------------------------------------------------------------------- /osu.Game.Rulesets.Karaoke.Tests/Resources/special-skin/karaoke-stage-background@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/karaoke-dev/karaoke/36b3f92e68e1f3b8f2b835e0006ba64737e63ad9/osu.Game.Rulesets.Karaoke.Tests/Resources/special-skin/karaoke-stage-background@2x.png -------------------------------------------------------------------------------- /osu.Game.Rulesets.Karaoke.Tests/Resources/special-skin/lyric-font-infos.json: -------------------------------------------------------------------------------- 1 | [] -------------------------------------------------------------------------------- /osu.Game.Rulesets.Karaoke.Tests/Resources/special-skin/note-styles.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "$type": 3, 4 | "id": 1, 5 | "name": "Customized note style", 6 | "note_color": "#C944DD", 7 | "blink_color": "#FF66AA", 8 | "text_color": "#FFFFFF", 9 | "bold_text": true 10 | } 11 | ] -------------------------------------------------------------------------------- /osu.Game.Rulesets.Karaoke.Tests/Screens/Edit/Beatmap/BeatmapEditorScreenTestScene.cs: -------------------------------------------------------------------------------- 1 | // Copyright (c) andy840119 . Licensed under the GPL Licence. 2 | // See the LICENCE file in the repository root for full licence text. 3 | 4 | using osu.Game.Rulesets.Karaoke.Screens.Edit.Beatmaps; 5 | 6 | namespace osu.Game.Rulesets.Karaoke.Tests.Screens.Edit.Beatmap; 7 | 8 | public abstract partial class BeatmapEditorScreenTestScene : GenericEditorScreenTestScene 9 | where T : BeatmapEditorScreen; 10 | -------------------------------------------------------------------------------- /osu.Game.Rulesets.Karaoke.Tests/Screens/Edit/Beatmap/Lyrics/Content/SingleLyricEditorTest.cs: -------------------------------------------------------------------------------- 1 | // Copyright (c) andy840119 . Licensed under the GPL Licence. 2 | // See the LICENCE file in the repository root for full licence text. 3 | 4 | using NUnit.Framework; 5 | using osu.Game.Rulesets.Karaoke.Objects; 6 | using osu.Game.Rulesets.Karaoke.Screens.Edit.Beatmaps.Lyrics; 7 | using osu.Game.Rulesets.Karaoke.Screens.Edit.Beatmaps.Lyrics.Content.Components.Lyrics; 8 | 9 | namespace osu.Game.Rulesets.Karaoke.Tests.Screens.Edit.Beatmap.Lyrics.Content; 10 | 11 | public class SingleLyricEditorTest 12 | { 13 | [Test] 14 | public void TestLockMessage() 15 | { 16 | var lyric = new Lyric(); 17 | Assert.IsNull(InteractableLyric.GetLyricPropertyLockedReason(lyric, LyricEditorMode.View)); 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /osu.Game.Rulesets.Karaoke.Tests/Screens/Edit/Beatmap/TestSceneKaraokeBeatmapEditor.cs: -------------------------------------------------------------------------------- 1 | // Copyright (c) andy840119 . Licensed under the GPL Licence. 2 | // See the LICENCE file in the repository root for full licence text. 3 | 4 | using osu.Game.Rulesets.Karaoke.Screens.Edit.Beatmaps; 5 | 6 | namespace osu.Game.Rulesets.Karaoke.Tests.Screens.Edit.Beatmap; 7 | 8 | public partial class TestSceneKaraokeBeatmapEditor : GenericEditorTestScene; 9 | -------------------------------------------------------------------------------- /osu.Game.Rulesets.Karaoke.Tests/Screens/Edit/Stages/Classic/ClassicStageScreenTestScene.cs: -------------------------------------------------------------------------------- 1 | // Copyright (c) andy840119 . Licensed under the GPL Licence. 2 | // See the LICENCE file in the repository root for full licence text. 3 | 4 | using osu.Game.Rulesets.Karaoke.Screens.Edit.Stages.Classic; 5 | 6 | namespace osu.Game.Rulesets.Karaoke.Tests.Screens.Edit.Stages.Classic; 7 | 8 | public abstract partial class ClassicStageScreenTestScene : GenericEditorScreenTestScene 9 | where T : ClassicStageScreen 10 | { 11 | } 12 | -------------------------------------------------------------------------------- /osu.Game.Rulesets.Karaoke.Tests/Screens/Edit/Stages/Classic/TestSceneClassicStageEditor.cs: -------------------------------------------------------------------------------- 1 | // Copyright (c) andy840119 . Licensed under the GPL Licence. 2 | // See the LICENCE file in the repository root for full licence text. 3 | 4 | using osu.Game.Rulesets.Karaoke.Screens.Edit.Stages.Classic; 5 | 6 | namespace osu.Game.Rulesets.Karaoke.Tests.Screens.Edit.Stages.Classic; 7 | 8 | public partial class TestSceneClassicStageEditor : GenericEditorTestScene 9 | { 10 | } 11 | -------------------------------------------------------------------------------- /osu.Game.Rulesets.Karaoke.Tests/Screens/Edit/Stages/Classic/TestSceneConfigScreen.cs: -------------------------------------------------------------------------------- 1 | // Copyright (c) andy840119 . Licensed under the GPL Licence. 2 | // See the LICENCE file in the repository root for full licence text. 3 | 4 | using osu.Game.Rulesets.Karaoke.Screens.Edit.Stages.Classic.Config; 5 | 6 | namespace osu.Game.Rulesets.Karaoke.Tests.Screens.Edit.Stages.Classic; 7 | 8 | public partial class TestSceneConfigScreen : ClassicStageScreenTestScene 9 | { 10 | protected override ConfigScreen CreateEditorScreen() => new(); 11 | } 12 | -------------------------------------------------------------------------------- /osu.Game.Rulesets.Karaoke.Tests/Screens/Settings/TestSceneKaraokeSettings.cs: -------------------------------------------------------------------------------- 1 | // Copyright (c) andy840119 . Licensed under the GPL Licence. 2 | // See the LICENCE file in the repository root for full licence text. 3 | 4 | using NUnit.Framework; 5 | using osu.Game.Rulesets.Karaoke.Screens.Settings; 6 | 7 | namespace osu.Game.Rulesets.Karaoke.Tests.Screens.Settings; 8 | 9 | [TestFixture] 10 | public partial class TestSceneKaraokeSettings : ScreenTestScene 11 | { 12 | protected override KaraokeSettings CreateScreen() => new(); 13 | } 14 | -------------------------------------------------------------------------------- /osu.Game.Rulesets.Karaoke.Tests/Screens/Skin/TestSceneConfigScreen.cs: -------------------------------------------------------------------------------- 1 | // Copyright (c) andy840119 . Licensed under the GPL Licence. 2 | // See the LICENCE file in the repository root for full licence text. 3 | 4 | using osu.Game.Rulesets.Karaoke.Screens.Skin.Config; 5 | using osu.Game.Rulesets.Karaoke.Skinning; 6 | 7 | namespace osu.Game.Rulesets.Karaoke.Tests.Screens.Skin; 8 | 9 | public partial class TestSceneConfigScreen : KaraokeSkinEditorScreenTestScene 10 | { 11 | protected override ConfigScreen CreateEditorScreen(KaraokeSkin karaokeSkin) => new(karaokeSkin); 12 | } 13 | -------------------------------------------------------------------------------- /osu.Game.Rulesets.Karaoke.Tests/Screens/Skin/TestSceneStyleScreen.cs: -------------------------------------------------------------------------------- 1 | // Copyright (c) andy840119 . Licensed under the GPL Licence. 2 | // See the LICENCE file in the repository root for full licence text. 3 | 4 | using NUnit.Framework; 5 | using osu.Game.Rulesets.Karaoke.Screens.Skin.Style; 6 | using osu.Game.Rulesets.Karaoke.Skinning; 7 | 8 | namespace osu.Game.Rulesets.Karaoke.Tests.Screens.Skin; 9 | 10 | [TestFixture] 11 | [Ignore("Shader broken.")] 12 | public partial class TestSceneStyleScreen : KaraokeSkinEditorScreenTestScene 13 | { 14 | protected override StyleScreen CreateEditorScreen(KaraokeSkin karaokeSkin) => new(karaokeSkin); 15 | } 16 | -------------------------------------------------------------------------------- /osu.Game.Rulesets.Karaoke.Tests/Skinning/KaraokeSkinnableTestScene.cs: -------------------------------------------------------------------------------- 1 | // Copyright (c) andy840119 . Licensed under the GPL Licence. 2 | // See the LICENCE file in the repository root for full licence text. 3 | 4 | using osu.Game.Beatmaps; 5 | using osu.Game.Rulesets.Karaoke.Tests.Beatmaps; 6 | using osu.Game.Tests.Visual; 7 | 8 | namespace osu.Game.Rulesets.Karaoke.Tests.Skinning; 9 | 10 | public abstract partial class KaraokeSkinnableTestScene : SkinnableTestScene 11 | { 12 | protected override IBeatmap CreateBeatmap(RulesetInfo ruleset) => new TestKaraokeBeatmap(ruleset); 13 | 14 | protected override Ruleset CreateRulesetForSkinProvider() => new KaraokeRuleset(); 15 | } 16 | -------------------------------------------------------------------------------- /osu.Game.Rulesets.Karaoke.Tests/Skinning/TestSceneNotePlayfield.cs: -------------------------------------------------------------------------------- 1 | // Copyright (c) andy840119 . Licensed under the GPL Licence. 2 | // See the LICENCE file in the repository root for full licence text. 3 | 4 | using osu.Framework.Allocation; 5 | using osu.Game.Rulesets.Karaoke.UI; 6 | 7 | namespace osu.Game.Rulesets.Karaoke.Tests.Skinning; 8 | 9 | public partial class TestSceneNotePlayfield : KaraokeSkinnableColumnTestScene 10 | { 11 | [BackgroundDependencyLoader] 12 | private void load() 13 | { 14 | SetContents(_ => new KaraokeInputManager(new KaraokeRuleset().RulesetInfo) 15 | { 16 | Child = new NotePlayfield(COLUMNS), 17 | }); 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /osu.Game.Rulesets.Karaoke.Tests/TestSceneOsuGame.cs: -------------------------------------------------------------------------------- 1 | // Copyright (c) andy840119 . Licensed under the GPL Licence. 2 | // See the LICENCE file in the repository root for full licence text. 3 | 4 | using osu.Framework.Allocation; 5 | using osu.Framework.Graphics; 6 | using osu.Framework.Graphics.Shapes; 7 | using osu.Game.Tests.Visual; 8 | using osuTK.Graphics; 9 | 10 | namespace osu.Game.Rulesets.Karaoke.Tests; 11 | 12 | public partial class TestSceneOsuGame : OsuTestScene 13 | { 14 | [BackgroundDependencyLoader] 15 | private void load() 16 | { 17 | Children = new Drawable[] 18 | { 19 | new Box 20 | { 21 | RelativeSizeAxes = Axes.Both, 22 | Colour = Color4.Black, 23 | }, 24 | }; 25 | 26 | AddGame(new OsuGame()); 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /osu.Game.Rulesets.Karaoke.Tests/UI/TestSceneKaraokePlayer.cs: -------------------------------------------------------------------------------- 1 | // Copyright (c) andy840119 . Licensed under the GPL Licence. 2 | // See the LICENCE file in the repository root for full licence text. 3 | 4 | using NUnit.Framework; 5 | using osu.Game.Beatmaps; 6 | using osu.Game.Rulesets.Karaoke.Tests.Beatmaps; 7 | using osu.Game.Tests.Visual; 8 | 9 | namespace osu.Game.Rulesets.Karaoke.Tests.UI; 10 | 11 | [TestFixture] 12 | public partial class TestSceneKaraokePlayer : PlayerTestScene 13 | { 14 | protected override IBeatmap CreateBeatmap(RulesetInfo ruleset) => new TestKaraokeBeatmap(ruleset); 15 | 16 | protected override Ruleset CreatePlayerRuleset() => new KaraokeRuleset(); 17 | } 18 | -------------------------------------------------------------------------------- /osu.Game.Rulesets.Karaoke.Tests/UI/TestSceneRulesetIcon.cs: -------------------------------------------------------------------------------- 1 | // Copyright (c) andy840119 . Licensed under the GPL Licence. 2 | // See the LICENCE file in the repository root for full licence text. 3 | 4 | using NUnit.Framework; 5 | using osu.Framework.Graphics; 6 | using osu.Game.Graphics.Containers; 7 | using osu.Game.Tests.Visual; 8 | using osuTK; 9 | 10 | namespace osu.Game.Rulesets.Karaoke.Tests.UI; 11 | 12 | [TestFixture] 13 | public partial class TestSceneRulesetIcon : OsuTestScene 14 | { 15 | public TestSceneRulesetIcon() 16 | { 17 | Child = new ConstrainedIconContainer 18 | { 19 | Anchor = Anchor.Centre, 20 | Origin = Anchor.Centre, 21 | Icon = new KaraokeRuleset().CreateIcon(), 22 | Size = new Vector2(40), 23 | }; 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /osu.Game.Rulesets.Karaoke.Tests/Utils/FontUtilsTest.cs: -------------------------------------------------------------------------------- 1 | // Copyright (c) andy840119 . Licensed under the GPL Licence. 2 | // See the LICENCE file in the repository root for full licence text. 3 | 4 | using NUnit.Framework; 5 | using osu.Game.Rulesets.Karaoke.Utils; 6 | 7 | namespace osu.Game.Rulesets.Karaoke.Tests.Utils; 8 | 9 | [TestFixture] 10 | public class FontUtilsTest 11 | { 12 | [TestCase(10, "10 px")] 13 | [TestCase(10.5f, "10.5 px")] 14 | [TestCase(-3, "-3 px")] 15 | public void TestGetText(float font, string expected) 16 | { 17 | string actual = FontUtils.GetText(font); 18 | Assert.AreEqual(expected, actual); 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /osu.Game.Rulesets.Karaoke.Tests/VisualTestRunner.cs: -------------------------------------------------------------------------------- 1 | // Copyright (c) andy840119 . Licensed under the GPL Licence. 2 | // See the LICENCE file in the repository root for full licence text. 3 | 4 | using System; 5 | using osu.Framework; 6 | 7 | namespace osu.Game.Rulesets.Karaoke.Tests; 8 | 9 | public static class VisualTestRunner 10 | { 11 | [STAThread] 12 | public static int Main(string[] args) 13 | { 14 | using var host = Host.GetSuitableDesktopHost("karaoke-visual-test-runner"); 15 | host.Run(new KaraokeTestBrowser()); 16 | 17 | return 0; 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /osu.Game.Rulesets.Karaoke/Beatmaps/Formats/KaraokeJsonBeatmapEncoder.cs: -------------------------------------------------------------------------------- 1 | // Copyright (c) andy840119 . Licensed under the GPL Licence. 2 | // See the LICENCE file in the repository root for full licence text. 3 | 4 | using Newtonsoft.Json; 5 | using osu.Game.Beatmaps; 6 | using osu.Game.Rulesets.Karaoke.IO.Serialization; 7 | 8 | namespace osu.Game.Rulesets.Karaoke.Beatmaps.Formats; 9 | 10 | public class KaraokeJsonBeatmapEncoder 11 | { 12 | public string Encode(Beatmap output) 13 | { 14 | var globalSetting = KaraokeJsonSerializableExtensions.CreateGlobalSettings(); 15 | string json = JsonConvert.SerializeObject(output, globalSetting); 16 | return "// karaoke json file format v1" + '\n' + json; 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /osu.Game.Rulesets.Karaoke/Beatmaps/IKaraokeBeatmapResourcesProvider.cs: -------------------------------------------------------------------------------- 1 | // Copyright (c) andy840119 . Licensed under the GPL Licence. 2 | // See the LICENCE file in the repository root for full licence text. 3 | 4 | using osu.Framework.Graphics.Textures; 5 | using osu.Game.Rulesets.Karaoke.Beatmaps.Metadatas.Types; 6 | 7 | namespace osu.Game.Rulesets.Karaoke.Beatmaps; 8 | 9 | public interface IKaraokeBeatmapResourcesProvider 10 | { 11 | Texture? GetSingerAvatar(ISinger singer); 12 | } 13 | -------------------------------------------------------------------------------- /osu.Game.Rulesets.Karaoke/Beatmaps/Metadatas/NoteInfo.cs: -------------------------------------------------------------------------------- 1 | // Copyright (c) andy840119 . Licensed under the GPL Licence. 2 | // See the LICENCE file in the repository root for full licence text. 3 | 4 | using osu.Game.Rulesets.Karaoke.Objects; 5 | 6 | namespace osu.Game.Rulesets.Karaoke.Beatmaps.Metadatas; 7 | 8 | public class NoteInfo 9 | { 10 | public int Columns { get; set; } = 9; 11 | 12 | public Tone MaxTone => 13 | new() 14 | { 15 | Scale = Columns / 2, 16 | }; 17 | 18 | public Tone MinTone => -MaxTone; 19 | } 20 | -------------------------------------------------------------------------------- /osu.Game.Rulesets.Karaoke/Beatmaps/Metadatas/Types/ISinger.cs: -------------------------------------------------------------------------------- 1 | // Copyright (c) andy840119 . Licensed under the GPL Licence. 2 | // See the LICENCE file in the repository root for full licence text. 3 | 4 | using osu.Game.Rulesets.Karaoke.Objects.Types; 5 | 6 | namespace osu.Game.Rulesets.Karaoke.Beatmaps.Metadatas.Types; 7 | 8 | public interface ISinger : IHasOrder, IHasPrimaryKey 9 | { 10 | float Hue { get; } 11 | } 12 | -------------------------------------------------------------------------------- /osu.Game.Rulesets.Karaoke/Configuration/KaraokeRulesetEditConfigManager.cs: -------------------------------------------------------------------------------- 1 | // Copyright (c) andy840119 . Licensed under the GPL Licence. 2 | // See the LICENCE file in the repository root for full licence text. 3 | 4 | using osu.Game.Configuration; 5 | 6 | namespace osu.Game.Rulesets.Karaoke.Configuration; 7 | 8 | public class KaraokeRulesetEditConfigManager : InMemoryConfigManager; 9 | 10 | public enum KaraokeRulesetEditSetting; 11 | -------------------------------------------------------------------------------- /osu.Game.Rulesets.Karaoke/Difficulty/Preprocessing/KaraokeDifficultyHitObject.cs: -------------------------------------------------------------------------------- 1 | // Copyright (c) andy840119 . Licensed under the GPL Licence. 2 | // See the LICENCE file in the repository root for full licence text. 3 | 4 | using System.Collections.Generic; 5 | using osu.Game.Rulesets.Difficulty.Preprocessing; 6 | using osu.Game.Rulesets.Karaoke.Objects; 7 | using osu.Game.Rulesets.Objects; 8 | 9 | namespace osu.Game.Rulesets.Karaoke.Difficulty.Preprocessing; 10 | 11 | public class KaraokeDifficultyHitObject : DifficultyHitObject 12 | { 13 | public new Note BaseObject => (Note)base.BaseObject; 14 | 15 | public KaraokeDifficultyHitObject(HitObject hitObject, HitObject lastObject, double clockRate, List objects, int index) 16 | : base(hitObject, lastObject, clockRate, objects, index) 17 | { 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /osu.Game.Rulesets.Karaoke/Edit/Blueprints/KaraokeSelectionBlueprint.cs: -------------------------------------------------------------------------------- 1 | // Copyright (c) andy840119 . Licensed under the GPL Licence. 2 | // See the LICENCE file in the repository root for full licence text. 3 | 4 | using osu.Framework.Graphics; 5 | using osu.Game.Rulesets.Edit; 6 | using osu.Game.Rulesets.Karaoke.Objects; 7 | 8 | namespace osu.Game.Rulesets.Karaoke.Edit.Blueprints; 9 | 10 | public partial class KaraokeSelectionBlueprint : HitObjectSelectionBlueprint 11 | where T : KaraokeHitObject 12 | { 13 | protected KaraokeSelectionBlueprint(T hitObject) 14 | : base(hitObject) 15 | { 16 | RelativeSizeAxes = Axes.None; 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /osu.Game.Rulesets.Karaoke/Edit/Blueprints/Lyrics/LyricSelectionBlueprint.cs: -------------------------------------------------------------------------------- 1 | // Copyright (c) andy840119 . Licensed under the GPL Licence. 2 | // See the LICENCE file in the repository root for full licence text. 3 | 4 | using osu.Game.Rulesets.Karaoke.Objects; 5 | 6 | namespace osu.Game.Rulesets.Karaoke.Edit.Blueprints.Lyrics; 7 | 8 | public partial class LyricSelectionBlueprint : KaraokeSelectionBlueprint 9 | { 10 | public LyricSelectionBlueprint(Lyric lyric) 11 | : base(lyric) 12 | { 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /osu.Game.Rulesets.Karaoke/Edit/ChangeHandlers/Beatmaps/IBeatmapPagesChangeHandler.cs: -------------------------------------------------------------------------------- 1 | // Copyright (c) andy840119 . Licensed under the GPL Licence. 2 | // See the LICENCE file in the repository root for full licence text. 3 | 4 | using System.Collections.Generic; 5 | using osu.Framework.Localisation; 6 | using osu.Game.Rulesets.Karaoke.Beatmaps.Metadatas; 7 | 8 | namespace osu.Game.Rulesets.Karaoke.Edit.ChangeHandlers.Beatmaps; 9 | 10 | public interface IBeatmapPagesChangeHandler : IAutoGenerateChangeHandler 11 | { 12 | LocalisableString? GetGeneratorNotSupportedMessage(); 13 | 14 | void Add(Page page); 15 | 16 | void Remove(Page page); 17 | 18 | void RemoveRange(IEnumerable pages); 19 | 20 | void ShiftingPageTime(IEnumerable pages, double offset); 21 | } 22 | -------------------------------------------------------------------------------- /osu.Game.Rulesets.Karaoke/Edit/ChangeHandlers/Beatmaps/IBeatmapTranslationsChangeHandler.cs: -------------------------------------------------------------------------------- 1 | // Copyright (c) andy840119 . Licensed under the GPL Licence. 2 | // See the LICENCE file in the repository root for full licence text. 3 | 4 | using System.Globalization; 5 | using osu.Framework.Bindables; 6 | 7 | namespace osu.Game.Rulesets.Karaoke.Edit.ChangeHandlers.Beatmaps; 8 | 9 | public interface IBeatmapTranslationsChangeHandler 10 | { 11 | IBindableList Languages { get; } 12 | 13 | void Add(CultureInfo culture); 14 | 15 | void Remove(CultureInfo culture); 16 | 17 | bool IsLanguageContainsTranslation(CultureInfo cultureInfo); 18 | } 19 | -------------------------------------------------------------------------------- /osu.Game.Rulesets.Karaoke/Edit/ChangeHandlers/ChangeForbiddenException.cs: -------------------------------------------------------------------------------- 1 | // Copyright (c) andy840119 . Licensed under the GPL Licence. 2 | // See the LICENCE file in the repository root for full licence text. 3 | 4 | using System; 5 | 6 | namespace osu.Game.Rulesets.Karaoke.Edit.ChangeHandlers; 7 | 8 | public class ChangeForbiddenException : InvalidOperationException 9 | { 10 | public ChangeForbiddenException(string message) 11 | : base(message) 12 | { 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /osu.Game.Rulesets.Karaoke/Edit/ChangeHandlers/HitObjectsChangeHandler.cs: -------------------------------------------------------------------------------- 1 | // Copyright (c) andy840119 . Licensed under the GPL Licence. 2 | // See the LICENCE file in the repository root for full licence text. 3 | 4 | using osu.Game.Rulesets.Objects; 5 | 6 | namespace osu.Game.Rulesets.Karaoke.Edit.ChangeHandlers; 7 | 8 | public abstract partial class HitObjectsChangeHandler : HitObjectChangeHandler where THitObject : HitObject; 9 | -------------------------------------------------------------------------------- /osu.Game.Rulesets.Karaoke/Edit/ChangeHandlers/IHitObjectPropertyChangeHandler.cs: -------------------------------------------------------------------------------- 1 | // Copyright (c) andy840119 . Licensed under the GPL Licence. 2 | // See the LICENCE file in the repository root for full licence text. 3 | 4 | namespace osu.Game.Rulesets.Karaoke.Edit.ChangeHandlers; 5 | 6 | public interface IHitObjectPropertyChangeHandler 7 | { 8 | bool IsSelectionsLocked(); 9 | } 10 | -------------------------------------------------------------------------------- /osu.Game.Rulesets.Karaoke/Edit/ChangeHandlers/IImportBeatmapChangeHandler.cs: -------------------------------------------------------------------------------- 1 | // Copyright (c) andy840119 . Licensed under the GPL Licence. 2 | // See the LICENCE file in the repository root for full licence text. 3 | 4 | using osu.Game.Beatmaps; 5 | 6 | namespace osu.Game.Rulesets.Karaoke.Edit.ChangeHandlers; 7 | 8 | public interface IImportBeatmapChangeHandler 9 | { 10 | void Import(IBeatmap newBeatmap); 11 | } 12 | -------------------------------------------------------------------------------- /osu.Game.Rulesets.Karaoke/Edit/ChangeHandlers/ILockChangeHandler.cs: -------------------------------------------------------------------------------- 1 | // Copyright (c) andy840119 . Licensed under the GPL Licence. 2 | // See the LICENCE file in the repository root for full licence text. 3 | 4 | using osu.Game.Rulesets.Karaoke.Objects.Types; 5 | 6 | namespace osu.Game.Rulesets.Karaoke.Edit.ChangeHandlers; 7 | 8 | public interface ILockChangeHandler : IHitObjectPropertyChangeHandler 9 | { 10 | void Lock(LockState lockState); 11 | 12 | void Unlock(); 13 | } 14 | -------------------------------------------------------------------------------- /osu.Game.Rulesets.Karaoke/Edit/ChangeHandlers/Lyrics/ILyricLanguageChangeHandler.cs: -------------------------------------------------------------------------------- 1 | // Copyright (c) andy840119 . Licensed under the GPL Licence. 2 | // See the LICENCE file in the repository root for full licence text. 3 | 4 | using System.Globalization; 5 | 6 | namespace osu.Game.Rulesets.Karaoke.Edit.ChangeHandlers.Lyrics; 7 | 8 | public interface ILyricLanguageChangeHandler : ILyricPropertyChangeHandler 9 | { 10 | void SetLanguage(CultureInfo? language); 11 | } 12 | -------------------------------------------------------------------------------- /osu.Game.Rulesets.Karaoke/Edit/ChangeHandlers/Lyrics/ILyricListPropertyChangeHandler.cs: -------------------------------------------------------------------------------- 1 | // Copyright (c) andy840119 . Licensed under the GPL Licence. 2 | // See the LICENCE file in the repository root for full licence text. 3 | 4 | using System.Collections.Generic; 5 | 6 | namespace osu.Game.Rulesets.Karaoke.Edit.ChangeHandlers.Lyrics; 7 | 8 | public interface ILyricListPropertyChangeHandler : ILyricPropertyChangeHandler 9 | { 10 | void Add(TItem item); 11 | 12 | void AddRange(IEnumerable items); 13 | 14 | void Remove(TItem item); 15 | 16 | void RemoveRange(IEnumerable items); 17 | } 18 | -------------------------------------------------------------------------------- /osu.Game.Rulesets.Karaoke/Edit/ChangeHandlers/Lyrics/ILyricPropertyChangeHandler.cs: -------------------------------------------------------------------------------- 1 | // Copyright (c) andy840119 . Licensed under the GPL Licence. 2 | // See the LICENCE file in the repository root for full licence text. 3 | 4 | namespace osu.Game.Rulesets.Karaoke.Edit.ChangeHandlers.Lyrics; 5 | 6 | public interface ILyricPropertyChangeHandler : IHitObjectPropertyChangeHandler; 7 | -------------------------------------------------------------------------------- /osu.Game.Rulesets.Karaoke/Edit/ChangeHandlers/Lyrics/ILyricReferenceChangeHandler.cs: -------------------------------------------------------------------------------- 1 | // Copyright (c) andy840119 . Licensed under the GPL Licence. 2 | // See the LICENCE file in the repository root for full licence text. 3 | 4 | using System; 5 | using osu.Game.Rulesets.Karaoke.Objects; 6 | using osu.Game.Rulesets.Karaoke.Objects.Properties; 7 | 8 | namespace osu.Game.Rulesets.Karaoke.Edit.ChangeHandlers.Lyrics; 9 | 10 | public interface ILyricReferenceChangeHandler : ILyricPropertyChangeHandler 11 | { 12 | void UpdateReferenceLyric(Lyric? referenceLyric); 13 | 14 | void SwitchToReferenceLyricConfig(); 15 | 16 | void SwitchToSyncLyricConfig(); 17 | 18 | void AdjustLyricConfig(Action action) where TConfig : IReferenceLyricPropertyConfig; 19 | } 20 | -------------------------------------------------------------------------------- /osu.Game.Rulesets.Karaoke/Edit/ChangeHandlers/Lyrics/ILyricRubyTagsChangeHandler.cs: -------------------------------------------------------------------------------- 1 | // Copyright (c) andy840119 . Licensed under the GPL Licence. 2 | // See the LICENCE file in the repository root for full licence text. 3 | 4 | using System.Collections.Generic; 5 | using osu.Game.Rulesets.Karaoke.Objects; 6 | 7 | namespace osu.Game.Rulesets.Karaoke.Edit.ChangeHandlers.Lyrics; 8 | 9 | public interface ILyricRubyTagsChangeHandler : ILyricListPropertyChangeHandler 10 | { 11 | void SetIndex(RubyTag rubyTag, int? startIndex, int? endIndex); 12 | 13 | void ShiftingIndex(IEnumerable rubyTags, int offset); 14 | 15 | void SetText(RubyTag rubyTag, string text); 16 | } 17 | -------------------------------------------------------------------------------- /osu.Game.Rulesets.Karaoke/Edit/ChangeHandlers/Lyrics/ILyricSingerChangeHandler.cs: -------------------------------------------------------------------------------- 1 | // Copyright (c) andy840119 . Licensed under the GPL Licence. 2 | // See the LICENCE file in the repository root for full licence text. 3 | 4 | using osu.Game.Rulesets.Karaoke.Beatmaps.Metadatas.Types; 5 | 6 | namespace osu.Game.Rulesets.Karaoke.Edit.ChangeHandlers.Lyrics; 7 | 8 | public interface ILyricSingerChangeHandler : ILyricListPropertyChangeHandler 9 | { 10 | void Clear(); 11 | } 12 | -------------------------------------------------------------------------------- /osu.Game.Rulesets.Karaoke/Edit/ChangeHandlers/Lyrics/ILyricTextChangeHandler.cs: -------------------------------------------------------------------------------- 1 | // Copyright (c) andy840119 . Licensed under the GPL Licence. 2 | // See the LICENCE file in the repository root for full licence text. 3 | 4 | namespace osu.Game.Rulesets.Karaoke.Edit.ChangeHandlers.Lyrics; 5 | 6 | public interface ILyricTextChangeHandler : ILyricPropertyChangeHandler 7 | { 8 | void InsertText(int charGap, string text); 9 | 10 | void DeleteLyricText(int charGap, int count = 1); 11 | } 12 | -------------------------------------------------------------------------------- /osu.Game.Rulesets.Karaoke/Edit/ChangeHandlers/Lyrics/ILyricTranslationChangeHandler.cs: -------------------------------------------------------------------------------- 1 | // Copyright (c) andy840119 . Licensed under the GPL Licence. 2 | // See the LICENCE file in the repository root for full licence text. 3 | 4 | using System.Globalization; 5 | 6 | namespace osu.Game.Rulesets.Karaoke.Edit.ChangeHandlers.Lyrics; 7 | 8 | public interface ILyricTranslationChangeHandler : ILyricPropertyChangeHandler 9 | { 10 | void UpdateTranslation(CultureInfo cultureInfo, string translation); 11 | } 12 | -------------------------------------------------------------------------------- /osu.Game.Rulesets.Karaoke/Edit/ChangeHandlers/Lyrics/ILyricsChangeHandler.cs: -------------------------------------------------------------------------------- 1 | // Copyright (c) andy840119 . Licensed under the GPL Licence. 2 | // See the LICENCE file in the repository root for full licence text. 3 | 4 | using System.Collections.Generic; 5 | using osu.Game.Rulesets.Karaoke.Objects; 6 | 7 | namespace osu.Game.Rulesets.Karaoke.Edit.ChangeHandlers.Lyrics; 8 | 9 | public interface ILyricsChangeHandler 10 | { 11 | void Split(int index); 12 | 13 | void Combine(); 14 | 15 | void CreateAtPosition(); 16 | 17 | void CreateAtLast(); 18 | 19 | void AddBelowToSelection(Lyric newLyric); 20 | 21 | void AddRangeBelowToSelection(IEnumerable newLyrics); 22 | 23 | void Remove(); 24 | 25 | void ChangeOrder(int newOrder); 26 | } 27 | -------------------------------------------------------------------------------- /osu.Game.Rulesets.Karaoke/Edit/ChangeHandlers/Lyrics/LyricPropertyChangeHandler.cs: -------------------------------------------------------------------------------- 1 | // Copyright (c) andy840119 . Licensed under the GPL Licence. 2 | // See the LICENCE file in the repository root for full licence text. 3 | 4 | using osu.Game.Rulesets.Karaoke.Objects; 5 | 6 | namespace osu.Game.Rulesets.Karaoke.Edit.ChangeHandlers.Lyrics; 7 | 8 | public abstract partial class LyricPropertyChangeHandler : HitObjectPropertyChangeHandler, ILyricPropertyChangeHandler; 9 | -------------------------------------------------------------------------------- /osu.Game.Rulesets.Karaoke/Edit/ChangeHandlers/Notes/INotePropertyChangeHandler.cs: -------------------------------------------------------------------------------- 1 | // Copyright (c) andy840119 . Licensed under the GPL Licence. 2 | // See the LICENCE file in the repository root for full licence text. 3 | 4 | using osu.Game.Rulesets.Karaoke.Objects; 5 | 6 | namespace osu.Game.Rulesets.Karaoke.Edit.ChangeHandlers.Notes; 7 | 8 | public interface INotePropertyChangeHandler : IHitObjectPropertyChangeHandler 9 | { 10 | void ChangeText(string text); 11 | 12 | void ChangeRubyText(string? ruby); 13 | 14 | void ChangeDisplayState(bool display); 15 | 16 | void OffsetTone(Tone offset); 17 | } 18 | -------------------------------------------------------------------------------- /osu.Game.Rulesets.Karaoke/Edit/ChangeHandlers/Notes/INotesChangeHandler.cs: -------------------------------------------------------------------------------- 1 | // Copyright (c) andy840119 . Licensed under the GPL Licence. 2 | // See the LICENCE file in the repository root for full licence text. 3 | 4 | namespace osu.Game.Rulesets.Karaoke.Edit.ChangeHandlers.Notes; 5 | 6 | public interface INotesChangeHandler 7 | { 8 | void Split(float percentage = 0.5f); 9 | 10 | void Combine(); 11 | 12 | void Clear(); 13 | } 14 | -------------------------------------------------------------------------------- /osu.Game.Rulesets.Karaoke/Edit/ChangeHandlers/Stages/IStagesChangeHandler.cs: -------------------------------------------------------------------------------- 1 | // Copyright (c) andy840119 . Licensed under the GPL Licence. 2 | // See the LICENCE file in the repository root for full licence text. 3 | 4 | using osu.Framework.Localisation; 5 | using osu.Game.Rulesets.Karaoke.Stages.Infos; 6 | 7 | namespace osu.Game.Rulesets.Karaoke.Edit.ChangeHandlers.Stages; 8 | 9 | public interface IStagesChangeHandler : IAutoGenerateChangeHandler 10 | { 11 | LocalisableString? GetGeneratorNotSupportedMessage() where TStageInfo : StageInfo; 12 | 13 | void Remove() where TStageInfo : StageInfo; 14 | } 15 | -------------------------------------------------------------------------------- /osu.Game.Rulesets.Karaoke/Edit/Checks/Issues/BeatmapPageIssue.cs: -------------------------------------------------------------------------------- 1 | // Copyright (c) andy840119 . Licensed under the GPL Licence. 2 | // See the LICENCE file in the repository root for full licence text. 3 | 4 | using System; 5 | using osu.Game.Rulesets.Edit.Checks.Components; 6 | using osu.Game.Rulesets.Karaoke.Beatmaps.Metadatas; 7 | 8 | namespace osu.Game.Rulesets.Karaoke.Edit.Checks.Issues; 9 | 10 | public class BeatmapPageIssue : Issue 11 | { 12 | public Page StartPage; 13 | 14 | public Page EndPage; 15 | 16 | public BeatmapPageIssue(Page startPage, Page endPage, IssueTemplate template, params object[] args) 17 | : base(template, args) 18 | { 19 | StartPage = startPage; 20 | EndPage = endPage; 21 | 22 | Time = Math.Min(StartPage.Time, EndPage.Time); 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /osu.Game.Rulesets.Karaoke/Edit/Checks/Issues/LyricIssue.cs: -------------------------------------------------------------------------------- 1 | // Copyright (c) andy840119 . Licensed under the GPL Licence. 2 | // See the LICENCE file in the repository root for full licence text. 3 | 4 | using osu.Game.Rulesets.Edit.Checks.Components; 5 | using osu.Game.Rulesets.Karaoke.Objects; 6 | 7 | namespace osu.Game.Rulesets.Karaoke.Edit.Checks.Issues; 8 | 9 | public class LyricIssue : Issue 10 | { 11 | public Lyric Lyric; 12 | 13 | public LyricIssue(Lyric lyric, IssueTemplate template, params object[] args) 14 | : base(lyric, template, args) 15 | { 16 | Lyric = lyric; 17 | 18 | Time = Lyric.TimeValid ? Lyric.StartTime : null; 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /osu.Game.Rulesets.Karaoke/Edit/Checks/Issues/LyricRubyTagIssue.cs: -------------------------------------------------------------------------------- 1 | // Copyright (c) andy840119 . Licensed under the GPL Licence. 2 | // See the LICENCE file in the repository root for full licence text. 3 | 4 | using osu.Game.Rulesets.Edit.Checks.Components; 5 | using osu.Game.Rulesets.Karaoke.Objects; 6 | 7 | namespace osu.Game.Rulesets.Karaoke.Edit.Checks.Issues; 8 | 9 | public class LyricRubyTagIssue : LyricIssue 10 | { 11 | public readonly RubyTag RubyTag; 12 | 13 | public LyricRubyTagIssue(Lyric lyric, IssueTemplate template, RubyTag rubyTag, params object[] args) 14 | : base(lyric, template, args) 15 | { 16 | RubyTag = rubyTag; 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /osu.Game.Rulesets.Karaoke/Edit/Checks/Issues/LyricTimeTagIssue.cs: -------------------------------------------------------------------------------- 1 | // Copyright (c) andy840119 . Licensed under the GPL Licence. 2 | // See the LICENCE file in the repository root for full licence text. 3 | 4 | using osu.Game.Rulesets.Edit.Checks.Components; 5 | using osu.Game.Rulesets.Karaoke.Objects; 6 | 7 | namespace osu.Game.Rulesets.Karaoke.Edit.Checks.Issues; 8 | 9 | public class LyricTimeTagIssue : LyricIssue 10 | { 11 | public readonly TimeTag TimeTag; 12 | 13 | public LyricTimeTagIssue(Lyric lyric, IssueTemplate template, TimeTag timeTag, params object[] args) 14 | : base(lyric, template, args) 15 | { 16 | TimeTag = timeTag; 17 | 18 | if (lyric.TimeValid) 19 | { 20 | Time = TimeTag.Time ?? Lyric.StartTime; 21 | } 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /osu.Game.Rulesets.Karaoke/Edit/Checks/Issues/NoteIssue.cs: -------------------------------------------------------------------------------- 1 | // Copyright (c) andy840119 . Licensed under the GPL Licence. 2 | // See the LICENCE file in the repository root for full licence text. 3 | 4 | using osu.Game.Rulesets.Edit.Checks.Components; 5 | using osu.Game.Rulesets.Karaoke.Objects; 6 | 7 | namespace osu.Game.Rulesets.Karaoke.Edit.Checks.Issues; 8 | 9 | public class NoteIssue : Issue 10 | { 11 | public Note Note; 12 | 13 | public NoteIssue(Note note, IssueTemplate template, params object[] args) 14 | : base(note, template, args) 15 | { 16 | Note = note; 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /osu.Game.Rulesets.Karaoke/Edit/Components/Menus/KaraokeEditorMenu.cs: -------------------------------------------------------------------------------- 1 | // Copyright (c) andy840119 . Licensed under the GPL Licence. 2 | // See the LICENCE file in the repository root for full licence text. 3 | 4 | using osu.Framework.Graphics.UserInterface; 5 | using osu.Framework.Screens; 6 | using osu.Game.Rulesets.Karaoke.Screens.Edit.Beatmaps; 7 | 8 | namespace osu.Game.Rulesets.Karaoke.Edit.Components.Menus; 9 | 10 | public class KaraokeEditorMenu : MenuItem 11 | { 12 | public KaraokeEditorMenu(IScreen screen, string text) 13 | : base(text, () => openKaraokeEditor(screen)) 14 | { 15 | } 16 | 17 | private static void openKaraokeEditor(IScreen screen) 18 | { 19 | screen.Push(new KaraokeBeatmapEditor()); 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /osu.Game.Rulesets.Karaoke/Edit/Components/Menus/KaraokeSkinEditorMenu.cs: -------------------------------------------------------------------------------- 1 | // Copyright (c) andy840119 . Licensed under the GPL Licence. 2 | // See the LICENCE file in the repository root for full licence text. 3 | 4 | using osu.Framework.Graphics.UserInterface; 5 | using osu.Framework.Screens; 6 | using osu.Game.Rulesets.Karaoke.Screens.Skin; 7 | using osu.Game.Skinning; 8 | 9 | namespace osu.Game.Rulesets.Karaoke.Edit.Components.Menus; 10 | 11 | public class KaraokeSkinEditorMenu : MenuItem 12 | { 13 | public KaraokeSkinEditorMenu(IScreen screen, ISkin skin, string text) 14 | : base(text, () => openKaraokeSkin(screen, skin)) 15 | { 16 | } 17 | 18 | private static void openKaraokeSkin(IScreen screen, ISkin skin) 19 | { 20 | screen.Push(new KaraokeSkinEditor(skin)); 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /osu.Game.Rulesets.Karaoke/Edit/Generator/Beatmaps/BeatmapPropertyDetector.cs: -------------------------------------------------------------------------------- 1 | // Copyright (c) andy840119 . Licensed under the GPL Licence. 2 | // See the LICENCE file in the repository root for full licence text. 3 | 4 | using osu.Game.Rulesets.Karaoke.Beatmaps; 5 | 6 | namespace osu.Game.Rulesets.Karaoke.Edit.Generator.Beatmaps; 7 | 8 | /// 9 | /// Base interface of the detector. 10 | /// 11 | /// 12 | /// 13 | public abstract class BeatmapPropertyDetector : PropertyDetector 14 | where TConfig : GeneratorConfig, new() 15 | { 16 | protected BeatmapPropertyDetector(TConfig config) 17 | : base(config) 18 | { 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /osu.Game.Rulesets.Karaoke/Edit/Generator/Beatmaps/BeatmapPropertyGenerator.cs: -------------------------------------------------------------------------------- 1 | // Copyright (c) andy840119 . Licensed under the GPL Licence. 2 | // See the LICENCE file in the repository root for full licence text. 3 | 4 | using osu.Game.Rulesets.Karaoke.Beatmaps; 5 | 6 | namespace osu.Game.Rulesets.Karaoke.Edit.Generator.Beatmaps; 7 | 8 | /// 9 | /// Base interface of the auto-generator. 10 | /// 11 | /// 12 | /// 13 | public abstract class BeatmapPropertyGenerator : PropertyGenerator 14 | where TConfig : GeneratorConfig, new() 15 | { 16 | protected BeatmapPropertyGenerator(TConfig config) 17 | : base(config) 18 | { 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /osu.Game.Rulesets.Karaoke/Edit/Generator/DetectorNotSupportedException.cs: -------------------------------------------------------------------------------- 1 | // Copyright (c) andy840119 . Licensed under the GPL Licence. 2 | // See the LICENCE file in the repository root for full licence text. 3 | 4 | using System; 5 | 6 | namespace osu.Game.Rulesets.Karaoke.Edit.Generator; 7 | 8 | public class DetectorNotSupportedException : NotSupportedException 9 | { 10 | public DetectorNotSupportedException() 11 | : base("Cannot generate the property due to have some invalid fields, please make sure that run the CanDetect() first.") 12 | { 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /osu.Game.Rulesets.Karaoke/Edit/Generator/GeneratorConfig.cs: -------------------------------------------------------------------------------- 1 | // Copyright (c) andy840119 . Licensed under the GPL Licence. 2 | // See the LICENCE file in the repository root for full licence text. 3 | 4 | namespace osu.Game.Rulesets.Karaoke.Edit.Generator; 5 | 6 | public abstract class GeneratorConfig; 7 | -------------------------------------------------------------------------------- /osu.Game.Rulesets.Karaoke/Edit/Generator/GeneratorNotSupportedException.cs: -------------------------------------------------------------------------------- 1 | // Copyright (c) andy840119 . Licensed under the GPL Licence. 2 | // See the LICENCE file in the repository root for full licence text. 3 | 4 | using System; 5 | 6 | namespace osu.Game.Rulesets.Karaoke.Edit.Generator; 7 | 8 | public class GeneratorNotSupportedException : NotSupportedException 9 | { 10 | public GeneratorNotSupportedException() 11 | : base("Cannot generate the property due to have some invalid fields, please make sure that run the CanGenerate() first.") 12 | { 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /osu.Game.Rulesets.Karaoke/Edit/Generator/Lyrics/Language/LanguageDetectorConfig.cs: -------------------------------------------------------------------------------- 1 | // Copyright (c) andy840119 . Licensed under the GPL Licence. 2 | // See the LICENCE file in the repository root for full licence text. 3 | 4 | using System; 5 | using System.Globalization; 6 | using osu.Framework.Bindables; 7 | 8 | namespace osu.Game.Rulesets.Karaoke.Edit.Generator.Lyrics.Language; 9 | 10 | public class LanguageDetectorConfig : GeneratorConfig 11 | { 12 | [ConfigSource("Accept languages", "All accepted languages.")] 13 | public Bindable AcceptLanguages { get; } = new(Array.Empty()); 14 | } 15 | -------------------------------------------------------------------------------- /osu.Game.Rulesets.Karaoke/Edit/Generator/Lyrics/LyricPropertyDetector.cs: -------------------------------------------------------------------------------- 1 | // Copyright (c) andy840119 . Licensed under the GPL Licence. 2 | // See the LICENCE file in the repository root for full licence text. 3 | 4 | using osu.Game.Rulesets.Karaoke.Objects; 5 | 6 | namespace osu.Game.Rulesets.Karaoke.Edit.Generator.Lyrics; 7 | 8 | /// 9 | /// Base interface of the detector. 10 | /// 11 | /// 12 | /// 13 | public abstract class LyricPropertyDetector : PropertyDetector 14 | where TConfig : GeneratorConfig, new() 15 | { 16 | protected LyricPropertyDetector(TConfig config) 17 | : base(config) 18 | { 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /osu.Game.Rulesets.Karaoke/Edit/Generator/Lyrics/LyricPropertyGenerator.cs: -------------------------------------------------------------------------------- 1 | // Copyright (c) andy840119 . Licensed under the GPL Licence. 2 | // See the LICENCE file in the repository root for full licence text. 3 | 4 | using osu.Game.Rulesets.Karaoke.Objects; 5 | 6 | namespace osu.Game.Rulesets.Karaoke.Edit.Generator.Lyrics; 7 | 8 | /// 9 | /// Base interface of the auto-generator. 10 | /// 11 | /// 12 | /// 13 | public abstract class LyricPropertyGenerator : PropertyGenerator 14 | where TConfig : GeneratorConfig, new() 15 | { 16 | protected LyricPropertyGenerator(TConfig config) 17 | : base(config) 18 | { 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /osu.Game.Rulesets.Karaoke/Edit/Generator/Lyrics/Notes/NoteGeneratorConfig.cs: -------------------------------------------------------------------------------- 1 | // Copyright (c) andy840119 . Licensed under the GPL Licence. 2 | // See the LICENCE file in the repository root for full licence text. 3 | 4 | namespace osu.Game.Rulesets.Karaoke.Edit.Generator.Lyrics.Notes; 5 | 6 | public class NoteGeneratorConfig : GeneratorConfig; 7 | -------------------------------------------------------------------------------- /osu.Game.Rulesets.Karaoke/Edit/Generator/Lyrics/ReferenceLyric/ReferenceLyricDetectorConfig.cs: -------------------------------------------------------------------------------- 1 | // Copyright (c) andy840119 . Licensed under the GPL Licence. 2 | // See the LICENCE file in the repository root for full licence text. 3 | 4 | using osu.Framework.Bindables; 5 | 6 | namespace osu.Game.Rulesets.Karaoke.Edit.Generator.Lyrics.ReferenceLyric; 7 | 8 | public class ReferenceLyricDetectorConfig : GeneratorConfig 9 | { 10 | [ConfigSource("Ruby as Katakana", "Ruby as Katakana.")] 11 | public Bindable IgnorePrefixAndPostfixSymbol { get; } = new BindableBool(true); 12 | } 13 | -------------------------------------------------------------------------------- /osu.Game.Rulesets.Karaoke/Edit/Generator/Lyrics/Romanisation/Ja/JaRomanisationGeneratorConfig.cs: -------------------------------------------------------------------------------- 1 | // Copyright (c) andy840119 . Licensed under the GPL Licence. 2 | // See the LICENCE file in the repository root for full licence text. 3 | 4 | using osu.Framework.Bindables; 5 | 6 | namespace osu.Game.Rulesets.Karaoke.Edit.Generator.Lyrics.Romanisation.Ja; 7 | 8 | public class JaRomanisationGeneratorConfig : RomanisationGeneratorConfig 9 | { 10 | [ConfigSource("Uppercase", "Export romanisation with uppercase.")] 11 | public Bindable Uppercase { get; } = new BindableBool(); 12 | } 13 | -------------------------------------------------------------------------------- /osu.Game.Rulesets.Karaoke/Edit/Generator/Lyrics/Romanisation/RomanisationGenerateResult.cs: -------------------------------------------------------------------------------- 1 | // Copyright (c) andy840119 . Licensed under the GPL Licence. 2 | // See the LICENCE file in the repository root for full licence text. 3 | 4 | namespace osu.Game.Rulesets.Karaoke.Edit.Generator.Lyrics.Romanisation; 5 | 6 | public struct RomanisationGenerateResult 7 | { 8 | public bool FirstSyllable { get; set; } 9 | 10 | public string? RomanisedSyllable { get; set; } 11 | } 12 | -------------------------------------------------------------------------------- /osu.Game.Rulesets.Karaoke/Edit/Generator/Lyrics/Romanisation/RomanisationGeneratorConfig.cs: -------------------------------------------------------------------------------- 1 | // Copyright (c) andy840119 . Licensed under the GPL Licence. 2 | // See the LICENCE file in the repository root for full licence text. 3 | 4 | namespace osu.Game.Rulesets.Karaoke.Edit.Generator.Lyrics.Romanisation; 5 | 6 | public abstract class RomanisationGeneratorConfig : GeneratorConfig; 7 | -------------------------------------------------------------------------------- /osu.Game.Rulesets.Karaoke/Edit/Generator/Lyrics/RubyTags/RubyTagGeneratorConfig.cs: -------------------------------------------------------------------------------- 1 | // Copyright (c) andy840119 . Licensed under the GPL Licence. 2 | // See the LICENCE file in the repository root for full licence text. 3 | 4 | namespace osu.Game.Rulesets.Karaoke.Edit.Generator.Lyrics.RubyTags; 5 | 6 | public abstract class RubyTagGeneratorConfig : GeneratorConfig; 7 | -------------------------------------------------------------------------------- /osu.Game.Rulesets.Karaoke/Edit/Generator/Lyrics/TimeTags/Zh/ZhTimeTagGeneratorConfig.cs: -------------------------------------------------------------------------------- 1 | // Copyright (c) andy840119 . Licensed under the GPL Licence. 2 | // See the LICENCE file in the repository root for full licence text. 3 | 4 | namespace osu.Game.Rulesets.Karaoke.Edit.Generator.Lyrics.TimeTags.Zh; 5 | 6 | public class ZhTimeTagGeneratorConfig : TimeTagGeneratorConfig; 7 | -------------------------------------------------------------------------------- /osu.Game.Rulesets.Karaoke/Edit/Generator/Stages/Classic/ClassicLyricTimingInfoGeneratorConfig.cs: -------------------------------------------------------------------------------- 1 | // Copyright (c) andy840119 . Licensed under the GPL Licence. 2 | // See the LICENCE file in the repository root for full licence text. 3 | 4 | using osu.Framework.Bindables; 5 | 6 | namespace osu.Game.Rulesets.Karaoke.Edit.Generator.Stages.Classic; 7 | 8 | public class ClassicLyricTimingInfoGeneratorConfig : GeneratorConfig 9 | { 10 | /// 11 | /// How may lyric can be in the stage at the same time. 12 | /// 13 | [ConfigSource("Lyric amount", "How may lyric can be in the stage at the same time.")] 14 | public BindableInt LyricRowAmount { get; } = new(2) 15 | { 16 | MinValue = 2, 17 | MaxValue = 4, 18 | }; 19 | } 20 | -------------------------------------------------------------------------------- /osu.Game.Rulesets.Karaoke/Edit/Generator/Stages/Classic/ClassicStageInfoGeneratorConfig.cs: -------------------------------------------------------------------------------- 1 | // Copyright (c) andy840119 . Licensed under the GPL Licence. 2 | // See the LICENCE file in the repository root for full licence text. 3 | 4 | using osu.Framework.Bindables; 5 | 6 | namespace osu.Game.Rulesets.Karaoke.Edit.Generator.Stages.Classic; 7 | 8 | public class ClassicStageInfoGeneratorConfig : StageInfoGeneratorConfig 9 | { 10 | /// 11 | /// How may lyric can be in the stage at the same time. 12 | /// 13 | [ConfigSource("Lyric amount", "How may lyric can be in the stage at the same time.")] 14 | public BindableInt LyricRowAmount { get; } = new(2) 15 | { 16 | MinValue = 2, 17 | MaxValue = 4, 18 | }; 19 | } 20 | -------------------------------------------------------------------------------- /osu.Game.Rulesets.Karaoke/Edit/Generator/Stages/Preview/PreviewStageInfoGeneratorConfig.cs: -------------------------------------------------------------------------------- 1 | // Copyright (c) andy840119 . Licensed under the GPL Licence. 2 | // See the LICENCE file in the repository root for full licence text. 3 | 4 | namespace osu.Game.Rulesets.Karaoke.Edit.Generator.Stages.Preview; 5 | 6 | public class PreviewStageInfoGeneratorConfig : StageInfoGeneratorConfig; 7 | -------------------------------------------------------------------------------- /osu.Game.Rulesets.Karaoke/Edit/Generator/Stages/StageInfoGenerator.cs: -------------------------------------------------------------------------------- 1 | // Copyright (c) andy840119 . Licensed under the GPL Licence. 2 | // See the LICENCE file in the repository root for full licence text. 3 | 4 | using osu.Game.Rulesets.Karaoke.Beatmaps; 5 | using osu.Game.Rulesets.Karaoke.Stages.Infos; 6 | 7 | namespace osu.Game.Rulesets.Karaoke.Edit.Generator.Stages; 8 | 9 | public abstract class StageInfoGenerator : PropertyGenerator 10 | where TStageInfoConfig : StageInfoGeneratorConfig, new() 11 | { 12 | protected StageInfoGenerator(TStageInfoConfig config) 13 | : base(config) 14 | { 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /osu.Game.Rulesets.Karaoke/Edit/Generator/Stages/StageInfoGeneratorConfig.cs: -------------------------------------------------------------------------------- 1 | // Copyright (c) andy840119 . Licensed under the GPL Licence. 2 | // See the LICENCE file in the repository root for full licence text. 3 | 4 | namespace osu.Game.Rulesets.Karaoke.Edit.Generator.Stages; 5 | 6 | public class StageInfoGeneratorConfig : GeneratorConfig; 7 | -------------------------------------------------------------------------------- /osu.Game.Rulesets.Karaoke/Edit/Generator/Stages/StageInfoPropertyGenerator.cs: -------------------------------------------------------------------------------- 1 | // Copyright (c) andy840119 . Licensed under the GPL Licence. 2 | // See the LICENCE file in the repository root for full licence text. 3 | 4 | using osu.Game.Rulesets.Karaoke.Beatmaps; 5 | 6 | namespace osu.Game.Rulesets.Karaoke.Edit.Generator.Stages; 7 | 8 | /// 9 | /// Base interface of the auto-generator. 10 | /// 11 | /// 12 | /// 13 | public abstract class StageInfoPropertyGenerator : PropertyGenerator 14 | where TConfig : GeneratorConfig, new() 15 | { 16 | protected StageInfoPropertyGenerator(TConfig config) 17 | : base(config) 18 | { 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /osu.Game.Rulesets.Karaoke/Edit/KaraokeEditorPlayfield.cs: -------------------------------------------------------------------------------- 1 | // Copyright (c) andy840119 . Licensed under the GPL Licence. 2 | // See the LICENCE file in the repository root for full licence text. 3 | 4 | using osu.Game.Rulesets.Karaoke.UI; 5 | using osu.Game.Rulesets.Karaoke.UI.Scrolling; 6 | 7 | namespace osu.Game.Rulesets.Karaoke.Edit; 8 | 9 | public partial class KaraokeEditorPlayfield : KaraokePlayfield 10 | { 11 | protected override ScrollingNotePlayfield CreateNotePlayfield(int columns) 12 | => new EditorNotePlayfield(columns); 13 | } 14 | -------------------------------------------------------------------------------- /osu.Game.Rulesets.Karaoke/Edit/Utils/LockStateUtils.cs: -------------------------------------------------------------------------------- 1 | // Copyright (c) andy840119 . Licensed under the GPL Licence. 2 | // See the LICENCE file in the repository root for full licence text. 3 | 4 | using System.Collections.Generic; 5 | using System.Linq; 6 | using osu.Game.Rulesets.Karaoke.Objects.Types; 7 | 8 | namespace osu.Game.Rulesets.Karaoke.Edit.Utils; 9 | 10 | public static class LockStateUtils 11 | { 12 | public static TLock[] FindUnlockObjects(IEnumerable objects) where TLock : IHasLock 13 | => objects.Where(x => x.Lock == LockState.None).ToArray(); 14 | } 15 | -------------------------------------------------------------------------------- /osu.Game.Rulesets.Karaoke/Edit/Utils/ZoomableScrollContainerUtils.cs: -------------------------------------------------------------------------------- 1 | // Copyright (c) andy840119 . Licensed under the GPL Licence. 2 | // See the LICENCE file in the repository root for full licence text. 3 | 4 | using System; 5 | using osu.Game.Screens.Edit; 6 | 7 | namespace osu.Game.Rulesets.Karaoke.Edit.Utils; 8 | 9 | public static class ZoomableScrollContainerUtils 10 | { 11 | public static float GetZoomLevelForVisibleMilliseconds(EditorClock editorClock, double milliseconds) 12 | => Math.Max(1, (float)(editorClock.TrackLength / milliseconds)); 13 | } 14 | -------------------------------------------------------------------------------- /osu.Game.Rulesets.Karaoke/Extensions/RegexExtensions.cs: -------------------------------------------------------------------------------- 1 | // Copyright (c) andy840119 . Licensed under the GPL Licence. 2 | // See the LICENCE file in the repository root for full licence text. 3 | 4 | using System.Text.RegularExpressions; 5 | using osu.Game.Rulesets.Karaoke.Utils; 6 | 7 | namespace osu.Game.Rulesets.Karaoke.Extensions; 8 | 9 | public static class RegexExtensions 10 | { 11 | public static TType GetGroupValue(this Match match, string key, bool useDefaultValueIfEmpty = true) 12 | { 13 | string value = match.Groups[key].Value; 14 | 15 | // if got empty value, should change to null. 16 | return TypeUtils.ChangeType(string.IsNullOrEmpty(value) ? null : value)!; 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /osu.Game.Rulesets.Karaoke/Graphics/Shapes/CornerBackground.cs: -------------------------------------------------------------------------------- 1 | // Copyright (c) andy840119 . Licensed under the GPL Licence. 2 | // See the LICENCE file in the repository root for full licence text. 3 | 4 | using osu.Framework.Graphics; 5 | using osu.Framework.Graphics.Containers; 6 | using osu.Framework.Graphics.Shapes; 7 | 8 | namespace osu.Game.Rulesets.Karaoke.Graphics.Shapes; 9 | 10 | public partial class CornerBackground : CompositeDrawable 11 | { 12 | public CornerBackground() 13 | { 14 | Masking = true; 15 | CornerRadius = 5; 16 | AddInternal(new Box { RelativeSizeAxes = Axes.Both }); 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /osu.Game.Rulesets.Karaoke/Graphics/UserInterface/BindableBoolMenuItem.cs: -------------------------------------------------------------------------------- 1 | // Copyright (c) andy840119 . Licensed under the GPL Licence. 2 | // See the LICENCE file in the repository root for full licence text. 3 | 4 | using osu.Framework.Bindables; 5 | using osu.Game.Graphics.UserInterface; 6 | 7 | namespace osu.Game.Rulesets.Karaoke.Graphics.UserInterface; 8 | 9 | public class BindableBoolMenuItem : ToggleMenuItem 10 | { 11 | public BindableBoolMenuItem(string text, Bindable bindable) 12 | : base(text) 13 | { 14 | State.BindTo(bindable); 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /osu.Game.Rulesets.Karaoke/Graphics/UserInterfaceV2/LabelledImageSelector.cs: -------------------------------------------------------------------------------- 1 | // Copyright (c) andy840119 . Licensed under the GPL Licence. 2 | // See the LICENCE file in the repository root for full licence text. 3 | 4 | using osu.Game.Graphics.UserInterfaceV2; 5 | 6 | namespace osu.Game.Rulesets.Karaoke.Graphics.UserInterfaceV2; 7 | 8 | /// 9 | /// A labelled text box which reveals an inline file chooser when clicked. 10 | /// Will be replaced after has official one. 11 | /// 12 | public partial class LabelledImageSelector : LabelledTextBox; 13 | -------------------------------------------------------------------------------- /osu.Game.Rulesets.Karaoke/Graphics/UserInterfaceV2/LabelledRealTimeSliderBar.cs: -------------------------------------------------------------------------------- 1 | // Copyright (c) andy840119 . Licensed under the GPL Licence. 2 | // See the LICENCE file in the repository root for full licence text. 3 | 4 | using System.Numerics; 5 | using osu.Framework.Graphics; 6 | using osu.Game.Graphics.UserInterfaceV2; 7 | using osu.Game.Overlays.Settings; 8 | 9 | namespace osu.Game.Rulesets.Karaoke.Graphics.UserInterfaceV2; 10 | 11 | public partial class LabelledRealTimeSliderBar : LabelledSliderBar 12 | where TNumber : struct, INumber, IMinMaxValue 13 | { 14 | protected override SettingsSlider CreateComponent() 15 | => base.CreateComponent().With(x => x.TransferValueOnCommit = false); 16 | } 17 | -------------------------------------------------------------------------------- /osu.Game.Rulesets.Karaoke/IO/Serialization/Converters/RubyTagsConverter.cs: -------------------------------------------------------------------------------- 1 | // Copyright (c) andy840119 . Licensed under the GPL Licence. 2 | // See the LICENCE file in the repository root for full licence text. 3 | 4 | using System.Collections.Generic; 5 | using osu.Game.Rulesets.Karaoke.Objects; 6 | using osu.Game.Rulesets.Karaoke.Objects.Utils; 7 | 8 | namespace osu.Game.Rulesets.Karaoke.IO.Serialization.Converters; 9 | 10 | public class RubyTagsConverter : SortableJsonConverter 11 | { 12 | protected override IEnumerable GetSortedValue(IEnumerable objects) 13 | => RubyTagsUtils.Sort(objects); 14 | } 15 | -------------------------------------------------------------------------------- /osu.Game.Rulesets.Karaoke/IO/Serialization/Converters/TimeTagsConverter.cs: -------------------------------------------------------------------------------- 1 | // Copyright (c) andy840119 . Licensed under the GPL Licence. 2 | // See the LICENCE file in the repository root for full licence text. 3 | 4 | using System.Collections.Generic; 5 | using osu.Game.Rulesets.Karaoke.Objects; 6 | using osu.Game.Rulesets.Karaoke.Objects.Utils; 7 | 8 | namespace osu.Game.Rulesets.Karaoke.IO.Serialization.Converters; 9 | 10 | public class TimeTagsConverter : SortableJsonConverter 11 | { 12 | protected override IEnumerable GetSortedValue(IEnumerable objects) 13 | => TimeTagsUtils.Sort(objects); 14 | } 15 | -------------------------------------------------------------------------------- /osu.Game.Rulesets.Karaoke/IO/Serialization/Converters/TranslationConverter.cs: -------------------------------------------------------------------------------- 1 | // Copyright (c) andy840119 . Licensed under the GPL Licence. 2 | // See the LICENCE file in the repository root for full licence text. 3 | 4 | using System.Globalization; 5 | 6 | namespace osu.Game.Rulesets.Karaoke.IO.Serialization.Converters; 7 | 8 | public class TranslationConverter : DictionaryConverter; 9 | -------------------------------------------------------------------------------- /osu.Game.Rulesets.Karaoke/IO/Stores/FntGlyphStore.cs: -------------------------------------------------------------------------------- 1 | // Copyright (c) andy840119 . Licensed under the GPL Licence. 2 | // See the LICENCE file in the repository root for full licence text. 3 | 4 | using osu.Framework.Graphics.Textures; 5 | using osu.Framework.IO.Stores; 6 | using SharpFNT; 7 | 8 | namespace osu.Game.Rulesets.Karaoke.IO.Stores; 9 | 10 | public class FntGlyphStore : GlyphStore 11 | { 12 | public BitmapFont? BitmapFont => Font; 13 | 14 | public FntGlyphStore(ResourceStore store, string? assetName = null, IResourceStore? textureLoader = null) 15 | : base(store, assetName, textureLoader) 16 | { 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /osu.Game.Rulesets.Karaoke/Integration/Formats/IDecoder.cs: -------------------------------------------------------------------------------- 1 | // Copyright (c) andy840119 . Licensed under the GPL Licence. 2 | // See the LICENCE file in the repository root for full licence text. 3 | 4 | namespace osu.Game.Rulesets.Karaoke.Integration.Formats; 5 | 6 | public interface IDecoder : IDecoder; 7 | 8 | public interface IDecoder 9 | { 10 | public TTargetFormat Decode(TSourceFormat source); 11 | } 12 | -------------------------------------------------------------------------------- /osu.Game.Rulesets.Karaoke/Integration/Formats/IEncoder.cs: -------------------------------------------------------------------------------- 1 | // Copyright (c) andy840119 . Licensed under the GPL Licence. 2 | // See the LICENCE file in the repository root for full licence text. 3 | 4 | namespace osu.Game.Rulesets.Karaoke.Integration.Formats; 5 | 6 | public interface IEncoder : IEncoder; 7 | 8 | public interface IEncoder 9 | { 10 | public TTargetFormat Encode(TSourceFormat source); 11 | } 12 | -------------------------------------------------------------------------------- /osu.Game.Rulesets.Karaoke/Integration/Formats/KarDecoder.cs: -------------------------------------------------------------------------------- 1 | // Copyright (c) andy840119 . Licensed under the GPL Licence. 2 | // See the LICENCE file in the repository root for full licence text. 3 | 4 | using System.Linq; 5 | using osu.Game.Rulesets.Karaoke.Objects; 6 | 7 | namespace osu.Game.Rulesets.Karaoke.Integration.Formats; 8 | 9 | public class KarDecoder : IDecoder 10 | { 11 | public Lyric[] Decode(string source) 12 | { 13 | var song = new LrcParser.Parser.Kar.KarParser().Decode(source); 14 | return LrcParserUtils.ConvertToLyrics(song).ToArray(); 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /osu.Game.Rulesets.Karaoke/Integration/Formats/KarEncoder.cs: -------------------------------------------------------------------------------- 1 | // Copyright (c) andy840119 . Licensed under the GPL Licence. 2 | // See the LICENCE file in the repository root for full licence text. 3 | 4 | using osu.Game.Beatmaps; 5 | 6 | namespace osu.Game.Rulesets.Karaoke.Integration.Formats; 7 | 8 | public class KarEncoder : IEncoder 9 | { 10 | public string Encode(Beatmap source) 11 | { 12 | var song = LrcParserUtils.ConvertToSong(source); 13 | return new LrcParser.Parser.Kar.KarParser().Encode(song); 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /osu.Game.Rulesets.Karaoke/Integration/Formats/LrcDecoder.cs: -------------------------------------------------------------------------------- 1 | // Copyright (c) andy840119 . Licensed under the GPL Licence. 2 | // See the LICENCE file in the repository root for full licence text. 3 | 4 | using System.Linq; 5 | using osu.Game.Rulesets.Karaoke.Objects; 6 | 7 | namespace osu.Game.Rulesets.Karaoke.Integration.Formats; 8 | 9 | public class LrcDecoder : IDecoder 10 | { 11 | public Lyric[] Decode(string source) 12 | { 13 | var song = new LrcParser.Parser.Lrc.LrcParser().Decode(source); 14 | return LrcParserUtils.ConvertToLyrics(song).ToArray(); 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /osu.Game.Rulesets.Karaoke/Integration/Formats/LrcEncoder.cs: -------------------------------------------------------------------------------- 1 | // Copyright (c) andy840119 . Licensed under the GPL Licence. 2 | // See the LICENCE file in the repository root for full licence text. 3 | 4 | using osu.Game.Beatmaps; 5 | 6 | namespace osu.Game.Rulesets.Karaoke.Integration.Formats; 7 | 8 | public class LrcEncoder : IEncoder 9 | { 10 | public string Encode(Beatmap source) 11 | { 12 | var song = LrcParserUtils.ConvertToSong(source); 13 | return new LrcParser.Parser.Lrc.LrcParser().Encode(song); 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /osu.Game.Rulesets.Karaoke/Integration/Formats/LyricTextDecoder.cs: -------------------------------------------------------------------------------- 1 | // Copyright (c) andy840119 . Licensed under the GPL Licence. 2 | // See the LICENCE file in the repository root for full licence text. 3 | 4 | using System.Linq; 5 | using osu.Game.Rulesets.Karaoke.Objects; 6 | 7 | namespace osu.Game.Rulesets.Karaoke.Integration.Formats; 8 | 9 | public class LyricTextDecoder : IDecoder 10 | { 11 | public Lyric[] Decode(string source) 12 | { 13 | return source.Split('\n').Select((text, index) => new Lyric 14 | { 15 | Order = index + 1, // should create default order. 16 | Text = text, 17 | }).ToArray(); 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /osu.Game.Rulesets.Karaoke/Integration/Formats/LyricTextEncoder.cs: -------------------------------------------------------------------------------- 1 | // Copyright (c) andy840119 . Licensed under the GPL Licence. 2 | // See the LICENCE file in the repository root for full licence text. 3 | 4 | using System.Linq; 5 | using osu.Game.Beatmaps; 6 | using osu.Game.Rulesets.Karaoke.Objects; 7 | 8 | namespace osu.Game.Rulesets.Karaoke.Integration.Formats; 9 | 10 | public class LyricTextEncoder : IEncoder 11 | { 12 | public string Encode(IBeatmap output) 13 | { 14 | var lyrics = output.HitObjects.OfType(); 15 | var lyricTexts = lyrics.Select(x => x.Text).Where(x => !string.IsNullOrWhiteSpace(x)); 16 | return string.Join('\n', lyricTexts); 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /osu.Game.Rulesets.Karaoke/Judgements/KaraokeJudgement.cs: -------------------------------------------------------------------------------- 1 | // Copyright (c) andy840119 . Licensed under the GPL Licence. 2 | // See the LICENCE file in the repository root for full licence text. 3 | 4 | using osu.Game.Rulesets.Judgements; 5 | 6 | namespace osu.Game.Rulesets.Karaoke.Judgements; 7 | 8 | public class KaraokeJudgement : Judgement; 9 | -------------------------------------------------------------------------------- /osu.Game.Rulesets.Karaoke/Judgements/KaraokeJudgementResult.cs: -------------------------------------------------------------------------------- 1 | // Copyright (c) andy840119 . Licensed under the GPL Licence. 2 | // See the LICENCE file in the repository root for full licence text. 3 | 4 | using osu.Game.Rulesets.Judgements; 5 | using osu.Game.Rulesets.Objects; 6 | 7 | namespace osu.Game.Rulesets.Karaoke.Judgements; 8 | 9 | public class KaraokeJudgementResult : JudgementResult 10 | { 11 | public KaraokeJudgementResult(HitObject hitObject, Judgement judgement) 12 | : base(hitObject, judgement) 13 | { 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /osu.Game.Rulesets.Karaoke/Judgements/KaraokeLyricJudgement.cs: -------------------------------------------------------------------------------- 1 | // Copyright (c) andy840119 . Licensed under the GPL Licence. 2 | // See the LICENCE file in the repository root for full licence text. 3 | 4 | using osu.Game.Rulesets.Scoring; 5 | 6 | namespace osu.Game.Rulesets.Karaoke.Judgements; 7 | 8 | public class KaraokeLyricJudgement : KaraokeJudgement 9 | { 10 | public override HitResult MaxResult => HitResult.Perfect; 11 | 12 | protected override double HealthIncreaseFor(HitResult result) => 0; 13 | } 14 | -------------------------------------------------------------------------------- /osu.Game.Rulesets.Karaoke/KaraokeSkinComponentLookup.cs: -------------------------------------------------------------------------------- 1 | // Copyright (c) andy840119 . Licensed under the GPL Licence. 2 | // See the LICENCE file in the repository root for full licence text. 3 | 4 | using osu.Game.Skinning; 5 | 6 | namespace osu.Game.Rulesets.Karaoke; 7 | 8 | public class KaraokeSkinComponentLookup : SkinComponentLookup 9 | { 10 | public KaraokeSkinComponentLookup(KaraokeSkinComponents component) 11 | : base(component) 12 | { 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /osu.Game.Rulesets.Karaoke/KaraokeSkinComponents.cs: -------------------------------------------------------------------------------- 1 | // Copyright (c) andy840119 . Licensed under the GPL Licence. 2 | // See the LICENCE file in the repository root for full licence text. 3 | 4 | namespace osu.Game.Rulesets.Karaoke; 5 | 6 | public enum KaraokeSkinComponents 7 | { 8 | ColumnBackground, 9 | StageBackground, 10 | JudgementLine, 11 | Note, 12 | HitExplosion, 13 | } 14 | -------------------------------------------------------------------------------- /osu.Game.Rulesets.Karaoke/Localisation/ChangelogStrings.cs: -------------------------------------------------------------------------------- 1 | // Copyright (c) andy840119 . Licensed under the GPL Licence. 2 | // See the LICENCE file in the repository root for full licence text. 3 | 4 | using osu.Framework.Localisation; 5 | 6 | namespace osu.Game.Rulesets.Karaoke.Localisation; 7 | 8 | public static class ChangelogStrings 9 | { 10 | private const string prefix = @"osu.Game.Rulesets.Karaoke.Resources.Localisation.ChangelogSection"; 11 | 12 | /// 13 | /// "View current changelog" 14 | /// 15 | public static LocalisableString ViewCurrentChangelog => new TranslatableString(getKey(@"view_current_changelog"), @"View current changelog"); 16 | 17 | private static string getKey(string key) => $@"{prefix}:{key}"; 18 | } 19 | -------------------------------------------------------------------------------- /osu.Game.Rulesets.Karaoke/Localisation/CommonStrings.cs: -------------------------------------------------------------------------------- 1 | // Copyright (c) andy840119 . Licensed under the GPL Licence. 2 | // See the LICENCE file in the repository root for full licence text. 3 | 4 | using osu.Framework.Localisation; 5 | 6 | namespace osu.Game.Rulesets.Karaoke.Localisation; 7 | 8 | public static class CommonStrings 9 | { 10 | private const string prefix = @"osu.Game.Rulesets.Karaoke.Resources.Localisation.Common"; 11 | 12 | /// 13 | /// "karaoke!" 14 | /// 15 | public static LocalisableString RulesetName => new TranslatableString(getKey(@"karaoke"), @"karaoke!"); 16 | 17 | private static string getKey(string key) => $@"{prefix}:{key}"; 18 | } 19 | -------------------------------------------------------------------------------- /osu.Game.Rulesets.Karaoke/Mods/IApplicableToMicrophone.cs: -------------------------------------------------------------------------------- 1 | // Copyright (c) andy840119 . Licensed under the GPL Licence. 2 | // See the LICENCE file in the repository root for full licence text. 3 | 4 | namespace osu.Game.Rulesets.Karaoke.Mods; 5 | 6 | public interface IApplicableToMicrophone 7 | { 8 | bool MicrophoneEnabled { get; } 9 | } 10 | -------------------------------------------------------------------------------- /osu.Game.Rulesets.Karaoke/Mods/IApplicableToSettingHUDOverlay.cs: -------------------------------------------------------------------------------- 1 | // Copyright (c) andy840119 . Licensed under the GPL Licence. 2 | // See the LICENCE file in the repository root for full licence text. 3 | 4 | using osu.Game.Rulesets.Karaoke.UI.HUD; 5 | using osu.Game.Rulesets.Mods; 6 | 7 | namespace osu.Game.Rulesets.Karaoke.Mods; 8 | 9 | /// 10 | /// An interface for mods that apply changes to the . 11 | /// 12 | public interface IApplicableToSettingHUDOverlay : IApplicableMod 13 | { 14 | /// 15 | /// Provide a . Called once on initialisation of a play instance. 16 | /// 17 | void ApplyToOverlay(ISettingHUDOverlay overlay); 18 | } 19 | -------------------------------------------------------------------------------- /osu.Game.Rulesets.Karaoke/Mods/IApplicableToStage.cs: -------------------------------------------------------------------------------- 1 | // Copyright (c) andy840119 . Licensed under the GPL Licence. 2 | // See the LICENCE file in the repository root for full licence text. 3 | 4 | using osu.Game.Rulesets.Karaoke.Stages.Infos; 5 | using osu.Game.Rulesets.Mods; 6 | 7 | namespace osu.Game.Rulesets.Karaoke.Mods; 8 | 9 | public interface IApplicableToStage : IApplicableMod 10 | { 11 | bool CanApply(StageInfo stageInfo); 12 | } 13 | -------------------------------------------------------------------------------- /osu.Game.Rulesets.Karaoke/Mods/IApplicableToStageElement.cs: -------------------------------------------------------------------------------- 1 | // Copyright (c) andy840119 . Licensed under the GPL Licence. 2 | // See the LICENCE file in the repository root for full licence text. 3 | 4 | using System.Collections.Generic; 5 | using osu.Game.Rulesets.Karaoke.Stages; 6 | 7 | namespace osu.Game.Rulesets.Karaoke.Mods; 8 | 9 | public interface IApplicableToStageElement : IApplicableToStage 10 | { 11 | IEnumerable PostProcess(IEnumerable stageElements); 12 | } 13 | -------------------------------------------------------------------------------- /osu.Game.Rulesets.Karaoke/Mods/IApplicableToStageInfo.cs: -------------------------------------------------------------------------------- 1 | // Copyright (c) andy840119 . Licensed under the GPL Licence. 2 | // See the LICENCE file in the repository root for full licence text. 3 | 4 | using osu.Game.Rulesets.Karaoke.Beatmaps; 5 | using osu.Game.Rulesets.Karaoke.Stages.Infos; 6 | 7 | namespace osu.Game.Rulesets.Karaoke.Mods; 8 | 9 | /// 10 | /// An interface for mods that prefer to use the type of . 11 | /// Also, it can override the parameter of . 12 | /// 13 | public interface IApplicableToStageInfo : IApplicableToStage 14 | { 15 | StageInfo? CreateDefaultStageInfo(KaraokeBeatmap beatmap); 16 | 17 | void ApplyToStageInfo(StageInfo stageInfo); 18 | } 19 | -------------------------------------------------------------------------------- /osu.Game.Rulesets.Karaoke/Mods/IApplicableToStagePlayfieldCommand.cs: -------------------------------------------------------------------------------- 1 | // Copyright (c) andy840119 . Licensed under the GPL Licence. 2 | // See the LICENCE file in the repository root for full licence text. 3 | 4 | using System.Collections.Generic; 5 | using osu.Game.Rulesets.Karaoke.Stages.Commands; 6 | using osu.Game.Rulesets.UI; 7 | 8 | namespace osu.Game.Rulesets.Karaoke.Mods; 9 | 10 | public interface IApplicableToStagePlayfieldCommand : IApplicableToStage 11 | { 12 | IEnumerable PostProcessCommands(Playfield playfield, IEnumerable commands); 13 | } 14 | -------------------------------------------------------------------------------- /osu.Game.Rulesets.Karaoke/Mods/KaraokeModNoFail.cs: -------------------------------------------------------------------------------- 1 | // Copyright (c) andy840119 . Licensed under the GPL Licence. 2 | // See the LICENCE file in the repository root for full licence text. 3 | 4 | using osu.Game.Rulesets.Mods; 5 | 6 | namespace osu.Game.Rulesets.Karaoke.Mods; 7 | 8 | public class KaraokeModNoFail : ModNoFail; 9 | -------------------------------------------------------------------------------- /osu.Game.Rulesets.Karaoke/Mods/KaraokeModPerfect.cs: -------------------------------------------------------------------------------- 1 | // Copyright (c) andy840119 . Licensed under the GPL Licence. 2 | // See the LICENCE file in the repository root for full licence text. 3 | 4 | using osu.Game.Rulesets.Mods; 5 | 6 | namespace osu.Game.Rulesets.Karaoke.Mods; 7 | 8 | public class KaraokeModPerfect : ModPerfect; 9 | -------------------------------------------------------------------------------- /osu.Game.Rulesets.Karaoke/Mods/KaraokeModSuddenDeath.cs: -------------------------------------------------------------------------------- 1 | // Copyright (c) andy840119 . Licensed under the GPL Licence. 2 | // See the LICENCE file in the repository root for full licence text. 3 | 4 | using osu.Game.Rulesets.Mods; 5 | 6 | namespace osu.Game.Rulesets.Karaoke.Mods; 7 | 8 | public class KaraokeModSuddenDeath : ModSuddenDeath; 9 | -------------------------------------------------------------------------------- /osu.Game.Rulesets.Karaoke/Mods/LanguageSettingsControl.cs: -------------------------------------------------------------------------------- 1 | // Copyright (c) andy840119 . Licensed under the GPL Licence. 2 | // See the LICENCE file in the repository root for full licence text. 3 | 4 | using System.Globalization; 5 | using osu.Framework.Graphics; 6 | using osu.Game.Overlays.Settings; 7 | using osu.Game.Rulesets.Karaoke.Graphics.UserInterfaceV2; 8 | 9 | namespace osu.Game.Rulesets.Karaoke.Mods; 10 | 11 | public partial class LanguageSettingsControl : SettingsItem 12 | { 13 | protected override Drawable CreateControl() => new LanguageSelector 14 | { 15 | RelativeSizeAxes = Axes.X, 16 | Height = 300, 17 | }; 18 | } 19 | -------------------------------------------------------------------------------- /osu.Game.Rulesets.Karaoke/Objects/BarLine.cs: -------------------------------------------------------------------------------- 1 | // Copyright (c) andy840119 . Licensed under the GPL Licence. 2 | // See the LICENCE file in the repository root for full licence text. 3 | 4 | using osu.Framework.Bindables; 5 | using osu.Game.Rulesets.Judgements; 6 | using osu.Game.Rulesets.Objects; 7 | 8 | namespace osu.Game.Rulesets.Karaoke.Objects; 9 | 10 | public class BarLine : KaraokeHitObject, IBarLine 11 | { 12 | public bool Major 13 | { 14 | get => MajorBindable.Value; 15 | set => MajorBindable.Value = value; 16 | } 17 | 18 | public readonly Bindable MajorBindable = new BindableBool(); 19 | 20 | public override Judgement CreateJudgement() => new IgnoreJudgement(); 21 | } 22 | -------------------------------------------------------------------------------- /osu.Game.Rulesets.Karaoke/Objects/KaraokeHitObject.cs: -------------------------------------------------------------------------------- 1 | // Copyright (c) andy840119 . Licensed under the GPL Licence. 2 | // See the LICENCE file in the repository root for full licence text. 3 | 4 | using osu.Game.Rulesets.Objects; 5 | 6 | namespace osu.Game.Rulesets.Karaoke.Objects; 7 | 8 | public class KaraokeHitObject : HitObject 9 | { 10 | public double TimePreempt = 600; 11 | public double TimeFadeIn = 400; 12 | } 13 | -------------------------------------------------------------------------------- /osu.Game.Rulesets.Karaoke/Objects/LegacyProperties.cs: -------------------------------------------------------------------------------- 1 | // Copyright (c) andy840119 . Licensed under the GPL Licence. 2 | // See the LICENCE file in the repository root for full licence text. 3 | 4 | using System.Collections.Generic; 5 | using System.Globalization; 6 | using osu.Game.Rulesets.Karaoke.Beatmaps.Metadatas; 7 | 8 | namespace osu.Game.Rulesets.Karaoke.Objects; 9 | 10 | // todo: this function is used for legacy karaoke beatmap, will be removed eventually. 11 | public class LegacyProperties : KaraokeHitObject 12 | { 13 | public IList AvailableTranslationLanguages { get; set; } = new List(); 14 | 15 | public IDictionary Singers { get; set; } = new Dictionary(); 16 | } 17 | -------------------------------------------------------------------------------- /osu.Game.Rulesets.Karaoke/Objects/Properties/IReferenceLyricPropertyConfig.cs: -------------------------------------------------------------------------------- 1 | // Copyright (c) andy840119 . Licensed under the GPL Licence. 2 | // See the LICENCE file in the repository root for full licence text. 3 | 4 | using System; 5 | 6 | namespace osu.Game.Rulesets.Karaoke.Objects.Properties; 7 | 8 | public interface IReferenceLyricPropertyConfig 9 | { 10 | double OffsetTime { get; set; } 11 | 12 | public event Action? Changed; 13 | } 14 | -------------------------------------------------------------------------------- /osu.Game.Rulesets.Karaoke/Objects/Title.cs: -------------------------------------------------------------------------------- 1 | // Copyright (c) andy840119 . Licensed under the GPL Licence. 2 | // See the LICENCE file in the repository root for full licence text. 3 | 4 | using System.Collections.Generic; 5 | using osu.Game.Rulesets.Objects.Types; 6 | 7 | namespace osu.Game.Rulesets.Karaoke.Objects; 8 | 9 | public class Title : KaraokeHitObject, IHasDuration 10 | { 11 | public string Name { get; set; } = null!; 12 | 13 | public int KaraokeLayoutIndex { get; set; } 14 | 15 | public double Duration { get; set; } 16 | 17 | public double EndTime => StartTime + Duration; 18 | 19 | public int LineInterval { get; set; } 20 | 21 | public bool ShowRuby { get; set; } 22 | 23 | public IList TitleParts { get; set; } = new List(); 24 | } 25 | -------------------------------------------------------------------------------- /osu.Game.Rulesets.Karaoke/Objects/TitlePart.cs: -------------------------------------------------------------------------------- 1 | // Copyright (c) andy840119 . Licensed under the GPL Licence. 2 | // See the LICENCE file in the repository root for full licence text. 3 | 4 | namespace osu.Game.Rulesets.Karaoke.Objects; 5 | 6 | public class TitlePart 7 | { 8 | public string Title { get; set; } = null!; 9 | 10 | public int KaraokeFontIndex { get; set; } 11 | 12 | public bool Continuous { get; set; } 13 | } 14 | -------------------------------------------------------------------------------- /osu.Game.Rulesets.Karaoke/Objects/Types/IHasLock.cs: -------------------------------------------------------------------------------- 1 | // Copyright (c) andy840119 . Licensed under the GPL Licence. 2 | // See the LICENCE file in the repository root for full licence text. 3 | 4 | using System.ComponentModel; 5 | 6 | namespace osu.Game.Rulesets.Karaoke.Objects.Types; 7 | 8 | public interface IHasLock 9 | { 10 | LockState Lock { get; set; } 11 | } 12 | 13 | public enum LockState 14 | { 15 | [Description("None")] 16 | None, 17 | 18 | [Description("Partial")] 19 | Partial, 20 | 21 | [Description("Full")] 22 | Full, 23 | } 24 | -------------------------------------------------------------------------------- /osu.Game.Rulesets.Karaoke/Objects/Types/IHasOrder.cs: -------------------------------------------------------------------------------- 1 | // Copyright (c) andy840119 . Licensed under the GPL Licence. 2 | // See the LICENCE file in the repository root for full licence text. 3 | 4 | namespace osu.Game.Rulesets.Karaoke.Objects.Types; 5 | 6 | public interface IHasOrder 7 | { 8 | int Order { get; set; } 9 | } 10 | -------------------------------------------------------------------------------- /osu.Game.Rulesets.Karaoke/Objects/Types/IHasPage.cs: -------------------------------------------------------------------------------- 1 | // Copyright (c) andy840119 . Licensed under the GPL Licence. 2 | // See the LICENCE file in the repository root for full licence text. 3 | 4 | namespace osu.Game.Rulesets.Karaoke.Objects.Types; 5 | 6 | public interface IHasPage 7 | { 8 | int? PageIndex { get; set; } 9 | } 10 | -------------------------------------------------------------------------------- /osu.Game.Rulesets.Karaoke/Objects/Types/IHasSingers.cs: -------------------------------------------------------------------------------- 1 | // Copyright (c) andy840119 . Licensed under the GPL Licence. 2 | // See the LICENCE file in the repository root for full licence text. 3 | 4 | using System.Collections.Generic; 5 | using osu.Game.Rulesets.Karaoke.Beatmaps; 6 | 7 | namespace osu.Game.Rulesets.Karaoke.Objects.Types; 8 | 9 | public interface IHasSingers 10 | { 11 | IList SingerIds { get; } 12 | } 13 | -------------------------------------------------------------------------------- /osu.Game.Rulesets.Karaoke/Objects/Types/IHasText.cs: -------------------------------------------------------------------------------- 1 | // Copyright (c) andy840119 . Licensed under the GPL Licence. 2 | // See the LICENCE file in the repository root for full licence text. 3 | 4 | namespace osu.Game.Rulesets.Karaoke.Objects.Types; 5 | 6 | public interface IHasText 7 | { 8 | string Text { get; set; } 9 | } 10 | -------------------------------------------------------------------------------- /osu.Game.Rulesets.Karaoke/Objects/Types/IHasWorkingProperty.cs: -------------------------------------------------------------------------------- 1 | // Copyright (c) andy840119 . Licensed under the GPL Licence. 2 | // See the LICENCE file in the repository root for full licence text. 3 | 4 | using System; 5 | using osu.Game.Rulesets.Karaoke.Beatmaps; 6 | 7 | namespace osu.Game.Rulesets.Karaoke.Objects.Types; 8 | 9 | public interface IHasWorkingProperty : IHasWorkingProperty 10 | where TWorkingProperty : struct, Enum 11 | { 12 | bool InvalidateWorkingProperty(TWorkingProperty workingProperty); 13 | 14 | TWorkingProperty[] GetAllInvalidWorkingProperties(); 15 | } 16 | 17 | public interface IHasWorkingProperty 18 | { 19 | void ValidateWorkingProperty(KaraokeBeatmap beatmap); 20 | } 21 | -------------------------------------------------------------------------------- /osu.Game.Rulesets.Karaoke/Objects/Workings/InvalidWorkingPropertyAssignException.cs: -------------------------------------------------------------------------------- 1 | // Copyright (c) andy840119 . Licensed under the GPL Licence. 2 | // See the LICENCE file in the repository root for full licence text. 3 | 4 | using System; 5 | 6 | namespace osu.Game.Rulesets.Karaoke.Objects.Workings; 7 | 8 | public class InvalidWorkingPropertyAssignException : Exception; 9 | -------------------------------------------------------------------------------- /osu.Game.Rulesets.Karaoke/Objects/Workings/NoteWorkingProperty.cs: -------------------------------------------------------------------------------- 1 | // Copyright (c) andy840119 . Licensed under the GPL Licence. 2 | // See the LICENCE file in the repository root for full licence text. 3 | 4 | using System; 5 | 6 | namespace osu.Game.Rulesets.Karaoke.Objects.Workings; 7 | 8 | /// 9 | /// Specifies which properties in the are being invalidated. 10 | /// 11 | [Flags] 12 | public enum NoteWorkingProperty 13 | { 14 | /// 15 | /// is being invalidated. 16 | /// 17 | Page = 1, 18 | 19 | /// 20 | /// is being invalidated. 21 | /// 22 | ReferenceLyric = 1 << 1, 23 | } 24 | -------------------------------------------------------------------------------- /osu.Game.Rulesets.Karaoke/Overlays/Dialog/OkPopupDialog.cs: -------------------------------------------------------------------------------- 1 | // Copyright (c) andy840119 . Licensed under the GPL Licence. 2 | // See the LICENCE file in the repository root for full licence text. 3 | 4 | using System; 5 | using osu.Game.Overlays.Dialog; 6 | 7 | namespace osu.Game.Rulesets.Karaoke.Overlays.Dialog; 8 | 9 | public partial class OkPopupDialog : PopupDialog 10 | { 11 | public OkPopupDialog(Action? okAction = null) 12 | { 13 | Buttons = new PopupDialogButton[] 14 | { 15 | new PopupDialogOkButton 16 | { 17 | Text = "OK", 18 | Action = () => okAction?.Invoke(true), 19 | }, 20 | }; 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /osu.Game.Rulesets.Karaoke/Resources/Skin/Default/lyric-font-infos.json: -------------------------------------------------------------------------------- 1 | [] -------------------------------------------------------------------------------- /osu.Game.Rulesets.Karaoke/Resources/Skin/Default/note-styles.json: -------------------------------------------------------------------------------- 1 | [] -------------------------------------------------------------------------------- /osu.Game.Rulesets.Karaoke/Scoring/KaraokeHitWindows.cs: -------------------------------------------------------------------------------- 1 | // Copyright (c) andy840119 . Licensed under the GPL Licence. 2 | // See the LICENCE file in the repository root for full licence text. 3 | 4 | using osu.Game.Rulesets.Scoring; 5 | 6 | namespace osu.Game.Rulesets.Karaoke.Scoring; 7 | 8 | public abstract class KaraokeHitWindows : HitWindows; 9 | -------------------------------------------------------------------------------- /osu.Game.Rulesets.Karaoke/Scoring/KaraokeScoreProcessor.cs: -------------------------------------------------------------------------------- 1 | // Copyright (c) andy840119 . Licensed under the GPL Licence. 2 | // See the LICENCE file in the repository root for full licence text. 3 | 4 | using osu.Game.Rulesets.Scoring; 5 | 6 | namespace osu.Game.Rulesets.Karaoke.Scoring; 7 | 8 | internal partial class KaraokeScoreProcessor : ScoreProcessor 9 | { 10 | public KaraokeScoreProcessor() 11 | : base(new KaraokeRuleset()) 12 | { 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /osu.Game.Rulesets.Karaoke/Screens/Edit/AutoGenerateSection.cs: -------------------------------------------------------------------------------- 1 | // Copyright (c) andy840119 . Licensed under the GPL Licence. 2 | // See the LICENCE file in the repository root for full licence text. 3 | 4 | using osu.Framework.Localisation; 5 | 6 | namespace osu.Game.Rulesets.Karaoke.Screens.Edit; 7 | 8 | public abstract partial class AutoGenerateSection : EditorSection 9 | { 10 | protected sealed override LocalisableString Title => "Auto generate"; 11 | 12 | protected AutoGenerateSection() 13 | { 14 | Children = new[] 15 | { 16 | CreateAutoGenerateSubsection(), 17 | }; 18 | } 19 | 20 | protected abstract AutoGenerateSubsection CreateAutoGenerateSubsection(); 21 | } 22 | -------------------------------------------------------------------------------- /osu.Game.Rulesets.Karaoke/Screens/Edit/Beatmaps/Components/Menus/GeneratorConfigMenu.cs: -------------------------------------------------------------------------------- 1 | // Copyright (c) andy840119 . Licensed under the GPL Licence. 2 | // See the LICENCE file in the repository root for full licence text. 3 | 4 | using osu.Framework.Graphics.UserInterface; 5 | 6 | namespace osu.Game.Rulesets.Karaoke.Screens.Edit.Beatmaps.Components.Menus; 7 | 8 | public class GeneratorConfigMenu : MenuItem 9 | { 10 | public GeneratorConfigMenu(string text) 11 | : base(text) 12 | { 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /osu.Game.Rulesets.Karaoke/Screens/Edit/Beatmaps/Components/Menus/LyricEditorPreferLayoutMenu.cs: -------------------------------------------------------------------------------- 1 | // Copyright (c) andy840119 . Licensed under the GPL Licence. 2 | // See the LICENCE file in the repository root for full licence text. 3 | 4 | using osu.Game.Rulesets.Karaoke.Configuration; 5 | using osu.Game.Rulesets.Karaoke.Graphics.UserInterface; 6 | using osu.Game.Rulesets.Karaoke.Screens.Edit.Beatmaps.Lyrics; 7 | 8 | namespace osu.Game.Rulesets.Karaoke.Screens.Edit.Beatmaps.Components.Menus; 9 | 10 | public class LyricEditorPreferLayoutMenuItem : BindableEnumMenuItem 11 | { 12 | public LyricEditorPreferLayoutMenuItem(string text, KaraokeRulesetLyricEditorConfigManager config) 13 | : base(text, config.GetBindable(KaraokeRulesetLyricEditorSetting.LyricEditorPreferLayout)) 14 | { 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /osu.Game.Rulesets.Karaoke/Screens/Edit/Beatmaps/ILyricsProvider.cs: -------------------------------------------------------------------------------- 1 | // Copyright (c) andy840119 . Licensed under the GPL Licence. 2 | // See the LICENCE file in the repository root for full licence text. 3 | 4 | using osu.Framework.Bindables; 5 | using osu.Game.Rulesets.Karaoke.Objects; 6 | 7 | namespace osu.Game.Rulesets.Karaoke.Screens.Edit.Beatmaps; 8 | 9 | public interface ILyricsProvider 10 | { 11 | BindableList BindableLyrics { get; } 12 | } 13 | -------------------------------------------------------------------------------- /osu.Game.Rulesets.Karaoke/Screens/Edit/Beatmaps/KaraokeBeatmapEditorScreenMode.cs: -------------------------------------------------------------------------------- 1 | // Copyright (c) andy840119 . Licensed under the GPL Licence. 2 | // See the LICENCE file in the repository root for full licence text. 3 | 4 | using System.ComponentModel; 5 | 6 | namespace osu.Game.Rulesets.Karaoke.Screens.Edit.Beatmaps; 7 | 8 | public enum KaraokeBeatmapEditorScreenMode 9 | { 10 | [Description("Lyric")] 11 | Lyric, 12 | 13 | [Description("Singer")] 14 | Singer, 15 | 16 | [Description("Translation")] 17 | Translation, 18 | 19 | [Description("Page")] 20 | Page, 21 | } 22 | -------------------------------------------------------------------------------- /osu.Game.Rulesets.Karaoke/Screens/Edit/Beatmaps/Lyrics/CaretPosition/Algorithms/CreateRubyTagCaretPositionAlgorithm.cs: -------------------------------------------------------------------------------- 1 | // Copyright (c) andy840119 . Licensed under the GPL Licence. 2 | // See the LICENCE file in the repository root for full licence text. 3 | 4 | using osu.Game.Rulesets.Karaoke.Objects; 5 | 6 | namespace osu.Game.Rulesets.Karaoke.Screens.Edit.Beatmaps.Lyrics.CaretPosition.Algorithms; 7 | 8 | public class CreateRubyTagCaretPositionAlgorithm : CharIndexCaretPositionAlgorithm 9 | { 10 | public CreateRubyTagCaretPositionAlgorithm(Lyric[] lyrics) 11 | : base(lyrics) 12 | { 13 | } 14 | 15 | protected override CreateRubyTagCaretPosition CreateCaretPosition(Lyric lyric, int index) => new(lyric, index); 16 | } 17 | -------------------------------------------------------------------------------- /osu.Game.Rulesets.Karaoke/Screens/Edit/Beatmaps/Lyrics/CaretPosition/Algorithms/ICaretPositionAlgorithm.cs: -------------------------------------------------------------------------------- 1 | // Copyright (c) andy840119 . Licensed under the GPL Licence. 2 | // See the LICENCE file in the repository root for full licence text. 3 | 4 | using System; 5 | using osu.Game.Rulesets.Karaoke.Objects; 6 | 7 | namespace osu.Game.Rulesets.Karaoke.Screens.Edit.Beatmaps.Lyrics.CaretPosition.Algorithms; 8 | 9 | public interface ICaretPositionAlgorithm 10 | { 11 | ICaretPosition? MoveToPreviousLyric(ICaretPosition currentPosition); 12 | 13 | ICaretPosition? MoveToNextLyric(ICaretPosition currentPosition); 14 | 15 | ICaretPosition? MoveToFirstLyric(); 16 | 17 | ICaretPosition? MoveToLastLyric(); 18 | 19 | ICaretPosition? MoveToTargetLyric(Lyric lyric); 20 | 21 | Type GetCaretPositionType(); 22 | } 23 | -------------------------------------------------------------------------------- /osu.Game.Rulesets.Karaoke/Screens/Edit/Beatmaps/Lyrics/CaretPosition/Algorithms/RecordingTimeTagCaretMoveMode.cs: -------------------------------------------------------------------------------- 1 | // Copyright (c) andy840119 . Licensed under the GPL Licence. 2 | // See the LICENCE file in the repository root for full licence text. 3 | 4 | namespace osu.Game.Rulesets.Karaoke.Screens.Edit.Beatmaps.Lyrics.CaretPosition.Algorithms; 5 | 6 | public enum RecordingTimeTagCaretMoveMode 7 | { 8 | /// 9 | /// Move to any tag 10 | /// 11 | None, 12 | 13 | /// 14 | /// Only move to next start tag. 15 | /// 16 | OnlyStartTag, 17 | 18 | /// 19 | /// Only move to next end tag. 20 | /// 21 | OnlyEndTag, 22 | } 23 | -------------------------------------------------------------------------------- /osu.Game.Rulesets.Karaoke/Screens/Edit/Beatmaps/Lyrics/CaretPosition/ClickingCaretPosition.cs: -------------------------------------------------------------------------------- 1 | // Copyright (c) andy840119 . Licensed under the GPL Licence. 2 | // See the LICENCE file in the repository root for full licence text. 3 | 4 | using osu.Game.Rulesets.Karaoke.Objects; 5 | 6 | namespace osu.Game.Rulesets.Karaoke.Screens.Edit.Beatmaps.Lyrics.CaretPosition; 7 | 8 | public readonly struct ClickingCaretPosition : ICaretPosition 9 | { 10 | public ClickingCaretPosition(Lyric lyric) 11 | { 12 | Lyric = lyric; 13 | } 14 | 15 | public Lyric Lyric { get; } 16 | } 17 | -------------------------------------------------------------------------------- /osu.Game.Rulesets.Karaoke/Screens/Edit/Beatmaps/Lyrics/CaretPosition/ICaretPosition.cs: -------------------------------------------------------------------------------- 1 | // Copyright (c) andy840119 . Licensed under the GPL Licence. 2 | // See the LICENCE file in the repository root for full licence text. 3 | 4 | using osu.Game.Rulesets.Karaoke.Objects; 5 | 6 | namespace osu.Game.Rulesets.Karaoke.Screens.Edit.Beatmaps.Lyrics.CaretPosition; 7 | 8 | public interface ICaretPosition 9 | { 10 | public Lyric Lyric { get; } 11 | } 12 | -------------------------------------------------------------------------------- /osu.Game.Rulesets.Karaoke/Screens/Edit/Beatmaps/Lyrics/CaretPosition/ICharGapCaretPosition.cs: -------------------------------------------------------------------------------- 1 | // Copyright (c) andy840119 . Licensed under the GPL Licence. 2 | // See the LICENCE file in the repository root for full licence text. 3 | 4 | namespace osu.Game.Rulesets.Karaoke.Screens.Edit.Beatmaps.Lyrics.CaretPosition; 5 | 6 | public interface ICharGapCaretPosition : IIndexCaretPosition 7 | { 8 | public int CharGap { get; } 9 | } 10 | -------------------------------------------------------------------------------- /osu.Game.Rulesets.Karaoke/Screens/Edit/Beatmaps/Lyrics/CaretPosition/ICharIndexCaretPosition.cs: -------------------------------------------------------------------------------- 1 | // Copyright (c) andy840119 . Licensed under the GPL Licence. 2 | // See the LICENCE file in the repository root for full licence text. 3 | 4 | namespace osu.Game.Rulesets.Karaoke.Screens.Edit.Beatmaps.Lyrics.CaretPosition; 5 | 6 | public interface ICharIndexCaretPosition : IIndexCaretPosition 7 | { 8 | public int CharIndex { get; } 9 | } 10 | -------------------------------------------------------------------------------- /osu.Game.Rulesets.Karaoke/Screens/Edit/Beatmaps/Lyrics/CaretPosition/NavigateCaretPosition.cs: -------------------------------------------------------------------------------- 1 | // Copyright (c) andy840119 . Licensed under the GPL Licence. 2 | // See the LICENCE file in the repository root for full licence text. 3 | 4 | using osu.Game.Rulesets.Karaoke.Objects; 5 | 6 | namespace osu.Game.Rulesets.Karaoke.Screens.Edit.Beatmaps.Lyrics.CaretPosition; 7 | 8 | public readonly struct NavigateCaretPosition : ICaretPosition 9 | { 10 | public NavigateCaretPosition(Lyric lyric) 11 | { 12 | Lyric = lyric; 13 | } 14 | 15 | public Lyric Lyric { get; } 16 | } 17 | -------------------------------------------------------------------------------- /osu.Game.Rulesets.Karaoke/Screens/Edit/Beatmaps/Lyrics/Content/Components/Lyrics/Carets/DrawableCaretState.cs: -------------------------------------------------------------------------------- 1 | // Copyright (c) andy840119 . Licensed under the GPL Licence. 2 | // See the LICENCE file in the repository root for full licence text. 3 | 4 | namespace osu.Game.Rulesets.Karaoke.Screens.Edit.Beatmaps.Lyrics.Content.Components.Lyrics.Carets; 5 | 6 | public enum DrawableCaretState 7 | { 8 | Idle, 9 | 10 | Hover, 11 | } 12 | -------------------------------------------------------------------------------- /osu.Game.Rulesets.Karaoke/Screens/Edit/Beatmaps/Lyrics/Content/Components/Lyrics/Carets/ICanAcceptRangeIndex.cs: -------------------------------------------------------------------------------- 1 | // Copyright (c) andy840119 . Licensed under the GPL Licence. 2 | // See the LICENCE file in the repository root for full licence text. 3 | 4 | using osu.Game.Rulesets.Karaoke.Screens.Edit.Beatmaps.Lyrics.States; 5 | 6 | namespace osu.Game.Rulesets.Karaoke.Screens.Edit.Beatmaps.Lyrics.Content.Components.Lyrics.Carets; 7 | 8 | public interface ICanAcceptRangeIndex 9 | { 10 | public void ApplyRangeCaretPosition(RangeCaretPosition rangeCaretPosition); 11 | } 12 | -------------------------------------------------------------------------------- /osu.Game.Rulesets.Karaoke/Screens/Edit/Beatmaps/Lyrics/Content/Components/Lyrics/IInteractableLyricState.cs: -------------------------------------------------------------------------------- 1 | // Copyright (c) andy840119 . Licensed under the GPL Licence. 2 | // See the LICENCE file in the repository root for full licence text. 3 | 4 | namespace osu.Game.Rulesets.Karaoke.Screens.Edit.Beatmaps.Lyrics.Content.Components.Lyrics; 5 | 6 | public interface IInteractableLyricState 7 | { 8 | void TriggerDisallowEditEffect(); 9 | } 10 | -------------------------------------------------------------------------------- /osu.Game.Rulesets.Karaoke/Screens/Edit/Beatmaps/Lyrics/Content/Components/Lyrics/UIEventLayer.cs: -------------------------------------------------------------------------------- 1 | // Copyright (c) andy840119 . Licensed under the GPL Licence. 2 | // See the LICENCE file in the repository root for full licence text. 3 | 4 | using osu.Game.Rulesets.Karaoke.Objects; 5 | 6 | namespace osu.Game.Rulesets.Karaoke.Screens.Edit.Beatmaps.Lyrics.Content.Components.Lyrics; 7 | 8 | public abstract partial class UIEventLayer : Layer 9 | { 10 | protected UIEventLayer(Lyric lyric) 11 | : base(lyric) 12 | { 13 | } 14 | 15 | public sealed override void UpdateDisableEditState(bool editable) 16 | { 17 | // todo: should have some effect 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /osu.Game.Rulesets.Karaoke/Screens/Edit/Beatmaps/Lyrics/Content/Compose/PanelDirection.cs: -------------------------------------------------------------------------------- 1 | // Copyright (c) andy840119 . Licensed under the GPL Licence. 2 | // See the LICENCE file in the repository root for full licence text. 3 | 4 | namespace osu.Game.Rulesets.Karaoke.Screens.Edit.Beatmaps.Lyrics.Content.Compose; 5 | 6 | public enum PanelDirection 7 | { 8 | Left, 9 | 10 | Right, 11 | } 12 | -------------------------------------------------------------------------------- /osu.Game.Rulesets.Karaoke/Screens/Edit/Beatmaps/Lyrics/Content/Compose/Panels/InvalidPanel.cs: -------------------------------------------------------------------------------- 1 | // Copyright (c) andy840119 . Licensed under the GPL Licence. 2 | // See the LICENCE file in the repository root for full licence text. 3 | 4 | using System.Collections.Generic; 5 | using osu.Framework.Graphics; 6 | 7 | namespace osu.Game.Rulesets.Karaoke.Screens.Edit.Beatmaps.Lyrics.Content.Compose.Panels; 8 | 9 | public partial class InvalidPanel : Panel 10 | { 11 | public InvalidPanel() 12 | { 13 | Width = 200; 14 | Height = 300; 15 | } 16 | 17 | protected override IReadOnlyList CreateSections() => 18 | new Drawable[] 19 | { 20 | new IssueSection(), 21 | }; 22 | } 23 | -------------------------------------------------------------------------------- /osu.Game.Rulesets.Karaoke/Screens/Edit/Beatmaps/Lyrics/Content/Compose/Panels/PropertyPanel.cs: -------------------------------------------------------------------------------- 1 | // Copyright (c) andy840119 . Licensed under the GPL Licence. 2 | // See the LICENCE file in the repository root for full licence text. 3 | 4 | using System; 5 | using System.Collections.Generic; 6 | using osu.Framework.Graphics; 7 | 8 | namespace osu.Game.Rulesets.Karaoke.Screens.Edit.Beatmaps.Lyrics.Content.Compose.Panels; 9 | 10 | public partial class PropertyPanel : Panel 11 | { 12 | public PropertyPanel() 13 | { 14 | Width = 200; 15 | RelativeSizeAxes = Axes.Y; 16 | } 17 | 18 | protected override IReadOnlyList CreateSections() 19 | { 20 | return Array.Empty(); 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /osu.Game.Rulesets.Karaoke/Screens/Edit/Beatmaps/Lyrics/Content/List/ListContent.cs: -------------------------------------------------------------------------------- 1 | // Copyright (c) andy840119 . Licensed under the GPL Licence. 2 | // See the LICENCE file in the repository root for full licence text. 3 | 4 | using osu.Framework.Graphics; 5 | 6 | namespace osu.Game.Rulesets.Karaoke.Screens.Edit.Beatmaps.Lyrics.Content.List; 7 | 8 | public partial class ListContent : MainContent 9 | { 10 | public ListContent() 11 | { 12 | InternalChildren = new[] 13 | { 14 | new PreviewLyricList 15 | { 16 | RelativeSizeAxes = Axes.Both, 17 | }, 18 | }; 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /osu.Game.Rulesets.Karaoke/Screens/Edit/Beatmaps/Lyrics/Content/MainContent.cs: -------------------------------------------------------------------------------- 1 | // Copyright (c) andy840119 . Licensed under the GPL Licence. 2 | // See the LICENCE file in the repository root for full licence text. 3 | 4 | using osu.Framework.Graphics.Containers; 5 | 6 | namespace osu.Game.Rulesets.Karaoke.Screens.Edit.Beatmaps.Lyrics.Content; 7 | 8 | public partial class MainContent : CompositeDrawable; 9 | -------------------------------------------------------------------------------- /osu.Game.Rulesets.Karaoke/Screens/Edit/Beatmaps/Lyrics/IIssueNavigator.cs: -------------------------------------------------------------------------------- 1 | // Copyright (c) andy840119 . Licensed under the GPL Licence. 2 | // See the LICENCE file in the repository root for full licence text. 3 | 4 | using osu.Game.Rulesets.Edit.Checks.Components; 5 | 6 | namespace osu.Game.Rulesets.Karaoke.Screens.Edit.Beatmaps.Lyrics; 7 | 8 | public interface IIssueNavigator 9 | { 10 | void Navigate(Issue issue); 11 | } 12 | -------------------------------------------------------------------------------- /osu.Game.Rulesets.Karaoke/Screens/Edit/Beatmaps/Lyrics/ILyricEditorClipboard.cs: -------------------------------------------------------------------------------- 1 | // Copyright (c) andy840119 . Licensed under the GPL Licence. 2 | // See the LICENCE file in the repository root for full licence text. 3 | 4 | namespace osu.Game.Rulesets.Karaoke.Screens.Edit.Beatmaps.Lyrics; 5 | 6 | public interface ILyricEditorClipboard 7 | { 8 | bool Cut(); 9 | 10 | bool Copy(); 11 | 12 | bool Paste(); 13 | } 14 | -------------------------------------------------------------------------------- /osu.Game.Rulesets.Karaoke/Screens/Edit/Beatmaps/Lyrics/ILyricEditorVerifier.cs: -------------------------------------------------------------------------------- 1 | // Copyright (c) andy840119 . Licensed under the GPL Licence. 2 | // See the LICENCE file in the repository root for full licence text. 3 | 4 | using osu.Framework.Bindables; 5 | using osu.Game.Rulesets.Edit.Checks.Components; 6 | using osu.Game.Rulesets.Karaoke.Objects; 7 | 8 | namespace osu.Game.Rulesets.Karaoke.Screens.Edit.Beatmaps.Lyrics; 9 | 10 | public interface ILyricEditorVerifier : IEditorVerifier 11 | { 12 | IBindableList GetBindable(KaraokeHitObject hitObject); 13 | 14 | void RefreshByHitObject(KaraokeHitObject hitObject); 15 | } 16 | -------------------------------------------------------------------------------- /osu.Game.Rulesets.Karaoke/Screens/Edit/Beatmaps/Lyrics/LyricEditorLayout.cs: -------------------------------------------------------------------------------- 1 | // Copyright (c) andy840119 . Licensed under the GPL Licence. 2 | // See the LICENCE file in the repository root for full licence text. 3 | 4 | using System; 5 | 6 | namespace osu.Game.Rulesets.Karaoke.Screens.Edit.Beatmaps.Lyrics; 7 | 8 | [Flags] 9 | public enum LyricEditorLayout 10 | { 11 | /// 12 | /// Show the list of lyrics in the main content area. 13 | /// 14 | List = 1, 15 | 16 | /// 17 | /// Show the composer at the top of the main content area. 18 | /// User can select the edit lyric at the bottom of the compose area. 19 | /// 20 | Compose = 1 << 1, 21 | } 22 | -------------------------------------------------------------------------------- /osu.Game.Rulesets.Karaoke/Screens/Edit/Beatmaps/Lyrics/OsuColourExtensions.cs: -------------------------------------------------------------------------------- 1 | // Copyright (c) andy840119 . Licensed under the GPL Licence. 2 | // See the LICENCE file in the repository root for full licence text. 3 | 4 | using osu.Game.Graphics; 5 | using osu.Game.Rulesets.Karaoke.Objects; 6 | using osuTK.Graphics; 7 | 8 | namespace osu.Game.Rulesets.Karaoke.Screens.Edit.Beatmaps.Lyrics; 9 | 10 | public static class OsuColourExtensions 11 | { 12 | // todo: this should be moved to a more appropriate place. 13 | // or just delete it. 14 | public static Color4 GetRecordingTimeTagCaretColour(this OsuColour colours, TimeTag timeTag) 15 | => timeTag.Time.HasValue ? colours.Red : colours.Gray3; 16 | } 17 | -------------------------------------------------------------------------------- /osu.Game.Rulesets.Karaoke/Screens/Edit/Beatmaps/Lyrics/Settings/Components/Markdown/SwitchModeDescriptionAction.cs: -------------------------------------------------------------------------------- 1 | // Copyright (c) andy840119 . Licensed under the GPL Licence. 2 | // See the LICENCE file in the repository root for full licence text. 3 | 4 | using osu.Framework.Localisation; 5 | using osu.Game.Rulesets.Karaoke.Screens.Edit.Components.Markdown; 6 | 7 | namespace osu.Game.Rulesets.Karaoke.Screens.Edit.Beatmaps.Lyrics.Settings.Components.Markdown; 8 | 9 | public struct SwitchModeDescriptionAction : IDescriptionAction 10 | { 11 | public LocalisableString Text { get; set; } 12 | 13 | public LyricEditorMode Mode { get; set; } 14 | } 15 | -------------------------------------------------------------------------------- /osu.Game.Rulesets.Karaoke/Screens/Edit/Beatmaps/Lyrics/Settings/Language/LanguageEditModeSpecialAction.cs: -------------------------------------------------------------------------------- 1 | // Copyright (c) andy840119 . Licensed under the GPL Licence. 2 | // See the LICENCE file in the repository root for full licence text. 3 | 4 | namespace osu.Game.Rulesets.Karaoke.Screens.Edit.Beatmaps.Lyrics.Settings.Language; 5 | 6 | public enum LanguageEditModeSpecialAction 7 | { 8 | AutoGenerate, 9 | 10 | BatchSelect, 11 | } 12 | -------------------------------------------------------------------------------- /osu.Game.Rulesets.Karaoke/Screens/Edit/Beatmaps/Lyrics/Settings/LyricEditorSettings.cs: -------------------------------------------------------------------------------- 1 | // Copyright (c) andy840119 . Licensed under the GPL Licence. 2 | // See the LICENCE file in the repository root for full licence text. 3 | 4 | using osu.Framework.Allocation; 5 | 6 | namespace osu.Game.Rulesets.Karaoke.Screens.Edit.Beatmaps.Lyrics.Settings; 7 | 8 | public abstract partial class LyricEditorSettings : EditorSettings 9 | { 10 | public abstract SettingsDirection Direction { get; } 11 | 12 | public abstract float SettingsWidth { get; } 13 | 14 | [BackgroundDependencyLoader] 15 | private void load(ILyricEditorState state, LyricEditorColourProvider colourProvider) 16 | { 17 | // change the background colour to the lighter one. 18 | ChangeBackgroundColour(colourProvider.Background3(state.Mode)); 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /osu.Game.Rulesets.Karaoke/Screens/Edit/Beatmaps/Lyrics/Settings/Notes/NoteEditModeSpecialAction.cs: -------------------------------------------------------------------------------- 1 | // Copyright (c) andy840119 . Licensed under the GPL Licence. 2 | // See the LICENCE file in the repository root for full licence text. 3 | 4 | namespace osu.Game.Rulesets.Karaoke.Screens.Edit.Beatmaps.Lyrics.Settings.Notes; 5 | 6 | public enum NoteEditModeSpecialAction 7 | { 8 | AutoGenerate, 9 | 10 | SyncTime, 11 | 12 | Clear, 13 | } 14 | -------------------------------------------------------------------------------- /osu.Game.Rulesets.Karaoke/Screens/Edit/Beatmaps/Lyrics/Settings/Notes/NoteEditPropertyMode.cs: -------------------------------------------------------------------------------- 1 | // Copyright (c) andy840119 . Licensed under the GPL Licence. 2 | // See the LICENCE file in the repository root for full licence text. 3 | 4 | namespace osu.Game.Rulesets.Karaoke.Screens.Edit.Beatmaps.Lyrics.Settings.Notes; 5 | 6 | public enum NoteEditPropertyMode 7 | { 8 | Text, 9 | 10 | RubyText, 11 | 12 | Display, 13 | } 14 | -------------------------------------------------------------------------------- /osu.Game.Rulesets.Karaoke/Screens/Edit/Beatmaps/Lyrics/Settings/SettingsDirection.cs: -------------------------------------------------------------------------------- 1 | // Copyright (c) andy840119 . Licensed under the GPL Licence. 2 | // See the LICENCE file in the repository root for full licence text. 3 | 4 | namespace osu.Game.Rulesets.Karaoke.Screens.Edit.Beatmaps.Lyrics.Settings; 5 | 6 | public enum SettingsDirection 7 | { 8 | /// 9 | /// At the right side of the main lyric editor. 10 | /// 11 | Left, 12 | 13 | /// 14 | /// At the right side of the main lyric editor. 15 | /// 16 | Right, 17 | } 18 | -------------------------------------------------------------------------------- /osu.Game.Rulesets.Karaoke/Screens/Edit/Beatmaps/Lyrics/Settings/SingerSettings.cs: -------------------------------------------------------------------------------- 1 | // Copyright (c) andy840119 . Licensed under the GPL Licence. 2 | // See the LICENCE file in the repository root for full licence text. 3 | 4 | using System.Collections.Generic; 5 | using osu.Game.Rulesets.Karaoke.Screens.Edit.Beatmaps.Lyrics.Settings.Singers; 6 | 7 | namespace osu.Game.Rulesets.Karaoke.Screens.Edit.Beatmaps.Lyrics.Settings; 8 | 9 | public partial class SingerSettings : LyricEditorSettings 10 | { 11 | public override SettingsDirection Direction => SettingsDirection.Left; 12 | 13 | public override float SettingsWidth => 300; 14 | 15 | protected override IReadOnlyList CreateEditorSections() => new[] 16 | { 17 | new SingerEditSection(), 18 | }; 19 | } 20 | -------------------------------------------------------------------------------- /osu.Game.Rulesets.Karaoke/Screens/Edit/Beatmaps/Lyrics/Settings/Text/TextEditModeSpecialAction.cs: -------------------------------------------------------------------------------- 1 | // Copyright (c) andy840119 . Licensed under the GPL Licence. 2 | // See the LICENCE file in the repository root for full licence text. 3 | 4 | namespace osu.Game.Rulesets.Karaoke.Screens.Edit.Beatmaps.Lyrics.Settings.Text; 5 | 6 | public enum TextEditModeSpecialAction 7 | { 8 | Copy, 9 | 10 | Delete, 11 | 12 | Move, 13 | } 14 | -------------------------------------------------------------------------------- /osu.Game.Rulesets.Karaoke/Screens/Edit/Beatmaps/Lyrics/Settings/TimeTags/TimeTagRecordingToolSection.cs: -------------------------------------------------------------------------------- 1 | // Copyright (c) andy840119 . Licensed under the GPL Licence. 2 | // See the LICENCE file in the repository root for full licence text. 3 | 4 | using osu.Framework.Allocation; 5 | using osu.Framework.Graphics; 6 | using osu.Framework.Localisation; 7 | 8 | namespace osu.Game.Rulesets.Karaoke.Screens.Edit.Beatmaps.Lyrics.Settings.TimeTags; 9 | 10 | public partial class TimeTagRecordingToolSection : EditorSection 11 | { 12 | protected override LocalisableString Title => "Tool"; 13 | 14 | [BackgroundDependencyLoader] 15 | private void load() 16 | { 17 | Children = new Drawable[] 18 | { 19 | new RecordingTapControl(), 20 | }; 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /osu.Game.Rulesets.Karaoke/Screens/Edit/Beatmaps/Lyrics/States/LyricEditorSelectingAction.cs: -------------------------------------------------------------------------------- 1 | // Copyright (c) andy840119 . Licensed under the GPL Licence. 2 | // See the LICENCE file in the repository root for full licence text. 3 | 4 | namespace osu.Game.Rulesets.Karaoke.Screens.Edit.Beatmaps.Lyrics.States; 5 | 6 | public enum LyricEditorSelectingAction 7 | { 8 | Apply, 9 | 10 | Cancel, 11 | } 12 | -------------------------------------------------------------------------------- /osu.Game.Rulesets.Karaoke/Screens/Edit/Beatmaps/Lyrics/States/Modes/EditLanguageModeState.cs: -------------------------------------------------------------------------------- 1 | // Copyright (c) andy840119 . Licensed under the GPL Licence. 2 | // See the LICENCE file in the repository root for full licence text. 3 | 4 | using osu.Framework.Bindables; 5 | using osu.Framework.Graphics; 6 | using osu.Game.Rulesets.Karaoke.Screens.Edit.Beatmaps.Lyrics.Settings.Language; 7 | 8 | namespace osu.Game.Rulesets.Karaoke.Screens.Edit.Beatmaps.Lyrics.States.Modes; 9 | 10 | public partial class EditLanguageModeState : Component, IEditLanguageModeState 11 | { 12 | public Bindable BindableSpecialAction { get; } = new(); 13 | 14 | public Bindable BindableEditStep { get; } = new(); 15 | } 16 | -------------------------------------------------------------------------------- /osu.Game.Rulesets.Karaoke/Screens/Edit/Beatmaps/Lyrics/States/Modes/EditReferenceLyricModeState.cs: -------------------------------------------------------------------------------- 1 | // Copyright (c) andy840119 . Licensed under the GPL Licence. 2 | // See the LICENCE file in the repository root for full licence text. 3 | 4 | using osu.Framework.Bindables; 5 | using osu.Framework.Graphics; 6 | 7 | namespace osu.Game.Rulesets.Karaoke.Screens.Edit.Beatmaps.Lyrics.States.Modes; 8 | 9 | public partial class EditReferenceLyricModeState : Component, IEditReferenceLyricModeState 10 | { 11 | public Bindable BindableEditStep { get; } = new(); 12 | } 13 | -------------------------------------------------------------------------------- /osu.Game.Rulesets.Karaoke/Screens/Edit/Beatmaps/Lyrics/States/Modes/EditTextModeState.cs: -------------------------------------------------------------------------------- 1 | // Copyright (c) andy840119 . Licensed under the GPL Licence. 2 | // See the LICENCE file in the repository root for full licence text. 3 | 4 | using osu.Framework.Bindables; 5 | using osu.Framework.Graphics; 6 | using osu.Game.Rulesets.Karaoke.Screens.Edit.Beatmaps.Lyrics.Settings.Text; 7 | 8 | namespace osu.Game.Rulesets.Karaoke.Screens.Edit.Beatmaps.Lyrics.States.Modes; 9 | 10 | public partial class EditTextModeState : Component, IEditTextModeState 11 | { 12 | public Bindable BindableEditStep { get; } = new(); 13 | 14 | public Bindable BindableSpecialAction { get; } = new(); 15 | } 16 | -------------------------------------------------------------------------------- /osu.Game.Rulesets.Karaoke/Screens/Edit/Beatmaps/Lyrics/States/Modes/IEditLanguageModeState.cs: -------------------------------------------------------------------------------- 1 | // Copyright (c) andy840119 . Licensed under the GPL Licence. 2 | // See the LICENCE file in the repository root for full licence text. 3 | 4 | using osu.Game.Rulesets.Karaoke.Screens.Edit.Beatmaps.Lyrics.Settings.Language; 5 | 6 | namespace osu.Game.Rulesets.Karaoke.Screens.Edit.Beatmaps.Lyrics.States.Modes; 7 | 8 | public interface IEditLanguageModeState : IHasEditStep, IHasSpecialAction; 9 | -------------------------------------------------------------------------------- /osu.Game.Rulesets.Karaoke/Screens/Edit/Beatmaps/Lyrics/States/Modes/IEditNoteModeState.cs: -------------------------------------------------------------------------------- 1 | // Copyright (c) andy840119 . Licensed under the GPL Licence. 2 | // See the LICENCE file in the repository root for full licence text. 3 | 4 | using osu.Framework.Bindables; 5 | using osu.Game.Rulesets.Karaoke.Objects; 6 | using osu.Game.Rulesets.Karaoke.Screens.Edit.Beatmaps.Lyrics.Settings.Notes; 7 | 8 | namespace osu.Game.Rulesets.Karaoke.Screens.Edit.Beatmaps.Lyrics.States.Modes; 9 | 10 | public interface IEditNoteModeState : IHasEditStep, IHasSpecialAction, IHasBlueprintSelection 11 | { 12 | Bindable BindableNoteEditPropertyMode { get; } 13 | } 14 | -------------------------------------------------------------------------------- /osu.Game.Rulesets.Karaoke/Screens/Edit/Beatmaps/Lyrics/States/Modes/IEditReferenceLyricModeState.cs: -------------------------------------------------------------------------------- 1 | // Copyright (c) andy840119 . Licensed under the GPL Licence. 2 | // See the LICENCE file in the repository root for full licence text. 3 | 4 | namespace osu.Game.Rulesets.Karaoke.Screens.Edit.Beatmaps.Lyrics.States.Modes; 5 | 6 | public interface IEditReferenceLyricModeState : IHasEditStep; 7 | -------------------------------------------------------------------------------- /osu.Game.Rulesets.Karaoke/Screens/Edit/Beatmaps/Lyrics/States/Modes/IEditRomanisationModeState.cs: -------------------------------------------------------------------------------- 1 | // Copyright (c) andy840119 . Licensed under the GPL Licence. 2 | // See the LICENCE file in the repository root for full licence text. 3 | 4 | using osu.Game.Rulesets.Karaoke.Objects; 5 | 6 | namespace osu.Game.Rulesets.Karaoke.Screens.Edit.Beatmaps.Lyrics.States.Modes; 7 | 8 | public interface IEditRomanisationModeState : IHasEditStep, IHasBlueprintSelection; 9 | -------------------------------------------------------------------------------- /osu.Game.Rulesets.Karaoke/Screens/Edit/Beatmaps/Lyrics/States/Modes/IEditRubyModeState.cs: -------------------------------------------------------------------------------- 1 | // Copyright (c) andy840119 . Licensed under the GPL Licence. 2 | // See the LICENCE file in the repository root for full licence text. 3 | 4 | using osu.Framework.Bindables; 5 | using osu.Game.Rulesets.Karaoke.Objects; 6 | 7 | namespace osu.Game.Rulesets.Karaoke.Screens.Edit.Beatmaps.Lyrics.States.Modes; 8 | 9 | public interface IEditRubyModeState : IHasEditStep, IHasBlueprintSelection 10 | { 11 | Bindable BindableRubyTagEditMode { get; } 12 | } 13 | -------------------------------------------------------------------------------- /osu.Game.Rulesets.Karaoke/Screens/Edit/Beatmaps/Lyrics/States/Modes/IEditTextModeState.cs: -------------------------------------------------------------------------------- 1 | // Copyright (c) andy840119 . Licensed under the GPL Licence. 2 | // See the LICENCE file in the repository root for full licence text. 3 | 4 | using osu.Game.Rulesets.Karaoke.Screens.Edit.Beatmaps.Lyrics.Settings.Text; 5 | 6 | namespace osu.Game.Rulesets.Karaoke.Screens.Edit.Beatmaps.Lyrics.States.Modes; 7 | 8 | public interface IEditTextModeState : IHasEditStep, IHasSpecialAction; 9 | -------------------------------------------------------------------------------- /osu.Game.Rulesets.Karaoke/Screens/Edit/Beatmaps/Lyrics/States/Modes/IEditTimeTagModeState.cs: -------------------------------------------------------------------------------- 1 | // Copyright (c) andy840119 . Licensed under the GPL Licence. 2 | // See the LICENCE file in the repository root for full licence text. 3 | 4 | using osu.Framework.Bindables; 5 | using osu.Game.Rulesets.Karaoke.Objects; 6 | 7 | namespace osu.Game.Rulesets.Karaoke.Screens.Edit.Beatmaps.Lyrics.States.Modes; 8 | 9 | public interface IEditTimeTagModeState : IHasEditStep, IHasBlueprintSelection 10 | { 11 | BindableFloat BindableRecordZoom { get; } 12 | 13 | BindableFloat BindableAdjustZoom { get; } 14 | 15 | Bindable BindableCreateType { get; } 16 | } 17 | -------------------------------------------------------------------------------- /osu.Game.Rulesets.Karaoke/Screens/Edit/Beatmaps/Lyrics/States/Modes/IHasBlueprintSelection.cs: -------------------------------------------------------------------------------- 1 | // Copyright (c) andy840119 . Licensed under the GPL Licence. 2 | // See the LICENCE file in the repository root for full licence text. 3 | 4 | using osu.Framework.Bindables; 5 | 6 | namespace osu.Game.Rulesets.Karaoke.Screens.Edit.Beatmaps.Lyrics.States.Modes; 7 | 8 | public interface IHasBlueprintSelection where T : class 9 | { 10 | BindableList SelectedItems { get; } 11 | 12 | void Select(T item); 13 | } 14 | -------------------------------------------------------------------------------- /osu.Game.Rulesets.Karaoke/Screens/Edit/Beatmaps/Lyrics/States/Modes/IHasEditStep.cs: -------------------------------------------------------------------------------- 1 | // Copyright (c) andy840119 . Licensed under the GPL Licence. 2 | // See the LICENCE file in the repository root for full licence text. 3 | 4 | using System; 5 | using osu.Framework.Bindables; 6 | 7 | namespace osu.Game.Rulesets.Karaoke.Screens.Edit.Beatmaps.Lyrics.States.Modes; 8 | 9 | public interface IHasEditStep where TEditStep : Enum 10 | { 11 | Bindable BindableEditStep { get; } 12 | 13 | TEditStep EditStep => BindableEditStep.Value; 14 | } 15 | -------------------------------------------------------------------------------- /osu.Game.Rulesets.Karaoke/Screens/Edit/Beatmaps/Lyrics/States/Modes/IHasSpecialAction.cs: -------------------------------------------------------------------------------- 1 | // Copyright (c) andy840119 . Licensed under the GPL Licence. 2 | // See the LICENCE file in the repository root for full licence text. 3 | 4 | using System; 5 | using osu.Framework.Bindables; 6 | 7 | namespace osu.Game.Rulesets.Karaoke.Screens.Edit.Beatmaps.Lyrics.States.Modes; 8 | 9 | public interface IHasSpecialAction where TSpecialAction : Enum 10 | { 11 | Bindable BindableSpecialAction { get; } 12 | } 13 | -------------------------------------------------------------------------------- /osu.Game.Rulesets.Karaoke/Screens/Edit/Beatmaps/Lyrics/States/Modes/LanguageEditStep.cs: -------------------------------------------------------------------------------- 1 | // Copyright (c) andy840119 . Licensed under the GPL Licence. 2 | // See the LICENCE file in the repository root for full licence text. 3 | 4 | namespace osu.Game.Rulesets.Karaoke.Screens.Edit.Beatmaps.Lyrics.States.Modes; 5 | 6 | public enum LanguageEditStep 7 | { 8 | Generate, 9 | 10 | Verify, 11 | } 12 | -------------------------------------------------------------------------------- /osu.Game.Rulesets.Karaoke/Screens/Edit/Beatmaps/Lyrics/States/Modes/NoteEditStep.cs: -------------------------------------------------------------------------------- 1 | // Copyright (c) andy840119 . Licensed under the GPL Licence. 2 | // See the LICENCE file in the repository root for full licence text. 3 | 4 | namespace osu.Game.Rulesets.Karaoke.Screens.Edit.Beatmaps.Lyrics.States.Modes; 5 | 6 | public enum NoteEditStep 7 | { 8 | Generate, 9 | 10 | Edit, 11 | 12 | Verify, 13 | } 14 | -------------------------------------------------------------------------------- /osu.Game.Rulesets.Karaoke/Screens/Edit/Beatmaps/Lyrics/States/Modes/ReferenceLyricEditStep.cs: -------------------------------------------------------------------------------- 1 | // Copyright (c) andy840119 . Licensed under the GPL Licence. 2 | // See the LICENCE file in the repository root for full licence text. 3 | 4 | namespace osu.Game.Rulesets.Karaoke.Screens.Edit.Beatmaps.Lyrics.States.Modes; 5 | 6 | public enum ReferenceLyricEditStep 7 | { 8 | Edit, 9 | 10 | Verify, 11 | } 12 | -------------------------------------------------------------------------------- /osu.Game.Rulesets.Karaoke/Screens/Edit/Beatmaps/Lyrics/States/Modes/RomanisationTagEditStep.cs: -------------------------------------------------------------------------------- 1 | // Copyright (c) andy840119 . Licensed under the GPL Licence. 2 | // See the LICENCE file in the repository root for full licence text. 3 | 4 | namespace osu.Game.Rulesets.Karaoke.Screens.Edit.Beatmaps.Lyrics.States.Modes; 5 | 6 | public enum RomanisationTagEditStep 7 | { 8 | Generate, 9 | 10 | Edit, 11 | 12 | Verify, 13 | } 14 | -------------------------------------------------------------------------------- /osu.Game.Rulesets.Karaoke/Screens/Edit/Beatmaps/Lyrics/States/Modes/RubyTagEditMode.cs: -------------------------------------------------------------------------------- 1 | // Copyright (c) andy840119 . Licensed under the GPL Licence. 2 | // See the LICENCE file in the repository root for full licence text. 3 | 4 | namespace osu.Game.Rulesets.Karaoke.Screens.Edit.Beatmaps.Lyrics.States.Modes; 5 | 6 | public enum RubyTagEditMode 7 | { 8 | Create, 9 | 10 | Modify, 11 | } 12 | -------------------------------------------------------------------------------- /osu.Game.Rulesets.Karaoke/Screens/Edit/Beatmaps/Lyrics/States/Modes/RubyTagEditStep.cs: -------------------------------------------------------------------------------- 1 | // Copyright (c) andy840119 . Licensed under the GPL Licence. 2 | // See the LICENCE file in the repository root for full licence text. 3 | 4 | namespace osu.Game.Rulesets.Karaoke.Screens.Edit.Beatmaps.Lyrics.States.Modes; 5 | 6 | public enum RubyTagEditStep 7 | { 8 | Generate, 9 | 10 | Edit, 11 | 12 | Verify, 13 | } 14 | -------------------------------------------------------------------------------- /osu.Game.Rulesets.Karaoke/Screens/Edit/Beatmaps/Lyrics/States/Modes/TextEditStep.cs: -------------------------------------------------------------------------------- 1 | // Copyright (c) andy840119 . Licensed under the GPL Licence. 2 | // See the LICENCE file in the repository root for full licence text. 3 | 4 | namespace osu.Game.Rulesets.Karaoke.Screens.Edit.Beatmaps.Lyrics.States.Modes; 5 | 6 | public enum TextEditStep 7 | { 8 | Typing, 9 | 10 | Split, 11 | 12 | Verify, 13 | } 14 | -------------------------------------------------------------------------------- /osu.Game.Rulesets.Karaoke/Screens/Edit/Beatmaps/Lyrics/States/Modes/TimeTagEditStep.cs: -------------------------------------------------------------------------------- 1 | // Copyright (c) andy840119 . Licensed under the GPL Licence. 2 | // See the LICENCE file in the repository root for full licence text. 3 | 4 | namespace osu.Game.Rulesets.Karaoke.Screens.Edit.Beatmaps.Lyrics.States.Modes; 5 | 6 | public enum TimeTagEditStep 7 | { 8 | Create, 9 | 10 | Recording, 11 | 12 | Adjust, 13 | } 14 | -------------------------------------------------------------------------------- /osu.Game.Rulesets.Karaoke/Screens/Edit/Beatmaps/Lyrics/States/MovingCaretAction.cs: -------------------------------------------------------------------------------- 1 | // Copyright (c) andy840119 . Licensed under the GPL Licence. 2 | // See the LICENCE file in the repository root for full licence text. 3 | 4 | namespace osu.Game.Rulesets.Karaoke.Screens.Edit.Beatmaps.Lyrics.States; 5 | 6 | public enum MovingCaretAction 7 | { 8 | PreviousLyric, 9 | 10 | NextLyric, 11 | 12 | FirstLyric, 13 | 14 | LastLyric, 15 | 16 | PreviousIndex, 17 | 18 | NextIndex, 19 | 20 | FirstIndex, 21 | 22 | LastIndex, 23 | } 24 | -------------------------------------------------------------------------------- /osu.Game.Rulesets.Karaoke/Screens/Edit/Beatmaps/Pages/Components/Timeline/PreviewLyricSelectionBlueprint.cs: -------------------------------------------------------------------------------- 1 | // Copyright (c) andy840119 . Licensed under the GPL Licence. 2 | // See the LICENCE file in the repository root for full licence text. 3 | 4 | using osu.Game.Rulesets.Karaoke.Objects; 5 | using osu.Game.Rulesets.Karaoke.Screens.Edit.Components.Timeline; 6 | 7 | namespace osu.Game.Rulesets.Karaoke.Screens.Edit.Beatmaps.Pages.Components.Timeline; 8 | 9 | public partial class PreviewLyricSelectionBlueprint : EditableLyricTimelineSelectionBlueprint 10 | { 11 | public PreviewLyricSelectionBlueprint(Lyric item) 12 | : base(item) 13 | { 14 | Selectable = false; 15 | } 16 | 17 | protected override void OnSelectableStatusChanged(bool selectable) 18 | { 19 | Alpha = 0.5f; 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /osu.Game.Rulesets.Karaoke/Screens/Edit/Beatmaps/Pages/IPageEditorVerifier.cs: -------------------------------------------------------------------------------- 1 | // Copyright (c) andy840119 . Licensed under the GPL Licence. 2 | // See the LICENCE file in the repository root for full licence text. 3 | 4 | using osu.Game.Rulesets.Edit.Checks.Components; 5 | 6 | namespace osu.Game.Rulesets.Karaoke.Screens.Edit.Beatmaps.Pages; 7 | 8 | public interface IPageEditorVerifier : IEditorVerifier 9 | { 10 | void Navigate(Issue issue); 11 | } 12 | -------------------------------------------------------------------------------- /osu.Game.Rulesets.Karaoke/Screens/Edit/Beatmaps/Pages/IPageStateProvider.cs: -------------------------------------------------------------------------------- 1 | // Copyright (c) andy840119 . Licensed under the GPL Licence. 2 | // See the LICENCE file in the repository root for full licence text. 3 | 4 | using osu.Framework.Bindables; 5 | using osu.Game.Rulesets.Karaoke.Beatmaps.Metadatas; 6 | 7 | namespace osu.Game.Rulesets.Karaoke.Screens.Edit.Beatmaps.Pages; 8 | 9 | public interface IPageStateProvider 10 | { 11 | Bindable BindableEditMode { get; } 12 | 13 | PageEditorEditMode EditMode => BindableEditMode.Value; 14 | 15 | PageInfo PageInfo { get; } 16 | 17 | BindableList SelectedItems { get; } 18 | 19 | void Select(Page item); 20 | 21 | BindableFloat BindableZoom { get; } 22 | 23 | BindableFloat BindableCurrent { get; } 24 | } 25 | -------------------------------------------------------------------------------- /osu.Game.Rulesets.Karaoke/Screens/Edit/Beatmaps/Pages/PageEditorEditMode.cs: -------------------------------------------------------------------------------- 1 | // Copyright (c) andy840119 . Licensed under the GPL Licence. 2 | // See the LICENCE file in the repository root for full licence text. 3 | 4 | namespace osu.Game.Rulesets.Karaoke.Screens.Edit.Beatmaps.Pages; 5 | 6 | public enum PageEditorEditMode 7 | { 8 | Generate, 9 | 10 | Edit, 11 | 12 | Verify, 13 | } 14 | -------------------------------------------------------------------------------- /osu.Game.Rulesets.Karaoke/Screens/Edit/Beatmaps/Singers/Detail/EditSingerSection.cs: -------------------------------------------------------------------------------- 1 | // Copyright (c) andy840119 . Licensed under the GPL Licence. 2 | // See the LICENCE file in the repository root for full licence text. 3 | 4 | namespace osu.Game.Rulesets.Karaoke.Screens.Edit.Beatmaps.Singers.Detail; 5 | 6 | internal abstract partial class EditSingerSection : Section; 7 | -------------------------------------------------------------------------------- /osu.Game.Rulesets.Karaoke/Screens/Edit/Beatmaps/Singers/ISingerScreenScrollingInfoProvider.cs: -------------------------------------------------------------------------------- 1 | // Copyright (c) andy840119 . Licensed under the GPL Licence. 2 | // See the LICENCE file in the repository root for full licence text. 3 | 4 | using osu.Framework.Bindables; 5 | 6 | namespace osu.Game.Rulesets.Karaoke.Screens.Edit.Beatmaps.Singers; 7 | 8 | public interface ISingerScreenScrollingInfoProvider 9 | { 10 | BindableFloat BindableZoom { get; } 11 | 12 | BindableFloat BindableCurrent { get; } 13 | } 14 | -------------------------------------------------------------------------------- /osu.Game.Rulesets.Karaoke/Screens/Edit/Beatmaps/Translations/Components/LanguageDropdown.cs: -------------------------------------------------------------------------------- 1 | // Copyright (c) andy840119 . Licensed under the GPL Licence. 2 | // See the LICENCE file in the repository root for full licence text. 3 | 4 | using System.Globalization; 5 | using osu.Framework.Localisation; 6 | using osu.Game.Graphics.UserInterface; 7 | using osu.Game.Rulesets.Karaoke.Utils; 8 | 9 | namespace osu.Game.Rulesets.Karaoke.Screens.Edit.Beatmaps.Translations.Components; 10 | 11 | public partial class LanguageDropdown : OsuDropdown 12 | { 13 | protected override LocalisableString GenerateItemText(CultureInfo item) 14 | => CultureInfoUtils.GetLanguageDisplayText(item); 15 | } 16 | -------------------------------------------------------------------------------- /osu.Game.Rulesets.Karaoke/Screens/Edit/Beatmaps/Translations/ITranslationInfoProvider.cs: -------------------------------------------------------------------------------- 1 | // Copyright (c) andy840119 . Licensed under the GPL Licence. 2 | // See the LICENCE file in the repository root for full licence text. 3 | 4 | using System.Globalization; 5 | using osu.Game.Rulesets.Karaoke.Objects; 6 | 7 | namespace osu.Game.Rulesets.Karaoke.Screens.Edit.Beatmaps.Translations; 8 | 9 | public interface ITranslationInfoProvider 10 | { 11 | string? GetLyricTranslation(Lyric lyric, CultureInfo cultureInfo); 12 | } 13 | -------------------------------------------------------------------------------- /osu.Game.Rulesets.Karaoke/Screens/Edit/Components/Markdown/IDescriptionAction.cs: -------------------------------------------------------------------------------- 1 | // Copyright (c) andy840119 . Licensed under the GPL Licence. 2 | // See the LICENCE file in the repository root for full licence text. 3 | 4 | using osu.Framework.Localisation; 5 | 6 | namespace osu.Game.Rulesets.Karaoke.Screens.Edit.Components.Markdown; 7 | 8 | public interface IDescriptionAction 9 | { 10 | public LocalisableString Text { get; set; } 11 | } 12 | -------------------------------------------------------------------------------- /osu.Game.Rulesets.Karaoke/Screens/Edit/Components/Markdown/InputKeyDescriptionAction.cs: -------------------------------------------------------------------------------- 1 | // Copyright (c) andy840119 . Licensed under the GPL Licence. 2 | // See the LICENCE file in the repository root for full licence text. 3 | 4 | using System.Collections.Generic; 5 | using osu.Framework.Localisation; 6 | 7 | namespace osu.Game.Rulesets.Karaoke.Screens.Edit.Components.Markdown; 8 | 9 | public struct InputKeyDescriptionAction : IDescriptionAction 10 | { 11 | public LocalisableString Text { get; set; } 12 | 13 | public IList AdjustableActions { get; set; } 14 | } 15 | -------------------------------------------------------------------------------- /osu.Game.Rulesets.Karaoke/Screens/Edit/EditorSection.cs: -------------------------------------------------------------------------------- 1 | // Copyright (c) andy840119 . Licensed under the GPL Licence. 2 | // See the LICENCE file in the repository root for full licence text. 3 | 4 | using osu.Framework.Graphics; 5 | 6 | namespace osu.Game.Rulesets.Karaoke.Screens.Edit; 7 | 8 | /// 9 | /// Base section class for lyric editor. 10 | /// todo: should inherit the EditorRoundedScreenSettingsSection eventually, but seems that class haven't ready. 11 | /// 12 | public abstract partial class EditorSection : Section 13 | { 14 | protected EditorSection() 15 | { 16 | Padding = new MarginPadding(0); 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /osu.Game.Rulesets.Karaoke/Screens/Edit/EditorSectionButton.cs: -------------------------------------------------------------------------------- 1 | // Copyright (c) andy840119 . Licensed under the GPL Licence. 2 | // See the LICENCE file in the repository root for full licence text. 3 | 4 | using osu.Framework.Graphics; 5 | using osu.Game.Graphics.UserInterface; 6 | 7 | namespace osu.Game.Rulesets.Karaoke.Screens.Edit; 8 | 9 | public abstract partial class EditorSectionButton : OsuButton 10 | { 11 | protected EditorSectionButton() 12 | { 13 | RelativeSizeAxes = Axes.X; 14 | Content.CornerRadius = 15; 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /osu.Game.Rulesets.Karaoke/Screens/Edit/IEditorVerifier.cs: -------------------------------------------------------------------------------- 1 | // Copyright (c) andy840119 . Licensed under the GPL Licence. 2 | // See the LICENCE file in the repository root for full licence text. 3 | 4 | using System; 5 | using osu.Framework.Bindables; 6 | using osu.Game.Rulesets.Edit.Checks.Components; 7 | 8 | namespace osu.Game.Rulesets.Karaoke.Screens.Edit; 9 | 10 | public interface IEditorVerifier where TEnum : struct, Enum 11 | { 12 | IBindableList GetIssueByType(TEnum type); 13 | 14 | void Refresh(); 15 | } 16 | 17 | public interface IEditorVerifier 18 | { 19 | IBindableList Issues { get; } 20 | 21 | void Refresh(); 22 | } 23 | -------------------------------------------------------------------------------- /osu.Game.Rulesets.Karaoke/Screens/Edit/ISectionItemsEditorProvider.cs: -------------------------------------------------------------------------------- 1 | // Copyright (c) andy840119 . Licensed under the GPL Licence. 2 | // See the LICENCE file in the repository root for full licence text. 3 | 4 | using osu.Framework.Graphics; 5 | 6 | namespace osu.Game.Rulesets.Karaoke.Screens.Edit; 7 | 8 | public interface ISectionItemsEditorProvider 9 | { 10 | void UpdateDisplayOrder(Drawable drawable, int order); 11 | } 12 | -------------------------------------------------------------------------------- /osu.Game.Rulesets.Karaoke/Screens/Edit/Import/Lyrics/IHasTopNavigation.cs: -------------------------------------------------------------------------------- 1 | // Copyright (c) andy840119 . Licensed under the GPL Licence. 2 | // See the LICENCE file in the repository root for full licence text. 3 | 4 | namespace osu.Game.Rulesets.Karaoke.Screens.Edit.Import.Lyrics; 5 | 6 | public interface IHasTopNavigation 7 | { 8 | public TopNavigation CreateNavigation(); 9 | } 10 | -------------------------------------------------------------------------------- /osu.Game.Rulesets.Karaoke/Screens/Edit/Import/Lyrics/IImportStateResolver.cs: -------------------------------------------------------------------------------- 1 | // Copyright (c) andy840119 . Licensed under the GPL Licence. 2 | // See the LICENCE file in the repository root for full licence text. 3 | 4 | namespace osu.Game.Rulesets.Karaoke.Screens.Edit.Import.Lyrics; 5 | 6 | public interface IImportStateResolver 7 | { 8 | void Cancel(); 9 | 10 | void Finish(); 11 | } 12 | -------------------------------------------------------------------------------- /osu.Game.Rulesets.Karaoke/Screens/Edit/Import/Lyrics/ILyricImporterStepScreen.cs: -------------------------------------------------------------------------------- 1 | // Copyright (c) andy840119 . Licensed under the GPL Licence. 2 | // See the LICENCE file in the repository root for full licence text. 3 | 4 | using System; 5 | using osu.Framework.Graphics.Sprites; 6 | using osu.Framework.Screens; 7 | 8 | namespace osu.Game.Rulesets.Karaoke.Screens.Edit.Import.Lyrics; 9 | 10 | public interface ILyricImporterStepScreen : IScreen 11 | { 12 | string Title { get; } 13 | 14 | IconUsage Icon { get; } 15 | 16 | void ConfirmRollBackFromStep(ILyricImporterStepScreen fromScreen, Action callBack); 17 | } 18 | -------------------------------------------------------------------------------- /osu.Game.Rulesets.Karaoke/Screens/Edit/Import/Lyrics/LyricImporterStep.cs: -------------------------------------------------------------------------------- 1 | // Copyright (c) andy840119 . Licensed under the GPL Licence. 2 | // See the LICENCE file in the repository root for full licence text. 3 | 4 | namespace osu.Game.Rulesets.Karaoke.Screens.Edit.Import.Lyrics; 5 | 6 | public enum LyricImporterStep 7 | { 8 | ImportLyric, 9 | 10 | EditLyric, 11 | 12 | AssignLanguage, 13 | 14 | GenerateRuby, 15 | 16 | GenerateTimeTag, 17 | 18 | Success, 19 | } 20 | -------------------------------------------------------------------------------- /osu.Game.Rulesets.Karaoke/Screens/Edit/Import/Lyrics/NotImportStepScreenException.cs: -------------------------------------------------------------------------------- 1 | // Copyright (c) andy840119 . Licensed under the GPL Licence. 2 | // See the LICENCE file in the repository root for full licence text. 3 | 4 | using System; 5 | 6 | namespace osu.Game.Rulesets.Karaoke.Screens.Edit.Import.Lyrics; 7 | 8 | public class NotImportStepScreenException : InvalidOperationException 9 | { 10 | public NotImportStepScreenException() 11 | : base("Screen stack should only contains step screen") 12 | { 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /osu.Game.Rulesets.Karaoke/Screens/Edit/Import/Lyrics/Success/SuccessStepScreen.cs: -------------------------------------------------------------------------------- 1 | // Copyright (c) andy840119 . Licensed under the GPL Licence. 2 | // See the LICENCE file in the repository root for full licence text. 3 | 4 | using osu.Framework.Allocation; 5 | using osu.Framework.Graphics.Sprites; 6 | 7 | namespace osu.Game.Rulesets.Karaoke.Screens.Edit.Import.Lyrics.Success; 8 | 9 | public partial class SuccessStepScreen : LyricImporterStepScreen 10 | { 11 | public override string Title => "Success"; 12 | 13 | public override IconUsage Icon => FontAwesome.Regular.CheckCircle; 14 | 15 | [Resolved] 16 | private IImportStateResolver importStateResolver { get; set; } = null!; 17 | 18 | public override void Complete() 19 | { 20 | importStateResolver.Finish(); 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /osu.Game.Rulesets.Karaoke/Screens/Edit/Stages/Classic/ClassicStageEditorScreenMode.cs: -------------------------------------------------------------------------------- 1 | // Copyright (c) andy840119 . Licensed under the GPL Licence. 2 | // See the LICENCE file in the repository root for full licence text. 3 | 4 | using System.ComponentModel; 5 | 6 | namespace osu.Game.Rulesets.Karaoke.Screens.Edit.Stages.Classic; 7 | 8 | public enum ClassicStageEditorScreenMode 9 | { 10 | [Description("Stage")] 11 | Stage, 12 | 13 | [Description("Config")] 14 | Config, 15 | } 16 | -------------------------------------------------------------------------------- /osu.Game.Rulesets.Karaoke/Screens/Edit/Stages/Classic/ClassicStageScreen.cs: -------------------------------------------------------------------------------- 1 | // Copyright (c) andy840119 . Licensed under the GPL Licence. 2 | // See the LICENCE file in the repository root for full licence text. 3 | 4 | namespace osu.Game.Rulesets.Karaoke.Screens.Edit.Stages.Classic; 5 | 6 | public partial class ClassicStageScreen : GenericEditorScreen 7 | { 8 | public ClassicStageScreen(ClassicStageEditorScreenMode type) 9 | : base(type) 10 | { 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /osu.Game.Rulesets.Karaoke/Screens/Edit/Stages/Classic/Config/ConfigScreen.cs: -------------------------------------------------------------------------------- 1 | // Copyright (c) andy840119 . Licensed under the GPL Licence. 2 | // See the LICENCE file in the repository root for full licence text. 3 | 4 | namespace osu.Game.Rulesets.Karaoke.Screens.Edit.Stages.Classic.Config; 5 | 6 | public partial class ConfigScreen : ClassicStageScreen 7 | { 8 | public ConfigScreen() 9 | : base(ClassicStageEditorScreenMode.Config) 10 | { 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /osu.Game.Rulesets.Karaoke/Screens/Edit/Stages/Classic/Stage/IStageEditorVerifier.cs: -------------------------------------------------------------------------------- 1 | // Copyright (c) andy840119 . Licensed under the GPL Licence. 2 | // See the LICENCE file in the repository root for full licence text. 3 | 4 | using osu.Game.Rulesets.Edit.Checks.Components; 5 | 6 | namespace osu.Game.Rulesets.Karaoke.Screens.Edit.Stages.Classic.Stage; 7 | 8 | public interface IStageEditorVerifier : IEditorVerifier 9 | { 10 | void Navigate(Issue issue); 11 | } 12 | -------------------------------------------------------------------------------- /osu.Game.Rulesets.Karaoke/Screens/Edit/Stages/Classic/Stage/StageEditorEditCategory.cs: -------------------------------------------------------------------------------- 1 | // Copyright (c) andy840119 . Licensed under the GPL Licence. 2 | // See the LICENCE file in the repository root for full licence text. 3 | 4 | using System.ComponentModel; 5 | 6 | namespace osu.Game.Rulesets.Karaoke.Screens.Edit.Stages.Classic.Stage; 7 | 8 | public enum StageEditorEditCategory 9 | { 10 | [Description("Layout")] 11 | Layout, 12 | 13 | [Description("Timing")] 14 | Timing, 15 | 16 | [Description("Style")] 17 | Style, 18 | } 19 | -------------------------------------------------------------------------------- /osu.Game.Rulesets.Karaoke/Screens/Edit/Stages/Classic/Stage/StageEditorEditMode.cs: -------------------------------------------------------------------------------- 1 | // Copyright (c) andy840119 . Licensed under the GPL Licence. 2 | // See the LICENCE file in the repository root for full licence text. 3 | 4 | namespace osu.Game.Rulesets.Karaoke.Screens.Edit.Stages.Classic.Stage; 5 | 6 | public enum StageEditorEditMode 7 | { 8 | Edit, 9 | 10 | Verify, 11 | } 12 | -------------------------------------------------------------------------------- /osu.Game.Rulesets.Karaoke/Screens/Edit/WorkspaceScreen.cs: -------------------------------------------------------------------------------- 1 | // Copyright (c) andy840119 . Licensed under the GPL Licence. 2 | // See the LICENCE file in the repository root for full licence text. 3 | 4 | using osu.Framework.Graphics.Containers; 5 | 6 | namespace osu.Game.Rulesets.Karaoke.Screens.Edit; 7 | 8 | /// 9 | /// It's a switchable screen for able to switch workspace inside the 10 | /// TODO: eventually make this inherit Screen and add a local screen stack inside the Editor. 11 | /// 12 | public abstract partial class WorkspaceScreen : VisibilityContainer 13 | { 14 | public readonly TItem Item; 15 | 16 | protected WorkspaceScreen(TItem item) 17 | { 18 | Item = item; 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /osu.Game.Rulesets.Karaoke/Screens/Skin/Config/LyricConfigSection.cs: -------------------------------------------------------------------------------- 1 | // Copyright (c) andy840119 . Licensed under the GPL Licence. 2 | // See the LICENCE file in the repository root for full licence text. 3 | 4 | namespace osu.Game.Rulesets.Karaoke.Screens.Skin.Config; 5 | 6 | internal abstract partial class LyricConfigSection : Section; 7 | -------------------------------------------------------------------------------- /osu.Game.Rulesets.Karaoke/Screens/Skin/KaraokeSkinEditorScreenMode.cs: -------------------------------------------------------------------------------- 1 | // Copyright (c) andy840119 . Licensed under the GPL Licence. 2 | // See the LICENCE file in the repository root for full licence text. 3 | 4 | using System.ComponentModel; 5 | 6 | namespace osu.Game.Rulesets.Karaoke.Screens.Skin; 7 | 8 | public enum KaraokeSkinEditorScreenMode 9 | { 10 | [Description("Config")] 11 | Config, 12 | 13 | [Description("Style")] 14 | Style, 15 | 16 | [Description("Layout")] 17 | Layout, 18 | } 19 | -------------------------------------------------------------------------------- /osu.Game.Rulesets.Karaoke/Screens/Skin/Style/StyleSection.cs: -------------------------------------------------------------------------------- 1 | // Copyright (c) andy840119 . Licensed under the GPL Licence. 2 | // See the LICENCE file in the repository root for full licence text. 3 | 4 | namespace osu.Game.Rulesets.Karaoke.Screens.Skin.Style; 5 | 6 | internal abstract partial class StyleSection : Section; 7 | -------------------------------------------------------------------------------- /osu.Game.Rulesets.Karaoke/Skinning/Argon/KaraokeArgonSkinTransformer.cs: -------------------------------------------------------------------------------- 1 | // Copyright (c) andy840119 . Licensed under the GPL Licence. 2 | // See the LICENCE file in the repository root for full licence text. 3 | 4 | using osu.Game.Beatmaps; 5 | using osu.Game.Rulesets.Karaoke.Skinning.Default; 6 | using osu.Game.Skinning; 7 | 8 | namespace osu.Game.Rulesets.Karaoke.Skinning.Argon; 9 | 10 | public class KaraokeArgonSkinTransformer : KaraokeDefaultSkinTransformer 11 | { 12 | public KaraokeArgonSkinTransformer(ISkin skin, IBeatmap beatmap) 13 | : base(skin, beatmap) 14 | { 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /osu.Game.Rulesets.Karaoke/Skinning/Elements/ElementType.cs: -------------------------------------------------------------------------------- 1 | // Copyright (c) andy840119 . Licensed under the GPL Licence. 2 | // See the LICENCE file in the repository root for full licence text. 3 | 4 | namespace osu.Game.Rulesets.Karaoke.Skinning.Elements; 5 | 6 | public enum ElementType 7 | { 8 | LyricFontInfo, 9 | 10 | NoteStyle, 11 | } 12 | -------------------------------------------------------------------------------- /osu.Game.Rulesets.Karaoke/Skinning/Elements/IKaraokeSkinElement.cs: -------------------------------------------------------------------------------- 1 | // Copyright (c) andy840119 . Licensed under the GPL Licence. 2 | // See the LICENCE file in the repository root for full licence text. 3 | 4 | using osu.Framework.Graphics; 5 | 6 | namespace osu.Game.Rulesets.Karaoke.Skinning.Elements; 7 | 8 | public interface IKaraokeSkinElement 9 | { 10 | int ID { get; set; } 11 | 12 | string Name { get; set; } 13 | 14 | void ApplyTo(Drawable d); 15 | } 16 | -------------------------------------------------------------------------------- /osu.Game.Rulesets.Karaoke/Skinning/Elements/InvalidDrawableTypeException.cs: -------------------------------------------------------------------------------- 1 | // Copyright (c) andy840119 . Licensed under the GPL Licence. 2 | // See the LICENCE file in the repository root for full licence text. 3 | 4 | using System; 5 | 6 | namespace osu.Game.Rulesets.Karaoke.Skinning.Elements; 7 | 8 | public class InvalidDrawableTypeException : Exception 9 | { 10 | public InvalidDrawableTypeException(string message) 11 | : base($"Drawable type does not supported ({message})") 12 | { 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /osu.Game.Rulesets.Karaoke/Skinning/Elements/LayoutGroup.cs: -------------------------------------------------------------------------------- 1 | // Copyright (c) andy840119 . Licensed under the GPL Licence. 2 | // See the LICENCE file in the repository root for full licence text. 3 | 4 | namespace osu.Game.Rulesets.Karaoke.Skinning.Elements; 5 | 6 | public class LayoutGroup 7 | { 8 | public int Id { get; set; } 9 | 10 | public string Name { get; set; } = string.Empty; 11 | } 12 | -------------------------------------------------------------------------------- /osu.Game.Rulesets.Karaoke/Skinning/KaraokeIndexLookup.cs: -------------------------------------------------------------------------------- 1 | // Copyright (c) andy840119 . Licensed under the GPL Licence. 2 | // See the LICENCE file in the repository root for full licence text. 3 | 4 | namespace osu.Game.Rulesets.Karaoke.Skinning; 5 | 6 | /// 7 | /// This enum is used to lookup list of name and it's lookup index 8 | /// 9 | public enum KaraokeIndexLookup 10 | { 11 | Layout, 12 | 13 | Note, 14 | } 15 | -------------------------------------------------------------------------------- /osu.Game.Rulesets.Karaoke/Skinning/Legacy/KaraokeClassicSkinTransformer.cs: -------------------------------------------------------------------------------- 1 | // Copyright (c) andy840119 . Licensed under the GPL Licence. 2 | // See the LICENCE file in the repository root for full licence text. 3 | 4 | using osu.Game.Beatmaps; 5 | using osu.Game.Skinning; 6 | 7 | namespace osu.Game.Rulesets.Karaoke.Skinning.Legacy; 8 | 9 | public class KaraokeClassicSkinTransformer : KaraokeLegacySkinTransformer 10 | { 11 | public KaraokeClassicSkinTransformer(ISkin skin, IBeatmap beatmap) 12 | : base(skin, beatmap) 13 | { 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /osu.Game.Rulesets.Karaoke/Skinning/Legacy/LegacyKaraokeColumnElement.cs: -------------------------------------------------------------------------------- 1 | // Copyright (c) andy840119 . Licensed under the GPL Licence. 2 | // See the LICENCE file in the repository root for full licence text. 3 | 4 | using osu.Framework.Bindables; 5 | using osu.Game.Rulesets.Karaoke.UI.Scrolling; 6 | using osu.Game.Skinning; 7 | 8 | namespace osu.Game.Rulesets.Karaoke.Skinning.Legacy; 9 | 10 | public partial class LegacyKaraokeColumnElement : LegacyKaraokeElement 11 | { 12 | protected ScrollingNotePlayfield? NotePlayfield => Playfield?.NotePlayfield; 13 | 14 | // TODO : get current index 15 | protected override IBindable? GetKaraokeSkinConfig(ISkin skin, LegacyKaraokeSkinConfigurationLookups lookup, int? index = null) 16 | => base.GetKaraokeSkinConfig(skin, lookup, index); 17 | } 18 | -------------------------------------------------------------------------------- /osu.Game.Rulesets.Karaoke/Skinning/Triangles/KaraokeTrianglesSkinTransformer.cs: -------------------------------------------------------------------------------- 1 | // Copyright (c) andy840119 . Licensed under the GPL Licence. 2 | // See the LICENCE file in the repository root for full licence text. 3 | 4 | using osu.Game.Beatmaps; 5 | using osu.Game.Rulesets.Karaoke.Skinning.Default; 6 | using osu.Game.Skinning; 7 | 8 | namespace osu.Game.Rulesets.Karaoke.Skinning.Triangles; 9 | 10 | public class KaraokeTrianglesSkinTransformer : KaraokeDefaultSkinTransformer 11 | { 12 | public KaraokeTrianglesSkinTransformer(ISkin skin, IBeatmap beatmap) 13 | : base(skin, beatmap) 14 | { 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /osu.Game.Rulesets.Karaoke/Stages/Drawables/IStageElementRunner.cs: -------------------------------------------------------------------------------- 1 | // Copyright (c) andy840119 . Licensed under the GPL Licence. 2 | // See the LICENCE file in the repository root for full licence text. 3 | 4 | using osu.Framework.Graphics.Containers; 5 | 6 | namespace osu.Game.Rulesets.Karaoke.Stages.Drawables; 7 | 8 | public interface IStageElementRunner 9 | { 10 | /// 11 | /// Apply to the stage. 12 | /// 13 | /// 14 | void UpdateStageElements(Container container); 15 | } 16 | -------------------------------------------------------------------------------- /osu.Game.Rulesets.Karaoke/Stages/Drawables/IStagePlayfieldRunner.cs: -------------------------------------------------------------------------------- 1 | // Copyright (c) andy840119 . Licensed under the GPL Licence. 2 | // See the LICENCE file in the repository root for full licence text. 3 | 4 | using osu.Game.Rulesets.Karaoke.UI; 5 | 6 | namespace osu.Game.Rulesets.Karaoke.Stages.Drawables; 7 | 8 | public interface IStagePlayfieldRunner 9 | { 10 | /// 11 | /// Apply transforms to the main playfield and child playfield. 12 | /// 13 | /// 14 | void UpdatePlayfieldTransforms(KaraokePlayfield playfield); 15 | } 16 | -------------------------------------------------------------------------------- /osu.Game.Rulesets.Karaoke/Stages/Drawables/StageRunner.cs: -------------------------------------------------------------------------------- 1 | // Copyright (c) andy840119 . Licensed under the GPL Licence. 2 | // See the LICENCE file in the repository root for full licence text. 3 | 4 | using System.Collections.Generic; 5 | using osu.Game.Rulesets.Karaoke.Stages.Infos; 6 | using osu.Game.Rulesets.Mods; 7 | 8 | namespace osu.Game.Rulesets.Karaoke.Stages.Drawables; 9 | 10 | public abstract partial class StageRunner 11 | { 12 | public abstract void OnStageInfoChanged(StageInfo stageInfo, bool scorable, IReadOnlyList mods); 13 | 14 | public abstract void TriggerUpdateCommand(); 15 | } 16 | -------------------------------------------------------------------------------- /osu.Game.Rulesets.Karaoke/Stages/IPlayfieldCommandProvider.cs: -------------------------------------------------------------------------------- 1 | // Copyright (c) andy840119 . Licensed under the GPL Licence. 2 | // See the LICENCE file in the repository root for full licence text. 3 | 4 | using System.Collections.Generic; 5 | using osu.Game.Rulesets.Karaoke.Stages.Commands; 6 | using osu.Game.Rulesets.UI; 7 | 8 | namespace osu.Game.Rulesets.Karaoke.Stages; 9 | 10 | public interface IPlayfieldCommandProvider 11 | { 12 | /// 13 | /// Get the list of that apply to the . 14 | /// 15 | /// 16 | IEnumerable GetCommands(Playfield playfield); 17 | } 18 | -------------------------------------------------------------------------------- /osu.Game.Rulesets.Karaoke/Stages/IStageElementProvider.cs: -------------------------------------------------------------------------------- 1 | // Copyright (c) andy840119 . Licensed under the GPL Licence. 2 | // See the LICENCE file in the repository root for full licence text. 3 | 4 | using System.Collections.Generic; 5 | 6 | namespace osu.Game.Rulesets.Karaoke.Stages; 7 | 8 | public interface IStageElementProvider 9 | { 10 | IEnumerable GetElements(); 11 | } 12 | -------------------------------------------------------------------------------- /osu.Game.Rulesets.Karaoke/Stages/Infos/Classic/ClassicLyricLayoutAlignment.cs: -------------------------------------------------------------------------------- 1 | // Copyright (c) andy840119 . Licensed under the GPL Licence. 2 | // See the LICENCE file in the repository root for full licence text. 3 | 4 | namespace osu.Game.Rulesets.Karaoke.Stages.Infos.Classic; 5 | 6 | public enum ClassicLyricLayoutAlignment 7 | { 8 | Left, 9 | 10 | Center, 11 | 12 | Right, 13 | } 14 | -------------------------------------------------------------------------------- /osu.Game.Rulesets.Karaoke/Stages/Infos/Classic/ClassicLyricLayoutCategory.cs: -------------------------------------------------------------------------------- 1 | // Copyright (c) andy840119 . Licensed under the GPL Licence. 2 | // See the LICENCE file in the repository root for full licence text. 3 | 4 | using osu.Game.Rulesets.Karaoke.Objects; 5 | 6 | namespace osu.Game.Rulesets.Karaoke.Stages.Infos.Classic; 7 | 8 | public class ClassicLyricLayoutCategory : StageElementCategory 9 | { 10 | protected override ClassicLyricLayout CreateDefaultElement() 11 | => new(); 12 | } 13 | -------------------------------------------------------------------------------- /osu.Game.Rulesets.Karaoke/Stages/Infos/Classic/ClassicStyleCategory.cs: -------------------------------------------------------------------------------- 1 | // Copyright (c) andy840119 . Licensed under the GPL Licence. 2 | // See the LICENCE file in the repository root for full licence text. 3 | 4 | using osu.Game.Rulesets.Karaoke.Graphics.Sprites; 5 | using osu.Game.Rulesets.Karaoke.Objects; 6 | 7 | namespace osu.Game.Rulesets.Karaoke.Stages.Infos.Classic; 8 | 9 | public class ClassicStyleCategory : StageElementCategory 10 | { 11 | protected override ClassicStyle CreateDefaultElement() 12 | => new() 13 | { 14 | LyricStyle = LyricStyle.CreateDefault(), 15 | }; 16 | } 17 | -------------------------------------------------------------------------------- /osu.Game.Rulesets.Karaoke/Stages/Infos/Preview/PreviewLyricLayoutCategory.cs: -------------------------------------------------------------------------------- 1 | // Copyright (c) andy840119 . Licensed under the GPL Licence. 2 | // See the LICENCE file in the repository root for full licence text. 3 | 4 | using osu.Game.Rulesets.Karaoke.Objects; 5 | 6 | namespace osu.Game.Rulesets.Karaoke.Stages.Infos.Preview; 7 | 8 | public class PreviewLyricLayoutCategory : StageElementCategory 9 | { 10 | protected override PreviewLyricLayout CreateDefaultElement() 11 | => new(); 12 | } 13 | -------------------------------------------------------------------------------- /osu.Game.Rulesets.Karaoke/Stages/Infos/Preview/PreviewStyle.cs: -------------------------------------------------------------------------------- 1 | // Copyright (c) andy840119 . Licensed under the GPL Licence. 2 | // See the LICENCE file in the repository root for full licence text. 3 | 4 | using osu.Game.Rulesets.Karaoke.Graphics.Sprites; 5 | using osu.Game.Rulesets.Karaoke.Objects; 6 | 7 | namespace osu.Game.Rulesets.Karaoke.Stages.Infos.Preview; 8 | 9 | public class PreviewStyle : StageElement 10 | { 11 | /// 12 | /// 's text style. 13 | /// 14 | public LyricStyle? LyricStyle { get; set; } 15 | 16 | /// 17 | /// 's skin lookup index. 18 | /// 19 | public int? NoteStyleIndex { get; set; } 20 | } 21 | -------------------------------------------------------------------------------- /osu.Game.Rulesets.Karaoke/Stages/Infos/Preview/PreviewStyleCategory.cs: -------------------------------------------------------------------------------- 1 | // Copyright (c) andy840119 . Licensed under the GPL Licence. 2 | // See the LICENCE file in the repository root for full licence text. 3 | 4 | using osu.Game.Rulesets.Karaoke.Graphics.Sprites; 5 | using osu.Game.Rulesets.Karaoke.Objects; 6 | 7 | namespace osu.Game.Rulesets.Karaoke.Stages.Infos.Preview; 8 | 9 | public class PreviewStyleCategory : StageElementCategory 10 | { 11 | protected override PreviewStyle CreateDefaultElement() 12 | => new() 13 | { 14 | LyricStyle = LyricStyle.CreateDefault(), 15 | }; 16 | } 17 | -------------------------------------------------------------------------------- /osu.Game.Rulesets.Karaoke/Stages/Infos/StageDefinition.cs: -------------------------------------------------------------------------------- 1 | // Copyright (c) andy840119 . Licensed under the GPL Licence. 2 | // See the LICENCE file in the repository root for full licence text. 3 | 4 | namespace osu.Game.Rulesets.Karaoke.Stages.Infos; 5 | 6 | /// 7 | /// Class to store all the definition for the 8 | /// 9 | public abstract class StageDefinition; 10 | -------------------------------------------------------------------------------- /osu.Game.Rulesets.Karaoke/Stages/Infos/Types/IHasCalculatedProperty.cs: -------------------------------------------------------------------------------- 1 | // Copyright (c) andy840119 . Licensed under the GPL Licence. 2 | // See the LICENCE file in the repository root for full licence text. 3 | 4 | using osu.Game.Beatmaps; 5 | using osu.Game.Rulesets.Karaoke.Beatmaps; 6 | 7 | namespace osu.Game.Rulesets.Karaoke.Stages.Infos.Types; 8 | 9 | public interface IHasCalculatedProperty 10 | { 11 | /// 12 | /// If the calculated property is not updated, then re-calculate the property inside the stage info in the 13 | /// 14 | /// 15 | void ValidateCalculatedProperty(IBeatmap beatmap); 16 | } 17 | -------------------------------------------------------------------------------- /osu.Game.Rulesets.Karaoke/Stages/StageBeatmapCoverInfo.cs: -------------------------------------------------------------------------------- 1 | // Copyright (c) andy840119 . Licensed under the GPL Licence. 2 | // See the LICENCE file in the repository root for full licence text. 3 | 4 | using osu.Framework.Graphics; 5 | using osu.Game.Rulesets.Karaoke.Stages.Drawables; 6 | 7 | namespace osu.Game.Rulesets.Karaoke.Stages; 8 | 9 | public class StageBeatmapCoverInfo : StageSprite 10 | { 11 | public override Drawable CreateDrawable() => new DrawableStageBeatmapCoverInfo(this); 12 | } 13 | -------------------------------------------------------------------------------- /osu.Game.Rulesets.Karaoke/Stages/StageElementProvider.cs: -------------------------------------------------------------------------------- 1 | // Copyright (c) andy840119 . Licensed under the GPL Licence. 2 | // See the LICENCE file in the repository root for full licence text. 3 | 4 | using System.Collections.Generic; 5 | 6 | namespace osu.Game.Rulesets.Karaoke.Stages; 7 | 8 | public abstract class StageElementProvider : IStageElementProvider 9 | { 10 | protected readonly TStageInfo StageInfo; 11 | 12 | protected readonly bool DisplayNotePlayfield; 13 | 14 | protected StageElementProvider(TStageInfo stageInfo, bool displayNotePlayfield) 15 | { 16 | StageInfo = stageInfo; 17 | DisplayNotePlayfield = displayNotePlayfield; 18 | } 19 | 20 | public abstract IEnumerable GetElements(); 21 | } 22 | -------------------------------------------------------------------------------- /osu.Game.Rulesets.Karaoke/Timing/StopClock.cs: -------------------------------------------------------------------------------- 1 | // Copyright (c) andy840119 . Licensed under the GPL Licence. 2 | // See the LICENCE file in the repository root for full licence text. 3 | 4 | using osu.Framework.Timing; 5 | 6 | namespace osu.Game.Rulesets.Karaoke.Timing; 7 | 8 | public class StopClock : IFrameBasedClock 9 | { 10 | public StopClock(double targetTime) 11 | { 12 | CurrentTime = targetTime; 13 | } 14 | 15 | public double ElapsedFrameTime => 0; 16 | 17 | public double FramesPerSecond => 0; 18 | 19 | public FrameTimeInfo TimeInfo => new() { Current = CurrentTime, Elapsed = ElapsedFrameTime }; 20 | 21 | public double CurrentTime { get; } 22 | 23 | public double Rate => 0; 24 | 25 | public bool IsRunning => false; 26 | 27 | public void ProcessFrame() 28 | { 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /osu.Game.Rulesets.Karaoke/UI/HUD/BindableNumberExtension.cs: -------------------------------------------------------------------------------- 1 | // Copyright (c) andy840119 . Licensed under the GPL Licence. 2 | // See the LICENCE file in the repository root for full licence text. 3 | 4 | using osu.Framework.Bindables; 5 | 6 | namespace osu.Game.Rulesets.Karaoke.UI.HUD; 7 | 8 | /// 9 | /// Will move into framework layer 10 | /// 11 | public static class BindableNumberExtension 12 | { 13 | public static void TriggerIncrease(this BindableInt bindableInt) 14 | { 15 | bindableInt.Value += bindableInt.Precision; 16 | } 17 | 18 | public static void TriggerDecrease(this BindableInt bindableInt) 19 | { 20 | bindableInt.Value -= bindableInt.Precision; 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /osu.Game.Rulesets.Karaoke/UI/HUD/ISettingHUDOverlay.cs: -------------------------------------------------------------------------------- 1 | // Copyright (c) andy840119 . Licensed under the GPL Licence. 2 | // See the LICENCE file in the repository root for full licence text. 3 | 4 | using osu.Game.Screens.Play.PlayerSettings; 5 | 6 | namespace osu.Game.Rulesets.Karaoke.UI.HUD; 7 | 8 | public interface ISettingHUDOverlay 9 | { 10 | void AddSettingsGroup(PlayerSettingsGroup group); 11 | 12 | void AddExtraOverlay(SettingOverlay overlay); 13 | } 14 | -------------------------------------------------------------------------------- /osu.Game.Rulesets.Karaoke/UI/HUD/SettingButton.cs: -------------------------------------------------------------------------------- 1 | // Copyright (c) andy840119 . Licensed under the GPL Licence. 2 | // See the LICENCE file in the repository root for full licence text. 3 | 4 | using osu.Framework.Graphics.Cursor; 5 | using osu.Framework.Localisation; 6 | using osu.Game.Graphics.UserInterface; 7 | 8 | namespace osu.Game.Rulesets.Karaoke.UI.HUD; 9 | 10 | public partial class SettingButton : OsuButton, IHasTooltip 11 | { 12 | public LocalisableString TooltipText { get; set; } 13 | 14 | public SettingButton() 15 | { 16 | Width = 90; 17 | Height = 45; 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /osu.Game.Rulesets.Karaoke/UI/KaraokeScrollingDirection.cs: -------------------------------------------------------------------------------- 1 | // Copyright (c) andy840119 . Licensed under the GPL Licence. 2 | // See the LICENCE file in the repository root for full licence text. 3 | 4 | using osu.Game.Rulesets.UI.Scrolling; 5 | 6 | namespace osu.Game.Rulesets.Karaoke.UI; 7 | 8 | public enum KaraokeScrollingDirection 9 | { 10 | Left = ScrollingDirection.Left, 11 | Right = ScrollingDirection.Right, 12 | } 13 | -------------------------------------------------------------------------------- /osu.Game.Rulesets.Karaoke/UI/Position/INotePositionInfo.cs: -------------------------------------------------------------------------------- 1 | // Copyright (c) andy840119 . Licensed under the GPL Licence. 2 | // See the LICENCE file in the repository root for full licence text. 3 | 4 | using osu.Framework.Bindables; 5 | 6 | namespace osu.Game.Rulesets.Karaoke.UI.Position; 7 | 8 | public interface INotePositionInfo 9 | { 10 | IBindable Position { get; } 11 | 12 | NotePositionCalculator Calculator { get; } 13 | } 14 | -------------------------------------------------------------------------------- /osu.Game.Rulesets.Karaoke/Utils/ActivatorUtils.cs: -------------------------------------------------------------------------------- 1 | // Copyright (c) andy840119 . Licensed under the GPL Licence. 2 | // See the LICENCE file in the repository root for full licence text. 3 | 4 | using System; 5 | 6 | namespace osu.Game.Rulesets.Karaoke.Utils; 7 | 8 | public static class ActivatorUtils 9 | { 10 | public static TObject CreateInstance(params object?[]? args) 11 | { 12 | var algorithm = (TObject?)Activator.CreateInstance(typeof(TObject), args); 13 | if (algorithm == null) 14 | throw new InvalidOperationException(); 15 | 16 | return algorithm; 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /osu.Game.Rulesets.Karaoke/Utils/FontUsageUtils.cs: -------------------------------------------------------------------------------- 1 | // Copyright (c) andy840119 . Licensed under the GPL Licence. 2 | // See the LICENCE file in the repository root for full licence text. 3 | 4 | using osu.Framework.Graphics.Sprites; 5 | using osu.Game.Rulesets.Karaoke.Skinning.Fonts; 6 | 7 | namespace osu.Game.Rulesets.Karaoke.Utils; 8 | 9 | public static class FontUsageUtils 10 | { 11 | public static FontInfo ToFontInfo(FontUsage fontUsage, FontFormat fontFormat) 12 | => new(fontUsage.FontName, fontFormat); 13 | } 14 | -------------------------------------------------------------------------------- /osu.Game.Rulesets.Karaoke/Utils/JpStringUtils.cs: -------------------------------------------------------------------------------- 1 | // Copyright (c) andy840119 . Licensed under the GPL Licence. 2 | // See the LICENCE file in the repository root for full licence text. 3 | 4 | using WanaKanaSharp; 5 | using Zipangu; 6 | 7 | namespace osu.Game.Rulesets.Karaoke.Utils; 8 | 9 | public static class JpStringUtils 10 | { 11 | public static string ToHiragana(string text) 12 | { 13 | return text.KatakanaToHiragana(); 14 | } 15 | 16 | public static string ToKatakana(string text) 17 | { 18 | return text.HiraganaToKatakana(); 19 | } 20 | 21 | public static string ToRomaji(string text) 22 | { 23 | return RomajiConverter.ToRomaji(text, false, null); 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /osu.Game.Rulesets.Karaoke/Utils/StackTraceUtils.cs: -------------------------------------------------------------------------------- 1 | // Copyright (c) andy840119 . Licensed under the GPL Licence. 2 | // See the LICENCE file in the repository root for full licence text. 3 | 4 | using System; 5 | 6 | namespace osu.Game.Rulesets.Karaoke.Utils; 7 | 8 | public class StackTraceUtils 9 | { 10 | public static bool IsStackTraceContains(string text) 11 | { 12 | string? stackTrace = Environment.StackTrace; 13 | return stackTrace.Contains(text); 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /osu.Game.Rulesets.Karaoke/Utils/TypeUtils.cs: -------------------------------------------------------------------------------- 1 | // Copyright (c) andy840119 . Licensed under the GPL Licence. 2 | // See the LICENCE file in the repository root for full licence text. 3 | 4 | using System; 5 | using System.Diagnostics.CodeAnalysis; 6 | 7 | namespace osu.Game.Rulesets.Karaoke.Utils; 8 | 9 | public static class TypeUtils 10 | { 11 | [return: NotNullIfNotNull("value")] 12 | public static TType? ChangeType(object? value) 13 | { 14 | if (value == null) 15 | return default; 16 | 17 | var type = typeof(TType); 18 | return (TType)Convert.ChangeType(value, Nullable.GetUnderlyingType(type) ?? type); 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /osu.licenseheader: -------------------------------------------------------------------------------- 1 | extensions: .cs 2 | // Copyright (c) andy840119 . Licensed under the GPL Licence. 3 | // See the LICENCE file in the repository root for full licence text. 4 | 5 | extensions: .xml .config .xsd 6 | --------------------------------------------------------------------------------