From 9820fb0879a88834b072a2bbb8f62170a535c05c Mon Sep 17 00:00:00 2001 From: adelikat Date: Sat, 11 Jul 2020 12:19:27 -0500 Subject: [PATCH] lua - implement tastudio.submitclearframes(), fixes #2170 --- .../tools/Lua/Libraries/TAStudioLuaLibrary.cs | 23 ++++++++++++++++--- .../tools/TAStudio/TAStudio.cs | 23 +++++++++++++++++++ 2 files changed, 43 insertions(+), 3 deletions(-) diff --git a/src/BizHawk.Client.EmuHawk/tools/Lua/Libraries/TAStudioLuaLibrary.cs b/src/BizHawk.Client.EmuHawk/tools/Lua/Libraries/TAStudioLuaLibrary.cs index 602a35d612..2da3913dcc 100644 --- a/src/BizHawk.Client.EmuHawk/tools/Lua/Libraries/TAStudioLuaLibrary.cs +++ b/src/BizHawk.Client.EmuHawk/tools/Lua/Libraries/TAStudioLuaLibrary.cs @@ -41,7 +41,8 @@ namespace BizHawk.Client.EmuHawk { InputChange, InsertFrames, - DeleteFrames + DeleteFrames, + ClearFrames } private enum InputChangeTypes @@ -267,6 +268,21 @@ namespace BizHawk.Client.EmuHawk } } + [LuaMethodExample("")] + [LuaMethod("submitclearframes", "")] + public void SubmitClearFrames(int frame, int number) + { + if (Engaged() && 0.RangeToExclusive(Tastudio.CurrentTasMovie.InputLogLength).Contains(frame) && number > 0) + { + _changeList.Add(new PendingChanges + { + Type = LuaChangeTypes.ClearFrames, + Frame = frame, + Number = number + }); + } + } + [LuaMethodExample("")] [LuaMethod("applyinputchanges", "")] public void ApplyInputChanges() @@ -298,6 +314,9 @@ namespace BizHawk.Client.EmuHawk case LuaChangeTypes.DeleteFrames: Tastudio.DeleteFrames(_changeList[i].Frame, _changeList[i].Number); break; + case LuaChangeTypes.ClearFrames: + Tastudio.ClearFrames(_changeList[i].Frame, _changeList[i].Number); + break; } } _changeList.Clear(); @@ -305,8 +324,6 @@ namespace BizHawk.Client.EmuHawk Tastudio.JumpToGreenzone(); Tastudio.DoAutoRestore(); } - - } } diff --git a/src/BizHawk.Client.EmuHawk/tools/TAStudio/TAStudio.cs b/src/BizHawk.Client.EmuHawk/tools/TAStudio/TAStudio.cs index 8e7a7494b9..e1098cca88 100644 --- a/src/BizHawk.Client.EmuHawk/tools/TAStudio/TAStudio.cs +++ b/src/BizHawk.Client.EmuHawk/tools/TAStudio/TAStudio.cs @@ -1106,6 +1106,29 @@ namespace BizHawk.Client.EmuHawk } } + public void ClearFrames(int beginningFrame, int numberOfFrames) + { + if (beginningFrame < CurrentTasMovie.InputLogLength) + { + bool needsToRollback = TasView.FirstSelectedIndex < Emulator.Frame; + int last = Math.Min(beginningFrame + numberOfFrames, CurrentTasMovie.InputLogLength); + for (int i = beginningFrame; i < last; i++) + { + CurrentTasMovie.ClearFrame(i); + } + + if (needsToRollback) + { + GoToLastEmulatedFrameIfNecessary(beginningFrame); + DoAutoRestore(); + } + else + { + RefreshDialog(); + } + } + } + private void Tastudio_Closing(object sender, FormClosingEventArgs e) { if (!_initialized)