Esempio n. 1
0
        private void handleHitObject(string line)
        {
            // If the ruleset wasn't specified, assume the osu!standard ruleset.
            if (parser == null)
            {
                parser = new Rulesets.Objects.Legacy.Osu.ConvertHitObjectParser(getOffsetTime(), FormatVersion);
            }

            var obj = parser.Parse(line);

            if (obj != null)
            {
                beatmap.HitObjects.Add(obj);
            }
        }
        private void handleGeneral(string line)
        {
            var pair = SplitKeyVal(line);

            var metadata = beatmap.BeatmapInfo.Metadata;

            switch (pair.Key)
            {
            case @"AudioFilename":
                metadata.AudioFile = pair.Value.ToStandardisedPath();
                break;

            case @"AudioLeadIn":
                beatmap.BeatmapInfo.AudioLeadIn = Parsing.ParseInt(pair.Value);
                break;

            case @"PreviewTime":
                metadata.PreviewTime = getOffsetTime(Parsing.ParseInt(pair.Value));
                break;

            case @"Countdown":
                beatmap.BeatmapInfo.Countdown = Parsing.ParseInt(pair.Value) == 1;
                break;

            case @"SampleSet":
                defaultSampleBank = (LegacySampleBank)Enum.Parse(typeof(LegacySampleBank), pair.Value);
                break;

            case @"SampleVolume":
                defaultSampleVolume = Parsing.ParseInt(pair.Value);
                break;

            case @"StackLeniency":
                beatmap.BeatmapInfo.StackLeniency = Parsing.ParseFloat(pair.Value);
                break;

            case @"Mode":
                beatmap.BeatmapInfo.RulesetID = Parsing.ParseInt(pair.Value);

                switch (beatmap.BeatmapInfo.RulesetID)
                {
                case 0:
                    parser = new Rulesets.Objects.Legacy.Osu.ConvertHitObjectParser(getOffsetTime(), FormatVersion);
                    break;

                case 1:
                    parser = new Rulesets.Objects.Legacy.Taiko.ConvertHitObjectParser(getOffsetTime(), FormatVersion);
                    break;

                case 2:
                    parser = new Rulesets.Objects.Legacy.Catch.ConvertHitObjectParser(getOffsetTime(), FormatVersion);
                    break;

                case 3:
                    parser = new Rulesets.Objects.Legacy.Mania.ConvertHitObjectParser(getOffsetTime(), FormatVersion);
                    break;
                }

                break;

            case @"LetterboxInBreaks":
                beatmap.BeatmapInfo.LetterboxInBreaks = Parsing.ParseInt(pair.Value) == 1;
                break;

            case @"SpecialStyle":
                beatmap.BeatmapInfo.SpecialStyle = Parsing.ParseInt(pair.Value) == 1;
                break;

            case @"WidescreenStoryboard":
                beatmap.BeatmapInfo.WidescreenStoryboard = Parsing.ParseInt(pair.Value) == 1;
                break;
            }
        }
Esempio n. 3
0
        protected override void ParseFile(StreamReader stream, Beatmap beatmap)
        {
            beatmap.BeatmapInfo.BeatmapVersion = beatmapVersion;

            Section              section          = Section.None;
            bool                 hasCustomColours = false;
            StoryboardSprite     storyboardSprite = null;
            CommandTimelineGroup timelineGroup    = null;

            string line;

            while ((line = stream.ReadLine()) != null)
            {
                if (string.IsNullOrWhiteSpace(line))
                {
                    continue;
                }

                if (line.StartsWith("//"))
                {
                    continue;
                }

                if (line.StartsWith(@"osu file format v"))
                {
                    beatmap.BeatmapInfo.BeatmapVersion = int.Parse(line.Substring(17));
                    continue;
                }

                if (line.StartsWith(@"[") && line.EndsWith(@"]"))
                {
                    if (!Enum.TryParse(line.Substring(1, line.Length - 2), out section))
                    {
                        throw new InvalidDataException($@"Unknown osu section {line}");
                    }
                    continue;
                }

                switch (section)
                {
                case Section.General:
                    handleGeneral(beatmap, line);
                    break;

                case Section.Editor:
                    handleEditor(beatmap, line);
                    break;

                case Section.Metadata:
                    handleMetadata(beatmap, line);
                    break;

                case Section.Difficulty:
                    handleDifficulty(beatmap, line);
                    break;

                case Section.Events:
                    handleEvents(beatmap, line, ref storyboardSprite, ref timelineGroup);
                    break;

                case Section.TimingPoints:
                    handleTimingPoints(beatmap, line);
                    break;

                case Section.Colours:
                    handleColours(beatmap, line, ref hasCustomColours);
                    break;

                case Section.HitObjects:

                    // If the ruleset wasn't specified, assume the osu!standard ruleset.
                    if (parser == null)
                    {
                        parser = new Rulesets.Objects.Legacy.Osu.ConvertHitObjectParser();
                    }

                    var obj = parser.Parse(line);

                    if (obj != null)
                    {
                        beatmap.HitObjects.Add(obj);
                    }

                    break;

                case Section.Variables:
                    handleVariables(line);
                    break;
                }
            }

            foreach (var hitObject in beatmap.HitObjects)
            {
                hitObject.ApplyDefaults(beatmap.ControlPointInfo, beatmap.BeatmapInfo.BaseDifficulty);
            }
        }
