diff --git a/BizHawk.Client.Common/BizHawk.Client.Common.csproj b/BizHawk.Client.Common/BizHawk.Client.Common.csproj index ae390848dd..3713d95af5 100644 --- a/BizHawk.Client.Common/BizHawk.Client.Common.csproj +++ b/BizHawk.Client.Common/BizHawk.Client.Common.csproj @@ -124,6 +124,7 @@ + diff --git a/BizHawk.Client.Common/movie/IMovie.cs b/BizHawk.Client.Common/movie/IMovie.cs index ae29626bed..ed653f23d2 100644 --- a/BizHawk.Client.Common/movie/IMovie.cs +++ b/BizHawk.Client.Common/movie/IMovie.cs @@ -1,4 +1,5 @@ -using System.IO; +using System.Collections.Generic; +using System.IO; using BizHawk.Emulation.Common; namespace BizHawk.Client.Common @@ -97,7 +98,7 @@ namespace BizHawk.Client.Common void PokeFrame(int frameNum, string input); // Why does this exist as something different than Commit Frame? LoadStateResult CheckTimeLines(TextReader reader, bool onlyGuid, bool ignoreGuidMismatch, out string errorMessage); // No need to return a status, no reason to have hacky flags, no need to pass a textreader string GetTime(bool preLoad); // Rename to simply: Time, and make it a Timespan - void GetInputLog(TextReader reader, bool isMultitracking); // how about the movie know if it is multi-tracking rather than having to pass it in + void ExtractInputLog(TextReader reader, bool isMultitracking); // how about the movie know if it is multi-tracking rather than having to pass it in string GetInput(int frame); // Should be a property of a Record object diff --git a/BizHawk.Client.Common/movie/IMovieRecord.cs b/BizHawk.Client.Common/movie/IMovieRecord.cs new file mode 100644 index 0000000000..c59e4272ec --- /dev/null +++ b/BizHawk.Client.Common/movie/IMovieRecord.cs @@ -0,0 +1,30 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace BizHawk.Client.Common +{ + /// + /// Represents everything needed for a frame of input + /// + public interface IMovieRecord + { + /// + /// String representation of the controller input as a series of mnemonics + /// + string Input { get; } + + /// + /// Whether or not this was a lag frame, + /// where lag is the act of the core failing to poll for input (input on lag frames have no affect) + /// + bool Lagged { get; } + + /// + /// A savestate for this frame of input + /// + IEnumerable State { get; } + + } +} diff --git a/BizHawk.Client.Common/movie/Movie.cs b/BizHawk.Client.Common/movie/Movie.cs index a192aaeef0..447027c247 100644 --- a/BizHawk.Client.Common/movie/Movie.cs +++ b/BizHawk.Client.Common/movie/Movie.cs @@ -439,7 +439,7 @@ namespace BizHawk.Client.Common return sb.ToString(); } - public void GetInputLog(TextReader reader, bool isMultitracking) + public void ExtractInputLog(TextReader reader, bool isMultitracking) { int? stateFrame = null; diff --git a/BizHawk.Client.Common/movie/MovieHeader.cs b/BizHawk.Client.Common/movie/MovieHeader.cs index 927a3152cf..38aa023787 100644 --- a/BizHawk.Client.Common/movie/MovieHeader.cs +++ b/BizHawk.Client.Common/movie/MovieHeader.cs @@ -20,7 +20,7 @@ namespace BizHawk.Client.Common this[HeaderKeys.EMULATIONVERSION] = VersionInfo.GetEmuVersion(); this[HeaderKeys.MOVIEVERSION] = HeaderKeys.MovieVersion; - this[HeaderKeys.PLATFORM] = Global.Emulator.SystemId; + this[HeaderKeys.PLATFORM] = Global.Emulator != null ? Global.Emulator.SystemId : String.Empty; this[HeaderKeys.GAMENAME] = String.Empty; this[HeaderKeys.AUTHOR] = String.Empty; this[HeaderKeys.RERECORDS] = "0"; diff --git a/BizHawk.Client.Common/movie/MovieSession.cs b/BizHawk.Client.Common/movie/MovieSession.cs index 3ef63bc207..14f6234f24 100644 --- a/BizHawk.Client.Common/movie/MovieSession.cs +++ b/BizHawk.Client.Common/movie/MovieSession.cs @@ -254,7 +254,7 @@ namespace BizHawk.Client.Common { reader.BaseStream.Position = 0; reader.DiscardBufferedData(); - Movie.GetInputLog(reader, MultiTrack.IsActive); + Movie.ExtractInputLog(reader, MultiTrack.IsActive); } else { @@ -267,7 +267,7 @@ namespace BizHawk.Client.Common { reader.BaseStream.Position = 0; reader.DiscardBufferedData(); - Movie.GetInputLog(reader, MultiTrack.IsActive); + Movie.ExtractInputLog(reader, MultiTrack.IsActive); return true; } else @@ -337,7 +337,7 @@ namespace BizHawk.Client.Common Movie.SwitchToRecord(); reader.BaseStream.Position = 0; reader.DiscardBufferedData(); - Movie.GetInputLog(reader, MultiTrack.IsActive); + Movie.ExtractInputLog(reader, MultiTrack.IsActive); return true; } else @@ -352,7 +352,7 @@ namespace BizHawk.Client.Common Movie.SwitchToRecord(); reader.BaseStream.Position = 0; reader.DiscardBufferedData(); - Movie.GetInputLog(reader, MultiTrack.IsActive); + Movie.ExtractInputLog(reader, MultiTrack.IsActive); return true; } else @@ -426,7 +426,7 @@ namespace BizHawk.Client.Common Movie.StartNewRecording(); reader.BaseStream.Position = 0; reader.DiscardBufferedData(); - Movie.GetInputLog(reader, MultiTrack.IsActive); + Movie.ExtractInputLog(reader, MultiTrack.IsActive); return true; } else @@ -442,7 +442,7 @@ namespace BizHawk.Client.Common Movie.StartNewRecording(); reader.BaseStream.Position = 0; reader.DiscardBufferedData(); - Movie.GetInputLog(reader, MultiTrack.IsActive); + Movie.ExtractInputLog(reader, MultiTrack.IsActive); return true; } else