示例#1
0
 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);
 }
示例#2
0
        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);
        }
示例#3
0
 public DelesteBasicNote(DelesteBeatmapEntry entry)
 {
     Entry = entry;
 }