diff --git a/BAKKA-Editor/Chart.cs b/BAKKA-Editor/Chart.cs index 402e2dd..db17d9a 100644 --- a/BAKKA-Editor/Chart.cs +++ b/BAKKA-Editor/Chart.cs @@ -1,13 +1,16 @@ using System; using System.Collections.Generic; +using System.Globalization; using System.Linq; using System.Text; +using System.Text.RegularExpressions; using System.Threading.Tasks; namespace BAKKA_Editor { internal class Chart { + private static readonly CultureInfo _defaultParsingCulture = CultureInfo.InvariantCulture; public List Notes { get; set; } public List Gimmicks { get; set; } /// @@ -55,14 +58,13 @@ namespace BAKKA_Editor var path = Utils.GetTag(line, "#MUSIC_FILE_PATH "); if (path != null) SongFileName = path; - var offset = Utils.GetTag(line, "#OFFSET"); if (offset != null) - Offset = Convert.ToDouble(offset); + Offset = Convert.ToDouble(offset, _defaultParsingCulture); offset = Utils.GetTag(line, "#MOVIEOFFSET"); if (offset != null) - MovieOffset = Convert.ToDouble(offset); + MovieOffset = Convert.ToDouble(offset, _defaultParsingCulture); if (line.Contains("#BODY")) @@ -71,7 +73,7 @@ namespace BAKKA_Editor break; } - } while(++index < file.Length); + } while (++index < file.Length); int lineNum; Gimmick gimmickTemp; @@ -83,46 +85,46 @@ namespace BAKKA_Editor if (String.IsNullOrWhiteSpace(file[i])) continue; - var parsed = file[i].Split(new string[] {" "}, StringSplitOptions.RemoveEmptyEntries | StringSplitOptions.TrimEntries); + var parsed = file[i].Split(new string[] { " " }, StringSplitOptions.RemoveEmptyEntries | StringSplitOptions.TrimEntries); NoteBase temp = new(); - temp.BeatInfo = new BeatInfo(Convert.ToInt32(parsed[0]), Convert.ToInt32(parsed[1])); - temp.GimmickType = (GimmickType)Convert.ToInt32(parsed[2]); + temp.BeatInfo = new BeatInfo(Convert.ToInt32(parsed[0], _defaultParsingCulture), Convert.ToInt32(parsed[1], _defaultParsingCulture)); + temp.GimmickType = (GimmickType)Convert.ToInt32(parsed[2], _defaultParsingCulture); switch (temp.GimmickType) { case GimmickType.NoGimmick: noteTemp = new Note(temp.BeatInfo); - noteTemp.NoteType = (NoteType)Convert.ToInt32(parsed[3]); - lineNum = Convert.ToInt32(parsed[4]); - noteTemp.Position = Convert.ToInt32(parsed[5]); - noteTemp.Size = Convert.ToInt32(parsed[6]); - noteTemp.HoldChange = Convert.ToBoolean(Convert.ToInt32(parsed[7])); + noteTemp.NoteType = (NoteType)Convert.ToInt32(parsed[3], _defaultParsingCulture); + lineNum = Convert.ToInt32(parsed[4], _defaultParsingCulture); + noteTemp.Position = Convert.ToInt32(parsed[5], _defaultParsingCulture); + noteTemp.Size = Convert.ToInt32(parsed[6], _defaultParsingCulture); + noteTemp.HoldChange = Convert.ToBoolean(Convert.ToInt32(parsed[7], _defaultParsingCulture)); if (noteTemp.NoteType == NoteType.MaskAdd || noteTemp.NoteType == NoteType.MaskRemove) { - noteTemp.MaskFill = (MaskType)Convert.ToInt32(parsed[8]); + noteTemp.MaskFill = (MaskType)Convert.ToInt32(parsed[8], _defaultParsingCulture); } else if (noteTemp.NoteType == NoteType.HoldStartNoBonus || noteTemp.NoteType == NoteType.HoldJoint || noteTemp.NoteType == NoteType.HoldStartBonusFlair) { - refByLine[lineNum] = Convert.ToInt32(parsed[8]); + refByLine[lineNum] = Convert.ToInt32(parsed[8], _defaultParsingCulture); } Notes.Add(noteTemp); notesByLine[lineNum] = Notes.Last(); break; case GimmickType.BpmChange: gimmickTemp = new Gimmick(temp.BeatInfo, temp.GimmickType); - gimmickTemp.BPM = Convert.ToDouble(parsed[3]); + gimmickTemp.BPM = Convert.ToDouble(parsed[3], _defaultParsingCulture); Gimmicks.Add(gimmickTemp); break; case GimmickType.TimeSignatureChange: gimmickTemp = new Gimmick(temp.BeatInfo, temp.GimmickType); - gimmickTemp.TimeSig = new TimeSignature() { Upper = Convert.ToInt32(parsed[3]), Lower = parsed.Length == 5 ? Convert.ToInt32(parsed[4]) : 4 }; + gimmickTemp.TimeSig = new TimeSignature() { Upper = Convert.ToInt32(parsed[3], _defaultParsingCulture), Lower = parsed.Length == 5 ? Convert.ToInt32(parsed[4], _defaultParsingCulture) : 4 }; Gimmicks.Add(gimmickTemp); break; case GimmickType.HiSpeedChange: gimmickTemp = new Gimmick(temp.BeatInfo, temp.GimmickType); - gimmickTemp.HiSpeed = Convert.ToDouble(parsed[3]); + gimmickTemp.HiSpeed = Convert.ToDouble(parsed[3], _defaultParsingCulture); Gimmicks.Add(gimmickTemp); break; case GimmickType.ReverseStart: @@ -191,7 +193,7 @@ namespace BAKKA_Editor foreach (var note in Notes) { sw.Write($"{note.BeatInfo.Measure,4:F0}{note.BeatInfo.Beat,5:F0}{((int)note.GimmickType),5:F0}{(int)note.NoteType,5:F0}"); - sw.Write($"{Notes.IndexOf(note),5:F0}{note.Position,5:F0}{note.Size,5:F0}{Convert.ToInt32(note.HoldChange),5:F0}"); + sw.Write($"{Notes.IndexOf(note),5:F0}{note.Position,5:F0}{note.Size,5:F0}{Convert.ToInt32(note.HoldChange, _defaultParsingCulture),5:F0}"); if (note.IsMask) sw.Write($"{(int)note.MaskFill,5:F0}"); if (note.NextNote != null) @@ -264,7 +266,7 @@ namespace BAKKA_Editor ((60000.0 / evt.BPM) * 4.0 * evt.TimeSig.Ratio) * measure = time time / ((60000.0 / evt.BPM) * 4.0 * evt.TimeSig.Ratio) = measure */ - + /// /// Translate clock time to beats /// diff --git a/BAKKA-Editor/UserSettings.cs b/BAKKA-Editor/UserSettings.cs index 718fce2..2a19f89 100644 --- a/BAKKA-Editor/UserSettings.cs +++ b/BAKKA-Editor/UserSettings.cs @@ -1,11 +1,13 @@ using System; using System.Collections.Generic; +using System.Globalization; using System.Linq; using System.Text; using System.Threading.Tasks; namespace BAKKA_Editor { + internal class UserSettings { public ViewSettings ViewSettings { get; set; } = new(); @@ -34,13 +36,14 @@ namespace BAKKA_Editor internal class HotkeySettings { - public int TouchHotkey { get; set; } = Convert.ToInt32(Keys.D1); - public int SlideLeftHotkey { get; set; } = Convert.ToInt32(Keys.D2); - public int SlideRightHotkey { get; set; } = Convert.ToInt32(Keys.D3); - public int SnapUpHotkey { get; set; } = Convert.ToInt32(Keys.D4); - public int SnapDownHotkey { get; set; } = Convert.ToInt32(Keys.D5); - public int ChainHotkey { get; set; } = Convert.ToInt32(Keys.D6); - public int HoldHotkey { get; set; } = Convert.ToInt32(Keys.D7); - public int PlayHotkey { get; set; } = Convert.ToInt32(Keys.Space); + private static readonly CultureInfo _defaultParsingCulture = CultureInfo.InvariantCulture; + public int TouchHotkey { get; set; } = Convert.ToInt32(Keys.D1, _defaultParsingCulture); + public int SlideLeftHotkey { get; set; } = Convert.ToInt32(Keys.D2, _defaultParsingCulture); + public int SlideRightHotkey { get; set; } = Convert.ToInt32(Keys.D3, _defaultParsingCulture); + public int SnapUpHotkey { get; set; } = Convert.ToInt32(Keys.D4, _defaultParsingCulture); + public int SnapDownHotkey { get; set; } = Convert.ToInt32(Keys.D5, _defaultParsingCulture); + public int ChainHotkey { get; set; } = Convert.ToInt32(Keys.D6, _defaultParsingCulture); + public int HoldHotkey { get; set; } = Convert.ToInt32(Keys.D7, _defaultParsingCulture); + public int PlayHotkey { get; set; } = Convert.ToInt32(Keys.Space, _defaultParsingCulture); } }