Movies - Remove UserMovie and change all references to it to Global.MovieSession.Movie, fix error in CheckTime Line logic, read-only savestates should now work

This commit is contained in:
andres.delikat 2011-09-03 18:07:30 +00:00
parent d5247babe8
commit a84f881c5c
6 changed files with 90 additions and 89 deletions

View File

@ -743,9 +743,9 @@ namespace BizHawk.MultiClient
s.DisableFrame();
int index = -1;
Subtitle sub = new Subtitle();
for (int x = 0; x < UserMovie.Subtitles.Count(); x++)
for (int x = 0; x < Global.MovieSession.Movie.Subtitles.Count(); x++)
{
sub = UserMovie.Subtitles.GetSubtitleByIndex(x);
sub = Global.MovieSession.Movie.Subtitles.GetSubtitleByIndex(x);
if (Global.Emulator.Frame == sub.Frame)
{
index = x;
@ -762,8 +762,8 @@ namespace BizHawk.MultiClient
if (s.ShowDialog() == DialogResult.OK)
{
if (index >= 0)
UserMovie.Subtitles.Remove(index);
UserMovie.Subtitles.AddSubtitle(s.sub);
Global.MovieSession.Movie.Subtitles.Remove(index);
Global.MovieSession.Movie.Subtitles.AddSubtitle(s.sub);
}
}
@ -818,7 +818,7 @@ namespace BizHawk.MultiClient
contextMenuStrip1.Items[1].Visible = false;
contextMenuStrip1.Items[2].Visible = false;
if (UserMovie.Mode == MOVIEMODE.INACTIVE)
if (Global.MovieSession.Movie.Mode == MOVIEMODE.INACTIVE)
{
contextMenuStrip1.Items[3].Visible = true;
contextMenuStrip1.Items[4].Visible = true;
@ -909,7 +909,7 @@ namespace BizHawk.MultiClient
private void makeMovieBackupToolStripMenuItem_Click(object sender, EventArgs e)
{
UserMovie.WriteBackup();
Global.MovieSession.Movie.WriteBackup();
}
private void automaticallyBackupMoviesToolStripMenuItem_Click(object sender, EventArgs e)
@ -972,21 +972,21 @@ namespace BizHawk.MultiClient
private void viewCommentsToolStripMenuItem_Click(object sender, EventArgs e)
{
if (UserMovie.Mode == MOVIEMODE.INACTIVE) return;
if (Global.MovieSession.Movie.Mode == MOVIEMODE.INACTIVE) return;
EditCommentsForm c = new EditCommentsForm();
c.ReadOnly = ReadOnly;
c.GetMovie(UserMovie);
c.GetMovie(Global.MovieSession.Movie);
c.ShowDialog();
}
private void viewSubtitlesToolStripMenuItem_Click(object sender, EventArgs e)
{
if (UserMovie.Mode == MOVIEMODE.INACTIVE) return;
if (Global.MovieSession.Movie.Mode == MOVIEMODE.INACTIVE) return;
EditSubtitlesForm s = new EditSubtitlesForm();
s.ReadOnly = ReadOnly;
s.GetMovie(UserMovie);
s.GetMovie(Global.MovieSession.Movie);
s.ShowDialog();
}
@ -1028,7 +1028,7 @@ namespace BizHawk.MultiClient
private void movieToolStripMenuItem_DropDownOpened(object sender, EventArgs e)
{
if (UserMovie.Mode == MOVIEMODE.INACTIVE)
if (Global.MovieSession.Movie.Mode == MOVIEMODE.INACTIVE)
{
stopMovieToolStripMenuItem.Enabled = false;
playFromBeginningToolStripMenuItem.Enabled = false;

View File

@ -11,31 +11,29 @@ namespace BizHawk.MultiClient
partial class MainForm
{
public bool ReadOnly = true; //Global Movie Read only setting
public Movie UserMovie = new Movie();
public void StartNewMovie(Movie m, bool record)
{
Global.MovieSession = new MovieSession();
Global.MovieSession.Movie = m;
UserMovie = m; //TODO - maybe get rid of UserMovie?
RewireInputChain();
LoadRom(Global.MainForm.CurrentlyOpenRom);
UserMovie.LoadMovie();
Global.MovieSession.Movie.LoadMovie();
Global.Config.RecentMovies.Add(m.Filename);
if (UserMovie.StartsFromSavestate)
if (Global.MovieSession.Movie.StartsFromSavestate)
{
LoadStateFile(m.Filename, Path.GetFileName(m.Filename));
Global.Emulator.ResetFrameCounter();
}
if (record)
{
UserMovie.StartNewRecording();
Global.MovieSession.Movie.StartNewRecording();
ReadOnly = false;
}
else
{
UserMovie.StartPlayback();
Global.MovieSession.Movie.StartPlayback();
}
SetMainformMovieInfo();
TAStudio1.Restart();
@ -43,15 +41,15 @@ namespace BizHawk.MultiClient
public void SetMainformMovieInfo()
{
if (UserMovie.Mode == MOVIEMODE.PLAY || UserMovie.Mode == MOVIEMODE.FINISHED)
if (Global.MovieSession.Movie.Mode == MOVIEMODE.PLAY || Global.MovieSession.Movie.Mode == MOVIEMODE.FINISHED)
{
Text = DisplayNameForSystem(Global.Game.System) + " - " + Global.Game.Name + " - " + Path.GetFileName(UserMovie.Filename);
Text = DisplayNameForSystem(Global.Game.System) + " - " + Global.Game.Name + " - " + Path.GetFileName(Global.MovieSession.Movie.Filename);
PlayRecordStatus.Image = BizHawk.MultiClient.Properties.Resources.Play;
PlayRecordStatus.ToolTipText = "Movie is in playback mode";
}
else if (UserMovie.Mode == MOVIEMODE.RECORD)
else if (Global.MovieSession.Movie.Mode == MOVIEMODE.RECORD)
{
Text = DisplayNameForSystem(Global.Game.System) + " - " + Global.Game.Name + " - " + Path.GetFileName(UserMovie.Filename);
Text = DisplayNameForSystem(Global.Game.System) + " - " + Global.Game.Name + " - " + Path.GetFileName(Global.MovieSession.Movie.Filename);
PlayRecordStatus.Image = BizHawk.MultiClient.Properties.Resources.RecordHS;
PlayRecordStatus.ToolTipText = "Movie is in record mode";
}
@ -65,7 +63,7 @@ namespace BizHawk.MultiClient
public bool MovieActive()
{
if (UserMovie.Mode != MOVIEMODE.INACTIVE)
if (Global.MovieSession.Movie.Mode != MOVIEMODE.INACTIVE)
return true;
else
return false;
@ -85,10 +83,10 @@ namespace BizHawk.MultiClient
public void PlayMovieFromBeginning()
{
if (UserMovie.Mode != MOVIEMODE.INACTIVE)
if (Global.MovieSession.Movie.Mode != MOVIEMODE.INACTIVE)
{
LoadRom(CurrentlyOpenRom);
UserMovie.StartPlayback();
Global.MovieSession.Movie.StartPlayback();
SetMainformMovieInfo();
}
}
@ -96,15 +94,15 @@ namespace BizHawk.MultiClient
public void StopMovie()
{
string message = "Movie ";
if (UserMovie.Mode == MOVIEMODE.RECORD)
if (Global.MovieSession.Movie.Mode == MOVIEMODE.RECORD)
message += "recording ";
else if (UserMovie.Mode == MOVIEMODE.PLAY
|| UserMovie.Mode == MOVIEMODE.FINISHED)
else if (Global.MovieSession.Movie.Mode == MOVIEMODE.PLAY
|| Global.MovieSession.Movie.Mode == MOVIEMODE.FINISHED)
message += "playback ";
message += "stopped.";
if (UserMovie.Mode != MOVIEMODE.INACTIVE)
if (Global.MovieSession.Movie.Mode != MOVIEMODE.INACTIVE)
{
UserMovie.StopMovie();
Global.MovieSession.Movie.StopMovie();
Global.RenderPanel.AddMessage(message);
SetMainformMovieInfo();
Global.MainForm.ReadOnly = true;
@ -114,53 +112,53 @@ namespace BizHawk.MultiClient
private bool HandleMovieLoadState(string path)
{
//Note, some of the situations in these IF's may be identical and could be combined but I intentionally separated it out for clarity
if (UserMovie.Mode == MOVIEMODE.INACTIVE)
if (Global.MovieSession.Movie.Mode == MOVIEMODE.INACTIVE)
return true;
if (UserMovie.Mode == MOVIEMODE.RECORD)
if (Global.MovieSession.Movie.Mode == MOVIEMODE.RECORD)
{
if (ReadOnly)
{
if (!UserMovie.CheckTimeLines(path, false))
if (!Global.MovieSession.Movie.CheckTimeLines(path, false))
return false; //Timeline/GUID error
else
{
UserMovie.WriteMovie();
UserMovie.StartPlayback();
Global.MovieSession.Movie.WriteMovie();
Global.MovieSession.Movie.StartPlayback();
SetMainformMovieInfo();
}
}
else
{
if (!UserMovie.CheckTimeLines(path, true))
if (!Global.MovieSession.Movie.CheckTimeLines(path, true))
return false; //GUID Error
UserMovie.LoadLogFromSavestateText(path);
Global.MovieSession.Movie.LoadLogFromSavestateText(path);
}
}
else if (UserMovie.Mode == MOVIEMODE.PLAY)
else if (Global.MovieSession.Movie.Mode == MOVIEMODE.PLAY)
{
if (ReadOnly)
{
if (!UserMovie.CheckTimeLines(path, false))
if (!Global.MovieSession.Movie.CheckTimeLines(path, false))
return false; //Timeline/GUID error
//Frame loop automatically handles the rewinding effect based on Global.Emulator.Frame so nothing else is needed here
}
else
{
if (!UserMovie.CheckTimeLines(path, true))
if (!Global.MovieSession.Movie.CheckTimeLines(path, true))
return false; //GUID Error
UserMovie.StartNewRecording(!Global.MovieSession.MultiTrack.IsActive);
Global.MovieSession.Movie.StartNewRecording(!Global.MovieSession.MultiTrack.IsActive);
SetMainformMovieInfo();
UserMovie.LoadLogFromSavestateText(path);
Global.MovieSession.Movie.LoadLogFromSavestateText(path);
}
}
else if (UserMovie.Mode == MOVIEMODE.FINISHED)
else if (Global.MovieSession.Movie.Mode == MOVIEMODE.FINISHED)
{
if (ReadOnly)
{
if (Global.Emulator.Frame > UserMovie.Length())
if (Global.Emulator.Frame > Global.MovieSession.Movie.Length())
{
//Post movie savestate
//There is no movie data to load, and the movie will stay in movie finished mode
@ -168,15 +166,15 @@ namespace BizHawk.MultiClient
}
else
{
if (!UserMovie.CheckTimeLines(path, false))
if (!Global.MovieSession.Movie.CheckTimeLines(path, false))
return false; //Timeline/GUID error
UserMovie.StartPlayback();
Global.MovieSession.Movie.StartPlayback();
SetMainformMovieInfo();
}
}
else
{
if (Global.Emulator.Frame > UserMovie.Length())
if (Global.Emulator.Frame > Global.MovieSession.Movie.Length())
{
//Post movie savestate
//There is no movie data to load, and the movie will stay in movie finished mode
@ -184,11 +182,11 @@ namespace BizHawk.MultiClient
}
else
{
if (!UserMovie.CheckTimeLines(path, true))
if (!Global.MovieSession.Movie.CheckTimeLines(path, true))
return false; //GUID Error
UserMovie.StartNewRecording();
Global.MovieSession.Movie.StartNewRecording();
SetMainformMovieInfo();
UserMovie.LoadLogFromSavestateText(path);
Global.MovieSession.Movie.LoadLogFromSavestateText(path);
}
}
}
@ -197,9 +195,9 @@ namespace BizHawk.MultiClient
private void HandleMovieSaveState(StreamWriter writer)
{
if (UserMovie.Mode != MOVIEMODE.INACTIVE)
if (Global.MovieSession.Movie.Mode != MOVIEMODE.INACTIVE)
{
UserMovie.DumpLogIntoSavestateText(writer);
Global.MovieSession.Movie.DumpLogIntoSavestateText(writer);
}
}
}

View File

@ -66,6 +66,8 @@ namespace BizHawk.MultiClient
public MainForm(string[] args)
{
Global.MovieSession = new MovieSession();
Global.MovieSession.Movie = new Movie();
Icon = BizHawk.MultiClient.Properties.Resources.logo;
InitializeComponent();
Global.Game = new GameInfo();
@ -114,7 +116,7 @@ namespace BizHawk.MultiClient
{
Global.CheatList.SaveSettings();
CloseGame();
UserMovie.StopMovie();
Global.MovieSession.Movie.StopMovie();
SaveConfig();
};
@ -1171,7 +1173,7 @@ namespace BizHawk.MultiClient
Global.Emulator = new NullEmulator();
Global.ActiveController = Global.NullControls;
Global.AutoFireController = Global.AutofireNullControls;
UserMovie.StopMovie();
Global.MovieSession.Movie.StopMovie();
}
private static void SaveRam()
@ -1421,7 +1423,7 @@ namespace BizHawk.MultiClient
case "Toggle MultiTrack":
{
if (Global.MainForm.UserMovie.Mode > MOVIEMODE.INACTIVE)
if (Global.MovieSession.Movie.Mode > MOVIEMODE.INACTIVE)
{
Global.MovieSession.MultiTrack.IsActive = !Global.MovieSession.MultiTrack.IsActive;
if (Global.MovieSession.MultiTrack.IsActive)
@ -1583,12 +1585,12 @@ namespace BizHawk.MultiClient
MovieSession session = Global.MovieSession;
if (UserMovie.Mode == MOVIEMODE.RECORD || UserMovie.Mode == MOVIEMODE.PLAY)
if (Global.MovieSession.Movie.Mode == MOVIEMODE.RECORD || Global.MovieSession.Movie.Mode == MOVIEMODE.PLAY)
{
session.LatchInputFromLog();
}
if (UserMovie.Mode == MOVIEMODE.RECORD)
if (Global.MovieSession.Movie.Mode == MOVIEMODE.RECORD)
{
if (session.MultiTrack.IsActive)
{
@ -1604,24 +1606,24 @@ namespace BizHawk.MultiClient
session.Movie.CommitFrame(Global.Emulator.Frame, Global.MovieOutputHardpoint);
}
if (UserMovie.Mode == MOVIEMODE.INACTIVE || UserMovie.Mode == MOVIEMODE.FINISHED)
if (Global.MovieSession.Movie.Mode == MOVIEMODE.INACTIVE || Global.MovieSession.Movie.Mode == MOVIEMODE.FINISHED)
{
session.LatchInputFromPlayer(Global.MovieInputSourceAdapter);
}
if (UserMovie.Mode == MOVIEMODE.PLAY)
if (Global.MovieSession.Movie.Mode == MOVIEMODE.PLAY)
{
if (UserMovie.Length() == Global.Emulator.Frame)
if (Global.MovieSession.Movie.Length() == Global.Emulator.Frame)
{
UserMovie.SetMovieFinished();
Global.MovieSession.Movie.SetMovieFinished();
}
}
if (UserMovie.Mode == MOVIEMODE.FINISHED)
if (Global.MovieSession.Movie.Mode == MOVIEMODE.FINISHED)
{
if (UserMovie.Length() > Global.Emulator.Frame)
if (Global.MovieSession.Movie.Length() > Global.Emulator.Frame)
{
UserMovie.StartPlayback();
//Global.MovieSession.MovieControllerAdapter.SetControllersAsMnemonic(UserMovie.GetInputFrame(Global.Emulator.Frame));
Global.MovieSession.Movie.StartPlayback();
//Global.MovieSession.MovieControllerAdapter.SetControllersAsMnemonic(Global.MovieSession.Movie.GetInputFrame(Global.Emulator.Frame));
//Global.MovieMode = true;
//adelikat: is Global.MovieMode doing anything anymore? if not we shoudl remove this variable
session.LatchInputFromLog();
@ -1629,9 +1631,9 @@ namespace BizHawk.MultiClient
}
//TODO: adelikat: don't know what this should do so leaving it commented out
//if (UserMovie.Mode == MOVIEMODE.RECORD && Global.MovieSession.MultiTrack.IsActive)
//if (Global.MovieSession.Movie.Mode == MOVIEMODE.RECORD && Global.MovieSession.MultiTrack.IsActive)
//{
// Global.MovieSession.MovieControllerAdapter.SetControllersAsMnemonic(UserMovie.GetInputFrame(Global.Emulator.Frame-1));
// Global.MovieSession.MovieControllerAdapter.SetControllersAsMnemonic(Global.MovieSession.Movie.GetInputFrame(Global.Emulator.Frame-1));
//}
//=======================================
@ -2171,7 +2173,7 @@ namespace BizHawk.MultiClient
public void ToggleReadOnly()
{
if (Global.MainForm.UserMovie.Mode > MOVIEMODE.INACTIVE)
if (Global.MovieSession.Movie.Mode > MOVIEMODE.INACTIVE)
{
ReadOnly ^= true;
if (ReadOnly)
@ -2243,7 +2245,7 @@ namespace BizHawk.MultiClient
if (Global.Emulator.ControllerDefinition.BoolButtons.Contains("Reset"))
{
Global.ClickyVirtualPadController.Click("Reset");
if (UserMovie.Mode == MOVIEMODE.INACTIVE)
if (Global.MovieSession.Movie.Mode == MOVIEMODE.INACTIVE)
Global.Emulator.ResetFrameCounter();
}
}

View File

@ -346,7 +346,7 @@ namespace BizHawk.MultiClient
Color c;
int x = GetX(Global.Config.DispInpx, Global.Config.DispInpanchor);
int y = GetY(Global.Config.DispInpy, Global.Config.DispInpanchor);
if (Global.MainForm.UserMovie.Mode == MOVIEMODE.PLAY)
if (Global.MovieSession.Movie.Mode == MOVIEMODE.PLAY)
{
c = Color.FromArgb(Global.Config.MovieInput);
}
@ -404,14 +404,14 @@ namespace BizHawk.MultiClient
y, Color.FromArgb(Global.Config.MessagesColor));
}
if (Global.MainForm.UserMovie.Mode == MOVIEMODE.PLAY)
if (Global.MovieSession.Movie.Mode == MOVIEMODE.PLAY)
{
MessageFont.DrawString(null, "Play", backingControl.Size.Width - 47,
0 + 1, Color.Black);
MessageFont.DrawString(null, "Play", backingControl.Size.Width - 48,
0, Color.FromArgb(Global.Config.MovieColor));
}
else if (Global.MainForm.UserMovie.Mode == MOVIEMODE.RECORD)
else if (Global.MovieSession.Movie.Mode == MOVIEMODE.RECORD)
{
AlertFont.DrawString(null, "Record", backingControl.Size.Width - 65,
0 + 1, Color.Black);
@ -419,10 +419,10 @@ namespace BizHawk.MultiClient
0, Color.FromArgb(Global.Config.MovieColor));
}
if (Global.MainForm.UserMovie.Mode != MOVIEMODE.INACTIVE && Global.Config.DisplaySubtitles)
if (Global.MovieSession.Movie.Mode != MOVIEMODE.INACTIVE && Global.Config.DisplaySubtitles)
{
//TODO: implement multiple subtitles at once feature
Subtitle s = Global.MainForm.UserMovie.Subtitles.GetSubtitle(Global.Emulator.Frame);
Subtitle s = Global.MovieSession.Movie.Subtitles.GetSubtitle(Global.Emulator.Frame);
MessageFont.DrawString(null, s.Message, s.X + 1,
s.Y + 1, new Color4(Color.Black));
MessageFont.DrawString(null, s.Message, s.X,
@ -432,15 +432,15 @@ namespace BizHawk.MultiClient
private string MakeFrameCounter()
{
if (Global.MainForm.UserMovie.Mode == MOVIEMODE.FINISHED)
if (Global.MovieSession.Movie.Mode == MOVIEMODE.FINISHED)
{
return Global.Emulator.Frame.ToString() + "/" + Global.MainForm.UserMovie.Length().ToString() + " (Finished)";
return Global.Emulator.Frame.ToString() + "/" + Global.MovieSession.Movie.Length().ToString() + " (Finished)";
}
else if (Global.MainForm.UserMovie.Mode == MOVIEMODE.PLAY)
else if (Global.MovieSession.Movie.Mode == MOVIEMODE.PLAY)
{
return Global.Emulator.Frame.ToString() + "/" + Global.MainForm.UserMovie.Length().ToString();
return Global.Emulator.Frame.ToString() + "/" + Global.MovieSession.Movie.Length().ToString();
}
else if (Global.MainForm.UserMovie.Mode == MOVIEMODE.RECORD)
else if (Global.MovieSession.Movie.Mode == MOVIEMODE.RECORD)
return Global.Emulator.Frame.ToString();
else
{
@ -488,10 +488,10 @@ namespace BizHawk.MultiClient
public string MakeInputDisplay()
{
StringBuilder s;
if (Global.MainForm.UserMovie.Mode == MOVIEMODE.INACTIVE || Global.MainForm.UserMovie.Mode == MOVIEMODE.FINISHED)
if (Global.MovieSession.Movie.Mode == MOVIEMODE.INACTIVE || Global.MovieSession.Movie.Mode == MOVIEMODE.FINISHED)
s = new StringBuilder(Global.GetOutputControllersAsMnemonic());
else
s = new StringBuilder(Global.MainForm.UserMovie.GetInputFrame(Global.Emulator.Frame - 1));
s = new StringBuilder(Global.MovieSession.Movie.GetInputFrame(Global.Emulator.Frame - 1));
s.Replace(".", " ");
s.Replace("|", "");
return s.ToString();
@ -499,8 +499,8 @@ namespace BizHawk.MultiClient
public string MakeRerecordCount()
{
if (Global.MainForm.UserMovie.Mode != MOVIEMODE.INACTIVE)
return "Rerecord Count: " + Global.MainForm.UserMovie.Rerecords.ToString();
if (Global.MovieSession.Movie.Mode != MOVIEMODE.INACTIVE)
return "Rerecord Count: " + Global.MovieSession.Movie.Rerecords.ToString();
else
return "";
}

View File

@ -539,11 +539,12 @@ namespace BizHawk.MultiClient
reader.Close();
return false;
}
for (int x = 0; x < Log.Length(); x++)
for (int x = 0; x < l.Length(); x++)
{
string xs = Log.GetFrame(x);
string ys = l.GetFrame(x);
if (Log.GetFrame(x) != l.GetFrame(x))
//if (Log.GetFrame(x) != l.GetFrame(x))
if (xs != ys)
{
//TimeLine Error
MessageBox.Show("The savestate input does not match the movie input at frame " + (x + 1).ToString() + ".",

View File

@ -48,14 +48,14 @@ namespace BizHawk.MultiClient
{
if (!this.IsHandleCreated || this.IsDisposed) return;
TASView.BlazingFast = true;
if (Global.MainForm.UserMovie.Mode == MOVIEMODE.INACTIVE)
if (Global.MovieSession.Movie.Mode == MOVIEMODE.INACTIVE)
TASView.ItemCount = 0;
else
DisplayList();
if (Global.MainForm.UserMovie.Mode == MOVIEMODE.PLAY)
if (Global.MovieSession.Movie.Mode == MOVIEMODE.PLAY)
{
string str = Global.MainForm.UserMovie.GetInputFrame(Global.Emulator.Frame);
string str = Global.MovieSession.Movie.GetInputFrame(Global.Emulator.Frame);
if (Global.Config.TASUpdatePads)
{
switch (Global.Emulator.SystemId)
@ -112,12 +112,12 @@ namespace BizHawk.MultiClient
if (column == 0)
text = String.Format("{0:#,##0}", index);
if (column == 1)
text = Global.MainForm.UserMovie.GetInputFrame(index);
text = Global.MovieSession.Movie.GetInputFrame(index);
}
private void DisplayList()
{
TASView.ItemCount = Global.MainForm.UserMovie.Length();
TASView.ItemCount = Global.MovieSession.Movie.Length();
TASView.ensureVisible(Global.Emulator.Frame);
}