Refactor to put multitrack logic into the multitrack object itself instead of in the OSD manager and hotkey logic

This commit is contained in:
adelikat 2014-06-29 23:13:44 +00:00
parent 42ee461b2c
commit 3a011ad788
4 changed files with 84 additions and 51 deletions

View File

@ -317,5 +317,36 @@ namespace BizHawk.Client.Common
return true; return true;
} }
public void ToggleMultitrack()
{
if (Movie.IsActive)
{
if (Global.Config.VBAStyleMovieLoadState)
{
MessageCallback("Multi-track can not be used in Full Movie Loadstates mode");
}
else
{
Global.MovieSession.MultiTrack.IsActive = !Global.MovieSession.MultiTrack.IsActive;
if (Global.MovieSession.MultiTrack.IsActive)
{
MessageCallback("MultiTrack Enabled");
MultiTrack.CurrentState = "Recording None";
}
else
{
MessageCallback("MultiTrack Disabled");
}
Global.MovieSession.MultiTrack.SelectNone();
}
}
else
{
MessageCallback("MultiTrack cannot be enabled while not recording.");
}
}
} }
} }

View File

@ -3,7 +3,52 @@
public class MultitrackRecording public class MultitrackRecording
{ {
public bool IsActive { get; set; } public bool IsActive { get; set; }
public int CurrentPlayer { get; set; } public int CurrentPlayer { get; set; }
public bool RecordAll { get; set; } public bool RecordAll { get; set; }
/// <summary>
/// A user friendly multitrack status
/// </summary>
public string CurrentState { get; set; }
public void SelectAll()
{
CurrentPlayer = 0;
RecordAll = true;
CurrentState = "Recording All";
}
public void SelectNone()
{
RecordAll = false;
CurrentPlayer = 0;
CurrentState = "Recording None";
}
public void Increment()
{
RecordAll = false;
CurrentPlayer++;
if (CurrentPlayer > Global.Emulator.ControllerDefinition.PlayerCount)
{
CurrentPlayer = 1;
}
CurrentState = "Recording Player " + CurrentPlayer;
}
public void Decrement()
{
RecordAll = false;
CurrentPlayer--;
if (CurrentPlayer < 1)
{
CurrentPlayer = Global.Emulator.ControllerDefinition.PlayerCount;
}
CurrentState = "Recording Player " + CurrentPlayer;
}
} }
} }

View File

@ -43,7 +43,6 @@ namespace BizHawk.Client.EmuHawk
public class OSDManager public class OSDManager
{ {
public string FPS { get; set; } public string FPS { get; set; }
public string MT { get; set; }
public IBlitterFont MessageFont; public IBlitterFont MessageFont;
public void Dispose() public void Dispose()
@ -373,10 +372,10 @@ namespace BizHawk.Client.EmuHawk
if (Global.MovieSession.MultiTrack.IsActive) if (Global.MovieSession.MultiTrack.IsActive)
{ {
float x = GetX(g, Global.Config.DispMultix, Global.Config.DispMultianchor, MT); float x = GetX(g, Global.Config.DispMultix, Global.Config.DispMultianchor, Global.MovieSession.MultiTrack.CurrentState);
float y = GetY(g, Global.Config.DispMultiy, Global.Config.DispMultianchor, MT); float y = GetY(g, Global.Config.DispMultiy, Global.Config.DispMultianchor, Global.MovieSession.MultiTrack.CurrentState);
DrawOsdMessage(g, MT, FixedMessagesColor, x, y); DrawOsdMessage(g, Global.MovieSession.MultiTrack.CurrentState, FixedMessagesColor, x, y);
} }
if (Global.Config.DisplayFPS && FPS != null) if (Global.Config.DisplayFPS && FPS != null)

View File

@ -259,65 +259,23 @@ namespace BizHawk.Client.EmuHawk
SaveMovie(); SaveMovie();
break; break;
case "Toggle MultiTrack": case "Toggle MultiTrack":
if (Global.MovieSession.Movie.IsActive) Global.MovieSession.ToggleMultitrack();
{
if (Global.Config.VBAStyleMovieLoadState)
{
GlobalWin.OSD.AddMessage("Multi-track can not be used in Full Movie Loadstates mode");
}
else
{
Global.MovieSession.MultiTrack.IsActive = !Global.MovieSession.MultiTrack.IsActive;
if (Global.MovieSession.MultiTrack.IsActive)
{
GlobalWin.OSD.AddMessage("MultiTrack Enabled");
GlobalWin.OSD.MT = "Recording None";
}
else
{
GlobalWin.OSD.AddMessage("MultiTrack Disabled");
}
Global.MovieSession.MultiTrack.RecordAll = false;
Global.MovieSession.MultiTrack.CurrentPlayer = 0;
}
}
else
{
GlobalWin.OSD.AddMessage("MultiTrack cannot be enabled while not recording.");
}
GlobalWin.DisplayManager.NeedsToPaint = true; GlobalWin.DisplayManager.NeedsToPaint = true;
break; break;
case "MT Select All": case "MT Select All":
Global.MovieSession.MultiTrack.CurrentPlayer = 0; Global.MovieSession.MultiTrack.SelectAll();
Global.MovieSession.MultiTrack.RecordAll = true;
GlobalWin.OSD.MT = "Recording All";
GlobalWin.DisplayManager.NeedsToPaint = true; GlobalWin.DisplayManager.NeedsToPaint = true;
break; break;
case "MT Select None": case "MT Select None":
Global.MovieSession.MultiTrack.CurrentPlayer = 0; Global.MovieSession.MultiTrack.SelectNone();
Global.MovieSession.MultiTrack.RecordAll = false;
GlobalWin.OSD.MT = "Recording None";
GlobalWin.DisplayManager.NeedsToPaint = true; GlobalWin.DisplayManager.NeedsToPaint = true;
break; break;
case "MT Increment Player": case "MT Increment Player":
Global.MovieSession.MultiTrack.CurrentPlayer++; Global.MovieSession.MultiTrack.Increment();
Global.MovieSession.MultiTrack.RecordAll = false;
if (Global.MovieSession.MultiTrack.CurrentPlayer > Global.Emulator.ControllerDefinition.PlayerCount)
{
Global.MovieSession.MultiTrack.CurrentPlayer = 1;
}
GlobalWin.OSD.MT = "Recording Player " + Global.MovieSession.MultiTrack.CurrentPlayer;
GlobalWin.DisplayManager.NeedsToPaint = true; GlobalWin.DisplayManager.NeedsToPaint = true;
break; break;
case "MT Decrement Player": case "MT Decrement Player":
Global.MovieSession.MultiTrack.CurrentPlayer--; Global.MovieSession.MultiTrack.Decrement();
Global.MovieSession.MultiTrack.RecordAll = false;
if (Global.MovieSession.MultiTrack.CurrentPlayer < 1)
{
Global.MovieSession.MultiTrack.CurrentPlayer = Global.Emulator.ControllerDefinition.PlayerCount;
}
GlobalWin.OSD.MT = "Recording Player " + Global.MovieSession.MultiTrack.CurrentPlayer;
GlobalWin.DisplayManager.NeedsToPaint = true; GlobalWin.DisplayManager.NeedsToPaint = true;
break; break;
case "Movie Poke": case "Movie Poke":