public static ITasMovie ConvertToSavestateAnchoredMovie(this ITasMovie old, int frame, byte[] savestate) { string newFilename = ConvertFileNameToTasMovie(old.Filename); var tas = (ITasMovie)old.Session.Get(newFilename); tas.BinarySavestate = savestate; tas.LagLog.Clear(); var entries = old.GetLogEntries(); tas.CopyLog(entries.Skip(frame)); tas.CopyVerificationLog(old.VerificationLog); tas.CopyVerificationLog(entries.Take(frame)); // States can't be easily moved over, because they contain the frame number. // TODO? I'm not sure how this would be done. old.TasStateManager.Clear(); // Lag Log tas.LagLog.FromLagLog(old.LagLog); tas.LagLog.StartFromFrame(frame); tas.HeaderEntries.Clear(); foreach (var kvp in old.HeaderEntries) { tas.HeaderEntries[kvp.Key] = kvp.Value; } tas.StartsFromSavestate = true; tas.SyncSettingsJson = old.SyncSettingsJson; tas.Comments.Clear(); foreach (string comment in old.Comments) { tas.Comments.Add(comment); } tas.Subtitles.Clear(); foreach (Subtitle sub in old.Subtitles) { tas.Subtitles.Add(sub); } foreach (TasMovieMarker marker in old.Markers) { if (marker.Frame > frame) { tas.Markers.Add(new TasMovieMarker(marker.Frame - frame, marker.Message)); } } tas.TasStateManager.UpdateSettings(old.TasStateManager.Settings); tas.Save(); return(tas); }
/// <exception cref="InvalidOperationException">loaded core expects savestate size of <c>0 B</c></exception> public TasStateManager(ITasMovie movie, TasStateManagerSettings settings) { _movie = movie; Settings = new TasStateManagerSettings(settings); if (_movie.StartsFromSavestate) { SetState(0, _movie.BinarySavestate); } }
private bool HandleMovieLoadStuff(ITasMovie movie) { WantsToControlStopMovie = false; var result = StartNewMovieWrapper(movie); if (!result) { return(false); } WantsToControlStopMovie = true; CurrentTasMovie.ChangeLog.Clear(); CurrentTasMovie.ClearChanges(); SetTextProperty(); MessageStatusLabel.Text = $"{Path.GetFileName(CurrentTasMovie.Filename)} loaded."; return(true); }
public static ITasMovie ConvertToSaveRamAnchoredMovie(this ITasMovie old, byte[] saveRam) { string newFilename = ConvertFileNameToTasMovie(old.Filename); var tas = (ITasMovie)old.Session.Get(newFilename); tas.SaveRam = saveRam; tas.TasStateManager.Clear(); tas.LagLog.Clear(); var entries = old.GetLogEntries(); tas.CopyVerificationLog(old.VerificationLog); tas.CopyVerificationLog(entries); tas.HeaderEntries.Clear(); foreach (var kvp in old.HeaderEntries) { tas.HeaderEntries[kvp.Key] = kvp.Value; } tas.StartsFromSaveRam = true; tas.SyncSettingsJson = old.SyncSettingsJson; tas.Comments.Clear(); foreach (string comment in old.Comments) { tas.Comments.Add(comment); } tas.Subtitles.Clear(); foreach (Subtitle sub in old.Subtitles) { tas.Subtitles.Add(sub); } tas.TasStateManager.UpdateSettings(old.TasStateManager.Settings); tas.Save(); return(tas); }
private bool StartNewMovieWrapper(ITasMovie movie) { _initializing = true; SetTasMovieCallbacks(movie); SuspendLayout(); bool result = MainForm.StartNewMovie(movie, false); ResumeLayout(); if (result) { BookMarkControl.UpdateTextColumnWidth(); MarkerControl.UpdateTextColumnWidth(); TastudioPlayMode(); } _initializing = false; return(result); }
/// <exception cref="InvalidOperationException">loaded core expects savestate size of <c>0 B</c></exception> public TasStateManager(ITasMovie movie, TasStateManagerSettings settings) { _movie = movie; Settings = new TasStateManagerSettings(settings); if (_movie.StartsFromSavestate) { SetState(0, _movie.BinarySavestate); } _decay = new StateManagerDecay(_movie, this); _expectedStateSize = (ulong)Core.SaveStateBinary().Length; if (_expectedStateSize == 0) { throw new InvalidOperationException("Savestate size can not be zero!"); } _states = new SortedList <int, byte[]>(MaxStates); UpdateStateFrequency(); }
private bool StartNewMovieWrapper(ITasMovie movie) { _initializing = true; SetTasMovieCallbacks(movie); SuspendLayout(); bool result = MainForm.StartNewMovie(movie, false); ResumeLayout(); if (result) { CurrentTasMovie.TasStateManager.Capture(); // Capture frame 0 always. BookMarkControl.UpdateTextColumnWidth(); MarkerControl.UpdateTextColumnWidth(); } TastudioPlayMode(); _initializing = false; return(result); }
private void SetTasMovieCallbacks(ITasMovie movie) { movie.ClientSettingsForSave = () => TasView.UserSettingsSerialized(); movie.GetClientSettingsOnLoad = json => TasView.LoadSettingsSerialized(json); }
public TasMovieChangeLog(ITasMovie movie) { _movie = movie; }
private void SetTasMovieCallbacks(ITasMovie movie) { movie.ClientSettingsForSave = ClientSettingsForSave; movie.GetClientSettingsOnLoad = GetClientSettingsOnLoad; }
public TasBranchCollection(ITasMovie movie) { _movie = movie; }
private bool _align; // extra care about fine alignment. TODO: do we want it? public StateManagerDecay(ITasMovie movie, IStateManager tsm) { _movie = movie; _tsm = tsm; _align = false; }
public static ITasMovie ConvertToSaveRamAnchoredMovie(this ITasMovie old, byte[] saveRam) { string newFilename = old.Filename; if (old.Filename.Contains("tasproj")) { newFilename = newFilename.Remove(newFilename.Length - 7, 7); newFilename = $"{newFilename}nfsr.{TasMovie.Extension}"; } else { newFilename = $"{old.Filename}.{TasMovie.Extension}"; } if (File.Exists(newFilename)) { int fileNum = 1; bool fileConflict = true; while (fileConflict) { if (File.Exists(newFilename)) { newFilename = $"{old.Filename} ({fileNum}).{TasMovie.Extension}"; fileNum++; } else { fileConflict = false; } } } var tas = (ITasMovie)MovieService.Get(newFilename, false); tas.SaveRam = saveRam; tas.TasStateManager.Clear(); tas.LagLog.Clear(); var entries = old.GetLogEntries(); tas.CopyVerificationLog(old.VerificationLog); tas.CopyVerificationLog(entries); tas.HeaderEntries.Clear(); foreach (var kvp in old.HeaderEntries) { tas.HeaderEntries[kvp.Key] = kvp.Value; } tas.StartsFromSaveRam = true; tas.SyncSettingsJson = old.SyncSettingsJson; tas.Comments.Clear(); foreach (string comment in old.Comments) { tas.Comments.Add(comment); } tas.Subtitles.Clear(); foreach (Subtitle sub in old.Subtitles) { tas.Subtitles.Add(sub); } tas.TasStateManager.Settings = old.TasStateManager.Settings; tas.Save(); return(tas); }
public static ITasMovie ConvertToSavestateAnchoredMovie(this ITasMovie old, int frame, byte[] savestate) { string newFilename = old.Filename; if (old.Filename.Contains("tasproj")) { newFilename = newFilename.Remove(newFilename.Length - 7, 7); newFilename = $"{newFilename}nfn.{TasMovie.Extension}"; } else { newFilename = $"{old.Filename}.{TasMovie.Extension}"; } if (File.Exists(newFilename)) { int fileNum = 1; bool fileConflict = true; while (fileConflict) { if (File.Exists(newFilename)) { newFilename = $"{old.Filename} ({fileNum}).{TasMovie.Extension}"; fileNum++; } else { fileConflict = false; } } } var tas = (ITasMovie)MovieService.Get(newFilename, true); tas.BinarySavestate = savestate; tas.LagLog.Clear(); var entries = old.GetLogEntries(); tas.CopyLog(entries.Skip(frame)); tas.CopyVerificationLog(old.VerificationLog); tas.CopyVerificationLog(entries.Take(frame)); // States can't be easily moved over, because they contain the frame number. // TODO? I'm not sure how this would be done. old.TasStateManager.Clear(); // Lag Log tas.LagLog.FromLagLog(old.LagLog); tas.LagLog.StartFromFrame(frame); tas.HeaderEntries.Clear(); foreach (var kvp in old.HeaderEntries) { tas.HeaderEntries[kvp.Key] = kvp.Value; } tas.StartsFromSavestate = true; tas.SyncSettingsJson = old.SyncSettingsJson; tas.Comments.Clear(); foreach (string comment in old.Comments) { tas.Comments.Add(comment); } tas.Subtitles.Clear(); foreach (Subtitle sub in old.Subtitles) { tas.Subtitles.Add(sub); } foreach (TasMovieMarker marker in old.Markers) { if (marker.Frame > frame) { tas.Markers.Add(new TasMovieMarker(marker.Frame - frame, marker.Message)); } } tas.TasStateManager.Settings = old.TasStateManager.Settings; tas.Save(); return(tas); }
public TasMovieMarkerList(ITasMovie movie) { _movie = movie; }
public TasBranchCollection(ITasMovie movie, IQuickBmpFile quickBmpFile) { _movie = movie; _quickBmpFile = quickBmpFile; }