コード例 #1
0
        private void TasView_QueryRowBkColor(int index, ref Color color)
        {
            TasMovieRecord record = CurrentTasMovie[index];

            if (Emulator.Frame == index)
            {
                color = CurrentFrame_InputLog;
            }
            else if (record.Lagged.HasValue)
            {
                color = record.Lagged.Value ?
                        LagZone_InputLog :
                        GreenZone_InputLog;
            }
            else if (record.WasLagged.HasValue)
            {
                color = record.WasLagged.Value ?
                        LagZone_Invalidated_InputLog :
                        GreenZone_Invalidated_FrameCol;
            }
            else
            {
                color = Color.FromArgb(0xFFFEEE);
            }
        }
コード例 #2
0
		private void TasView_QueryRowBkColor(int index, ref Color color)
		{
			TasMovieRecord record = CurrentTasMovie[index];

			if (Emulator.Frame == index)
			{
				color = CurrentFrame_InputLog;
			}
			else if (record.Lagged.HasValue)
			{
				if (!record.HasState && TasView.denoteStatesWithBGColor)
                    color = record.Lagged.Value ?
                        LagZone_InputLog :
                        GreenZone_InputLog;
                else
				    color = record.Lagged.Value ?
					    LagZone_InputLog_Stated :
                        GreenZone_InputLog_Stated;
			}
			else if (record.WasLagged.HasValue)
			{
				if (!record.HasState && TasView.denoteStatesWithBGColor)
					color = record.WasLagged.Value ?
						LagZone_InputLog_Invalidated :
						GreenZone_InputLog_Invalidated;
				else
					color = record.WasLagged.Value ?
						LagZone_InputLog_Stated :
						GreenZone_InputLog_Stated;
			}
			else
			{
				color = Color.FromArgb(0xFFFEEE);
			}
		}
コード例 #3
0
        private void TasView_QueryItemIcon(int index, InputRoll.RollColumn column, ref Bitmap bitmap, ref int offsetX, ref int offsetY)
        {
            var overrideIcon = GetIconOverride(index, column);

            if (overrideIcon != null)
            {
                bitmap = overrideIcon;
                return;
            }

            var columnName = column.Name;

            if (columnName == CursorColumnName)
            {
                if (index == Emulator.Frame && index == GlobalWin.MainForm.PauseOnFrame)
                {
                    bitmap = TasView.HorizontalOrientation ?
                             ts_v_arrow_green_blue :
                             ts_h_arrow_green_blue;
                }
                else if (index == Emulator.Frame)
                {
                    bitmap = TasView.HorizontalOrientation ?
                             ts_v_arrow_blue :
                             ts_h_arrow_blue;
                }
                else if (index == GlobalWin.MainForm.PauseOnFrame)
                {
                    bitmap = TasView.HorizontalOrientation ?
                             ts_v_arrow_green :
                             ts_h_arrow_green;
                }
            }
            else if (columnName == FrameColumnName)
            {
                TasMovieRecord record = CurrentTasMovie[index];
                offsetX = -3;
                offsetY = 1;

                if (CurrentTasMovie.Markers.IsMarker(index) && TasView.denoteMarkersWithIcons)
                {
                    bitmap = icon_marker;
                }
                else if (record.HasState && TasView.denoteStatesWithIcons)
                {
                    if (record.Lagged.HasValue && record.Lagged.Value)
                    {
                        bitmap = icon_anchor_lag;
                    }
                    else
                    {
                        bitmap = icon_anchor;
                    }
                }
            }
        }
