BizHawk/BizHawk.Client.EmuHawk/MainForm.Movie.cs

154 lines
4.6 KiB
C#
Raw Normal View History

using System;
using System.IO;
using System.Windows.Forms;
using BizHawk.Client.Common;
namespace BizHawk.Client.EmuHawk
{
partial class MainForm
{
public void StartNewMovie(Movie m, bool record)
{
//If a movie is already loaded, save it before starting a new movie
2013-10-24 22:26:28 +00:00
if (Global.MovieSession.Movie.IsActive)
{
2013-10-24 22:26:28 +00:00
Global.MovieSession.Movie.WriteMovie();
}
2012-10-13 21:30:19 +00:00
Global.MovieSession = new MovieSession
{
Movie = m,
MessageCallback = GlobalWinF.OSD.AddMessage,
AskYesNoCallback = StateErrorAskUser
};
2011-07-24 23:14:16 +00:00
RewireInputChain();
if (!record)
2012-09-03 19:42:53 +00:00
{
2013-10-24 22:26:28 +00:00
Global.MovieSession.Movie.LoadMovie();
SetSyncDependentSettings();
2012-09-03 19:42:53 +00:00
}
LoadRom(GlobalWinF.MainForm.CurrentlyOpenRom, true, !record);
Global.Config.RecentMovies.Add(m.Filename);
2013-10-24 22:26:28 +00:00
if (Global.MovieSession.Movie.StartsFromSavestate)
{
2013-10-24 22:26:28 +00:00
LoadStateFile(Global.MovieSession.Movie.Filename, Path.GetFileName(Global.MovieSession.Movie.Filename));
Global.Emulator.ResetFrameCounter();
}
if (record)
{
Global.Emulator.ClearSaveRam();
2013-10-24 22:26:28 +00:00
Global.MovieSession.Movie.StartRecording();
Global.ReadOnly = false;
}
else
{
Global.Emulator.ClearSaveRam();
2013-10-24 22:26:28 +00:00
Global.MovieSession.Movie.StartPlayback();
}
SetMainformMovieInfo();
2013-11-03 00:16:46 +00:00
GlobalWinF.Tools.Restart<TAStudio>();
2013-11-02 21:31:04 +00:00
GlobalWinF.Tools.Restart<VirtualPadForm>();
GlobalWinF.DisplayManager.NeedsToPaint = true;
}
public void SetMainformMovieInfo()
{
2013-10-24 22:26:28 +00:00
if (Global.MovieSession.Movie.IsPlaying)
{
2013-10-24 22:26:28 +00:00
Text = DisplayNameForSystem(Global.Game.System) + " - " + Global.Game.Name + " - " + Path.GetFileName(Global.MovieSession.Movie.Filename);
2013-10-27 15:53:37 +00:00
PlayRecordStatusButton.Image = Properties.Resources.Play;
PlayRecordStatusButton.ToolTipText = "Movie is in playback mode";
PlayRecordStatusButton.Visible = true;
}
2013-10-24 22:26:28 +00:00
else if (Global.MovieSession.Movie.IsRecording)
{
2013-10-24 22:26:28 +00:00
Text = DisplayNameForSystem(Global.Game.System) + " - " + Global.Game.Name + " - " + Path.GetFileName(Global.MovieSession.Movie.Filename);
2013-10-27 15:53:37 +00:00
PlayRecordStatusButton.Image = Properties.Resources.RecordHS;
PlayRecordStatusButton.ToolTipText = "Movie is in record mode";
PlayRecordStatusButton.Visible = true;
}
2013-10-24 22:26:28 +00:00
else if (!Global.MovieSession.Movie.IsActive)
{
Text = DisplayNameForSystem(Global.Game.System) + " - " + Global.Game.Name;
2013-10-27 15:53:37 +00:00
PlayRecordStatusButton.Image = Properties.Resources.Blank;
PlayRecordStatusButton.ToolTipText = "No movie is active";
PlayRecordStatusButton.Visible = false;
}
}
public void LoadPlayMovieDialog()
{
new PlayMovie().ShowDialog();
}
public void LoadRecordMovieDialog()
{
// put any BEETA quality cores here
if (Global.Emulator is Emulation.Consoles.Nintendo.GBA.GBA ||
Global.Emulator is Emulation.Consoles.Sega.Genesis ||
Global.Emulator is Emulation.Consoles.Sega.Saturn.Yabause ||
Global.Emulator is Emulation.Consoles.Sony.PSP.PSP)
{
var result = MessageBox.Show
(this, "Thanks for using Bizhawk! The emulation core you have selected " +
"is currently BETA-status. We appreciate your help in testing Bizhawk. " +
"You can record a movie on this core if you'd like to, but expect to " +
"encounter bugs and sync problems. Continue?", "BizHawk", MessageBoxButtons.YesNo);
if (result != DialogResult.Yes) return;
}
new RecordMovie().ShowDialog();
}
public void RestartMovie()
{
2013-10-24 22:26:28 +00:00
if (Global.MovieSession.Movie.IsActive)
{
LoadRom(CurrentlyOpenRom, true, true);
2013-10-24 22:26:28 +00:00
if (Global.MovieSession.Movie.StartsFromSavestate)
{
2013-10-24 22:26:28 +00:00
LoadStateFile(Global.MovieSession.Movie.Filename, Path.GetFileName(Global.MovieSession.Movie.Filename));
Global.Emulator.ResetFrameCounter();
}
Global.Emulator.ClearSaveRam();
2013-10-24 22:26:28 +00:00
Global.MovieSession.Movie.StartPlayback();
SetMainformMovieInfo();
GlobalWinF.OSD.AddMessage("Replaying movie file in read-only mode");
Global.ReadOnly = true;
}
}
public void StopMovie(bool abortchanges = false)
{
Global.MovieSession.StopMovie();
SetMainformMovieInfo();
}
//On movie load, these need to be set based on the contents of the movie file
private void SetSyncDependentSettings()
{
switch (Global.Emulator.SystemId)
{
case "Coleco":
2013-10-24 22:26:28 +00:00
string str = Global.MovieSession.Movie.Header.GetHeaderLine(MovieHeader.SKIPBIOS);
if (!String.IsNullOrWhiteSpace(str))
{
if (str.ToLower() == "true")
{
Global.Config.ColecoSkipBiosIntro = true;
}
else
{
Global.Config.ColecoSkipBiosIntro = false;
}
}
break;
}
}
}
}