public RecordMovie( MainForm mainForm, Config config, GameInfo game, IEmulator core, IMovieSession movieSession) { _mainForm = mainForm; _config = config; _game = game; _emulator = core; _movieSession = movieSession; InitializeComponent(); if (!_emulator.HasSavestates()) { StartFromCombo.Items.Remove( StartFromCombo.Items .OfType <object>() .First(i => i.ToString() .ToLower() == "now")); } if (!_emulator.HasSaveRam()) { StartFromCombo.Items.Remove( StartFromCombo.Items .OfType <object>() .First(i => i.ToString() .ToLower() == "saveram")); } }
/// <summary> /// Sets the given <paramref name="emulator"/> save ram if the movie contains save ram /// and the core supports save ram /// </summary> public static void ProcessSram(this IMovie movie, IEmulator emulator) { if (movie.StartsFromSaveRam && emulator.HasSaveRam()) { emulator.AsSaveRam().StoreSaveRam(movie.SaveRam); } }
public RecordMovie( IMainFormForTools mainForm, Config config, GameInfo game, IEmulator core, IMovieSession movieSession, FirmwareManager firmwareManager) { _mainForm = mainForm; _config = config; _game = game; _emulator = core; _movieSession = movieSession; _firmwareManager = firmwareManager; InitializeComponent(); Icon = Properties.Resources.TAStudioIcon; BrowseBtn.Image = Properties.Resources.OpenFile; if (OSTailoredCode.IsUnixHost) { Load += (_, _) => { //HACK to make this usable on Linux. No clue why this Form in particular is so much worse, maybe the GroupBox? --yoshi groupBox1.Height -= 24; DefaultAuthorCheckBox.Location += new Size(0, 32); var s = new Size(0, 40); OK.Location += s; Cancel.Location += s; } } ; if (!_emulator.HasSavestates()) { StartFromCombo.Items.Remove( StartFromCombo.Items .OfType <object>() .First(i => i.ToString() .ToLower() == "now")); } if (!_emulator.HasSaveRam()) { StartFromCombo.Items.Remove( StartFromCombo.Items .OfType <object>() .First(i => i.ToString() .ToLower() == "saveram")); } }
public override void Attach(IEmulator emulator) { if (!emulator.HasSavestates()) { throw new InvalidOperationException($"A core must be able to provide an {nameof(IStatable)} service"); } if (!emulator.CanPollInput()) { throw new InvalidOperationException($"A core must be able to provide an {nameof(IInputPollable)} service"); } _inputPollable = emulator.AsInputPollable(); if (StartsFromSavestate) { TasStateManager.Engage(BinarySavestate); } else { var ms = new MemoryStream(); if (StartsFromSaveRam && emulator.HasSaveRam()) { emulator.AsSaveRam().StoreSaveRam(SaveRam !); } emulator.AsStatable().SaveStateBinary(new BinaryWriter(ms)); TasStateManager.Engage(ms.ToArray()); } base.Attach(emulator); foreach (var button in emulator.ControllerDefinition.BoolButtons) { _mnemonicCache[button] = Bk2MnemonicLookup.Lookup(button, emulator.SystemId); } }
public RecordMovie(IEmulator core) { InitializeComponent(); Emulator = core; if (!Emulator.HasSavestates()) { StartFromCombo.Items.Remove( StartFromCombo.Items .OfType <object>() .First(i => i.ToString() .ToLower() == "now")); } if (!Emulator.HasSaveRam()) { StartFromCombo.Items.Remove( StartFromCombo.Items .OfType <object>() .First(i => i.ToString() .ToLower() == "saveram")); } }
public RecordMovie( IMainFormForTools mainForm, Config config, GameInfo game, IEmulator core, IMovieSession movieSession, FirmwareManager firmwareManager) { _mainForm = mainForm; _config = config; _game = game; _emulator = core; _movieSession = movieSession; _firmwareManager = firmwareManager; InitializeComponent(); Icon = Properties.Resources.TAStudio_MultiSize; BrowseBtn.Image = Properties.Resources.OpenFile; if (!_emulator.HasSavestates()) { StartFromCombo.Items.Remove( StartFromCombo.Items .OfType <object>() .First(i => i.ToString() .ToLower() == "now")); } if (!_emulator.HasSaveRam()) { StartFromCombo.Items.Remove( StartFromCombo.Items .OfType <object>() .First(i => i.ToString() .ToLower() == "saveram")); } }
private void Ok_Click(object sender, EventArgs e) { var path = MakePath(); if (!string.IsNullOrWhiteSpace(path)) { var test = new FileInfo(path); if (test.Exists) { var result = MessageBox.Show(path + " already exists, overwrite?", "Confirm overwrite", MessageBoxButtons.OKCancel, MessageBoxIcon.Warning); if (result == DialogResult.Cancel) { return; } } var movieToRecord = MovieService.Get(path); var fileInfo = new FileInfo(path); if (!fileInfo.Exists) { Directory.CreateDirectory(fileInfo.DirectoryName); } if (StartFromCombo.SelectedItem.ToString() == "Now" && Emulator.HasSavestates()) { var core = Emulator.AsStatable(); movieToRecord.StartsFromSavestate = true; movieToRecord.StartsFromSaveRam = false; if (core.BinarySaveStatesPreferred) { movieToRecord.BinarySavestate = (byte[])core.SaveStateBinary().Clone(); } else { using (var sw = new StringWriter()) { core.SaveStateText(sw); movieToRecord.TextSavestate = sw.ToString(); } } // TODO: do we want to support optionally not saving this? if (true) { // hack: some IMovies eat the framebuffer, so don't bother with them movieToRecord.SavestateFramebuffer = new int[0]; if (movieToRecord.SavestateFramebuffer != null && Emulator.HasVideoProvider()) { movieToRecord.SavestateFramebuffer = (int[])Emulator.AsVideoProvider().GetVideoBuffer().Clone(); } } } else if (StartFromCombo.SelectedItem.ToString() == "SaveRam" && Emulator.HasSaveRam()) { var core = Emulator.AsSaveRam(); movieToRecord.StartsFromSavestate = false; movieToRecord.StartsFromSaveRam = true; movieToRecord.SaveRam = core.CloneSaveRam(); } movieToRecord.PopulateWithDefaultHeaderValues(AuthorBox.Text); movieToRecord.Save(); GlobalWin.MainForm.StartNewMovie(movieToRecord, true); Global.Config.UseDefaultAuthor = DefaultAuthorCheckBox.Checked; if (DefaultAuthorCheckBox.Checked) { Global.Config.DefaultAuthor = AuthorBox.Text; } Close(); } else { MessageBox.Show("Please select a movie to record", "File selection error", MessageBoxButtons.OK, MessageBoxIcon.Error); } }
private void Ok_Click(object sender, EventArgs e) { var path = MakePath(); if (!string.IsNullOrWhiteSpace(path)) { var test = new FileInfo(path); if (test.Exists) { var result = DialogController.ShowMessageBox2($"{path} already exists, overwrite?", "Confirm overwrite", EMsgBoxIcon.Warning, useOKCancel: true); if (!result) { return; } } var movieToRecord = _movieSession.Get(path); var fileInfo = new FileInfo(path); if (!fileInfo.Exists) { Directory.CreateDirectory(fileInfo.DirectoryName); } if (StartFromCombo.SelectedItem.ToString() == "Now" && _emulator.HasSavestates()) { var core = _emulator.AsStatable(); movieToRecord.StartsFromSavestate = true; if (_config.Savestates.Type == SaveStateType.Binary) { movieToRecord.BinarySavestate = core.CloneSavestate(); } else { using var sw = new StringWriter(); core.SaveStateText(sw); movieToRecord.TextSavestate = sw.ToString(); } // TODO: do we want to support optionally not saving this? movieToRecord.SavestateFramebuffer = Array.Empty <int>(); if (_emulator.HasVideoProvider()) { movieToRecord.SavestateFramebuffer = (int[])_emulator.AsVideoProvider().GetVideoBuffer().Clone(); } } else if (StartFromCombo.SelectedItem.ToString() == "SaveRam" && _emulator.HasSaveRam()) { var core = _emulator.AsSaveRam(); movieToRecord.StartsFromSaveRam = true; movieToRecord.SaveRam = core.CloneSaveRam(); } movieToRecord.PopulateWithDefaultHeaderValues( _emulator, _game, _firmwareManager, AuthorBox.Text ?? _config.DefaultAuthor); movieToRecord.Save(); _mainForm.StartNewMovie(movieToRecord, true); _config.UseDefaultAuthor = DefaultAuthorCheckBox.Checked; if (DefaultAuthorCheckBox.Checked) { _config.DefaultAuthor = AuthorBox.Text; } Close(); } else { DialogController.ShowMessageBox("Please select a movie to record", "File selection error", EMsgBoxIcon.Error); } }