コード例 #4
0
        private void TasView_QueryItemIcon(int index, InputRoll.RollColumn column, ref Bitmap bitmap, ref int offsetX, ref int offsetY)
        {
            var overrideIcon = GetIconOverride(index, column);

            if (overrideIcon != null)
            {
                bitmap = overrideIcon;
                return;
            }

            var columnName = column.Name;

            if (columnName == CursorColumnName)
            {
                if (index == Emulator.Frame && index == GlobalWin.MainForm.PauseOnFrame)
                {
                    bitmap = TasView.HorizontalOrientation ?
                             Properties.Resources.ts_v_arrow_green_blue :
                             Properties.Resources.ts_h_arrow_green_blue;
                }
                else if (index == Emulator.Frame)
                {
                    bitmap = TasView.HorizontalOrientation ?
                             Properties.Resources.ts_v_arrow_blue :
                             Properties.Resources.ts_h_arrow_blue;
                }
                else if (index == GlobalWin.MainForm.PauseOnFrame)
                {
                    bitmap = TasView.HorizontalOrientation ?
                             Properties.Resources.ts_v_arrow_green :
                             Properties.Resources.ts_h_arrow_green;
                }
            }
            else if (columnName == FrameColumnName && VersionInfo.DeveloperBuild)
            {
                TasMovieRecord record = CurrentTasMovie[index];
                if (record.HasState)
                {
                    offsetX = -2;
                    offsetY = 2;
                    bitmap  = Properties.Resources.anchor;
                }
            }
        }
コード例 #5
0
ファイル: TAStudio.cs プロジェクト: m35/BizHawk
        private bool AutoAdjustInput()
        {
            TasMovieRecord lagLog = CurrentTasMovie[Emulator.Frame - 1];             // Minus one because get frame is +1;
            bool           isLag  = Emulator.AsInputPollable().IsLagFrame;

            if (lagLog.WasLagged.HasValue)
            {
                if (lagLog.WasLagged.Value && !isLag)
                {
                    // Deleting this frame requires rewinding a frame.
                    CurrentTasMovie.ChangeLog.AddInputBind(Emulator.Frame - 1, true, $"Bind Input; Delete {Emulator.Frame - 1}");
                    bool wasRecording = CurrentTasMovie.ChangeLog.IsRecording;
                    CurrentTasMovie.ChangeLog.IsRecording = false;

                    CurrentTasMovie.RemoveFrame(Emulator.Frame - 1);
                    CurrentTasMovie.RemoveLagHistory(Emulator.Frame);                     // Removes from WasLag

                    CurrentTasMovie.ChangeLog.IsRecording = wasRecording;
                    GoToFrame(Emulator.Frame - 1);
                    return(true);
                }

                if (!lagLog.WasLagged.Value && isLag)
                {                 // (it shouldn't need to rewind, since the inserted input wasn't polled)
                    CurrentTasMovie.ChangeLog.AddInputBind(Emulator.Frame - 1, false, $"Bind Input; Insert {Emulator.Frame - 1}");
                    bool wasRecording = CurrentTasMovie.ChangeLog.IsRecording;
                    CurrentTasMovie.ChangeLog.IsRecording = false;

                    CurrentTasMovie.InsertInput(Emulator.Frame - 1, CurrentTasMovie.GetInputLogEntry(Emulator.Frame - 2));
                    CurrentTasMovie.InsertLagHistory(Emulator.Frame, true);

                    CurrentTasMovie.ChangeLog.IsRecording = wasRecording;
                    return(true);
                }
            }

            return(false);
        }
コード例 #6
0
        // SuuperW: Used in InputRoll.cs to hide lag frames.
        private bool TasView_QueryFrameLag(int index, bool hideWasLag)
        {
            TasMovieRecord lag = CurrentTasMovie[index];

            return((lag.Lagged.HasValue && lag.Lagged.Value) || (hideWasLag && lag.WasLagged.HasValue && lag.WasLagged.Value));
        }
