From 6611ddd9ba09f626b535e968b3634936bbcb893c Mon Sep 17 00:00:00 2001 From: adelikat Date: Sat, 1 Nov 2014 12:50:36 +0000 Subject: [PATCH] Some fixups to TasMovie - mostly code cleanup but also some subtle bug fixes --- .../conversions/MovieConversionExtensions.cs | 2 +- .../movie/tasproj/TasMovie.Editing.cs | 26 +++------- .../movie/tasproj/TasMovie.IO.cs | 7 +-- .../movie/tasproj/TasMovie.cs | 47 ++++++++----------- 4 files changed, 32 insertions(+), 50 deletions(-) diff --git a/BizHawk.Client.Common/movie/conversions/MovieConversionExtensions.cs b/BizHawk.Client.Common/movie/conversions/MovieConversionExtensions.cs index 2d49ad0edc..96487ec206 100644 --- a/BizHawk.Client.Common/movie/conversions/MovieConversionExtensions.cs +++ b/BizHawk.Client.Common/movie/conversions/MovieConversionExtensions.cs @@ -141,7 +141,7 @@ namespace BizHawk.Client.Common.MovieConversionExtensions tas.TasStateManager.Clear(); tas.ClearLagLog(); - tas.CopyLog(old.Log); + tas.CopyLog(old.GetLogEntries()); tas.DeleteLogBefore(frame); tas.HeaderEntries.Clear(); diff --git a/BizHawk.Client.Common/movie/tasproj/TasMovie.Editing.cs b/BizHawk.Client.Common/movie/tasproj/TasMovie.Editing.cs index bbd638bbda..39a989c242 100644 --- a/BizHawk.Client.Common/movie/tasproj/TasMovie.Editing.cs +++ b/BizHawk.Client.Common/movie/tasproj/TasMovie.Editing.cs @@ -24,12 +24,13 @@ namespace BizHawk.Client.Common StateManager.Capture(); } - /// - /// Truncate all frames including starting frame to end of movie. - /// - /// First frame to be truncated. public override void Truncate(int frame) { + if (frame < _log.Count - 1) + { + Changes = true; + } + base.Truncate(frame); if (frame < LagLog.Count) @@ -38,22 +39,13 @@ namespace BizHawk.Client.Common } StateManager.Invalidate(frame); - - if (frame < _log.Count - 1) - { - Changes = true; - } - - //TAS Editor deletes markers that are in truncated portion of movie. Markers.TruncateAt(frame); } public override void PokeFrame(int frame, IController source) { base.PokeFrame(frame, source); - - LagLog.RemoveRange(frame, LagLog.Count - frame); - StateManager.Invalidate(frame); + InvalidateAfter(frame); } public override void ClearFrame(int frame) @@ -112,11 +104,7 @@ namespace BizHawk.Client.Common Changes = true; InvalidateAfter(frame); } - /// - /// - /// - /// Adds frame at this position, shifting all the rest down. - /// The number of frames to insert at the particular frame. + public void InsertEmptyFrame(int frame, int count = 1) { var lg = LogGeneratorInstance(); diff --git a/BizHawk.Client.Common/movie/tasproj/TasMovie.IO.cs b/BizHawk.Client.Common/movie/tasproj/TasMovie.IO.cs index 79c7a585d2..2fd389cf31 100644 --- a/BizHawk.Client.Common/movie/tasproj/TasMovie.IO.cs +++ b/BizHawk.Client.Common/movie/tasproj/TasMovie.IO.cs @@ -78,7 +78,7 @@ namespace BizHawk.Client.Common } ClearBeforeLoad(); - ClearTasprojExtrasBeforeLoad(); + ClearTasprojExtras(); bl.GetLump(BinaryStateLump.Movieheader, true, delegate(TextReader tr) { @@ -155,7 +155,7 @@ namespace BizHawk.Client.Common // TasMovie enhanced information bl.GetLump(BinaryStateLump.LagLog, false, delegate(BinaryReader br, long length) { - LagLog = br.ReadBytes((int)length).ToBools().ToList(); + LagLog.AddRange(br.ReadBytes((int)length).ToBools()); }); bl.GetLump(BinaryStateLump.GreenzoneSettings, false, delegate(TextReader tr) @@ -206,10 +206,11 @@ namespace BizHawk.Client.Common return true; } - private void ClearTasprojExtrasBeforeLoad() + private void ClearTasprojExtras() { LagLog.Clear(); StateManager.Clear(); + Markers.Clear(); } } } diff --git a/BizHawk.Client.Common/movie/tasproj/TasMovie.cs b/BizHawk.Client.Common/movie/tasproj/TasMovie.cs index 3e029bda88..c8b3f260e9 100644 --- a/BizHawk.Client.Common/movie/tasproj/TasMovie.cs +++ b/BizHawk.Client.Common/movie/tasproj/TasMovie.cs @@ -12,13 +12,13 @@ namespace BizHawk.Client.Common { public sealed partial class TasMovie : Bk2Movie, INotifyPropertyChanged { - private readonly Bk2MnemonicConstants Mnemonics = new Bk2MnemonicConstants(); - private List LagLog = new List(); - private readonly TasStateManager StateManager; - public TasMovieMarkerList Markers { get; set; } - public const string DefaultProjectName = "default"; + private readonly Bk2MnemonicConstants Mnemonics = new Bk2MnemonicConstants(); + private readonly TasStateManager StateManager; + private readonly List LagLog = new List(); + private readonly Dictionary InputStateCache = new Dictionary(); + public TasMovie(string path, bool startsFromSavestate = false) : base(path) { // TODO: how to call the default constructor AND the base(path) constructor? And is base(path) calling base() ? @@ -39,6 +39,9 @@ namespace BizHawk.Client.Common Markers.Add(0, startsFromSavestate ? "Savestate" : "Power on"); } + public TasMovieMarkerList Markers { get; set; } + public bool UseInputCache { get; set; } + public override string PreferredExtension { get { return Extension; } @@ -64,11 +67,6 @@ namespace BizHawk.Client.Common } } - public override bool Stop(bool saveChanges = true) - { - return base.Stop(saveChanges); - } - #region Events and Handlers public event PropertyChangedEventHandler PropertyChanged; @@ -116,12 +114,10 @@ namespace BizHawk.Client.Common public override void StartNewRecording() { - LagLog.Clear(); - StateManager.Clear(); - Markers.Clear(); - base.StartNewRecording(); - + ClearTasprojExtras(); Markers.Add(0, StartsFromSavestate ? "Savestate" : "Power on"); + + base.StartNewRecording(); } public override void SwitchToPlay() @@ -165,9 +161,6 @@ namespace BizHawk.Client.Common return CreateDisplayValueForButton(adapter, buttonName); } - private readonly Dictionary InputStateCache = new Dictionary(); - - public bool UseInputCache { get; set; } public void FlushInputCache() { InputStateCache.Clear(); @@ -247,14 +240,14 @@ namespace BizHawk.Client.Common public bool BoolIsPressed(int frame, string buttonName) { - var adapter = GetInputState(frame) as Bk2ControllerAdapter; - return adapter.IsPressed(buttonName); + return ((Bk2ControllerAdapter)GetInputState(frame)) + .IsPressed(buttonName); } public float GetFloatValue(int frame, string buttonName) { - var adapter = GetInputState(frame) as Bk2ControllerAdapter; - return adapter.GetFloat(buttonName); + return ((Bk2ControllerAdapter)GetInputState(frame)) + .GetFloat(buttonName); } // TODO: try not to need this, or at least use GetInputState and then a log entry generator @@ -327,11 +320,6 @@ namespace BizHawk.Client.Common } } - public List Log - { - get { return _log; } - } - public void CopyLog(List log) { _log.Clear(); @@ -340,5 +328,10 @@ namespace BizHawk.Client.Common _log.Add(entry); } } + + public List GetLogEntries() + { + return _log; + } } }