コード例 #1
0
        private void SetMarkers(Point p)
        {
            GameMap.MapCell cell = PointToCell(p);
            if (CellOnBoard(cell))
            {
                List <GameMap.MapCell> list = PointToCellArray(p, brushSize);

                foreach (var c in list)
                {
                    if (CellOnBoard(c))
                    {
                        if (eraseMode)
                        {
                            map.DeleteAllMarkers(c);
                        }
                        else
                        {
                            GameMap.Marker marker = new GameMap.Marker();
                            marker.Style = markerStyle;
                            marker.Color = markerColor;
                            map.SetMarker(c, marker);
                        }
                    }
                }
                map.SaveMap(false);
                map.FireFogOrMarkerChanged();
            }
        }
コード例 #2
0
 public List <Marker> GetMarkers(GameMap.MapCell cell)
 {
     if (markers.ContainsKey(CellIndex(cell)))
     {
         return(markers[CellIndex(cell)]);
     }
     return(new List <Marker>());
 }
コード例 #3
0
        private void MapGridCanvas_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
        {
            if (e.ClickCount == 1)
            {
                Point p = e.GetPosition((Canvas)sender);
                lastPosition = p;
                switch (mode)
                {
                case GameMapActionMode.SetOrigin:

                    p = p.Divide(UseScale);
                    map.CellOrigin = p;
                    //UpdateGridBrush();
                    break;

                case GameMapActionMode.SetFog:

                {
                    GameMap.MapCell cell = PointToCell(p);
                    if (CellOnBoard(cell))
                    {
                        List <GameMap.MapCell> list = PointToCellArray(p, brushSize);

                        newFogState = !map[cell.X, cell.Y];
                        foreach (var c in list)
                        {
                            if (CellOnBoard(c))
                            {
                                map[c.X, c.Y] = newFogState;
                            }
                        }
                        map.FireFogOrMarkerChanged();
                        settingFog = true;
                    }
                    break;
                }

                case GameMapActionMode.SetMarker:
                {
                    SetMarkers(p);
                    settingMarkers = true;
                }
                break;
                }
            }
            else if (e.ClickCount == 2)
            {
                if (fullscreen)
                {
                    ExitFullScreen();
                }
                else
                {
                    EnterFullScreen();
                }
            }
        }
コード例 #4
0
        void ShowContextMenu(GameMap.MapCell cell)
        {
            ContextMenu menu = (ContextMenu)Resources["MapContextMenu"];

            if (menu.IsOpen)
            {
                return;
            }

            rightClickCell = cell;

            menu.DataContext = cell;

            bool hasMarkers = map.CellHasMarkers(cell);

            menu.Placement = System.Windows.Controls.Primitives.PlacementMode.MousePoint;
            menu.IsOpen    = true;

            MenuItem mi;

            if (CellOnBoard(cell))
            {
                mi             = (MenuItem)menu.FindLogicalNode("ToggleFogItem");
                mi.DataContext = cell;
                mi.Visibility  = !playerMode ? Visibility.Visible : Visibility.Collapsed;

                mi             = (MenuItem)menu.FindLogicalNode("DeleteMarkerItem");
                mi.Visibility  = (hasMarkers && !playerMode) ? Visibility.Visible : Visibility.Collapsed;
                mi.DataContext = cell;


                mi            = (MenuItem)menu.FindLogicalNode("NameBoxItem");
                mi.Visibility = (hasMarkers && !playerMode) ? Visibility.Visible : Visibility.Collapsed;

                if (hasMarkers)
                {
                    mi.DataContext = map.GetMarkers(cell)[0];
                }
            }
            else
            {
                menu.SetElementsVisibility(new string[] { "ToggleFogItem", "DeleteMarkerItem", "NameBoxItem" }, Visibility.Collapsed);
            }


            mi            = (MenuItem)menu.FindLogicalNode("ShowControlsItem");
            mi.Visibility = controlsHidden ? Visibility.Visible : Visibility.Collapsed;

            mi            = (MenuItem)menu.FindLogicalNode("HideControlsItem");
            mi.Visibility = controlsHidden ? Visibility.Collapsed : Visibility.Visible;

            mi            = (MenuItem)menu.FindLogicalNode("ExitFullScreenItem");
            mi.Visibility = fullscreen ? Visibility.Visible : Visibility.Collapsed;

            mi            = (MenuItem)menu.FindLogicalNode("EnterFullScreenItem");
            mi.Visibility = fullscreen ? Visibility.Collapsed : Visibility.Visible;
        }
