public override void Execute() { var clipboardPath = Tools.GetClipboardPath(plr.User.ID); var data = Tools.LoadWorldData(clipboardPath); using (var writer = WorldSectionData.WriteHeader(clipboardPath, 0, 0, data.Width * _scale, data.Height * _scale)) { var r = new List <ITile>(); // TODO: Decreased scaling for (var i = 0; i < data.Width; i++) { for (var j = 0; j < data.Height; j++) { for (var a = 0; a < _scale; a++) { writer.Write(data.Tiles[i, j]); } r.Add(data.Tiles[i, j]); if (j != data.Height - 1) { continue; } for (var a = 0; a < _scale - 1; a++) { foreach (var t in r) { for (var b = 0; b < _scale; b++) { writer.Write(t); } } } r.Clear(); } } } plr.SendSuccessMessage("Scaled clipboard to {0}x.", _scale); }
public override void Execute() { var clipboardPath = Tools.GetClipboardPath(plr.Account.ID); var data = Tools.LoadWorldData(clipboardPath); BinaryWriter writer = null; switch ((_degrees / 90 % 4 + 4) % 4) { case 0: writer = WorldSectionData.WriteHeader(clipboardPath, 0, 0, data.Width, data.Height); for (var i = 0; i < data.Width; i++) { for (var j = 0; j < data.Height; j++) { writer.Write(data.Tiles[i, j]); } } break; case 1: writer = WorldSectionData.WriteHeader(clipboardPath, 0, 0, data.Height, data.Width); for (var j = data.Height - 1; j >= 0; j--) { for (var i = 0; i < data.Width; i++) { switch (data.Tiles[i, j].slope()) { case 0: break; case 1: data.Tiles[i, j].slope(3); break; case 2: data.Tiles[i, j].slope(1); break; case 3: data.Tiles[i, j].slope(4); break; case 4: data.Tiles[i, j].slope(2); break; } writer.Write(data.Tiles[i, j]); } } break; case 2: writer = WorldSectionData.WriteHeader(clipboardPath, 0, 0, data.Width, data.Height); for (int i = data.Width - 1; i >= 0; i--) { for (int j = data.Height - 1; j >= 0; j--) { switch (data.Tiles[i, j].slope()) { case 0: break; case 1: data.Tiles[i, j].slope(4); break; case 2: data.Tiles[i, j].slope(3); break; case 3: data.Tiles[i, j].slope(2); break; case 4: data.Tiles[i, j].slope(1); break; } writer.Write(data.Tiles[i, j]); } } break; case 3: writer = WorldSectionData.WriteHeader(clipboardPath, 0, 0, data.Height, data.Width); for (int j = 0; j < data.Height; j++) { for (int i = data.Width - 1; i >= 0; i--) { switch (data.Tiles[i, j].slope()) { case 0: break; case 1: data.Tiles[i, j].slope(2); break; case 2: data.Tiles[i, j].slope(4); break; case 3: data.Tiles[i, j].slope(1); break; case 4: data.Tiles[i, j].slope(3); break; } writer.Write(data.Tiles[i, j]); } } break; } writer?.Close(); plr.SendSuccessMessage("Rotated clipboard {0} degrees.", _degrees); }
public override void Execute() { string clipboardPath = Tools.GetClipboardPath(plr.User.ID); var data = Tools.LoadWorldData(clipboardPath); int endX = flipX ? -1 : data.Width; int endY = flipY ? -1 : data.Height; int incX = flipX ? -1 : 1; int incY = flipY ? -1 : 1; using (var writer = WorldSectionData.WriteHeader(clipboardPath, 0, 0, data.Width, data.Height)) { for (int i = flipX ? data.Width - 1 : 0; i != endX; i += incX) { for (int j = flipY ? data.Height - 1 : 0; j != endY; j += incY) { switch (data.Tiles[i, j].slope()) { case 0: break; case 1: if (flipX && flipY) { data.Tiles[i, j].slope(4); } else if (flipX) { data.Tiles[i, j].slope(2); } else if (flipY) { data.Tiles[i, j].slope(3); } break; case 2: if (flipX && flipY) { data.Tiles[i, j].slope(3); } else if (flipX) { data.Tiles[i, j].slope(1); } else if (flipY) { data.Tiles[i, j].slope(4); } break; case 3: if (flipX && flipY) { data.Tiles[i, j].slope(2); } else if (flipX) { data.Tiles[i, j].slope(4); } else if (flipY) { data.Tiles[i, j].slope(1); } break; case 4: if (flipX && flipY) { data.Tiles[i, j].slope(1); } else if (flipX) { data.Tiles[i, j].slope(3); } else if (flipY) { data.Tiles[i, j].slope(2); } break; } writer.Write(data.Tiles[i, j]); } } } plr.SendSuccessMessage("Flipped clipboard."); }
public override void Execute() { var clipboardPath = Tools.GetClipboardPath(plr.Account.ID); var data = Tools.LoadWorldData(clipboardPath); if (_addition) { using (var writer = WorldSectionData.WriteHeader(clipboardPath, 0, 0, data.Width * _scale, data.Height * _scale)) { var r = new List <ITile>(); for (var i = 0; i < data.Width; i++) { for (var j = 0; j < data.Height; j++) { for (var a = 0; a < _scale; a++) { writer.Write(data.Tiles[i, j]); } r.Add(data.Tiles[i, j]); if (j != data.Height - 1) { continue; } for (var a = 0; a < _scale - 1; a++) { foreach (var t in r) { for (var b = 0; b < _scale; b++) { writer.Write(t); } } } r.Clear(); } } } } else { int _x = (data.Width % _scale), _y = (data.Height % _scale); int x = (data.Width / _scale), y = (data.Height / _scale); int width = ((_x == 0) ? x : (x + 1)); int height = ((_y == 0) ? y : (y + 1)); ITile[,] newData = new ITile[width, height]; for (int i1 = 0; i1 < width; i1++) { for (int j1 = 0; j1 < height; j1++) { List <ITile> Square = new List <ITile>(); for (int i2 = 0; i2 < _scale; i2++) { for (int j2 = 0; j2 < _scale; j2++) { Square.Add((((i1 * _scale + i2) < data.Width) && ((j1 * _scale + j2) < data.Height)) ? data.Tiles[(i1 * _scale + i2), (j1 * _scale + j2)] : new Tile()); } } newData[i1, j1] = Square .GroupBy(g => g.type) .OrderByDescending(g => g.Count()) .SelectMany(g => g) .First(); } } using (var writer = WorldSectionData.WriteHeader(clipboardPath, 0, 0, width, height)) { for (var i = 0; i < width; i++) { for (var j = 0; j < height; j++) { writer.Write(newData[i, j]); } } } } plr.SendSuccessMessage("Clipboard {0}creased by {1} times.", (_addition ? "in" : "de"), _scale); }