Feature: Option for TAStudio to only save states on marker frames.
This commit is contained in:
parent
e4bd1f2daf
commit
ea52e2ea9f
|
@ -622,6 +622,25 @@ namespace BizHawk.Client.Common
|
|||
toSave.Add(si);
|
||||
}
|
||||
|
||||
bw.Write(toSave.Count);
|
||||
for (int i = 0; i < toSave.Count; i++)
|
||||
{
|
||||
bw.Write(toSave[i].Frame);
|
||||
bw.Write(toSave[i].Size);
|
||||
toSave[i].Read().CopyTo(bw.BaseStream);
|
||||
}
|
||||
}
|
||||
else if (Settings.StatesToSave == ZwinderStateManagerSettings.States.MarkersOnly)
|
||||
{
|
||||
// Some states that should be reserved via marker might be in a ring buffer but not yet in _reserved.
|
||||
List<StateInfo> allStates = AllStates().ToList();
|
||||
List<StateInfo> toSave = new();
|
||||
for (int i = 0; i < allStates.Count; i++)
|
||||
{
|
||||
if (_reserveCallback(allStates[i].Frame))
|
||||
toSave.Add(allStates[i]);
|
||||
}
|
||||
|
||||
bw.Write(toSave.Count);
|
||||
for (int i = 0; i < toSave.Count; i++)
|
||||
{
|
||||
|
|
|
@ -116,6 +116,8 @@ namespace BizHawk.Client.Common
|
|||
All,
|
||||
[Display(Name = "Reserved Only")]
|
||||
ReservedOnly,
|
||||
[Display(Name = "Markers Only")]
|
||||
MarkersOnly,
|
||||
None,
|
||||
}
|
||||
|
||||
|
|
|
@ -685,6 +685,33 @@ namespace BizHawk.Tests.Client.Common.Movie
|
|||
}
|
||||
}
|
||||
|
||||
|
||||
[TestMethod]
|
||||
public void TestKeepsMarkersOnSave()
|
||||
{
|
||||
const int markerFrame = 15;
|
||||
IStatable ss = CreateStateSource();
|
||||
ZwinderStateManager manager = new ZwinderStateManager(new(), f => f == markerFrame);
|
||||
manager.Settings.StatesToSave = ZwinderStateManagerSettings.States.MarkersOnly;
|
||||
|
||||
var ms = new MemoryStream();
|
||||
ss.SaveStateBinary(new BinaryWriter(ms));
|
||||
manager.Engage(ms.ToArray());
|
||||
|
||||
// Simulate playing movie.
|
||||
int endFrame = markerFrame;
|
||||
for (int i = 0; i <= endFrame; i++)
|
||||
manager.Capture(i, ss);
|
||||
// Simulate save and load
|
||||
MemoryStream stream = new();
|
||||
manager.SaveStateHistory(new(stream));
|
||||
stream.Seek(0, SeekOrigin.Begin);
|
||||
ZwinderStateManager loadedManager = ZwinderStateManager.Create(new(stream), manager.Settings, (f) => false);
|
||||
// ASSERT: The only state saved is the maker frame.
|
||||
Assert.AreEqual(1, loadedManager.AllStates().Count(), "Expected only two states in saved tasproj.");
|
||||
Assert.IsTrue(loadedManager.HasState(markerFrame));
|
||||
}
|
||||
|
||||
private class StateSource : IStatable
|
||||
{
|
||||
public int Frame { get; set; }
|
||||
|
|
Loading…
Reference in New Issue