コード例 #1
0
        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);
        }
コード例 #2
0
ファイル: TasStateManager.cs プロジェクト: RetroEdit/BizHawk
        /// <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);
            }
        }
コード例 #3
0
ファイル: TAStudio.cs プロジェクト: irelandlife/BizHawk
        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);
        }
コード例 #4
0
        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);
        }
コード例 #5
0
ファイル: TAStudio.cs プロジェクト: CasualPokePlayer/BizHawk
        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);
        }
コード例 #6
0
        /// <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();
        }
コード例 #7
0
ファイル: TAStudio.cs プロジェクト: irelandlife/BizHawk
        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);
        }
コード例 #8
0
 private void SetTasMovieCallbacks(ITasMovie movie)
 {
     movie.ClientSettingsForSave   = () => TasView.UserSettingsSerialized();
     movie.GetClientSettingsOnLoad = json => TasView.LoadSettingsSerialized(json);
 }
コード例 #9
0
 public TasMovieChangeLog(ITasMovie movie)
 {
     _movie = movie;
 }
コード例 #10
0
ファイル: TAStudio.cs プロジェクト: irelandlife/BizHawk
 private void SetTasMovieCallbacks(ITasMovie movie)
 {
     movie.ClientSettingsForSave   = ClientSettingsForSave;
     movie.GetClientSettingsOnLoad = GetClientSettingsOnLoad;
 }
コード例 #11
0
 public TasBranchCollection(ITasMovie movie)
 {
     _movie = movie;
 }
コード例 #12
0
        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;
        }
コード例 #13
0
        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);
        }
コード例 #14
0
        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);
        }
コード例 #15
0
ファイル: TasMovieMarker.cs プロジェクト: xHailFirex/BizHawk
 public TasMovieMarkerList(ITasMovie movie)
 {
     _movie = movie;
 }
コード例 #16
0
 public TasBranchCollection(ITasMovie movie, IQuickBmpFile quickBmpFile)
 {
     _movie        = movie;
     _quickBmpFile = quickBmpFile;
 }