private void TilesetTool() { if (tilesetMode == TilesetModes.Pencil) { if (LeftMouseKeyDown) { if (!tilesetDragStarted) { memTiles = (EditorHandler.SelectedGameObjects[0] as Tileset).DeepCopy(); } (EditorHandler.SelectedGameObjects[0] as Tileset).PlaceTiles(EditorHandler.TilesetBrushControl.CurrentSelectionXNA, SnapToTilesetGrid(mouseWorldPosition)); tilesetDragStarted = true; } else { if (tilesetDragStarted) { TilesetCommand tc = new TilesetCommand((EditorHandler.SelectedGameObjects[0] as Tileset).Tiles, memTiles, (EditorHandler.SelectedGameObjects[0] as Tileset)); EditorHandler.UnDoRedo.InsertUndoRedo(tc); tilesetDragStarted = false; } } } else if (tilesetMode == TilesetModes.Rectangle) { if (LeftMouseKeyDown) { if (tilesetDragStarted) { Vector2 releasePos = SnapToTilesetGrid(mouseWorldPosition); tilesetSelectedArea = MathExtension.RectangleFromVectors(tilesetMouseDownPos, releasePos); tilesetSelectedArea = new Rectangle() { X = tilesetSelectedArea.X, Y = tilesetSelectedArea.Y, Width = tilesetSelectedArea.Width + (EditorHandler.SelectedGameObjects[0] as Tileset).TileWidth, Height = tilesetSelectedArea.Height + (EditorHandler.SelectedGameObjects[0] as Tileset).TileHeight }; } else { tilesetDragStarted = true; tilesetMouseDownPos = SnapToTilesetGrid(mouseWorldPosition); } } else { if (tilesetDragStarted) { if (EditorHandler.TilesetBrushControl.CurrentSelectionXNA != Rectangle.Empty) { Tile[,] _tiles = (EditorHandler.SelectedGameObjects[0] as Tileset).DeepCopy(); (EditorHandler.SelectedGameObjects[0] as Tileset).PlaceTiles(EditorHandler.TilesetBrushControl.CurrentSelectionXNA, tilesetSelectedArea); TilesetCommand tc = new TilesetCommand((EditorHandler.SelectedGameObjects[0] as Tileset).Tiles, _tiles, (EditorHandler.SelectedGameObjects[0] as Tileset)); EditorHandler.UnDoRedo.InsertUndoRedo(tc); } } tilesetSelectedArea = Rectangle.Empty; tilesetDragStarted = false; } } else if (tilesetMode == TilesetModes.Eraser) { if (LeftMouseKeyDown) { if (tilesetDragStarted) { Vector2 releasePos = SnapToTilesetGrid(mouseWorldPosition); tilesetSelectedArea = MathExtension.RectangleFromVectors(tilesetMouseDownPos, releasePos); tilesetSelectedArea = new Rectangle() { X = tilesetSelectedArea.X, Y = tilesetSelectedArea.Y, Width = tilesetSelectedArea.Width + (EditorHandler.SelectedGameObjects[0] as Tileset).TileWidth, Height = tilesetSelectedArea.Height + (EditorHandler.SelectedGameObjects[0] as Tileset).TileHeight }; } else { tilesetDragStarted = true; tilesetMouseDownPos = SnapToTilesetGrid(mouseWorldPosition); } } else { if (tilesetDragStarted) { Tile[,] _tiles = (EditorHandler.SelectedGameObjects[0] as Tileset).DeepCopy(); (EditorHandler.SelectedGameObjects[0] as Tileset).RemoveTiles(tilesetSelectedArea); TilesetCommand tc = new TilesetCommand((EditorHandler.SelectedGameObjects[0] as Tileset).Tiles, _tiles, (EditorHandler.SelectedGameObjects[0] as Tileset)); EditorHandler.UnDoRedo.InsertUndoRedo(tc); } tilesetSelectedArea = Rectangle.Empty; tilesetDragStarted = false; } } else if (tilesetMode == TilesetModes.AddColumn) { if (LeftMouseKeyPressed) { Tile[,] _tiles = (EditorHandler.SelectedGameObjects[0] as Tileset).DeepCopy(); (EditorHandler.SelectedGameObjects[0] as Tileset).AddColumn((int)mouseWorldPosition.X); TilesetCommand tc = new TilesetCommand((EditorHandler.SelectedGameObjects[0] as Tileset).Tiles, _tiles, (EditorHandler.SelectedGameObjects[0] as Tileset)); EditorHandler.UnDoRedo.InsertUndoRedo(tc); } } else if (tilesetMode == TilesetModes.AddRow) { if (LeftMouseKeyPressed) { Tile[,] _tiles = (EditorHandler.SelectedGameObjects[0] as Tileset).DeepCopy(); (EditorHandler.SelectedGameObjects[0] as Tileset).AddRow((int)mouseWorldPosition.Y); TilesetCommand tc = new TilesetCommand((EditorHandler.SelectedGameObjects[0] as Tileset).Tiles, _tiles, (EditorHandler.SelectedGameObjects[0] as Tileset)); EditorHandler.UnDoRedo.InsertUndoRedo(tc); } } else if (tilesetMode == TilesetModes.RemoveColumn) { if (LeftMouseKeyPressed) { Tile[,] _tiles = (EditorHandler.SelectedGameObjects[0] as Tileset).DeepCopy(); (EditorHandler.SelectedGameObjects[0] as Tileset).RemoveColumn((int)mouseWorldPosition.X); TilesetCommand tc = new TilesetCommand((EditorHandler.SelectedGameObjects[0] as Tileset).Tiles, _tiles, (EditorHandler.SelectedGameObjects[0] as Tileset)); EditorHandler.UnDoRedo.InsertUndoRedo(tc); } } else if (tilesetMode == TilesetModes.RemoveRow) { if (LeftMouseKeyPressed) { Tile[,] _tiles = (EditorHandler.SelectedGameObjects[0] as Tileset).DeepCopy(); (EditorHandler.SelectedGameObjects[0] as Tileset).RemoveRow((int)mouseWorldPosition.Y); TilesetCommand tc = new TilesetCommand((EditorHandler.SelectedGameObjects[0] as Tileset).Tiles, _tiles, (EditorHandler.SelectedGameObjects[0] as Tileset)); EditorHandler.UnDoRedo.InsertUndoRedo(tc); } } }
private void shiftDownTileset_Click(object sender, RoutedEventArgs e) { if (EditorHandler.SelectedGameObjects.Count == 0 || !(EditorHandler.SelectedGameObjects[0] is Tileset)) return; Tile[,] _tiles = (EditorHandler.SelectedGameObjects[0] as Tileset).DeepCopy(); (EditorHandler.SelectedGameObjects[0] as Tileset).ShiftDown(1); TilesetCommand tc = new TilesetCommand((EditorHandler.SelectedGameObjects[0] as Tileset).Tiles, _tiles, (EditorHandler.SelectedGameObjects[0] as Tileset)); EditorHandler.UnDoRedo.InsertUndoRedo(tc); }