示例#1
0
        public void ObstructionViewer_ScrollChanged(object sender, ScrollChangedEventArgs e)
        {
            ScrollViewer scrollviewer = sender as ScrollViewer;

            MapScrollViewer.ScrollToVerticalOffset(scrollviewer.VerticalOffset);
            MapScrollViewer.ScrollToHorizontalOffset(scrollviewer.HorizontalOffset);
        }
        private void MapScrollViewer_PreviewMouseWheel(object sender, MouseWheelEventArgs e)
        {
            var scrollControl = sender as ScrollViewer;

            if (!e.Handled && sender != null)
            {
                Point point = e.GetPosition(MapGridCanvas);



                e.Handled = true;
                var eventArg = new MouseWheelEventArgs(e.MouseDevice, e.Timestamp, e.Delta);
                eventArg.RoutedEvent = UIElement.MouseWheelEvent;
                eventArg.Source      = sender;


                int delta = e.Delta;
                if (delta != 0)
                {
                    double steps = ((double)e.Delta) / 120.0;
                    double diff  = Math.Pow(1.1, steps);

                    double mapWidthStart  = MapScrollViewer.ScrollableWidth;
                    double mapHeightStart = MapScrollViewer.ScrollableHeight;



                    double offsetX = MapScrollViewer.HorizontalOffset;
                    double offsetY = MapScrollViewer.VerticalOffset;


                    UseScale = UseScale * diff;



                    double mapWidthEnd  = mapWidthStart * diff;
                    double mapHeightEnd = mapHeightStart * diff;

                    double mapWidthDiff  = mapWidthEnd - mapWidthStart;
                    double mapHeightDiff = mapHeightEnd - mapHeightStart;


                    MapScrollViewer.ScrollToHorizontalOffset(offsetX + mapWidthDiff / 2.0);
                    MapScrollViewer.ScrollToVerticalOffset(offsetY + mapHeightDiff / 2.0);
                }


                var parent = ((Control)sender).Parent as UIElement;
                parent.RaiseEvent(eventArg);
            }
        }
示例#3
0
        private void MapScrollViewer_OnMouseMove(object sender, MouseEventArgs e)
        {
            if (_lastDragPoint.HasValue)
            {
                Point posNow = e.GetPosition(MapScrollViewer);

                double dX = posNow.X - _lastDragPoint.Value.X;
                double dY = posNow.Y - _lastDragPoint.Value.Y;

                _lastDragPoint = posNow;

                MapScrollViewer.ScrollToHorizontalOffset(MapScrollViewer.HorizontalOffset - dX);
                MapScrollViewer.ScrollToVerticalOffset(MapScrollViewer.VerticalOffset - dY);
            }
        }
示例#4
0
        private void MapScrollViewer_OnScrollChanged(object sender, ScrollChangedEventArgs e)
        {
            if (e.ExtentHeightChange != 0 || e.ExtentWidthChange != 0)
            {
                Point?targetBefore = null;
                Point?targetNow    = null;

                if (!_lastMousePositionOnTarget.HasValue)
                {
                    if (_lastCenterPositionOnTarget.HasValue)
                    {
                        var   centerOfViewport  = new Point(MapScrollViewer.ViewportWidth / 2, MapScrollViewer.ViewportHeight / 2);
                        Point centerOfTargetNow = MapScrollViewer.TranslatePoint(centerOfViewport, MapGrid);

                        targetBefore = _lastCenterPositionOnTarget;
                        targetNow    = centerOfTargetNow;
                    }
                }
                else
                {
                    targetBefore = _lastMousePositionOnTarget;
                    targetNow    = Mouse.GetPosition(MapGrid);

                    _lastMousePositionOnTarget = null;
                }

                if (targetBefore.HasValue)
                {
                    double dXInTargetPixels = targetNow.Value.X - targetBefore.Value.X;
                    double dYInTargetPixels = targetNow.Value.Y - targetBefore.Value.Y;

                    double multiplicatorX = e.ExtentWidth / MapGrid.Width;
                    double multiplicatorY = e.ExtentHeight / MapGrid.Height;

                    double newOffsetX = MapScrollViewer.HorizontalOffset - dXInTargetPixels * multiplicatorX;
                    double newOffsetY = MapScrollViewer.VerticalOffset - dYInTargetPixels * multiplicatorY;

                    if (double.IsNaN(newOffsetX) || double.IsNaN(newOffsetY))
                    {
                        return;
                    }

                    MapScrollViewer.ScrollToHorizontalOffset(newOffsetX);
                    MapScrollViewer.ScrollToVerticalOffset(newOffsetY);
                }
            }
        }
        private void MapGridCanvas_MouseMove(object sender, MouseEventArgs e)
        {
            Point p = e.GetPosition((Canvas)sender);

            if (settingFog)
            {
                if (e.LeftButton == MouseButtonState.Released)
                {
                    settingFog = false;
                    map.SaveMap(true);
                }
                else
                {
                    GameMap.MapCell cell = PointToCell(p);

                    List <GameMap.MapCell> list = PointToCellArray(p, brushSize);
                    bool changed = false;
                    foreach (var c in list)
                    {
                        if (CellOnBoard(c))
                        {
                            if (map[c.X, c.Y] != newFogState)
                            {
                                map[c.X, c.Y] = newFogState;
                                changed       = true;
                            }
                        }
                    }
                    if (changed)
                    {
                        map.FireFogOrMarkerChanged();
                    }
                }

                lastPosition = p;
            }
            else if (settingMarkers)
            {
                if (e.LeftButton == MouseButtonState.Released)
                {
                    settingMarkers = false;
                    map.SaveMap(true);
                }
                else
                {
                    SetMarkers(p);
                }
            }
            if (draggingMap)
            {
                if (e.MiddleButton == MouseButtonState.Released)
                {
                    draggingMap = false;
                }
                else
                {
                    Vector v = p - lastPosition;

                    double newVerticalOffset   = MapScrollViewer.VerticalOffset - v.Y;
                    double newHorizontalOffset = MapScrollViewer.HorizontalOffset - v.X;

                    double verticalDiff   = 0;
                    double horizontalDiff = 0;

                    if (newVerticalOffset < 0)
                    {
                        verticalDiff      = newVerticalOffset;
                        newVerticalOffset = 0;
                    }
                    else if (newVerticalOffset > MapScrollViewer.ScrollableHeight)
                    {
                        verticalDiff      = newVerticalOffset - MapScrollViewer.ScrollableHeight;
                        newVerticalOffset = MapScrollViewer.ScrollableHeight;
                    }

                    if (newHorizontalOffset < 0)
                    {
                        horizontalDiff      = newHorizontalOffset;
                        newHorizontalOffset = 0;
                    }
                    else if (newHorizontalOffset > MapScrollViewer.ScrollableWidth)
                    {
                        horizontalDiff      = newHorizontalOffset - MapScrollViewer.ScrollableWidth;
                        newHorizontalOffset = MapScrollViewer.ScrollableWidth;
                    }

                    MapScrollViewer.ScrollToVerticalOffset(newVerticalOffset);
                    MapScrollViewer.ScrollToHorizontalOffset(newHorizontalOffset);

                    lastPosition.X = lastPosition.X - horizontalDiff;
                    lastPosition.Y = lastPosition.Y - verticalDiff;
                }
            }
        }