Esempio n. 4
0
        private void handleGeneral(Beatmap beatmap, string line)
        {
            var pair = splitKeyVal(line, ':');

            var metadata = beatmap.BeatmapInfo.Metadata;

            switch (pair.Key)
            {
            case @"AudioFilename":
                metadata.AudioFile = pair.Value;
                break;

            case @"AudioLeadIn":
                beatmap.BeatmapInfo.AudioLeadIn = int.Parse(pair.Value);
                break;

            case @"PreviewTime":
                metadata.PreviewTime = int.Parse(pair.Value);
                break;

            case @"Countdown":
                beatmap.BeatmapInfo.Countdown = int.Parse(pair.Value) == 1;
                break;

            case @"SampleSet":
                defaultSampleBank = (LegacySampleBank)Enum.Parse(typeof(LegacySampleBank), pair.Value);
                break;

            case @"SampleVolume":
                defaultSampleVolume = int.Parse(pair.Value);
                break;

            case @"StackLeniency":
                beatmap.BeatmapInfo.StackLeniency = float.Parse(pair.Value, NumberFormatInfo.InvariantInfo);
                break;

            case @"Mode":
                beatmap.BeatmapInfo.RulesetID = int.Parse(pair.Value);

                switch (beatmap.BeatmapInfo.RulesetID)
                {
                case 0:
                    parser = new Rulesets.Objects.Legacy.Osu.ConvertHitObjectParser();
                    break;

                case 1:
                    parser = new Rulesets.Objects.Legacy.Taiko.ConvertHitObjectParser();
                    break;

                case 2:
                    parser = new Rulesets.Objects.Legacy.Catch.ConvertHitObjectParser();
                    break;

                case 3:
                    parser = new Rulesets.Objects.Legacy.Mania.ConvertHitObjectParser();
                    break;
                }
                break;

            case @"LetterboxInBreaks":
                beatmap.BeatmapInfo.LetterboxInBreaks = int.Parse(pair.Value) == 1;
                break;

            case @"SpecialStyle":
                beatmap.BeatmapInfo.SpecialStyle = int.Parse(pair.Value) == 1;
                break;

            case @"WidescreenStoryboard":
                beatmap.BeatmapInfo.WidescreenStoryboard = int.Parse(pair.Value) == 1;
                break;
            }
        }
Esempio n. 5
0
        private void handleGeneral(string line)
        {
            var pair = SplitKeyVal(line);

            var metadata = beatmap.BeatmapInfo.Metadata;

            switch (pair.Key)
            {
            case @"AudioFilename":
                metadata.AudioFile = pair.Value.ToStandardisedPath();
                break;

            case @"AudioLeadIn":
                beatmap.BeatmapInfo.AudioLeadIn = Parsing.ParseInt(pair.Value);
                break;

            case @"PreviewTime":
                metadata.PreviewTime = getOffsetTime(Parsing.ParseInt(pair.Value));
                break;

            case @"SampleSet":
                defaultSampleBank = (LegacySampleBank)Enum.Parse(typeof(LegacySampleBank), pair.Value);
                break;

            case @"SampleVolume":
                defaultSampleVolume = Parsing.ParseInt(pair.Value);
                break;

            case @"StackLeniency":
                beatmap.BeatmapInfo.StackLeniency = Parsing.ParseFloat(pair.Value);
                break;

            case @"Mode":
                int rulesetID = Parsing.ParseInt(pair.Value);

                beatmap.BeatmapInfo.Ruleset = RulesetStore.GetRuleset(rulesetID) ?? throw new ArgumentException("Ruleset is not available locally.");

                switch (rulesetID)
                {
                case 0:
                    parser = new Rulesets.Objects.Legacy.Osu.ConvertHitObjectParser(getOffsetTime(), FormatVersion);
                    break;

                case 1:
                    parser = new Rulesets.Objects.Legacy.Taiko.ConvertHitObjectParser(getOffsetTime(), FormatVersion);
                    break;

                case 2:
                    parser = new Rulesets.Objects.Legacy.Catch.ConvertHitObjectParser(getOffsetTime(), FormatVersion);
                    break;

                case 3:
                    parser = new Rulesets.Objects.Legacy.Mania.ConvertHitObjectParser(getOffsetTime(), FormatVersion);
                    break;
                }

                break;

            case @"LetterboxInBreaks":
                beatmap.BeatmapInfo.LetterboxInBreaks = Parsing.ParseInt(pair.Value) == 1;
                break;

            case @"SpecialStyle":
                beatmap.BeatmapInfo.SpecialStyle = Parsing.ParseInt(pair.Value) == 1;
                break;

            case @"WidescreenStoryboard":
                beatmap.BeatmapInfo.WidescreenStoryboard = Parsing.ParseInt(pair.Value) == 1;
                break;

            case @"EpilepsyWarning":
                beatmap.BeatmapInfo.EpilepsyWarning = Parsing.ParseInt(pair.Value) == 1;
                break;

            case @"SamplesMatchPlaybackRate":
                beatmap.BeatmapInfo.SamplesMatchPlaybackRate = Parsing.ParseInt(pair.Value) == 1;
                break;

            case @"Countdown":
                beatmap.BeatmapInfo.Countdown = (CountdownType)Enum.Parse(typeof(CountdownType), pair.Value);
                break;

            case @"CountdownOffset":
                beatmap.BeatmapInfo.CountdownOffset = Parsing.ParseInt(pair.Value);
                break;
            }
        }