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); }
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); }
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); }