private static bool ParseSummary(string command2, string strParam1, string strParam2, HashSet <int> channels, out int combos) { if (!int.TryParse(command2, out _)) { combos = 0; return(false); } int channel = GetChannelNumberById(strParam2); if ((channel > 10 && channel < 30) || (channel > 50 && channel < 70)) { channels.Add(channel); int lCombos = 0; for (int i = 0, length = strParam1.Length / 2; i < length; i++) { int value = Base36.Decode(strParam1.Substring(i * 2, 2)); if (value > 0) { lCombos++; } } combos = lCombos; return(true); } combos = 0; return(false); }
KeyObject parseKeyObject(int measure, int channel, string rawData) { var data = new int[rawData.Length / 2]; for (var i = 0; i < rawData.Length / 2; i++) { var chunkedData = rawData.Substring(i * 2, 2); data[i] = (int)Base36.Decode(chunkedData); } return(new KeyObject(measure, channel, data)); }
/* * Special mapping for channels * 01 = 1, 02 = 2, ..., 09 = 9, * 0A = 1010, 0B = 1011, ... 0Z = 1035, * 11 = 11, 12 = 12, ... 19 = 19, * 1A = 1110, 1B = 1111, ..., 1Z = 1135, * ..., * 2A = 1210, 2B = 1211, ..., 2Z = 1235, * ..., * Z1 = 351, Z2 = 352, ..., Z9 = 359, * ZA = 4510, ZB = 4511, ..., ZZ = 4535 * Illegal channel format: -99 */ private static int GetChannelNumberById(string channel) { if (string.IsNullOrEmpty(channel) || channel.Length > 2) { return(-99); } int channelRaw = Base36.Decode(channel); if (channelRaw < 0) { return(-99); } int digit1 = channelRaw % 36, digit2 = channelRaw / 36; int result = digit1 > 9 ? (digit2 * 100 + digit1 + 1000) : (digit2 * 10 + digit1); return(result); }
private bool ParseResourceLine(string command2, string strParam1, string strParam2) { switch (command2) { case "wav": AddResource(ResourceType.wav, Base36.Decode(strParam2), strParam1); break; case "bmp": AddResource(ResourceType.bmp, Base36.Decode(strParam2), strParam1); break; case "bga": string[] strParams = strParam1.Split(' '); AddResource(ResourceType.bga, Base36.Decode(strParam2), string.Empty, new object[] { Base36.Decode(strParams[0]), // index float.Parse(strParams[1]), // x1 float.Parse(strParams[2]), // x2 float.Parse(strParams[3]), // y1 float.Parse(strParams[4]), // y2 float.Parse(strParams[5]), // dx float.Parse(strParams[6]) // dy }); break; case "bpm": AddResource(ResourceType.bpm, Base36.Decode(strParam2), string.Empty, float.Parse(strParam1)); break; case "stop": AddResource(ResourceType.stop, Base36.Decode(strParam2), string.Empty, float.Parse(strParam1)); break; default: return(false); } return(true); }
void parseDef(BMSData bmsData, string def) { Match m; m = DefPlayer.Match(def); if (m.Success) { var value = int.Parse(m.Groups[1].Value); bmsData.Player = (Player)value; return; } m = DefGenre.Match(def); if (m.Success) { bmsData.Genre = m.Groups[1].Value; return; } m = DefTitle.Match(def); if (m.Success) { bmsData.Title = m.Groups[1].Value; return; } m = DefArtist.Match(def); if (m.Success) { bmsData.Artist = m.Groups[1].Value; return; } m = DefBPM.Match(def); if (m.Success) { var value = int.Parse(m.Groups[1].Value); bmsData.BPM = value; return; } m = DefMidiFile.Match(def); if (m.Success) { bmsData.MidiFile = m.Groups[1].Value; return; } m = DefPlayLevel.Match(def); if (m.Success) { var value = int.Parse(m.Groups[1].Value); bmsData.PlayLevel = value; return; } m = DefRank.Match(def); if (m.Success) { var value = int.Parse(m.Groups[1].Value); bmsData.Rank = (Rank)value; return; } m = DefVolWav.Match(def); if (m.Success) { var value = int.Parse(m.Groups[1].Value); bmsData.VolWav = value; return; } m = DefTotal.Match(def); if (m.Success) { var value = double.Parse(m.Groups[1].Value); bmsData.Total = value; return; } m = DefWav.Match(def); if (m.Success) { var key = (int)Base36.Decode(m.Groups[1].Value); var value = m.Groups[2].Value; bmsData.Wav.Add(key, value); return; } m = DefBmp.Match(def); if (m.Success) { var key = (int)Base36.Decode(m.Groups[1].Value); var value = m.Groups[2].Value; bmsData.Bmp.Add(key, value); return; } m = DefObj.Match(def); if (m.Success) { var measure = int.Parse(m.Groups[1].Value); var channel = int.Parse(m.Groups[2].Value); var rawData = m.Groups[3].Value; var obj = this.parseObject(measure, channel, rawData); if (obj == null) { return; } bmsData.Objects.Add(obj); return; } }
private static bool ParseContentLine(string command2, string strParam1, string strParam2, ExtendedSortedSet <BMSEvent> bmev) { if (!int.TryParse(command2, out int verse)) { return(false); } int channel = GetChannelNumberById(strParam2); if (channel < 0) { return(false); } strParam1 = spaceMatcher.Replace(strParam1, string.Empty); int length = strParam1.Length / 2; BMSEventType evType; switch (channel) { case 1: evType = BMSEventType.WAV; break; case 2: bmev.Add(new BMSEvent { measure = verse, beat = 0, Data2F = double.Parse(strParam1), type = BMSEventType.BeatReset }, InsertMode.OldFirst); return(true); case 3: evType = BMSEventType.BPM; break; case 4: case 6: case 7: evType = BMSEventType.BMP; break; case 8: evType = BMSEventType.BPM; break; case 9: evType = BMSEventType.STOP; break; default: if (channel > 10 && channel < 30) { evType = BMSEventType.Note; } else if (channel > 50 && channel < 70) { evType = BMSEventType.LongNoteStart; } else { evType = BMSEventType.Unknown; } break; } for (int i = 0; i < length; i++) { int value = Base36.Decode(strParam1.Substring(i * 2, 2)); if (value > 0) { bmev.Add(new BMSEvent { measure = verse, beat = (float)i / length, type = evType, data1 = channel, data2 = value }, InsertMode.OldFirst); } } return(true); }