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(); } }
public List <Marker> GetMarkers(GameMap.MapCell cell) { if (markers.ContainsKey(CellIndex(cell))) { return(markers[CellIndex(cell)]); } return(new List <Marker>()); }
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(); } } }
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; }
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); } }
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; } } }
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); } }
private void MapGridCanvas_MouseRightButtonUp(object sender, MouseButtonEventArgs e) { if (rightClickDown) { rightClickDown = false; GameMap.MapCell cell = PointToCell(rightClickPosition); ShowContextMenu(cell); } }
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); }
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); }
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); }
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)); } }
private bool CellOnBoard(GameMap.MapCell cell) { return(!(cell.X < 0 || cell.Y < 0 || cell.X >= map.CellsWidth || cell.Y >= map.CellsHeight)); }
public bool CellHasMarkers(GameMap.MapCell cell) { return(GetMarkers(cell).Count() > 0); }
public int CellIndex(GameMap.MapCell cell) { return(CellIndex(cell.X, cell.Y)); }
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; } } }
Rect CellRect(GameMap.MapCell cell) { return(CellRect(cell.X, cell.Y)); }
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(); } }