コード例 #1
0
        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);
        }
コード例 #2
0
ファイル: Rotate.cs プロジェクト: Xekep/WorldEdit
        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);
        }
コード例 #3
0
ファイル: Flip.cs プロジェクト: qusoulspace/WorldEdit
        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.");
        }
コード例 #4
0
ファイル: Scale.cs プロジェクト: Xekep/WorldEdit
        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);
        }