Example #1
0
        public void GameUpdate()
        {
            GameUpdateHandleInput();
            var updates = Track.Scheduler.UnqueueUpdates();

            if (updates > 0)
            {
                Invalidate();
                if (Track.Playing)
                {
                    if (InputUtils.Check(Hotkey.PlaybackZoom))
                    {
                        Track.ZoomBy(0.08f);
                    }
                    else if (InputUtils.Check(Hotkey.PlaybackUnzoom))
                    {
                        Track.ZoomBy(-0.08f);
                    }
                }
            }
            if (_autosavewatch.Elapsed.TotalMinutes >= 5)
            {
                _autosavewatch.Restart();
                new Thread(() => { Track.BackupTrack(false); }).Start();
            }


            if (Track.Playing)
            {
                if (ReversePlayback)
                {
                    for (int i = 0; i < updates; i++)
                    {
                        Track.PreviousFrame();
                        Track.UpdateCamera(true);
                    }
                }
                else
                {
                    Track.Update(updates);
                }
            }
            AudioService.EnsureSync();
            if (Program.NewVersion != null)
            {
                Canvas.ShowOutOfDate();
            }
        }
Example #2
0
 private bool SelectLine(Vector2d gamepos)
 {
     using (var trk = game.Track.CreateTrackReader())
     {
         var line = SelectLine(trk, gamepos, out bool knob);
         if (line != null)
         {
             _clickstart = gamepos;
             _active     = true;
             //is it a knob?
             if (knob)
             {
                 if (InputUtils.Check(Hotkey.ToolSelectBothJoints))
                 {
                     _selection = new LineSelection(line, bothjoints: true);
                 }
                 else
                 {
                     var knobpos = Utility.CloserPoint(
                         gamepos,
                         line.Position,
                         line.Position2);
                     _selection  = new LineSelection(line, knobpos);
                     _hoverclick = true;
                     _hovertime.Restart();
                     foreach (var snap in LineEndsInRadius(trk, knobpos, 1))
                     {
                         if ((snap.Position == knobpos ||
                              snap.Position2 == knobpos) &&
                             snap != line)
                         {
                             _selection.snapped.Add(new LineSelection(snap, knobpos));
                         }
                     }
                 }
                 return(true);
             }
             else
             {
                 _selection = new LineSelection(line, true);
                 return(true);
             }
         }
     }
     return(false);
 }
        public void GameUpdate()
        {
            GameUpdateHandleInput();
            var updates = Scheduler.UnqueueUpdates();

            if (updates > 0)
            {
                Invalidate();
                if (Track.Playing)
                {
                    if (InputUtils.Check(Hotkey.PlaybackZoom))
                    {
                        Zoom(0.08f);
                    }
                    else if (InputUtils.Check(Hotkey.PlaybackUnzoom))
                    {
                        Zoom(-0.08f);
                    }
                }
            }
            var qp = (!Track.PlaybackMode) ? InputUtils.Check(Hotkey.EditorQuickPan) : false;

            if (qp != _handToolOverride)
            {
                _handToolOverride = qp;
                if (_handToolOverride == false)
                {
                    HandTool.Stop();
                }
                Invalidate();
                UpdateCursor();
            }
            if (_autosavewatch.Elapsed.TotalMinutes >= 5)
            {
                _autosavewatch.Restart();
                new Thread(() => { Track.BackupTrack(false); }).Start();
            }
            if (Canvas.GetOpenWindows().Count != 0)
            {
                Invalidate();
            }


            if (Track.Playing)
            {
                if (ReversePlayback)
                {
                    Track.ActiveTriggers.Clear();//we don't want wonky unpredictable behavior
                    for (int i = 0; i < updates; i++)
                    {
                        Track.PreviousFrame();
                        Track.UpdateCamera(true);
                    }
                }
                else
                {
                    Track.Update(updates);
                }
            }
            AudioService.EnsureSync();
            if (Program.NewVersion != null)
            {
                Canvas.ShowOutOfDate();
            }
        }
 private void GameUpdateHandleInput()
 {
     if (InputUtils.HandleMouseMove(out int x, out int y) && !Canvas.IsModalOpen)
     {
         if (_handToolOverride)
         {
             HandTool.OnMouseMoved(new Vector2d(x, y));
         }
         else
         {
             SelectedTool.OnMouseMoved(new Vector2d(x, y));
         }
     }
     if (InputUtils.Check(Hotkey.PlaybackForward))
     {
         if (!_playbacktemp || (ReversePlayback && !InputUtils.Check(Hotkey.PlaybackBackward)))
         {
             StopTools();
             if (!Track.PlaybackMode)
             {
                 Track.StartFromFlag();
                 Scheduler.DefaultSpeed();
             }
             if (Track.Paused)
             {
                 Track.TogglePause();
             }
             Scheduler.Reset();
             ReversePlayback = false;
             _playbacktemp   = true;
         }
     }
     else if (InputUtils.Check(Hotkey.PlaybackBackward))
     {
         if (!_playbacktemp || (!ReversePlayback && !InputUtils.Check(Hotkey.PlaybackForward)))
         {
             StopTools();
             if (!Track.PlaybackMode)
             {
                 Track.StartFromFlag();
                 Scheduler.DefaultSpeed();
             }
             if (Track.Paused)
             {
                 Track.TogglePause();
             }
             Scheduler.Reset();
             ReversePlayback = true;
             _playbacktemp   = true;
         }
     }
     else if (_playbacktemp)
     {
         if (!Track.Paused)
         {
             Track.TogglePause();
         }
         _playbacktemp   = false;
         ReversePlayback = false;
         Track.UpdateCamera();
     }
 }
 public bool ShouldXySnap()
 {
     return(Settings.Local.ForceXySnap || InputUtils.Check(Hotkey.ToolXYSnap));
 }
