diff --git a/BizHawk.Client.Common/movie/TasMovie.cs b/BizHawk.Client.Common/movie/TasMovie.cs
index 7f6eddb8cc..49851a07eb 100644
--- a/BizHawk.Client.Common/movie/TasMovie.cs
+++ b/BizHawk.Client.Common/movie/TasMovie.cs
@@ -34,14 +34,14 @@ namespace BizHawk.Client.Common
public void ToggleButton(int frame, string buttonName)
{
- //_records[frame].Buttons[buttonName] ^= true; //TODO: be this clean but still fire the event
+ InvalidateGreenzone(frame);
_records[frame].SetButton(buttonName, !_records[frame].Buttons[buttonName]);
}
public void SetButton(int frame, string buttonName, bool value)
{
- //_records[frame].Buttons[buttonName] = value; //TODO: be this clean but still fire the event
+ InvalidateGreenzone(frame);
_records[frame].SetButton(buttonName, value);
}
@@ -52,7 +52,6 @@ namespace BizHawk.Client.Common
private void InputChanged(object sender, MovieRecord.InputEventArgs e)
{
- //TODO: manage green zone
Changes = true;
if (OnChanged != null)
@@ -61,6 +60,18 @@ namespace BizHawk.Client.Common
}
}
+ ///
+ /// Removes the greenzone content after the given frame
+ ///
+ ///
+ private void InvalidateGreenzone(int frame)
+ {
+ for (int i = frame + 1; i < _records.Count; i++)
+ {
+ _records[i].ClearState();
+ }
+ }
+
#region Events
public delegate void MovieEventHandler(object sender, MovieRecord.InputEventArgs e);
@@ -259,6 +270,7 @@ namespace BizHawk.Client.Common
public void PokeFrame(int frame, IController source)
{
+ InvalidateGreenzone(frame);
if (frame < _records.Count)
{
Changes = true;