// adds a new simplified unit icon to a canvas public static void PlaceSimplifiedUnit(Canvas canvas, UnitStartInfo unit, bool isBlurred = false) { var border = new Border { BorderThickness = new Thickness(1), CornerRadius = new CornerRadius(1), Height = 16, Width = 16 }; if (isBlurred) { border.Opacity = 0.2; } canvas.Children.Add(border); border.Bind(Border.BorderBrushProperty, unit, "Player.ColorBrush", BindingMode.OneWay); Canvas.SetLeft(border, unit.X - border.Width / 2); Canvas.SetTop(border, unit.Y - border.Height / 2); Panel.SetZIndex(border, -10); var image = new Image { Source = unit.UnitDef.BuildPic }; // make the icons have the correct size var mission = MainWindow.Instance.Mission; border.RenderTransform = new ScaleTransform { CenterX = 8, CenterY = 8, ScaleX = 1 / 16.0 * mission.FromIngameX(unit.UnitDef.FootprintX * 16), ScaleY = 1 / 16.0 * mission.FromIngameY(unit.UnitDef.FootprintY * 16) }; border.Child = image; }
void PlaceUnitIcon(UnitStartInfo unit) { var unitIcon = new UnitIcon(); unitIcon.DataContext = unit; unitIcon.Bind(Canvas.LeftProperty, unit, "X", BindingMode.OneWay, new TranslateConverter(), -8); unitIcon.Bind(Canvas.TopProperty, unit, "Y", BindingMode.OneWay, new TranslateConverter(), -8); unitIcon.MouseDown += unitIcon_MouseDown; unitIcon.MouseUp += unitIcon_MouseUp; unitIcon.UnitRequestedDelete += unitIcon_UnitRequestedDelete; unitIcon.UnitRequestedSetGroups += unitIcon_UnitRequestedSetGroups; unitIcon.UnitRequestedSetOwner += unitIcon_UnitRequestedSetOwner; unitCanvas.Children.Add(unitIcon); unitIcons.Add(unitIcon); }
void unitCanvas_PreviewMouseUp(object sender, MouseButtonEventArgs e) { if (dragInfo != null) { e.Handled = true; unitCanvas.ReleaseMouseCapture(); dragInfo = null; } if (isBoxSelecting) { // hide and release the box selectionBox.Visibility = Visibility.Collapsed; unitCanvas.ReleaseMouseCapture(); isBoxSelecting = false; Point boxEndPos = e.GetPosition(unitCanvas); double x1 = boxStartPos.X, y1 = boxStartPos.Y, x2 = boxEndPos.X, y2 = boxEndPos.Y; if (x2 < x1) { double temp = x1; x1 = x2; x2 = temp; } if (y2 < y1) { double temp = y1; y1 = y2; y2 = temp; } // clear existing selection if not Shift if (Keyboard.Modifiers != ModifierKeys.Shift && Keyboard.Modifiers != ModifierKeys.Control) { List <UnitIcon> select = unitIcons.Where(i => i.IsSelected).ToList(); foreach (UnitIcon i in select) { i.IsSelected = false; } select = new List <UnitIcon>(); } // add to selection foreach (UnitIcon icon in unitIcons) { Positionable pos = (Positionable)icon.DataContext; if (pos.X >= x1 && pos.X <= x2 && pos.Y >= y1 && pos.Y <= y2) { icon.IsSelected = true; } } } if (unitDefGrid.Grid.SelectedItem != null && DateTime.Now - mouseDownDate < TimeSpan.FromMilliseconds(150) && e.ChangedButton == MouseButton.Left && Keyboard.Modifiers == ModifierKeys.None) { var unitType = (UnitInfo)unitDefGrid.Grid.SelectedItem; var mousePos = e.GetPosition(unitCanvas); var player = (Player)playerListBox.SelectedItem; var unitStartInfo = new UnitStartInfo(unitType, player, SnapToGridX(mousePos.X), SnapToGridY(mousePos.Y)); ((INotifyPropertyChanged)unitStartInfo).PropertyChanged += (se, ea) => // fixme: leak { if (ea.PropertyName == "Groups") { MainWindow.Instance.Mission.RaisePropertyChanged("AllGroups"); } }; action.Units.Add(unitStartInfo); PlaceUnitIcon(unitStartInfo); } }
public UnitEventArgs(UnitStartInfo unitInfo, RoutedEvent routedEvent) : base(routedEvent) { UnitInfo = unitInfo; }