Пример #1
0
        public override bool ReleaseTool(TileMouseEventArgs e)
        {
            ClosePopups();

            // From Terrafirma
            foreach (Chest c in _world.Chests)
            {
                //chests are 2x2, and their x/y is upper left corner
                if (Check2x2(c.Location, e.Tile))
                {
                    _chestPopup        = new ChestEditorPopup(c);
                    _chestPopup.IsOpen = true;
                }
            }
            foreach (Sign s in _world.Signs)
            {
                //signs are 2x2, and their x/y is upper left corner
                if (Check2x2(s.Location, e.Tile))
                {
                    _signPopup        = new SignPopup(s);
                    _signPopup.IsOpen = true;
                }
            }
            return(false);
        }
Пример #2
0
        private void ViewportMouseDown(object sender, MouseButtonEventArgs e)
        {
            var cargs = new TileMouseEventArgs
            {
                Tile         = GetTileAtPixel(e.GetPosition((IInputElement)sender)),
                LeftButton   = e.LeftButton,
                RightButton  = e.RightButton,
                MiddleButton = e.MiddleButton,
                WheelDelta   = 0
            };


            _mouseDownAbsolute = e.GetPosition(this);

            var partView = (ScrollViewer)FindName("WorldScrollViewer");

            if (partView != null)
            {
                _scrollDownAbsolute = new Point(partView.HorizontalOffset, partView.VerticalOffset);
            }

            var vm = (WorldViewModel)DataContext;

            if (vm.MouseDownCommand.CanExecute(cargs))
            {
                vm.MouseDownCommand.Execute(cargs);
            }

            ViewportRerender(sender, null);  // potential for button effects to trigger tile changes
        }
Пример #3
0
        private void CheckDirectionandDraw(TileMouseEventArgs e)
        {
            PointInt32 p = e.Tile;

            // Free range draw only

            /* if (_isLeftDown && !_isRightDown) {
             *  DrawLine(p);
             *  _startPoint = p;
             * } */

            if (_isRightDown)
            {
                if (_isLeftDown)
                {
                    p.X = _startPoint.X;
                }
                else
                {
                    p.Y = _startPoint.Y;
                }

                DrawLine(p);
                _startPoint = p;
            }
            else if (_isLeftDown)
            {
                DrawLine(p);
                _startPoint = p;
            }
        }
Пример #4
0
        private void OnMouseOverPixel(TileMouseEventArgs e)
        {
            if ((e.Tile.X < _world.Header.WorldBounds.W &&
                 e.Tile.Y < _world.Header.WorldBounds.H &&
                 e.Tile.X >= 0 &&
                 e.Tile.Y >= 0) && (_world.Tiles[e.Tile.X, e.Tile.Y] != null))
            {
                Tile overTile = _world.Tiles[e.Tile.X, e.Tile.Y];


                string wallName  = WorldSettings.Walls[overTile.Wall].Name + "[" + overTile.Wall + "]";
                string tileName  = overTile.IsActive ? WorldSettings.Tiles[overTile.Type].Name + "[" + overTile.Type + "]" : "[empty]";
                string fluidname = "[no fluid]";
                if (overTile.Liquid > 0)
                {
                    fluidname  = overTile.IsLava ? "Lava" : "Water";
                    fluidname += " [" + overTile.Liquid.ToString() + "]";
                }

                FluidName = fluidname;
                TileName  = tileName;
                WallName  = wallName;
                Frame     = overTile.Frame;

                if (ActiveTool != null)
                {
                    ActiveTool.MoveTool(e);
                }
            }

            MouseOverTile = e.Tile;  // Set last as PreviewOffset may have been changed
        }
