Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -82,14 +82,14 @@ public bool Engaged()
[LuaMethod("getrecording", "returns whether or not TAStudio is in recording mode")]
public bool GetRecording()
{
return Tastudio.TasPlaybackBox.RecordingMode;
return Tastudio.TasPlaybackBox.IsRecording;
}

[LuaMethodExample("tastudio.setrecording( true );")]
[LuaMethod("setrecording", "sets the recording mode on/off depending on the parameter")]
public void SetRecording(bool val)
{
if (Tastudio.TasPlaybackBox.RecordingMode != val)
if (Tastudio.TasPlaybackBox.IsRecording != val)
{
Tastudio.ToggleReadOnly();
}
Expand Down
48 changes: 28 additions & 20 deletions src/BizHawk.Client.EmuHawk/tools/TAStudio/PlaybackBox.cs
Original file line number Diff line number Diff line change
Expand Up @@ -35,26 +35,34 @@ public bool FollowCursor
set => FollowCursorCheckbox.Checked = value;
}

[Browsable(true)]
[DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
public bool RecordingMode
public enum RecordingModeState
{
get => Tastudio.CurrentTasMovie.IsRecording();
set
{
RecordingModeCheckbox.Checked = value;
Tastudio.MovieSession.ReadOnly = !value;
if (RecordingModeCheckbox.Checked)
{
Tastudio.CurrentTasMovie.SwitchToRecord();
}
else
{
Tastudio.CurrentTasMovie.SwitchToPlay();
}
Off,
On,
Suspended,
}

Tastudio.MainForm.SetMainformMovieInfo();
public bool IsRecording => Tastudio.CurrentTasMovie.IsRecording();
public void SetRecordingState(RecordingModeState value)
{
RecordingModeCheckbox.CheckState = value switch
{
RecordingModeState.On => CheckState.Checked,
RecordingModeState.Off => CheckState.Unchecked,
RecordingModeState.Suspended => CheckState.Indeterminate,
_ => CheckState.Unchecked,
};
Tastudio.MovieSession.ReadOnly = value == RecordingModeState.Off;
if (value == RecordingModeState.On)
{
Tastudio.CurrentTasMovie.SwitchToRecord();
}
else
{
Tastudio.CurrentTasMovie.SwitchToPlay();
}

Tastudio.MainForm.SetMainformMovieInfo();
}

public PlaybackBox()
Expand Down Expand Up @@ -113,7 +121,7 @@ protected override void OnLoad(EventArgs e)
TurboSeekCheckbox.Checked = Tastudio.Config?.TurboSeek ?? false;
AutoRestoreCheckbox.Checked = Tastudio.Settings.AutoRestoreLastPosition;
FollowCursorCheckbox.Checked = Tastudio.Settings.FollowCursor;
RecordingModeCheckbox.Checked = RecordingMode;
RecordingModeCheckbox.Checked = IsRecording;

_loading = false;
}
Expand Down Expand Up @@ -158,8 +166,8 @@ private void FollowCursorCheckbox_CheckedChanged(object sender, EventArgs e)

private void RecordingModeCheckbox_MouseClick(object sender, MouseEventArgs e)
{
RecordingMode = !RecordingMode;
Tastudio.WasRecording = RecordingMode; // hard reset at manual click and hotkey
SetRecordingState(RecordingModeCheckbox.Checked ? RecordingModeState.On : RecordingModeState.Off);
Tastudio.WasRecording = RecordingModeCheckbox.Checked; // hard reset at manual click and hotkey
}

private void RewindButton_MouseDown(object sender, MouseEventArgs e)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ public void GoToFrame(int frame, bool OnLeftMouseDown = false, bool skipLoadStat
// Other answer: turbo seek, navigating while unpaused
_pauseAfterSeeking = MainForm.EmulatorPaused || (SeekingTo != -1 && _pauseAfterSeeking);
WasRecording = CurrentTasMovie.IsRecording() || WasRecording;
TastudioPlayMode();
TasPlaybackBox.SetRecordingState(WasRecording ? PlaybackBox.RecordingModeState.Suspended : PlaybackBox.RecordingModeState.Off);
SeekingTo = frame; // must be before LoadState, since it calls UpdateAfter (potentially doing end-of-seek logic if prior seek was to before this frame) instead of SavestateLoaded for ??? reason.

var closestState = GetPriorStateForFramebuffer(frame);
Expand Down
16 changes: 8 additions & 8 deletions src/BizHawk.Client.EmuHawk/tools/TAStudio/TAStudio.cs
Original file line number Diff line number Diff line change
Expand Up @@ -829,28 +829,28 @@ private void DummyLoadMacro(string path)

private void TastudioToggleReadOnly()
{
TasPlaybackBox.RecordingMode = !TasPlaybackBox.RecordingMode;
WasRecording = TasPlaybackBox.RecordingMode; // hard reset at manual click and hotkey
TasPlaybackBox.SetRecordingState(TasPlaybackBox.IsRecording ? PlaybackBox.RecordingModeState.Off : PlaybackBox.RecordingModeState.On);
WasRecording = TasPlaybackBox.IsRecording; // hard reset at manual click and hotkey
}

private void TastudioPlayMode(bool resetWasRecording = false)
{
TasPlaybackBox.RecordingMode = false;
TasPlaybackBox.SetRecordingState(PlaybackBox.RecordingModeState.Off);

// once user started editing, rec mode is unsafe
if (resetWasRecording)
{
WasRecording = TasPlaybackBox.RecordingMode;
WasRecording = TasPlaybackBox.IsRecording;
}
}

private void TastudioRecordMode(bool resetWasRecording = false)
{
TasPlaybackBox.RecordingMode = true;
TasPlaybackBox.SetRecordingState(PlaybackBox.RecordingModeState.On);

if (resetWasRecording)
{
WasRecording = TasPlaybackBox.RecordingMode;
WasRecording = TasPlaybackBox.IsRecording;
}
}

Expand Down Expand Up @@ -1306,7 +1306,7 @@ private void HandleRotationChanged(object sender, EventArgs e)
private bool _suspendEditLogic;
public void LoadBranch(TasBranch branch)
{
if (Settings.OldControlSchemeForBranches && !TasPlaybackBox.RecordingMode)
if (Settings.OldControlSchemeForBranches && !TasPlaybackBox.IsRecording)
{
GoToFrame(branch.Frame);
return;
Expand All @@ -1320,7 +1320,7 @@ public void LoadBranch(TasBranch branch)
CurrentTasMovie.TasStateManager.Capture(Emulator.Frame, Emulator.AsStatable());
QuickBmpFile.Copy(new BitmapBufferVideoProvider(branch.CoreFrameBuffer), VideoProvider);

if (Settings.OldControlSchemeForBranches && TasPlaybackBox.RecordingMode)
if (Settings.OldControlSchemeForBranches && TasPlaybackBox.IsRecording)
{
CurrentTasMovie.Truncate(branch.Frame);
}
Expand Down
Loading