public void Import(string filename, bool isFalseColor = false) { ClipboardBuffer buffer = null; try { if (isFalseColor && string.Equals(".png", Path.GetExtension(filename), StringComparison.InvariantCultureIgnoreCase)) { buffer = ClipboardBuffer.LoadFalseColor(filename); } else { buffer = ClipboardBuffer.Load(filename); } } catch (Exception ex) { MessageBox.Show(ex.Message, "Schematic File Error", MessageBoxButton.OK, MessageBoxImage.Error); } if (buffer != null) { buffer.RenderBuffer(); LoadedBuffers.Add(buffer); } }
public ClipboardBuffer GetSelectionBuffer() { World world = _wvm.CurrentWorld; XNA.Rectangle area = _wvm.Selection.SelectionArea; var buffer = new ClipboardBuffer(new Vector2Int32(area.Width, area.Height)); for (int x = 0; x < area.Width; x++) { for (int y = 0; y < area.Height; y++) { Tile curTile = (Tile)world.Tiles[x + area.X, y + area.Y].Clone(); if (curTile.Type == 21) // 21 Chest , 55 sign { if (buffer.GetChestAtTile(x, y) == null) { var data = world.GetChestAtTile(x + area.X, y + area.Y); if (data != null) { var newChest = data.Copy(); newChest.X = x; newChest.Y = y; buffer.Chests.Add(newChest); } } } if (curTile.Type == 55 || curTile.Type == 85) // 21 Chest , 55 sign { if (buffer.GetSignAtTile(x, y) == null) { var data = world.GetSignAtTile(x + area.X, y + area.Y); if (data != null) { var newSign = data.Copy(); newSign.X = x; newSign.Y = y; buffer.Signs.Add(newSign); } } } buffer.Tiles[x, y] = curTile; } } buffer.RenderBuffer(); return(buffer); }
public void Import(string filename) { ClipboardBuffer buffer = null; try { buffer = ClipboardBuffer.Load(filename); } catch (Exception ex) { MessageBox.Show(ex.Message, "Schematic File Error", MessageBoxButton.OK, MessageBoxImage.Error); } if (buffer != null) { buffer.RenderBuffer(); LoadedBuffers.Add(buffer); } }
// Reverse the buffer along the x- or y- axis public void Flip(ClipboardBuffer buffer, bool flipX) { ClipboardBuffer flippedBuffer = new ClipboardBuffer(buffer.Size); for (int x = 0, maxX = buffer.Size.X - 1; x <= maxX; x++) { for (int y = 0, maxY = buffer.Size.Y - 1; y <= maxY; y++) { int bufferX; int bufferY; if (flipX) { bufferX = maxX - x; bufferY = y; } else { bufferX = x; bufferY = maxY - y; } Tile tile = (Tile)buffer.Tiles[x, y].Clone(); Vector2Short tileSize = World.TileProperties[tile.Type].FrameSize; if (flipX) { // Ignore multi-width objects when flipping on x-axis if (tileSize.X > 1) ClearTile(tile); } // Ignore multi-height tiles when flipping on y-axis else if (tileSize.Y > 1) { ClearTile(tile); } flippedBuffer.Tiles[bufferX, bufferY] = (Tile)tile; } } // Replace the existing buffer with the new one int bufferIndex = LoadedBuffers.IndexOf(buffer); if (bufferIndex > -1) { LoadedBuffers.Insert(bufferIndex, flippedBuffer); LoadedBuffers.RemoveAt(bufferIndex + 1); } flippedBuffer.RenderBuffer(); if (Buffer == buffer) { Buffer = flippedBuffer; _wvm.PreviewChange(); } }
public ClipboardBuffer GetSelectionBuffer() { World world = _wvm.CurrentWorld; XNA.Rectangle area = _wvm.Selection.SelectionArea; var buffer = new ClipboardBuffer(new Vector2Int32(area.Width, area.Height)); for (int x = 0; x < area.Width; x++) { for (int y = 0; y < area.Height; y++) { Tile curTile = (Tile)world.Tiles[x + area.X, y + area.Y].Clone(); if (curTile.Type == 21) // 21 Chest , 55 sign { if (buffer.GetChestAtTile(x, y) == null) { var data = world.GetChestAtTile(x + area.X, y + area.Y); if (data != null) { var newChest = data.Copy(); newChest.X = x; newChest.Y = y; buffer.Chests.Add(newChest); } } } if (curTile.Type == 55 || curTile.Type == 85) // 21 Chest , 55 sign { if (buffer.GetSignAtTile(x, y) == null) { var data = world.GetSignAtTile(x + area.X, y + area.Y); if (data != null) { var newSign = data.Copy(); newSign.X = x; newSign.Y = y; buffer.Signs.Add(newSign); } } } buffer.Tiles[x, y] = curTile; } } buffer.RenderBuffer(); return buffer; }
// Reverse the buffer along the x- or y- axis public void Flip(ClipboardBuffer buffer, bool flipX) { ClipboardBuffer flippedBuffer = new ClipboardBuffer(buffer.Size); for (int x = 0, maxX = buffer.Size.X - 1; x <= maxX; x++) { for (int y = 0, maxY = buffer.Size.Y - 1; y <= maxY; y++) { int bufferX; int bufferY; if (flipX) { bufferX = maxX - x; bufferY = y; } else { bufferX = x; bufferY = maxY - y; } Tile tile = (Tile)buffer.Tiles[x, y].Clone(); Vector2Short tileSize = World.TileProperties[tile.Type].FrameSize; if (flipX) { // Ignore multi-width objects when flipping on x-axis if (tileSize.X > 1) { ClearTile(tile); } } // Ignore multi-height tiles when flipping on y-axis else if (tileSize.Y > 1) { ClearTile(tile); } flippedBuffer.Tiles[bufferX, bufferY] = (Tile)tile; } } // Replace the existing buffer with the new one int bufferIndex = LoadedBuffers.IndexOf(buffer); if (bufferIndex > -1) { LoadedBuffers.Insert(bufferIndex, flippedBuffer); LoadedBuffers.RemoveAt(bufferIndex + 1); } flippedBuffer.RenderBuffer(); if (Buffer == buffer) { Buffer = flippedBuffer; _wvm.PreviewChange(); } }
public ClipboardBuffer GetSelectionBuffer() { World world = _wvm.CurrentWorld; XNA.Rectangle area = _wvm.Selection.SelectionArea; var buffer = new ClipboardBuffer(new Vector2Int32(area.Width, area.Height)); for (int x = 0; x < area.Width; x++) { for (int y = 0; y < area.Height; y++) { Tile curTile = (Tile)world.Tiles[x + area.X, y + area.Y].Clone(); if (Tile.IsChest(curTile.Type)) { if (buffer.GetChestAtTile(x, y, curTile.Type) == null) { var anchor = world.GetAnchor(x + area.X, y + area.Y); if (anchor.X == x + area.X && anchor.Y == y + area.Y) { var data = world.GetChestAtTile(x + area.X, y + area.Y); if (data != null) { var newChest = data.Copy(); newChest.X = x; newChest.Y = y; buffer.Chests.Add(newChest); } } } } if (Tile.IsSign(curTile.Type)) { if (buffer.GetSignAtTile(x, y) == null) { var anchor = world.GetAnchor(x + area.X, y + area.Y); if (anchor.X == x + area.X && anchor.Y == y + area.Y) { var data = world.GetSignAtTile(x + area.X, y + area.Y); if (data != null) { var newSign = data.Copy(); newSign.X = x; newSign.Y = y; buffer.Signs.Add(newSign); } } } } if (Tile.IsTileEntity(curTile.Type)) { if (buffer.GetTileEntityAtTile(x, y) == null) { var anchor = world.GetAnchor(x + area.X, y + area.Y); if (anchor.X == x + area.X && anchor.Y == y + area.Y) { var data = world.GetTileEntityAtTile(x + area.X, y + area.Y); if (data != null) { var newEntity = data.Copy(); newEntity.PosX = (short)x; newEntity.PosY = (short)y; buffer.TileEntities.Add(newEntity); } } } } buffer.Tiles[x, y] = curTile; } } buffer.RenderBuffer(); return(buffer); }
public ClipboardBuffer GetSelectionBuffer() { World world = _wvm.CurrentWorld; XNA.Rectangle area = _wvm.Selection.SelectionArea; var buffer = new ClipboardBuffer(new Vector2Int32(area.Width, area.Height)); for (int x = 0; x < area.Width; x++) { for (int y = 0; y < area.Height; y++) { Tile curTile = (Tile)world.Tiles[x + area.X, y + area.Y].Clone(); if (Tile.IsChest(curTile.Type)) { if (buffer.GetChestAtTile(x, y, curTile.Type) == null) { var anchor = world.GetAnchor(x + area.X, y + area.Y); if (anchor.X == x + area.X && anchor.Y == y + area.Y) { var data = world.GetChestAtTile(x + area.X, y + area.Y); if (data != null) { var newChest = data.Copy(); newChest.X = x; newChest.Y = y; buffer.Chests.Add(newChest); } } } } if (Tile.IsSign(curTile.Type)) { if (buffer.GetSignAtTile(x, y) == null) { var anchor = world.GetAnchor(x + area.X, y + area.Y); if (anchor.X == x + area.X && anchor.Y == y + area.Y) { var data = world.GetSignAtTile(x + area.X, y + area.Y); if (data != null) { var newSign = data.Copy(); newSign.X = x; newSign.Y = y; buffer.Signs.Add(newSign); } } } } if (Tile.IsTileEntity(curTile.Type)) { if (buffer.GetTileEntityAtTile(x, y) == null) { var anchor = world.GetAnchor(x + area.X, y + area.Y); if (anchor.X == x + area.X && anchor.Y == y + area.Y) { var data = world.GetTileEntityAtTile(x + area.X, y + area.Y); if (data != null) { var newEntity = data.Copy(); newEntity.PosX = (short)x; newEntity.PosY = (short)y; buffer.TileEntities.Add(newEntity); } } } } buffer.Tiles[x, y] = curTile; } } buffer.RenderBuffer(); return buffer; }