コード例 #7
0
        private void TasView_MouseDown(object sender, MouseEventArgs e)
        {
            // Clicking with left while right is held or vice versa does weird stuff
            if (mouseButtonHeld)
            {
                return;
            }

            if (e.Button == MouseButtons.Middle)
            {
                if (Mainform.EmulatorPaused)
                {
                    TasMovieRecord record = CurrentTasMovie[LastPositionFrame];
                    if (!record.Lagged.HasValue && LastPositionFrame > Global.Emulator.Frame)
                    {
                        StartSeeking(LastPositionFrame);
                    }
                    else
                    {
                        Mainform.UnpauseEmulator();
                    }
                }
                else
                {
                    Mainform.PauseEmulator();
                }
                return;
            }

            // SuuperW: Moved these.
            if (TasView.CurrentCell == null || !TasView.CurrentCell.RowIndex.HasValue || TasView.CurrentCell.Column == null)
            {
                return;
            }

            int    frame      = TasView.CurrentCell.RowIndex.Value;
            string buttonName = TasView.CurrentCell.Column.Name;


            if (e.Button == MouseButtons.Left)
            {
                bool wasHeld = _leftButtonHeld;
                _leftButtonHeld = true;
                // SuuperW: Exit float editing mode, or re-enter mouse editing
                if (_floatEditRow != -1)
                {
                    if (_floatEditColumn != buttonName || _floatEditRow != frame)
                    {
                        floatEditRow = -1;
                        RefreshTasView();
                    }
                    else
                    {
                        _floatEditYPos      = e.Y;
                        _floatPaintState    = CurrentTasMovie.GetFloatState(frame, buttonName);
                        _triggerAutoRestore = true;
                        JumpToGreenzone();
                        return;
                    }
                }

                if (TasView.CurrentCell.Column.Name == CursorColumnName)
                {
                    _startCursorDrag = true;
                    GoToFrame(TasView.CurrentCell.RowIndex.Value);
                }
                else if (TasView.CurrentCell.Column.Name == FrameColumnName)
                {
                    if (Control.ModifierKeys == Keys.Alt && CurrentTasMovie.Markers.IsMarker(frame))
                    {
                        // TODO
                        TasView.DragCurrentCell();
                    }
                    else
                    {
                        _startSelectionDrag = true;
                        _selectionDragState = TasView.SelectedRows.Contains(frame);
                    }
                }
                else                 // User changed input
                {
                    bool wasPaused = Mainform.EmulatorPaused;

                    if (Emulator.Frame > frame || CurrentTasMovie.LastValidFrame > frame)
                    {
                        if (wasPaused && !Mainform.IsSeeking && !CurrentTasMovie.LastPositionStable)
                        {
                            LastPositionFrame = Emulator.Frame;
                            CurrentTasMovie.LastPositionStable = true;                             // until new frame is emulated
                        }
                    }

                    if (Global.MovieSession.MovieControllerAdapter.Type.BoolButtons.Contains(buttonName))
                    {
                        CurrentTasMovie.ChangeLog.BeginNewBatch("Paint Bool " + buttonName + " from frame " + frame);

                        CurrentTasMovie.ToggleBoolState(TasView.CurrentCell.RowIndex.Value, buttonName);
                        _triggerAutoRestore = true;
                        JumpToGreenzone();
                        RefreshDialog();

                        _startBoolDrawColumn = buttonName;

                        _boolPaintState = CurrentTasMovie.BoolIsPressed(frame, buttonName);
                        if (applyPatternToPaintedInputToolStripMenuItem.Checked &&
                            (!onlyOnAutoFireColumnsToolStripMenuItem.Checked || TasView.CurrentCell.Column.Emphasis))
                        {
                            BoolPatterns[controllerType.BoolButtons.IndexOf(buttonName)].Reset();
                            BoolPatterns[controllerType.BoolButtons.IndexOf(buttonName)].GetNextValue();
                            _patternPaint = true;
                        }
                        else
                        {
                            _patternPaint = false;
                        }

                        if (!Settings.AutoRestoreOnMouseUpOnly)
                        {
                            DoTriggeredAutoRestoreIfNeeded();
                        }
                    }
                    else
                    {
                        if (frame >= CurrentTasMovie.InputLogLength)
                        {
                            CurrentTasMovie.SetFloatState(frame, buttonName, 0);
                            RefreshDialog();
                        }

                        JumpToGreenzone();

                        _floatPaintState = CurrentTasMovie.GetFloatState(frame, buttonName);
                        if (applyPatternToPaintedInputToolStripMenuItem.Checked &&
                            (!onlyOnAutoFireColumnsToolStripMenuItem.Checked || TasView.CurrentCell.Column.Emphasis))
                        {
                            FloatPatterns[controllerType.FloatControls.IndexOf(buttonName)].Reset();
                            CurrentTasMovie.SetFloatState(frame, buttonName,
                                                          FloatPatterns[controllerType.FloatControls.IndexOf(buttonName)].GetNextValue());
                            _patternPaint = true;
                        }
                        else
                        {
                            _patternPaint = false;
                        }


                        if (e.Clicks != 2)
                        {
                            CurrentTasMovie.ChangeLog.BeginNewBatch("Paint Float " + buttonName + " from frame " + frame);
                            _startFloatDrawColumn = buttonName;
                        }
                        else                         // Double-click enters float editing mode
                        {
                            if (_floatEditColumn == buttonName && _floatEditRow == frame)
                            {
                                floatEditRow = -1;
                            }
                            else
                            {
                                CurrentTasMovie.ChangeLog.BeginNewBatch("Float Edit: " + frame);
                                _floatEditColumn    = buttonName;
                                floatEditRow        = frame;
                                _floatTypedValue    = "";
                                _floatEditYPos      = e.Y;
                                _triggerAutoRestore = true;
                                JumpToGreenzone();
                            }
                            RefreshDialog();
                        }
                    }

                    // taseditor behavior
                    if (!wasPaused)
                    {
                        Mainform.UnpauseEmulator();
                    }
                }
            }
            else if (e.Button == System.Windows.Forms.MouseButtons.Right)
            {
                if (TasView.CurrentCell.Column.Name == FrameColumnName && frame < CurrentTasMovie.InputLogLength)
                {
                    _rightClickControl = (Control.ModifierKeys | Keys.Control) == Control.ModifierKeys;
                    _rightClickShift   = (Control.ModifierKeys | Keys.Shift) == Control.ModifierKeys;
                    _rightClickAlt     = (Control.ModifierKeys | Keys.Alt) == Control.ModifierKeys;
                    if (TasView.SelectedRows.Contains(frame))
                    {
                        _rightClickInput = new string[TasView.SelectedRows.Count()];
                        _rightClickFrame = TasView.FirstSelectedIndex.Value;
                        CurrentTasMovie.GetLogEntries().CopyTo(_rightClickFrame, _rightClickInput, 0, TasView.SelectedRows.Count());
                        if (_rightClickControl && _rightClickShift)
                        {
                            _rightClickFrame += _rightClickInput.Length;
                        }
                    }
                    else
                    {
                        _rightClickInput    = new string[1];
                        _rightClickInput[0] = CurrentTasMovie.GetLogEntries()[frame];
                        _rightClickFrame    = frame;
                    }
                    _rightClickLastFrame = -1;

                    if (_rightClickAlt || _rightClickControl || _rightClickShift)
                    {
                        JumpToGreenzone();
                        // TODO: Turn off ChangeLog.IsRecording and handle the GeneralUndo here.
                        string undoStepName = "Right-Click Edit:";
                        if (_rightClickShift)
                        {
                            undoStepName += " Extend Input";
                            if (_rightClickControl)
                            {
                                undoStepName += ", Insert";
                            }
                        }
                        else
                        {
                            if (_rightClickControl)
                            {
                                undoStepName += " Copy";
                            }
                            else                             // _rightClickAlt
                            {
                                undoStepName += " Move";
                            }
                        }
                        CurrentTasMovie.ChangeLog.BeginNewBatch(undoStepName);
                    }
                }
            }
        }