Example #6
0
        public override void OnMouseDown(Vector2d mousepos)
        {
            Stop();//double check
            var gamepos = ScreenToGameCoords(mousepos);

            using (var trk = game.Track.CreateTrackWriter())
            {
                var line = SelectLine(trk, gamepos, out bool knob);
                if (line != null)
                {
                    var point = Utility.CloserPoint(
                        gamepos,
                        line.Position,
                        line.Position2);
                    //is it a knob?
                    if (knob)
                    {
                        _selection         = new SelectInfo();
                        _selection.snapped = new List <SelectInfo>();
                        _selection.line    = line;
                        _selection.clone   = line.Clone();
                        _clickstart        = gamepos;
                        if (InputUtils.Check(Hotkey.ToolSelectBothJoints))
                        {
                            _selection.joint1 = _selection.joint2 = true;
                        }
                        else
                        {
                            if (line.Position == point)
                            {
                                _selection.joint1 = true;
                            }
                            else
                            {
                                _selection.joint2 = true;
                                Debug.Assert(
                                    line.Position2 == point,
                                    "Right joint didn't match but was assigned");
                            }
                            var snapcandidates =
                                this.LineEndsInRadius(trk, point, 1);

                            foreach (var v in snapcandidates)
                            {
                                if (v == line)
                                {
                                    continue;
                                }
                                if (v.Position == point || v.Position2 == point)
                                {
                                    _selection.snapped.Add(new SelectInfo()
                                    {
                                        joint1 = v.Position == point,
                                        joint2 = v.Position2 == point,
                                        line   = v,
                                        clone  = v.Clone()
                                    });
                                }
                            }
                        }
                        Active = true;
                        UpdateTooltip();
                    }
                    else
                    {
                        _selection         = new SelectInfo();
                        _selection.snapped = new List <SelectInfo>();
                        _selection.line    = line;
                        _selection.clone   = line.Clone();
                        _clickstart        = gamepos;
                        _selection.joint1  = _selection.joint2 = true;
                        Active             = true;
                        UpdateTooltip();
                    }
                }
            }
            base.OnMouseDown(gamepos);
        }
Example #7
0
 protected override void OnMouseDown(MouseButtonEventArgs e)
 {
     base.OnMouseDown(e);
     try
     {
         InputUtils.UpdateMouse(e.Mouse);
         if (linerider.IO.TrackRecorder.Recording)
         {
             return;
         }
         var r = _input.ProcessMouseMessage(e);
         _uicursor = _input.MouseCaptured;
         if (Canvas.GetOpenWindows().Count != 0)
         {
             UpdateCursor();
             return;
         }
         if (!r)
         {
             InputUtils.ProcessMouseHotkeys();
             if (!Track.Playing)
             {
                 bool dragstart = false;
                 if (Track.Offset == 0 &&
                     e.Button == MouseButton.Left &&
                     InputUtils.Check(Hotkey.EditorMoveStart))
                 {
                     var gamepos = ScreenPosition + (new Vector2d(e.X, e.Y) / Track.Zoom);
                     dragstart = Game.Rider.GetBounds(
                         Track.GetStart()).Contains(
                         gamepos.X,
                         gamepos.Y);
                     if (dragstart)
                     {
                         // 5 is arbitrary, but i assume that's a decent
                         // place to assume the user has done "work"
                         if (!Track.MoveStartWarned && Track.LineCount > 5)
                         {
                             var popup = MessageBox.Show(Canvas,
                                                         "You're about to move the start position of the rider." +
                                                         " This cannot be undone, and may drastically change how your track plays." +
                                                         "\nAre you sure you want to do this?", "Warning", MessageBox.ButtonType.OkCancel);
                             popup.RenameButtons("I understand");
                             popup.Dismissed += (o, args) =>
                             {
                                 if (popup.Result == Gwen.DialogResult.OK)
                                 {
                                     Track.MoveStartWarned = true;
                                 }
                             };
                         }
                         else
                         {
                             _dragRider = dragstart;
                         }
                     }
                 }
                 if (!_dragRider && !dragstart)
                 {
                     if (e.Button == MouseButton.Left)
                     {
                         CurrentTools.SelectedTool.OnMouseDown(new Vector2d(e.X, e.Y));
                     }
                     else if (e.Button == MouseButton.Right)
                     {
                         CurrentTools.SelectedTool.OnMouseRightDown(new Vector2d(e.X, e.Y));
                     }
                 }
             }
             else if (CurrentTools.SelectedTool == CurrentTools.PencilTool && CurrentTools.PencilTool.DrawingScenery)
             {
                 if (e.Button == MouseButton.Left)
                 {
                     CurrentTools.PencilTool.OnMouseDown(new Vector2d(e.X, e.Y));
                 }
             }
         }
         UpdateCursor();
         Invalidate();
     }
     catch (Exception ex)
     {
         // SDL2 backend eats exceptions.
         // we have to manually crash.
         Program.Crash(ex, true);
         Close();
     }
 }