コード例 #5
0
 private void ToggleFogItem_Click(object sender, RoutedEventArgs e)
 {
     GameMap.MapCell cell = (GameMap.MapCell)((FrameworkElement)sender).DataContext;
     if (CellOnBoard(cell))
     {
         map[cell.X, cell.Y] = !map[cell.X, cell.Y];
         map.FireFogOrMarkerChanged();
         map.SaveMap(true);
     }
 }
コード例 #6
0
        private void MapGridCanvas_MouseRightButtonUp(object sender, MouseButtonEventArgs e)
        {
            if (rightClickDown)
            {
                rightClickDown = false;

                GameMap.MapCell cell = PointToCell(rightClickPosition);

                rightClickCell = cell;

                if (CellOnBoard(cell))
                {
                    bool hasMarkers = map.CellHasMarkers(cell);


                    ContextMenu menu = (ContextMenu)Resources["MapContextMenu"];
                    menu.DataContext = cell;

                    menu.Placement = System.Windows.Controls.Primitives.PlacementMode.MousePoint;
                    menu.IsOpen    = true;

                    MenuItem mi;

                    mi             = (MenuItem)menu.FindLogicalNode("ToggleFogItem");
                    mi.DataContext = cell;
                    mi.Visibility  = !playerMode ? Visibility.Visible : Visibility.Collapsed;

                    mi             = (MenuItem)menu.FindLogicalNode("DeleteMarkerItem");
                    mi.Visibility  = (hasMarkers && !playerMode) ? Visibility.Visible : Visibility.Collapsed;
                    mi.DataContext = cell;


                    mi            = (MenuItem)menu.FindLogicalNode("NameBoxItem");
                    mi.Visibility = (hasMarkers && !playerMode) ? Visibility.Visible : Visibility.Collapsed;

                    if (hasMarkers)
                    {
                        mi.DataContext = map.GetMarkers(cell)[0];
                    }


                    mi            = (MenuItem)menu.FindLogicalNode("ShowControlsItem");
                    mi.Visibility = controlsHidden ? Visibility.Visible : Visibility.Collapsed;

                    mi            = (MenuItem)menu.FindLogicalNode("HideControlsItem");
                    mi.Visibility = controlsHidden ? Visibility.Collapsed : Visibility.Visible;

                    mi            = (MenuItem)menu.FindLogicalNode("ExitFullScreenItem");
                    mi.Visibility = fullscreen ? Visibility.Visible : Visibility.Collapsed;

                    mi            = (MenuItem)menu.FindLogicalNode("EnterFullScreenItem");
                    mi.Visibility = fullscreen ? Visibility.Collapsed : Visibility.Visible;
                }
            }
        }
コード例 #7
0
        private void DeleteMarkerItem_Click(object sender, RoutedEventArgs e)
        {
            GameMap.MapCell cell = (GameMap.MapCell)((FrameworkElement)sender).DataContext;
            if (CellOnBoard(cell))
            {
                map.DeleteAllMarkers(cell);

                map.FireFogOrMarkerChanged();
                map.SaveMap(false);
            }
        }
コード例 #8
0
        private void MapGridCanvas_MouseRightButtonUp(object sender, MouseButtonEventArgs e)
        {
            if (rightClickDown)
            {
                rightClickDown = false;

                GameMap.MapCell cell = PointToCell(rightClickPosition);

                ShowContextMenu(cell);
            }
        }
コード例 #9
0
        private GameMap.MapCell PointToCell(Point p)
        {
            GameMap.MapCell cell = new GameMap.MapCell();

            Vector v = p - UseGridOrigin;

            cell.X = (int)(v.X / UseCellSize.Width);
            cell.Y = (int)(v.Y / UseCellSize.Height);


            return(cell);
        }
コード例 #10
0
        private List <GameMap.MapCell> PointToCellArray(Point p, int size)
        {
            List <GameMap.MapCell> list = new List <GameMap.MapCell>();

            if (size == 1)
            {
                list.Add(PointToCell(p));
            }
            else if (size.IsOdd())
            {
                GameMap.MapCell c = PointToCell(p);

                int minx = c.X - size / 2;
                int miny = c.Y - size / 2;
                int maxx = c.X + size / 2;
                int maxy = c.Y + size / 2;

                for (int y = miny; y <= maxy; y++)
                {
                    for (int x = minx; x <= maxx; x++)
                    {
                        list.Add(new GameMap.MapCell(x, y));
                    }
                }
            }
            else
            {
                Point start = p;
                start.X = start.X - UseCellSize.Width * ((double)size) / 2.0 + UseCellSize.Width / 2.0;
                start.Y = start.Y - UseCellSize.Height * ((double)size) / 2.0 + UseCellSize.Height / 2.0;

                for (int x = 0; x < size; x++)
                {
                    for (int y = 0; y < size; y++)
                    {
                        list.Add(PointToCell(new Point(start.X + UseCellSize.Width * (double)x,
                                                       start.Y + UseCellSize.Width * (double)y)));
                    }
                }
            }


            return(list);
        }
