flesh out some TASMovie methods. not really done yet
This commit is contained in:
parent
6873248ce8
commit
1bc9a5eb7a
|
@ -11,6 +11,7 @@ namespace BizHawk.Client.Common
|
|||
public const string Framebuffer = "Framebuffer";
|
||||
public const string Input = "Input Log";
|
||||
public const string CorestateText = "CoreText";
|
||||
public const string Movieheader = "Movie";
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
|
@ -126,6 +127,11 @@ namespace BizHawk.Client.Common
|
|||
{
|
||||
GetFileByName(BinaryStateFileNames.Input, true, callback);
|
||||
}
|
||||
|
||||
public void GetMovieHeaderRequired(Action<Stream> callback)
|
||||
{
|
||||
GetFileByName(BinaryStateFileNames.Movieheader, true, callback);
|
||||
}
|
||||
}
|
||||
|
||||
public class BinaryStateSaver : IDisposable
|
||||
|
@ -183,6 +189,11 @@ namespace BizHawk.Client.Common
|
|||
PutFileByName(BinaryStateFileNames.Input, callback);
|
||||
}
|
||||
|
||||
public void PutMovieHeader(Action<Stream> callback)
|
||||
{
|
||||
PutFileByName(BinaryStateFileNames.Movieheader, callback);
|
||||
}
|
||||
|
||||
private bool isDisposed;
|
||||
public void Dispose()
|
||||
{
|
||||
|
|
|
@ -5,6 +5,18 @@ namespace BizHawk.Client.Common
|
|||
{
|
||||
public class MovieRecordList : List<MovieRecord>
|
||||
{
|
||||
/// <summary>
|
||||
/// DONT USE ME RIGHT NOW
|
||||
/// </summary>
|
||||
/// <param name="tw"></param>
|
||||
public void WriteToText(System.IO.TextWriter tw)
|
||||
{
|
||||
tw.WriteLine("[Input]");
|
||||
tw.WriteLine("Frame {0}", Global.Emulator.Frame);
|
||||
ForEach(record => tw.WriteLine(record.ToString()));
|
||||
tw.WriteLine("[/Input]");
|
||||
}
|
||||
|
||||
public override string ToString()
|
||||
{
|
||||
var sb = new StringBuilder();
|
||||
|
|
|
@ -238,13 +238,109 @@ namespace BizHawk.Client.Common
|
|||
|
||||
public bool Load()
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
// there's a lot of common code here with SavestateManager. refactor?
|
||||
using (BinaryStateLoader bw = BinaryStateLoader.LoadAndDetect(Filename))
|
||||
{
|
||||
if (bw == null)
|
||||
return false;
|
||||
|
||||
Header.Clear();
|
||||
_records.Clear();
|
||||
|
||||
bw.GetMovieHeaderRequired(
|
||||
delegate(Stream s)
|
||||
{
|
||||
StreamReader sr = new StreamReader(s);
|
||||
string line;
|
||||
while ((line = sr.ReadLine()) != null)
|
||||
if (!Header.ParseLineFromFile(line))
|
||||
Header.Comments.Add(line);
|
||||
});
|
||||
bw.GetInputLogRequired(
|
||||
delegate(Stream s)
|
||||
{
|
||||
StreamReader sr = new StreamReader(s);
|
||||
// TODO: deserialize input log here
|
||||
});
|
||||
|
||||
if (Header.StartsFromSavestate)
|
||||
{
|
||||
// should we raise some sort of error if there's a savestate in the archive but Header.StartsFromSavestate is false?
|
||||
bw.GetCoreState(
|
||||
delegate(Stream s)
|
||||
{
|
||||
BinaryReader br = new BinaryReader(s);
|
||||
Global.Emulator.LoadStateBinary(br);
|
||||
},
|
||||
delegate(Stream s)
|
||||
{
|
||||
StreamReader sr = new StreamReader(s);
|
||||
Global.Emulator.LoadStateText(sr);
|
||||
});
|
||||
}
|
||||
bw.GetFrameBuffer(
|
||||
delegate(Stream s)
|
||||
{
|
||||
BinaryReader br = new BinaryReader(s);
|
||||
int i;
|
||||
var buff = Global.Emulator.VideoProvider.GetVideoBuffer();
|
||||
try
|
||||
{
|
||||
for (i = 0; i < buff.Length; i++)
|
||||
{
|
||||
int j = br.ReadInt32();
|
||||
buff[i] = j;
|
||||
}
|
||||
}
|
||||
catch (EndOfStreamException) { }
|
||||
});
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
public void Save()
|
||||
{
|
||||
// there's a lot of common code here with SavestateManager. refactor?
|
||||
|
||||
using (FileStream fs = new FileStream(Filename, FileMode.Create, FileAccess.Write))
|
||||
using (BinaryStateSaver bs = new BinaryStateSaver(fs))
|
||||
{
|
||||
bs.PutMovieHeader(
|
||||
delegate(Stream s)
|
||||
{
|
||||
StreamWriter sw = new StreamWriter(s);
|
||||
sw.WriteLine(Header.ToString());
|
||||
sw.Flush();
|
||||
});
|
||||
bs.PutInputLog(
|
||||
delegate(Stream s)
|
||||
{
|
||||
StreamWriter sw = new StreamWriter(s);
|
||||
sw.WriteLine(GetInputLog());
|
||||
sw.Flush();
|
||||
});
|
||||
if (Header.StartsFromSavestate)
|
||||
{
|
||||
#if true
|
||||
bs.PutCoreStateText(
|
||||
delegate(Stream s)
|
||||
{
|
||||
StreamWriter sw = new StreamWriter(s);
|
||||
Global.Emulator.SaveStateText(sw);
|
||||
sw.Flush();
|
||||
});
|
||||
#else
|
||||
bs.PutCoreStateBinary(
|
||||
delegate(Stream s)
|
||||
{
|
||||
BinaryWriter bw = new BinaryWriter(s);
|
||||
Global.Emulator.SaveStateBinary(bw);
|
||||
bw.Flush();
|
||||
});
|
||||
#endif
|
||||
}
|
||||
}
|
||||
Changes = false;
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
|
||||
public void SaveAs()
|
||||
|
|
Loading…
Reference in New Issue