IStateManager - refactor indexer to not return a keyvalue pair, since it by design will try to return the exact frame, returning the frame is redundant
This commit is contained in:
parent
394a6d86b5
commit
3ec2ec325a
|
@ -6,14 +6,12 @@ namespace BizHawk.Client.Common
|
||||||
{
|
{
|
||||||
public interface IStateManager
|
public interface IStateManager
|
||||||
{
|
{
|
||||||
// byte[] this[int frame] { get; } // TODO: I had it refactored to this back in the day
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Retrieves the savestate for the given frame,
|
/// Retrieves the savestate for the given frame,
|
||||||
/// If this frame does not have a state currently, will return an empty array
|
/// If this frame does not have a state currently, will return an empty array
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <returns>A savestate for the given frame or an empty array if there isn't one</returns>
|
/// <returns>A savestate for the given frame or an empty array if there isn't one</returns>
|
||||||
KeyValuePair<int, byte[]> this[int frame] { get; }
|
byte[] this[int frame] { get; }
|
||||||
|
|
||||||
TasStateManagerSettings Settings { get; set; }
|
TasStateManagerSettings Settings { get; set; }
|
||||||
|
|
||||||
|
|
|
@ -60,21 +60,21 @@ namespace BizHawk.Client.Common
|
||||||
|
|
||||||
public TasStateManagerSettings Settings { get; set; }
|
public TasStateManagerSettings Settings { get; set; }
|
||||||
|
|
||||||
public KeyValuePair<int, byte[]> this[int frame]
|
public byte[] this[int frame]
|
||||||
{
|
{
|
||||||
get
|
get
|
||||||
{
|
{
|
||||||
if (frame == 0)
|
if (frame == 0)
|
||||||
{
|
{
|
||||||
return new KeyValuePair<int, byte[]>(0, InitialState);
|
return InitialState;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (_states.ContainsKey(frame))
|
if (_states.ContainsKey(frame))
|
||||||
{
|
{
|
||||||
return new KeyValuePair<int, byte[]>(frame, _states[frame].State);
|
return _states[frame].State;
|
||||||
}
|
}
|
||||||
|
|
||||||
return new KeyValuePair<int, byte[]>(-1, new byte[0]);
|
return new byte[0];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -267,8 +267,12 @@ namespace BizHawk.Client.Common
|
||||||
public KeyValuePair<int, byte[]> GetStateClosestToFrame(int frame)
|
public KeyValuePair<int, byte[]> GetStateClosestToFrame(int frame)
|
||||||
{
|
{
|
||||||
var s = _states.LastOrDefault(state => state.Key < frame);
|
var s = _states.LastOrDefault(state => state.Key < frame);
|
||||||
|
if (s.Key > 0)
|
||||||
|
{
|
||||||
|
return new KeyValuePair<int, byte[]>(s.Key, s.Value.State);
|
||||||
|
}
|
||||||
|
|
||||||
return this[s.Key];
|
return new KeyValuePair<int, byte[]>(0, InitialState);
|
||||||
}
|
}
|
||||||
|
|
||||||
public int GetStateIndexByFrame(int frame)
|
public int GetStateIndexByFrame(int frame)
|
||||||
|
|
|
@ -815,9 +815,9 @@ namespace BizHawk.Client.EmuHawk
|
||||||
if (CurrentTasMovie.TasStateManager.HasState(Emulator.Frame))
|
if (CurrentTasMovie.TasStateManager.HasState(Emulator.Frame))
|
||||||
{
|
{
|
||||||
byte[] state = StatableEmulator.SaveStateBinary();
|
byte[] state = StatableEmulator.SaveStateBinary();
|
||||||
byte[] greenzone = CurrentTasMovie.TasStateManager[Emulator.Frame].Value;
|
byte[] greenZone = CurrentTasMovie.TasStateManager[Emulator.Frame];
|
||||||
|
|
||||||
if (!state.SequenceEqual(greenzone))
|
if (!state.SequenceEqual(greenZone))
|
||||||
{
|
{
|
||||||
MessageBox.Show($"Bad data between frames {lastState} and {Emulator.Frame}");
|
MessageBox.Show($"Bad data between frames {lastState} and {Emulator.Frame}");
|
||||||
return;
|
return;
|
||||||
|
|
Loading…
Reference in New Issue