Пример #5
0
        private void ViewportMouseMove(object sender, MouseEventArgs e)
        {
            var vm = (WorldViewModel)DataContext;

            var cargs = new TileMouseEventArgs
            {
                Tile         = GetTileAtPixel(e.GetPosition((IInputElement)sender)),
                LeftButton   = e.LeftButton,
                RightButton  = e.RightButton,
                MiddleButton = e.MiddleButton,
                WheelDelta   = 0
            };

            var partView = (ScrollViewer)FindName("WorldScrollViewer");

            // Standard middle-button crazy scroll
            if (partView != null && cargs.MiddleButton == MouseButtonState.Pressed)
            {
                Cursor = Cursors.ScrollAll;

                var   currentScrollPosition = new Point(partView.HorizontalOffset, partView.VerticalOffset);
                Point currentMousePosition  = e.GetPosition(this);
                var   delta = new Point(currentMousePosition.X - _mouseDownAbsolute.X,
                                        currentMousePosition.Y - _mouseDownAbsolute.Y);

                partView.ScrollToHorizontalOffset(currentScrollPosition.X + (delta.X) / 128.0);
                partView.ScrollToVerticalOffset(currentScrollPosition.Y + (delta.Y) / 128.0);

                ViewportRerender(sender, null);  // scroll change needs a re-render
            }
            // Google-like drag/drop scroll
            else if (partView != null && cargs.RightButton == MouseButtonState.Pressed && (vm.ActiveTool == null || vm.ActiveTool.Name == "Arrow"))
            {
                Cursor = Cursors.SizeAll;

                Point currentMousePosition = e.GetPosition(this);
                var   delta = new Point(currentMousePosition.X - _mouseDownAbsolute.X,
                                        currentMousePosition.Y - _mouseDownAbsolute.Y);

                partView.ScrollToHorizontalOffset(_scrollDownAbsolute.X - delta.X);  // (dragging means going the opposite direction of the mouse)
                partView.ScrollToVerticalOffset(_scrollDownAbsolute.Y - delta.Y);

                ViewportRerender(sender, null);  // scroll change needs a re-render
            }
            else
            {
                Cursor = Cursors.Cross;
            }

            if (vm.MouseMoveCommand.CanExecute(cargs))
            {
                vm.MouseMoveCommand.Execute(cargs);
            }

            if (cargs.LeftButton == MouseButtonState.Pressed || cargs.RightButton == MouseButtonState.Pressed)
            {
                ViewportRerender(sender, null);  // may be potentially drawing
            }
        }
Пример #6
0
 private void SetSpawn(TileMouseEventArgs e)
 {
     if (!WorldSettings.Tiles[_world.Tiles[e.Tile.X, e.Tile.Y].Type].IsSolid ||
         !_world.Tiles[e.Tile.X, e.Tile.Y].IsActive)
     {
         _world.Header.DungeonEntrance = e.Tile;
     }
 }
Пример #7
0
 public override bool MoveTool(TileMouseEventArgs e)
 {
     if (e.LeftButton == MouseButtonState.Pressed)
     {
         _selection.SetRectangle(_startselection, e.Tile);
     }
     return(false);
 }
Пример #8
0
 public override bool MoveTool(TileMouseEventArgs e)
 {
     if (e.LeftButton == MouseButtonState.Pressed)
     {
         SetSpawn(e);
     }
     return(true);
 }
Пример #9
0
 public override bool ReleaseTool(TileMouseEventArgs e)
 {
     CheckDirectionandDraw(e);
     _isLeftDown  = (e.LeftButton == MouseButtonState.Pressed);
     _isRightDown = (e.RightButton == MouseButtonState.Pressed);
     HistMan.AddBufferToHistory();
     return(true);
 }
Пример #10
0
        public override bool PressTool(TileMouseEventArgs e)
        {
            if (e.LeftButton == MouseButtonState.Pressed)
            {
                Flood(e.Tile);

                _renderer.UpdateWorldImage(new Int32Rect(minX, minY, maxX - minX + 1, maxY - minY + 1));
            }
            HistMan.AddBufferToHistory();
            return(true);
        }
Пример #11
0
        private void CheckDirectionandDraw(TileMouseEventArgs e)
        {
            PointInt32 p = e.Tile;

            // Free range draw only
            if (_isLeftDown && !_isRightDown)
            {
                DrawLine(p);
                _startPoint = p;
            }
        }
Пример #12
0
 public override bool PressTool(TileMouseEventArgs e)
 {
     if (e.LeftButton == MouseButtonState.Pressed)
     {
         _startselection = e.Tile;
     }
     if (e.RightButton == MouseButtonState.Pressed && e.LeftButton == MouseButtonState.Released)
     {
         _selection.Deactive();
     }
     return(true);
 }
Пример #13
0
        public override bool PressTool(TileMouseEventArgs e)
        {
            if (!_isRightDown && !_isLeftDown)
            {
                _startPoint = e.Tile;
            }

            CheckDirectionandDraw(e);
            _isLeftDown  = (e.LeftButton == MouseButtonState.Pressed);
            _isRightDown = (e.RightButton == MouseButtonState.Pressed);
            return(true);
        }
Пример #14
0
 public override bool PressTool(TileMouseEventArgs e)
 {
     if (_spritePicker.SelectedSprite != null)
     {
         if (e.LeftButton == MouseButtonState.Pressed)
         {
             var cursprite = _spritePicker.SelectedSprite;
             PlaceSprite(e.Tile, (byte)cursprite.ID, cursprite.Size, cursprite.UpperLeft);
             //PlaceBrownChest(e.Tile);
         }
         return(true);
     }
     return(false);
 }
