private static bool HandleCommands(string line, Project temporaryProject, out DelesteBeatmapEntry entry) { entry = null; if (line.StartsWith(Constants.BpmCommand)) { var dataText = line.Substring(Constants.BpmCommand.Length + 1); var bpm = double.Parse(dataText); temporaryProject.Settings.GlobalBpm = bpm; return(true); } if (line.StartsWith(Constants.OffsetCommand)) { var dataText = line.Substring(Constants.OffsetCommand.Length + 1); var offset = double.Parse(dataText); offset = Math.Abs(offset); // msec -> sec temporaryProject.Settings.StartTimeOffset = offset / 1000; return(true); } if (line.StartsWith(Constants.ChangeBpmCommand)) { var dataText = line.Substring(Constants.ChangeBpmCommand.Length + 1); var commaSplittedValues = dataText.Split(','); var measureIndex = double.Parse(commaSplittedValues[0]); var newBpm = double.Parse(commaSplittedValues[1]); entry = new DelesteBeatmapEntry { IsCommand = true, CommandType = DelesteCommand.ChangeBpm, CommandParameter = new ChangeBpmCommandParameters { StartMeasureIndex = (int)measureIndex, NewBpm = newBpm } }; return(true); } return(false); }
public static DelesteBeatmapEntry ReadEntry(Project temporaryProject, string line, int entryCounter, List <DelesteBasicNote> noteCache, List <string> warnings, ref bool hasErrors) { line = line.ToLowerInvariant(); if (line.StartsWithOfGroup(Constants.BeatmapCommands)) { line = line.Substring(0, line.IndexOf(' ')); var warning = string.Format(Resources.DelesteCommandIsNotYetSupportedPromptTemplate, entryCounter, line); warnings.Add(warning); return(null); } DelesteBeatmapEntry entry; var isCommand = HandleCommands(line, temporaryProject, out entry); if (isCommand) { return(entry); } if (line.Length < 2 || !char.IsNumber(line, 1)) { // Not a beatmap entry. May be metadata. return(null); } if (line.IndexOf('.') >= 0) { hasErrors = true; var warning = Resources.DelesteTxtFormat2IsNotSupportedPrompt; warnings.Add(warning); return(null); } // #gid,mid:types&indices:sp[:fp] var colonStringValues = line.Substring(1).Split(':'); var commaStringValues = colonStringValues[0].Split(','); var noteDistribution = colonStringValues[1]; var standardNoteCount = noteDistribution.Count(ch => ch != '0'); // Abbreviated format (1, 2) & full format // #0,000:2 // #0,000:2222:1234 // #0,001:2222:3333:3333 var groupNumberString = commaStringValues[0]; var measureIndexString = commaStringValues[1]; string finishPositions, startPositions; switch (colonStringValues.Length) { case 2: startPositions = finishPositions = new string('3', standardNoteCount); break; case 3: startPositions = finishPositions = colonStringValues[2]; break; default: startPositions = colonStringValues[2]; finishPositions = colonStringValues[3]; break; } noteCache.Clear(); var measureIndex = Convert.ToInt32(measureIndexString); if (standardNoteCount != startPositions.Length || startPositions.Length != finishPositions.Length) { var warning = string.Format(Resources.DelesteNoteCountInconsistentPromptTemplate, entryCounter, measureIndex, standardNoteCount, startPositions.Length, finishPositions.Length); warnings.Add(warning); return(null); } entry = new DelesteBeatmapEntry(); entry.GroupID = Convert.ToInt32(groupNumberString); entry.MeasureIndex = measureIndex; entry.FullLength = noteDistribution.Length; int i = -1, j = -1; foreach (var ch in noteDistribution) { ++j; if (ch == '0') { continue; } ++i; var note = new DelesteBasicNote(entry); note.IndexInMeasure = j; note.Type = (DelesteNoteType)(ch - '0'); note.StartPosition = (NotePosition)(startPositions[i] - '0'); note.FinishPosition = (NotePosition)(finishPositions[i] - '0'); noteCache.Add(note); } entry.Notes = noteCache.ToArray(); return(entry); }
public DelesteBasicNote(DelesteBeatmapEntry entry) { Entry = entry; }