misc cleanups in Bk2Movie and TasMovie

This commit is contained in:
adelikat 2020-04-14 15:52:41 -05:00
parent e29b02a472
commit c6b39492a0
6 changed files with 102 additions and 144 deletions

View File

@ -184,35 +184,33 @@ namespace BizHawk.Client.Common
Directory.CreateDirectory(file.Directory.ToString());
}
using (var bs = new BinaryStateSaver(fn, false))
using var bs = new BinaryStateSaver(fn, false);
bs.PutLump(BinaryStateLump.Movieheader, tw => tw.WriteLine(Header.ToString()));
bs.PutLump(BinaryStateLump.Comments, tw => tw.WriteLine(CommentsString()));
bs.PutLump(BinaryStateLump.Subtitles, tw => tw.WriteLine(Subtitles.ToString()));
bs.PutLump(BinaryStateLump.SyncSettings, tw => tw.WriteLine(_syncSettingsJson));
bs.PutLump(BinaryStateLump.Input, WriteInputLog);
if (StartsFromSavestate)
{
bs.PutLump(BinaryStateLump.Movieheader, tw => tw.WriteLine(Header.ToString()));
bs.PutLump(BinaryStateLump.Comments, tw => tw.WriteLine(CommentsString()));
bs.PutLump(BinaryStateLump.Subtitles, tw => tw.WriteLine(Subtitles.ToString()));
bs.PutLump(BinaryStateLump.SyncSettings, tw => tw.WriteLine(_syncSettingsJson));
bs.PutLump(BinaryStateLump.Input, WriteInputLog);
if (StartsFromSavestate)
if (TextSavestate != null)
{
if (TextSavestate != null)
{
bs.PutLump(BinaryStateLump.CorestateText, (TextWriter tw) => tw.Write(TextSavestate));
}
else
{
bs.PutLump(BinaryStateLump.Corestate, (BinaryWriter bw) => bw.Write(BinarySavestate));
}
if (SavestateFramebuffer != null)
{
bs.PutLump(BinaryStateLump.Framebuffer, (BinaryWriter bw) => bw.Write(SavestateFramebuffer));
}
bs.PutLump(BinaryStateLump.CorestateText, (TextWriter tw) => tw.Write(TextSavestate));
}
else if (StartsFromSaveRam)
else
{
bs.PutLump(BinaryStateLump.MovieSaveRam, (BinaryWriter bw) => bw.Write(SaveRam));
bs.PutLump(BinaryStateLump.Corestate, (BinaryWriter bw) => bw.Write(BinarySavestate));
}
if (SavestateFramebuffer != null)
{
bs.PutLump(BinaryStateLump.Framebuffer, (BinaryWriter bw) => bw.Write(SavestateFramebuffer));
}
}
else if (StartsFromSaveRam)
{
bs.PutLump(BinaryStateLump.MovieSaveRam, (BinaryWriter bw) => bw.Write(SaveRam));
}
if (!backup)

View File

@ -18,20 +18,10 @@ namespace BizHawk.Client.Common
Log.Clear();
}
public virtual void StartNewPlayback()
{
Mode = MovieMode.Play;
}
public virtual void SwitchToRecord()
{
Mode = MovieMode.Record;
}
public virtual void SwitchToPlay()
{
Mode = MovieMode.Play;
}
public void StartNewPlayback() => Mode = MovieMode.Play;
public void SwitchToRecord() => Mode = MovieMode.Record;
public void SwitchToPlay() => Mode = MovieMode.Play;
public void FinishedMode() => Mode = MovieMode.Finished;
public virtual bool Stop(bool saveChanges = true)
{
@ -50,10 +40,5 @@ namespace BizHawk.Client.Common
return saved;
}
public void FinishedMode()
{
Mode = MovieMode.Finished;
}
}
}

View File

@ -1,6 +1,4 @@
using System;
using System.Collections.Generic;
using BizHawk.Emulation.Common;
using BizHawk.Emulation.Cores.Nintendo.Gameboy;

