public void InvalidateFrame(int frame) { if (frame <= 0) { throw new Exception("Cannot invalidate frame 0 for camera"); } if (frame < _frames.Count) { _frames.RemoveRange( frame, _frames.Count - frame); if (_prevframe <= frame) { _prevframe = -1; } } var cachepos = (frame / cacherate); if (frame % cacherate != 0) { cachepos++; } if (cachepos < _framecache.Count) { _framecache.RemoveRange(cachepos, _framecache.Count - cachepos); } if (frame == 1) { Rider firstframe = _timeline.GetFrame(0); var entry = new CameraEntry(firstframe.CalculateCenter()); _frames[0] = entry; _framecache[0] = Vector2d.Zero; } }
public static bool TestCompare(Track track, string dir) { var testfile = dir + track.Name + ".test.trk.result"; if (!File.Exists(testfile)) { return(false); } using (var file = File.Open(testfile, FileMode.Open)) { var br = new BinaryReader(file); var frame = br.ReadInt32(); var timeline = new linerider.Game.Timeline( track); timeline.Restart(track.GetStart(), 1); //track.Chunks.fg.PrintMetrics(); var state = timeline.GetFrame(frame); for (int i = 0; i < state.Body.Length; i++) { var x = br.ReadDouble(); var y = br.ReadDouble(); var riderx = state.Body[i].Location.X; var ridery = state.Body[i].Location.Y; if (x != riderx || y != ridery) { return(false); } } } return(true); }
public static void CreateTestFromTrack(Track track) { var timeline = new linerider.Game.Timeline( track); timeline.Restart(track.GetStart(), 1); int framecount = 40 * 60 * 5; var filename = TRKWriter.SaveTrack(track, track.Name + ".test"); if (System.IO.File.Exists(filename + ".result")) { System.IO.File.Delete(filename + ".result"); } using (var f = System.IO.File.Create(filename + ".result")) { var bw = new BinaryWriter(f); bw.Write((int)framecount); var state = timeline.GetFrame(framecount); for (int i = 0; i < state.Body.Length; i++) { bw.Write(state.Body[i].Location.X); bw.Write(state.Body[i].Location.Y); } } }
public static void ExportTrackData(Track track, string fn, int frames, ICamera camera) { var timeline = new linerider.Game.Timeline( track); timeline.Restart(track.GetStart(), 1); timeline.GetFrame(frames); camera.SetTimeline(timeline); List <RiderData> data = new List <RiderData>(); for (int idx = 0; idx < frames; idx++) { var frame = timeline.GetFrame(idx); var framedata = new RiderData(); framedata.Frame = idx; framedata.Points = new List <track_json.point_json>(); for (int i = 0; i < frame.Body.Length; i++) { var point = frame.Body[i]; framedata.Points.Add(new track_json.point_json() { x = point.Location.X, y = point.Location.Y }); var camframe = camera.GetFrameCamera(idx); framedata.CameraCenter = new track_json.point_json() { x = camframe.X, y = camframe.Y }; } data.Add(framedata); } using (var file = File.Create(fn)) { var bytes = JsonSerializer.Serialize <List <RiderData> >(data); file.Write(bytes, 0, bytes.Length); } }