public static string SaveTrack(Track trk, string savename) { var sw = Stopwatch.StartNew(); track_json trackobj = new track_json(); trackobj.label = trk.Name; trackobj.startPosition = new track_json.point_json() { x = trk.StartOffset.X, y = trk.StartOffset.Y }; trackobj.startZoom = trk.StartZoom; trackobj.zeroStart = trk.ZeroStart; int ver = trk.GetVersion(); switch (ver) { case 61: trackobj.version = "6.1"; break; case 62: trackobj.version = "6.2"; break; } var sort = trk.GetSortedLines(); trackobj.linesArray = new object[sort.Length][]; trackobj.triggers = new List <track_json.zoomtrigger_json>(); int idx = 0; foreach (var line in sort) { line_json jline = new line_json(); switch (line.Type) { case LineType.Blue: jline.type = 0; break; case LineType.Red: jline.type = 1; break; case LineType.Scenery: jline.type = 2; break; } jline.id = line.ID; jline.x1 = line.Position.X; jline.y1 = line.Position.Y; jline.x2 = line.Position2.X; jline.y2 = line.Position2.Y; if (line is StandardLine stl) { if (stl.Extension.HasFlag(StandardLine.Ext.Left)) { jline.leftExtended = true; } if (stl.Extension.HasFlag(StandardLine.Ext.Right)) { jline.rightExtended = true; } jline.extended = (int)stl.Extension; jline.flipped = stl.inv; if (line is RedLine red) { jline.multiplier = red.Multiplier; } if (stl.Trigger != null && stl.Trigger.ZoomTrigger) { trackobj.triggers.Add(new track_json.zoomtrigger_json() { zoom = true, ID = jline.id, target = stl.Trigger.ZoomTarget, frames = stl.Trigger.ZoomFrames }); } } trackobj.linesArray[idx++] = line_to_linearrayline(jline); } var dir = TrackIO.GetTrackDirectory(trk); if (!Directory.Exists(dir)) { Directory.CreateDirectory(dir); } var filename = dir + savename + ".track.json"; using (var file = File.Create(filename)) { var bytes = JsonSerializer.Serialize <track_json>(trackobj); file.Write(bytes, 0, bytes.Length); } return(filename); }
public static string SaveTrack(Track trk, string savename) { var sw = Stopwatch.StartNew(); track_json trackobj = new track_json(); trackobj.label = trk.Name; trackobj.startPosition = new track_json.point_json() { x = trk.StartOffset.X, y = trk.StartOffset.Y }; trackobj.startZoom = trk.StartZoom; trackobj.zeroStart = trk.ZeroStart; trackobj.yGravity = trk.YGravity; trackobj.xGravity = trk.XGravity; trackobj.gravityWellSize = trk.GravityWellSize; trackobj.bgR = trk.BGColorR; trackobj.bgG = trk.BGColorG; trackobj.bgB = trk.BGColorB; trackobj.lineR = trk.LineColorR; trackobj.lineG = trk.LineColorG; trackobj.lineB = trk.LineColorB; int ver = trk.GetVersion(); switch (ver) { case 61: trackobj.version = "6.1"; break; case 62: trackobj.version = "6.2"; break; } var sort = trk.GetSortedLines(); trackobj.linesArray = new object[sort.Length][]; trackobj.gameTriggers = new List <track_json.gametrigger_json>(); int idx = 0; foreach (var line in sort) { line_json jline = new line_json(); switch (line.Type) { case LineType.Blue: jline.type = 0; break; case LineType.Red: jline.type = 1; break; case LineType.Scenery: jline.type = 2; break; } jline.id = line.ID; jline.x1 = line.Position.X; jline.y1 = line.Position.Y; jline.x2 = line.Position2.X; jline.y2 = line.Position2.Y; if (line is StandardLine stl) { if (stl.Extension.HasFlag(StandardLine.Ext.Left)) { jline.leftExtended = true; } if (stl.Extension.HasFlag(StandardLine.Ext.Right)) { jline.rightExtended = true; } jline.extended = (int)stl.Extension; jline.flipped = stl.inv; if (line is RedLine red) { jline.multiplier = red.Multiplier; } } trackobj.linesArray[idx++] = line_to_linearrayline(jline); } foreach (var trigger in trk.Triggers) { switch (trigger.TriggerType) { case TriggerType.Zoom: trackobj.gameTriggers.Add(new track_json.gametrigger_json() { triggerType = (int)trigger.TriggerType, zoomTarget = trigger.ZoomTarget, start = trigger.Start, end = trigger.End }); break; case TriggerType.BGChange: trackobj.gameTriggers.Add(new track_json.gametrigger_json() { triggerType = (int)trigger.TriggerType, backgroundred = trigger.backgroundRed, backgroundgreen = trigger.backgroundGreen, backgroundblue = trigger.backgroundBlue, start = trigger.Start, end = trigger.End }); break; case TriggerType.LineColor: trackobj.gameTriggers.Add(new track_json.gametrigger_json() { triggerType = (int)trigger.TriggerType, lineRed = trigger.lineRed, lineGreen = trigger.lineGreen, lineBlue = trigger.lineBlue, start = trigger.Start, end = trigger.End }); break; } } var dir = TrackIO.GetTrackDirectory(trk); if (trk.Name.Equals("<untitled>")) { dir = Utils.Constants.TracksDirectory + "Unnamed Track" + Path.DirectorySeparatorChar; } if (!Directory.Exists(dir)) { Directory.CreateDirectory(dir); } var filename = dir + savename + ".track.json"; using (var file = File.Create(filename)) { var bytes = JsonSerializer.Serialize <track_json>(trackobj); file.Write(bytes, 0, bytes.Length); } return(filename); }