コード例 #11
0
        public Geometry CreateMarkerPath(int index, GameMap.Marker marker)
        {
            GameMap map = (GameMap)DataContext;

            if (map != null)
            {
                GameMap.MapCell cell = map.IndexToCell(index);

                Rect rect = CellRect(cell);

                double penWidth = CurrentScale;


                switch (marker.Style)
                {
                case GameMap.MarkerStyle.Square:


                    return(rect.RectanglePath(penWidth));

                case GameMap.MarkerStyle.Circle:

                    Rect cicleRect = rect;
                    cicleRect.ScaleCenter(.9, .9);

                    return(rect.CirclePath(penWidth));

                case GameMap.MarkerStyle.Diamond:
                    return(rect.DiamondPath(penWidth));

                case GameMap.MarkerStyle.Target:
                    return(rect.TargetPath(penWidth));

                case GameMap.MarkerStyle.Star:
                    return(rect.StarPath(0));
                }
            }

            return(null);
        }
コード例 #12
0
        public void DrawMarker(DrawingContext context, int index, GameMap.Marker marker)
        {
            GameMap map = (GameMap)DataContext;

            if (map != null)
            {
                GameMap.MapCell cell = map.IndexToCell(index);

                Rect rect = CellRect(cell);

                Color brushColor = marker.Color;
                brushColor.A = (byte)(brushColor.A / 2);

                double penWidth = Math.Min(UseCellSize.Width, UseCellSize.Height) / 25.0;


                Brush b = new SolidColorBrush(brushColor);
                Pen   p = new Pen(new SolidColorBrush(marker.Color), penWidth);


                context.DrawGeometry(b, p, CreateMarkerPath(index, marker));
            }
        }
コード例 #13
0
 private bool CellOnBoard(GameMap.MapCell cell)
 {
     return(!(cell.X < 0 || cell.Y < 0 ||
              cell.X >= map.CellsWidth || cell.Y >= map.CellsHeight));
 }
コード例 #14
0
 public bool CellHasMarkers(GameMap.MapCell cell)
 {
     return(GetMarkers(cell).Count() > 0);
 }
コード例 #15
0
 public int CellIndex(GameMap.MapCell cell)
 {
     return(CellIndex(cell.X, cell.Y));
 }
コード例 #16
0
        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;
                }
            }
        }
コード例 #17
0
 Rect CellRect(GameMap.MapCell cell)
 {
     return(CellRect(cell.X, cell.Y));
 }
コード例 #18
0
        private void MapGridCanvas_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
        {
            if (e.ClickCount == 1)
            {
                Point p = e.GetPosition((Canvas)sender);
                lastPosition = p;
                switch (mode)
                {
                case GameMapActionMode.SetOrigin:

                    p = p.Divide(UseScale);
                    map.CellOrigin = p;
                    //UpdateGridBrush();
                    break;

                case GameMapActionMode.SetFog:

                {
                    GameMap.MapCell cell = PointToCell(p);
                    if (CellOnBoard(cell))
                    {
                        List <GameMap.MapCell> list = PointToCellArray(p, brushSize);

                        newFogState = !map[cell.X, cell.Y];
                        foreach (var c in list)
                        {
                            if (CellOnBoard(c))
                            {
                                map[c.X, c.Y] = newFogState;
                            }
                        }
                        map.FireFogOrMarkerChanged();
                        settingFog = true;
                    }
                    break;
                }

                case GameMapActionMode.SetMarker:
                {
                    SetMarkers(p);
                    settingMarkers = true;
                }
                break;
                }
            }
            else if (e.ClickCount == 2)
            {
                if (WindowState != WindowState.Maximized)
                {
                    WindowStyle = WindowStyle.None;
                    Topmost     = true;
                    WindowState = WindowState.Maximized;
                }
                else
                {
                    WindowStyle = WindowStyle.SingleBorderWindow;
                    Topmost     = false;
                    WindowState = WindowState.Normal;
                }
                Hide();
                Show();
            }
        }