Пример #15
0
        public override bool ReleaseTool(TileMouseEventArgs e)
        {
            if (_startPoint != null)
            {
                DrawLine(e.Tile);
            }
            _isLeftDown  = (e.LeftButton == MouseButtonState.Pressed);
            _isRightDown = (e.RightButton == MouseButtonState.Pressed);

            HistMan.AddBufferToHistory();
            _startPoint = null;
            _endPoint   = null;
            return(true);
        }
Пример #16
0
        private void OnMouseUpPixel(TileMouseEventArgs e)
        {
            if ((e.Tile.X < _world.Header.WorldBounds.W &&
                 e.Tile.Y < _world.Header.WorldBounds.H &&
                 e.Tile.X >= 0 &&
                 e.Tile.Y >= 0) && (_world.Tiles[e.Tile.X, e.Tile.Y] != null))
            {
                MouseUpTile = e.Tile;

                if (ActiveTool != null)
                {
                    ActiveTool.ReleaseTool(e);
                }
            }
        }
Пример #17
0
 private void OnMouseWheel(TileMouseEventArgs e)
 {
     if ((e.Tile.X < _world.Header.WorldBounds.W &&
          e.Tile.Y < _world.Header.WorldBounds.H &&
          e.Tile.X >= 0 &&
          e.Tile.Y >= 0) && (_world.Tiles[e.Tile.X, e.Tile.Y] != null))
     {
         if (e.WheelDelta > 0)
         {
             Zoom = Zoom * 1.1;
         }
         if (e.WheelDelta < 0)
         {
             Zoom = Zoom * (1 / 1.1);  // 0.9090909090909090909090...
         }
     }
 }
Пример #18
0
        public override bool PressTool(TileMouseEventArgs e)
        {
            tilesChecked = new bool[_world.Header.WorldBounds.Total];

            if (!_isRightDown && !_isLeftDown)
            {
                _startPoint = e.Tile;
            }

            if ((_properties.Height > 0 && _properties.Width > 0) &&
                (_lastUsedSize.Width != _properties.Width || _lastUsedSize.Height != _properties.Height))
            {
                _lastUsedSize = new SizeInt32(_properties.Width, _properties.Height);
            }

            CheckDirectionandDraw(e);
            _isLeftDown  = (e.LeftButton == MouseButtonState.Pressed);
            _isRightDown = (e.RightButton == MouseButtonState.Pressed);
            return(true);
        }
Пример #19
0
        private void ViewportMouseUp(object sender, MouseButtonEventArgs e)
        {
            var cargs = new TileMouseEventArgs
            {
                Tile         = GetTileAtPixel(e.GetPosition((IInputElement)sender)),
                LeftButton   = e.LeftButton,
                RightButton  = e.RightButton,
                MiddleButton = e.MiddleButton,
                WheelDelta   = 0
            };

            var vm = (WorldViewModel)DataContext;

            if (vm.MouseUpCommand.CanExecute(cargs))
            {
                vm.MouseUpCommand.Execute(cargs);
            }

            ViewportRerender(sender, null);  // potential for button effects to trigger tile changes
        }
Пример #20
0
        private void OnMouseDownPixel(TileMouseEventArgs e)
        {
            if ((e.Tile.X < _world.Header.WorldBounds.W &&
                 e.Tile.Y < _world.Header.WorldBounds.H &&
                 e.Tile.X >= 0 &&
                 e.Tile.Y >= 0) && (_world.Tiles[e.Tile.X, e.Tile.Y] != null))
            {
                MouseDownTile = e.Tile;

                if (ActiveTool != null)
                {
                    ActiveTool.PressTool(e);

                    if (ActiveTool.Name == "Paste")
                    {
                        ActiveTool = null;// Tools.FirstOrDefault(t => t.Value.Name == "Selection").Value;
                    }
                }
            }
        }
Пример #21
0
        private void ViewportMouseWheel(object sender, MouseWheelEventArgs e)
        {
            var cargs = new TileMouseEventArgs
            {
                Tile         = GetTileAtPixel(e.GetPosition((IInputElement)sender)),
                LeftButton   = e.LeftButton,
                RightButton  = e.RightButton,
                MiddleButton = e.MiddleButton,
                WheelDelta   = e.Delta
            };

            var vm       = (WorldViewModel)DataContext;
            var partView = (ScrollViewer)FindName("WorldScrollViewer");

            double initialZoom           = vm.Zoom;
            var    initialScrollPosition = new Point(partView.HorizontalOffset, partView.VerticalOffset);
            var    initialCenterTile     =
                new PointInt32((int)(partView.HorizontalOffset / initialZoom + (partView.ActualWidth / 2) / initialZoom),
                               (int)(partView.VerticalOffset / initialZoom + (partView.ActualHeight / 2) / initialZoom));

            if (vm.MouseWheelCommand.CanExecute(cargs))
            {
                vm.MouseWheelCommand.Execute(cargs);
            }

            double finalZoom = vm.Zoom;
            //var finalScrollPosition = new Point(partView.HorizontalOffset, partView.VerticalOffset);
            double zoomRatio       = 1 - finalZoom / initialZoom;
            var    scaleCenterTile = new PointInt32(
                (int)(initialCenterTile.X - ((cargs.Tile.X - initialCenterTile.X) * zoomRatio)),
                (int)(initialCenterTile.Y - ((cargs.Tile.Y - initialCenterTile.Y) * zoomRatio)));

            ScrollToTile(scaleCenterTile);

            ViewportRerender(sender, null);  // scroll/zoom change needs a re-render
        }
