Movie stuff

This commit is contained in:
adelikat 2014-07-08 15:15:35 +00:00
parent 7e39e67b1f
commit cb3e340a1a
4 changed files with 69 additions and 51 deletions

View File

@ -112,10 +112,10 @@ namespace BizHawk.Client.Common
}
}
public void MovieLoad()
public bool MovieLoad()
{
Movie.Load();
MovieControllerAdapter = Movie.LogGeneratorInstance().MovieControllerAdapter;
return Movie.Load();
}
public void StopMovie(bool saveChanges = true)

View File

@ -18,7 +18,6 @@ namespace BizHawk.Client.EmuHawk
return;
}
//If a movie is already loaded, save it before starting a new movie
if (Global.MovieSession.Movie.IsActive && !string.IsNullOrEmpty(Global.MovieSession.Movie.Filename))
{

View File

@ -85,9 +85,7 @@ namespace BizHawk.Client.EmuHawk
}
}
// Header
movieToRecord.PopulateWithDefaultHeaderValues(AuthorBox.Text);
movieToRecord.Save();
GlobalWin.MainForm.StartNewMovie(movieToRecord, true);

View File

@ -56,11 +56,8 @@ namespace BizHawk.Client.EmuHawk
if (AskSave())
{
SaveConfigSettings();
GlobalWin.OSD.AddMessage("TAStudio Disengaged");
if (Global.MovieSession.Movie is TasMovie)
{
GlobalWin.MainForm.StopMovie(saveChanges: false);
}
GlobalWin.MainForm.StopMovie(saveChanges: true);
DisengageTastudio();
}
else
{
@ -186,10 +183,7 @@ namespace BizHawk.Client.EmuHawk
var result = MessageBox.Show("In order to use Tastudio, a new project must be created from the current movie\nThe current movie will be saved and closed, and a new project file will be created\nProceed?", "Convert movie", MessageBoxButtons.OKCancel, MessageBoxIcon.Question);
if (result == DialogResult.OK)
{
Global.MovieSession.Movie.Save();
var newMovie = Global.MovieSession.Movie.ToTasMovie();
Global.MovieSession.Movie.Stop();
EngageTasStudio(newMovie);
ConvertCurrentMovieToTasproj();
}
else
{
@ -201,42 +195,62 @@ namespace BizHawk.Client.EmuHawk
// Start Scenario 2: A tasproj is already active
else if (Global.MovieSession.Movie.IsActive && Global.MovieSession.Movie is TasMovie)
{
_tas = Global.MovieSession.Movie as TasMovie;
// Nothing to do
}
// Start Scenario 3: No movie, but user wants to autload their last project
else if (Global.Config.AutoloadTAStudioProject)
{
Global.MovieSession.Movie = new TasMovie();
_tas = Global.MovieSession.Movie as TasMovie;
LoadFileFromRecent(Global.Config.RecentTas[0]);
LoadProject(Global.Config.RecentTas.MostRecent);
}
// Start Scenario 4: No movie, default behavior of engaging tastudio with a new default project
else
{
EngageTasStudio();
NewTasMovie();
StartSessionFromTasMovie();
}
EngageTastudio();
SetUpColumns();
LoadConfigSettings();
}
private void EngageTasStudio(TasMovie newMovie = null)
private void ConvertCurrentMovieToTasproj()
{
GlobalWin.OSD.AddMessage("TAStudio engaged");
Global.MovieSession.Movie = newMovie ?? new TasMovie();
if (newMovie == null)
{
Global.MovieSession.Movie.PopulateWithDefaultHeaderValues();
}
_tas = Global.MovieSession.Movie as TasMovie;
StartNewSession();
Global.MovieSession.Movie.Save();
Global.MovieSession.Movie = Global.MovieSession.Movie.ToTasMovie();
Global.MovieSession.Movie.Save();
}
private void StartNewSession()
private void EngageTastudio()
{
GlobalWin.OSD.AddMessage("TAStudio engaged");
_tas = Global.MovieSession.Movie as TasMovie;
}
private void DisengageTastudio()
{
GlobalWin.OSD.AddMessage("TAStudio disengaged");
Global.MovieSession.Movie = MovieService.DefaultInstance;
}
private void NewTasMovie()
{
Global.MovieSession.Movie = new TasMovie();
_tas = Global.MovieSession.Movie as TasMovie;
_tas.Filename = DefaultTasProjName(); // TODO don't do this, take over any mainform actions that can crash without a filename
_tas.PopulateWithDefaultHeaderValues();
}
private static string DefaultTasProjName()
{
return Path.Combine(
PathManager.MakeAbsolutePath(Global.Config.PathEntries.MoviesPathFragment, null),
PathManager.FilesystemSafeName(Global.Game) + "." + TasMovie.Extension);
}
private void StartSessionFromTasMovie()
{
if (AskSave())
{
@ -245,6 +259,31 @@ namespace BizHawk.Client.EmuHawk
}
}
public void LoadProject(string path)
{
if (AskSave())
{
NewTasMovie();
_tas.Filename = path;
var loadResult = Global.MovieSession.MovieLoad();
if (!loadResult)
{
ToolHelpers.HandleLoadError(Global.Config.RecentTas, path);
}
else
{
Global.Config.RecentTas.Add(path);
RefreshDialog();
}
}
}
private void RefreshDialog()
{
TasView.ItemCount = _tas.InputLogLength;
}
private void SetUpColumns()
{
TasView.Columns.Clear();
@ -296,24 +335,6 @@ namespace BizHawk.Client.EmuHawk
Global.Config.TAStudioSettings.Height = Bottom - Top;
}
public void LoadFileFromRecent(string path)
{
if (AskSave())
{
_tas.Filename = path;
var loadResult = _tas.Load(); // TODO: Global.MovieSession.MovieLoad() needs to be called in order to set up the Movie adapter properly
if (!loadResult)
{
ToolHelpers.HandleLoadError(Global.Config.RecentTas, path);
}
else
{
Global.Config.RecentTas.Add(path);
TasView.ItemCount = _tas.InputLogLength;
}
}
}
private void GoToFrame(int frame)
{
// If past greenzone, emulate and capture states
@ -377,14 +398,14 @@ namespace BizHawk.Client.EmuHawk
{
RecentSubMenu.DropDownItems.Clear();
RecentSubMenu.DropDownItems.AddRange(
ToolHelpers.GenerateRecentMenu(Global.Config.RecentTas, LoadFileFromRecent)
ToolHelpers.GenerateRecentMenu(Global.Config.RecentTas, LoadProject)
);
}
private void NewTasMenuItem_Click(object sender, EventArgs e)
{
GlobalWin.OSD.AddMessage("new TAStudio session started");
StartNewSession();
StartSessionFromTasMovie();
}
private void OpenTasMenuItem_Click(object sender, EventArgs e)