コード例 #1
0
        public List <Point> GetPoints()
        {
            var jeBlocknames = BlockNameLoopup.BlockNames();
            var beBlocknames = BlockNameLoopup.BlockNamesBE();
            var blocknames   = BlockNameLoopup.Lookup();
            var output       = new List <Point>();

            for (var x = 0; x < Width; x++)
            {
                for (var y = 0; y < Height; y++)
                {
                    for (var z = 0; z < Length; z++)
                    {
                        var index       = x + (y * Length + z) * Width;
                        var blockID     = Blocks[index]; //& 0xFF;
                        var meta        = Data[index] & 0xFF;
                        var blockLookup = BlockLookup(blocknames, beBlocknames, blockID);
                        //var blockName = jeBlocknames.Length>blockID? jeBlocknames[blockID]:"stone";
                        output.Add(new Point
                        {
                            BlockName = blockLookup.Name,
                            BlockId   = blockID,
                            Data      = blockLookup.BeData > 0 ? blockLookup.BeData : meta,
                            X         = x,
                            Y         = y,
                            Z         = z,
                            SortOrder = blockLookup.SortOrder
                        });
                    }
                }
            }

            return(output);
        }
コード例 #2
0
        public List <Point> GetPoints()
        {
            var jeBlocknames = BlockNameLoopup.BlockNames();
            var beBlocknames = BlockNameLoopup.BlockNamesBE();
            var blocknames   = BlockNameLoopup.Lookup();
            var output       = new List <Point>();

            //foreach (var x1 in Blocks.GroupBy(a => a & 0xFF).Select(a => new {BlockId = a.Key, Count = a.Count()})
            //    .OrderByDescending(a => a.Count))
            //    Console.WriteLine($"{x1.BlockId} {x1.Count}");

            for (var x = 0; x < Width; x++)
            {
                for (var y = 0; y < Height; y++)
                {
                    for (var z = 0; z < Length; z++)
                    {
                        var index     = x + (y * Length + z) * Width;
                        var blockID   = Blocks[index];//& 0xFF;
                        var meta      = Data[index] & 0xFF;
                        var blockName = blocknames.Where(a => a.Id == blockID).DefaultIfEmpty(new BlockLookup()
                        {
                            Name = "air"
                        }).FirstOrDefault();
                        //var blockName = jeBlocknames.Length>blockID? jeBlocknames[blockID]:"stone";
                        output.Add(new Point
                        {
                            BlockName = blockName.Name,
                            BlockId   = blockID,
                            Data      = blockName.BeData > 0? blockName.BeData:  meta,
                            X         = x,
                            Y         = y,
                            Z         = z
                        });
                    }
                }
            }

            return(output);
        }
コード例 #3
0
        public Point Rotate(Rotate rotation)
        {
            var rotatedPoint = Clone();
            var radians      = ConvertToRadians((double)rotation);

            rotatedPoint.Z = (int)Math.Round(Z * Math.Cos(radians) - X * Math.Sin(radians), 0);
            rotatedPoint.X = (int)Math.Round(Z * Math.Sin(radians) + X * Math.Cos(radians), 0);

            var block = BlockNameLoopup.Lookup().Where(a => a.Name == BlockName).FirstOrDefault();

            if (block != null && block.HasDirection)
            {
                var rotationOrder = (new[] { 2, 0, 3, 1 }).ToList(); //(new[] { 0, 2, 1, 3 }).ToList();
                var current       = rotatedPoint.Data & 3;
                var extra         = rotatedPoint.Data & 252;
                var currentIndex  = rotationOrder.FindIndex(a => a == current);
                var rotationsteps = ((int)rotation) / 90;
                var newrotation   = (currentIndex + rotationsteps) % 4;
                var newData       = rotationOrder[newrotation];
                rotatedPoint.Data = newData | extra;
            }

            return(rotatedPoint);
        }