View File

@ -3,6 +3,7 @@ using System.Collections;
using System.Collections.Generic;
using System.IO;
using System.Security.AccessControl;
using System.Text;
using BizHawk.Common;
namespace BizHawk.Client.Common
@ -30,6 +31,36 @@ namespace BizHawk.Client.Common
return new ListStringLog();
}
public static int? DivergentPoint(this IStringLog currentLog, IStringLog newLog)
{
int max = newLog.Count;
if (currentLog.Count < newLog.Count)
{
max = currentLog.Count;
}
for (int i = 0; i < max; i++)
{
if (newLog[i] != currentLog[i])
{
return i;
}
}
return null;
}
public static string ToInputLog(this IStringLog log)
{
var sb = new StringBuilder();
foreach (var record in log)
{
sb.AppendLine(record);
}
return sb.ToString();
}
}
public interface IStringLog : IDisposable, IEnumerable<string>

View File

@ -1,7 +1,6 @@
using System;
using System.IO;
using System.Linq;
using System.Text;
using Newtonsoft.Json;
namespace BizHawk.Client.Common
@ -19,59 +18,57 @@ namespace BizHawk.Client.Common
Directory.CreateDirectory(file.Directory.ToString());
}
using (var bs = new BinaryStateSaver(fn, false))
using var bs = new BinaryStateSaver(fn, false);
bs.PutLump(BinaryStateLump.Movieheader, tw => tw.WriteLine(Header.ToString()));
bs.PutLump(BinaryStateLump.Comments, tw => tw.WriteLine(CommentsString()));
bs.PutLump(BinaryStateLump.Subtitles, tw => tw.WriteLine(Subtitles.ToString()));
bs.PutLump(BinaryStateLump.SyncSettings, tw => tw.WriteLine(SyncSettingsJson));
bs.PutLump(BinaryStateLump.Input, WriteInputLog);
// TasProj extras
var settings = JsonConvert.SerializeObject(TasStateManager.Settings);
bs.PutLump(BinaryStateLump.StateHistorySettings, tw => tw.WriteLine(settings));
bs.PutLump(BinaryStateLump.LagLog, tw => TasLagLog.Save(tw));
bs.PutLump(BinaryStateLump.Markers, tw => tw.WriteLine(Markers.ToString()));
if (StartsFromSavestate)
{
bs.PutLump(BinaryStateLump.Movieheader, tw => tw.WriteLine(Header.ToString()));
bs.PutLump(BinaryStateLump.Comments, tw => tw.WriteLine(CommentsString()));
bs.PutLump(BinaryStateLump.Subtitles, tw => tw.WriteLine(Subtitles.ToString()));
bs.PutLump(BinaryStateLump.SyncSettings, tw => tw.WriteLine(SyncSettingsJson));
bs.PutLump(BinaryStateLump.Input, WriteInputLog);
// TasProj extras
var settings = JsonConvert.SerializeObject(TasStateManager.Settings);
bs.PutLump(BinaryStateLump.StateHistorySettings, tw => tw.WriteLine(settings));
bs.PutLump(BinaryStateLump.LagLog, tw => TasLagLog.Save(tw));
bs.PutLump(BinaryStateLump.Markers, tw => tw.WriteLine(Markers.ToString()));
if (StartsFromSavestate)
if (TextSavestate != null)
{
if (TextSavestate != null)
{
bs.PutLump(BinaryStateLump.CorestateText, (TextWriter tw) => tw.Write(TextSavestate));
}
else
{
bs.PutLump(BinaryStateLump.Corestate, (BinaryWriter bw) => bw.Write(BinarySavestate));
}
bs.PutLump(BinaryStateLump.CorestateText, (TextWriter tw) => tw.Write(TextSavestate));
}
else if (StartsFromSaveRam)
else
{
bs.PutLump(BinaryStateLump.MovieSaveRam, (BinaryWriter bw) => bw.Write(SaveRam));
bs.PutLump(BinaryStateLump.Corestate, (BinaryWriter bw) => bw.Write(BinarySavestate));
}
}
else if (StartsFromSaveRam)
{
bs.PutLump(BinaryStateLump.MovieSaveRam, (BinaryWriter bw) => bw.Write(SaveRam));
}
if (ClientSettingsForSave != null)
{
var clientSettingsJson = ClientSettingsForSave();
bs.PutLump(BinaryStateLump.ClientSettings, (TextWriter tw) => tw.Write(clientSettingsJson));
}
if (ClientSettingsForSave != null)
{
var clientSettingsJson = ClientSettingsForSave();
bs.PutLump(BinaryStateLump.ClientSettings, (TextWriter tw) => tw.Write(clientSettingsJson));
}
if (VerificationLog.Any())
{
bs.PutLump(BinaryStateLump.VerificationLog, tw => tw.WriteLine(InputLogToString(VerificationLog)));
}
if (VerificationLog.Any())
{
bs.PutLump(BinaryStateLump.VerificationLog, tw => tw.WriteLine(VerificationLog.ToInputLog()));
}
if (Branches.Any())
{
Branches.Save(bs);
}
if (Branches.Any())
{
Branches.Save(bs);
}
bs.PutLump(BinaryStateLump.Session, tw => tw.WriteLine(JsonConvert.SerializeObject(Session)));
bs.PutLump(BinaryStateLump.Session, tw => tw.WriteLine(JsonConvert.SerializeObject(Session)));
if (TasStateManager.Settings.SaveStateHistory && !backup)
{
bs.PutLump(BinaryStateLump.StateHistory, bw => TasStateManager.Save(bw));
}
if (TasStateManager.Settings.SaveStateHistory && !backup)
{
bs.PutLump(BinaryStateLump.StateHistory, bw => TasStateManager.Save(bw));
}
if (!backup)
@ -293,16 +290,5 @@ namespace BizHawk.Client.Common
Markers.Clear();
ChangeLog.ClearLog();
}
private static string InputLogToString(IStringLog log)
{
var sb = new StringBuilder();
foreach (var record in log)
{
sb.AppendLine(record);
}
return sb.ToString();
}
}
}

