// добавление блока(контрол в окне) public void AddBlockImage(int x, int y) { ColumnDefinition gridCol = new ColumnDefinition(); gridCol.Width = new GridLength(x * 32 + space, GridUnitType.Pixel); BlocksGrid.ColumnDefinitions.Add(gridCol); gridCols.Add(gridCol); Blocks_Image bi = new Blocks_Image(); bi.Init(x * 32, y * 32); Grid.SetRow(bi, 0); Grid.SetColumn(bi, blocksList.Count); bi.HorizontalAlignment = System.Windows.HorizontalAlignment.Left; bi.VerticalAlignment = System.Windows.VerticalAlignment.Top; //bi.Margin = new Thickness(0.5); bi.MouseUp += block_image_MouseUp; blocksList.Add(bi); BlocksGrid.Children.Insert(0, bi); }
public int lastBlock_image = -1; // последний выбраный блок-контрол в окне private void block_image_MouseUp(object sender, MouseButtonEventArgs e) { //int w = 0; Blocks_Image bi = null; if (sender.GetType() == typeof(Blocks_Image)) { bi = (Blocks_Image)sender; } else { bi = blocksList[Grid.GetColumn(rectangle_cursor)]; } int i = -1; for (i = 0; i < gridCols.Count; i++) // поиск блока-картинки { if (bi == blocksList[i]) { break; } } Gl.palette.Is_block_selected = true; int index = (int)BlockSlider.Value + i; if (lastBlock != index || Gl.palette.Is_block_selected == false) { //blocksList[i].MouseEnter -= block_MouseEnter; //blocksList[i].MouseLeave -= block_MouseLeave; reset_block_mouse_event(); lastBlock_image = i; lastBlock = index; Grid.SetColumn(rectangle_select, i); Grid.SetColumn(rectangle_cursor, i); //blocksList[i].MouseEnter += block_MouseEnter; //blocksList[i].MouseLeave += block_MouseLeave; blocksList[i].MouseMove += block_MouseMove; rectangle_select.Width = widths[index] * 32; rectangle_select.Height = heights[index] * 32; rectangle_select.Visibility = System.Windows.Visibility.Visible; rectangle_cursor.Visibility = System.Windows.Visibility.Visible; UpdateBlockInMain(); updateLabelInfo(); //Gl.main.cursor_Block.ChangeBlock(bitmaps[index]); //Gl.palette.Is_block_selected = true; //Gl.palette.selected_block = index; //Gl.palette.block_width = widths[index]; //Gl.palette.block_height = heights[index]; // //Gl.main.CursorsUpdate(); //Gl.main.selectedInfoUpdate(); } else { Point p = Mouse.GetPosition(bi);//MouseUtilities.CorrectGetPosition(canvas_Map); int mx = (int)p.X; int my = (int)p.Y; int x = mx / 32; int y = my / 32; if (x < widths[index] && y < heights[index]) { if (e.ChangedButton == MouseButton.Left) { // установить тайл if (Gl.palette.selected_sprite != -1) { setTileToBlock(x, y, lastBlock, Gl.palette.selected_sprite, true); blocksList[i].ChangeBlock(bitmaps[index]); Gl.main.cursor_Block.ChangeBlock(bitmaps[index]); } } else if (e.ChangedButton == MouseButton.Right) { // удалить тайл setTileToBlock(x, y, lastBlock, -1, true); blocksList[i].ChangeBlock(bitmaps[index]); Gl.main.cursor_Block.ChangeBlock(bitmaps[index]); } else if (e.ChangedButton == MouseButton.Middle) { // пипетка Scena scn = Gl.curr_scena; int tmp_ind = scn.blocks[lastBlock][x, y].SpriteId; if (tmp_ind != -1) { Gl.palette.selected_tile = Gl.curr_scena.spriteSet[tmp_ind].TileId; Gl.palette.selected_sprite = tmp_ind; Gl.palette.UpdateGroundSelector(Gl.palette.selected_tile % 8, Gl.palette.selected_tile / 8); Gl.palette.Is_block_selected = false; Gl.main.CursorsUpdate(); Gl.main.selectedInfoUpdate(); } // Окно тайлов. Gl.tiles_window.SelectedTile = Gl.palette.selected_tile; Gl.tiles_window.SelectedSprite = Gl.palette.selected_sprite; Gl.tiles_window.FullUpdate(); } } } }