Ejemplo n.º 1
0
        // 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;
        }
Ejemplo n.º 2
0
        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);
        }
Ejemplo n.º 3
0
        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);
            }
        }
Ejemplo n.º 4
0
 public UnitEventArgs(UnitStartInfo unitInfo, RoutedEvent routedEvent) : base(routedEvent)
 {
     UnitInfo = unitInfo;
 }