View File

@ -58,26 +58,6 @@ namespace BizHawk.Client.Common
Markers.Add(0, startsFromSavestate ? "Savestate" : "Power on");
}
// TODO: use LogGenerators rather than string comparisons
private int? DivergentPoint(IStringLog currentLog, IStringLog newLog)
{
int max = newLog.Count;
if (currentLog.Count < newLog.Count)
{
max = currentLog.Count;
}
for (int i = 0; i < max; i++)
{
if (newLog[i] != currentLog[i])
{
return i;
}
}
return null;
}
public override void StartNewRecording()
{
ClearTasprojExtras();
@ -87,16 +67,6 @@ namespace BizHawk.Client.Common
base.StartNewRecording();
}
public override void SwitchToPlay()
{
Mode = MovieMode.Play;
}
public override void SwitchToRecord()
{
Mode = MovieMode.Record;
}
/// <summary>
/// Removes lag log and greenzone after this frame
/// </summary>
@ -202,10 +172,7 @@ namespace BizHawk.Client.Common
}
}
public IStringLog GetLogEntries()
{
return Log;
}
public IStringLog GetLogEntries() => Log;
private int? _timelineBranchFrame;
@ -434,7 +401,7 @@ namespace BizHawk.Client.Common
public void LoadBranch(TasBranch branch)
{
int? divergentPoint = DivergentPoint(Log, branch.InputLog);
int? divergentPoint = Log.DivergentPoint(branch.InputLog);
Log?.Dispose();
Log = branch.InputLog.Clone();
@ -508,15 +475,8 @@ namespace BizHawk.Client.Common
Changes = true;
}
public void ClearChanges()
{
Changes = false;
}
public void FlagChanges()
{
Changes = true;
}
public void ClearChanges() => Changes = false;
public void FlagChanges() => Changes = true;
#endregion
}