Пример #22
0
 public abstract bool MoveTool(TileMouseEventArgs e);
Пример #23
0
 public override bool MoveTool(TileMouseEventArgs e)
 {
     CheckDirectionandDraw(e);
     return(false);
 }
Пример #24
0
 public override bool PressTool(TileMouseEventArgs e)
 {
     PasteClipboard(new PointInt32(e.Tile.X - _properties.Offset.X,
                                   e.Tile.Y - _properties.Offset.Y));
     return(false);
 }
Пример #25
0
        public override bool MoveTool(TileMouseEventArgs e)
        {
            WriteableBitmap bmp;

            if (_startPoint != null)
            {
                _endPoint = e.Tile;
            }
            CheckDirectionandDraw(e);
            ToolAnchorMode mode = ToolAnchorMode.Center;

            // Line draw preview
            if (_isRightDown && _startPoint != null && _endPoint != null)
            {
                var sp    = (PointInt32)_startPoint;
                var ep    = (PointInt32)_endPoint;
                var delta = ep - sp;
                var rect  = new RectI(new PointInt32(), new SizeInt32(Math.Abs(delta.X) + 1, Math.Abs(delta.Y) + 1));

                // figure out exactly which PreviewMode
                mode = 0;
                if (delta.X < 0)
                {
                    mode += (int)ToolAnchorModeParts.Left;
                }
                else if (delta.X == 0)
                {
                    mode += (int)ToolAnchorModeParts.Center;
                }
                else if (delta.X > 0)
                {
                    mode += (int)ToolAnchorModeParts.Right;
                }

                if (delta.Y < 0)
                {
                    mode += (int)ToolAnchorModeParts.Top;
                }
                else if (delta.Y == 0)
                {
                    mode += (int)ToolAnchorModeParts.Middle;
                }
                else if (delta.Y > 0)
                {
                    mode += (int)ToolAnchorModeParts.Bottom;
                }

                // which direction to draw the line
                var linePnts = new PointInt32[2];
                switch (mode)
                {
                case ToolAnchorMode.TopLeft:     linePnts = new[] { rect.BottomRight, rect.TopLeft }; break;

                case ToolAnchorMode.TopRight:    linePnts = new[] { rect.BottomLeft, rect.TopRight }; break;

                case ToolAnchorMode.BottomLeft:  linePnts = new[] { rect.TopRight, rect.BottomLeft }; break;

                case ToolAnchorMode.BottomRight: linePnts = new[] { rect.TopLeft, rect.BottomRight }; break;

                default:      // has middle or center, order doesn't matter
                    linePnts = new[] { rect.TopLeft, rect.BottomRight };
                    break;
                }

                bmp = new WriteableBitmap(
                    rect.W,
                    rect.H,
                    96,
                    96,
                    System.Windows.Media.PixelFormats.Bgra32,
                    null);

                bmp.Clear();
                foreach (PointInt32 p in WorldRenderer.DrawLine(linePnts[0], linePnts[1]))
                {
                    if (_selection.IsValid(p))
                    {
                        bmp.SetPixel(p.X, p.Y, previewColor);
                    }
                }
            }
            // Single dot
            else
            {
                bmp = new WriteableBitmap(
                    1,
                    1,
                    96,
                    96,
                    System.Windows.Media.PixelFormats.Bgra32,
                    null);

                bmp.Clear();
                bmp.SetPixel(0, 0, previewColor);
            }

            _properties.Image       = bmp;
            _properties.PreviewMode = mode;

            return(false);
        }
Пример #26
0
 public override bool ReleaseTool(TileMouseEventArgs e)
 {
     // Do nothing on release
     return(false);
 }
Пример #27
0
 public abstract bool ReleaseTool(TileMouseEventArgs e);
Пример #28
0
 public override bool MoveTool(TileMouseEventArgs e)
 {
     return(false);
 }
Пример #29
0
 public abstract bool PressTool(TileMouseEventArgs e);