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); } }
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); } }
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; } } } }
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; } } }
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); }
// 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)); }
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); } } } }