public void Move(RegionSelector selector, int count, BlockCoordinates dir) { var selected = new List <BlockCoordinates>(selector.GetSelectedBlocks()); // Save old blocks with new coordinates so we don't overwrite while traverse List <Block> movedBlocks = new List <Block>(); foreach (var coord in selected.ToArray()) { Block block = _level.GetBlock(coord); block.Coordinates += (dir * count); movedBlocks.Add(block); selected.Remove(block.Coordinates); } // Actually move them foreach (var block in movedBlocks) { SetBlock(block); } // Set the left-overs (gap) to air foreach (var coord in selected) { SetBlock(new Air { Coordinates = coord }); } // Move selection too selector.Select(selector.Position1 + (dir * count), selector.Position2 + (dir * count)); }
public void Center(RegionSelector selector, Pattern pattern) { Vector3 centerVec = selector.GetCenter(); BlockCoordinates center = new BlockCoordinates((int)centerVec.X, (int)centerVec.Y, (int)centerVec.Z); RegionSelector centerRegion = new RegionSelector(selector.Player); centerRegion.SelectPrimary(center); centerRegion.SelectSecondary(centerVec); SetBlocks(centerRegion.GetSelectedBlocks(), pattern); }
public void Center(RegionSelector selector, Pattern pattern) { Vector3 centerVec = selector.GetCenter(); BlockCoordinates center = new Vector3((float)Math.Truncate(centerVec.X), (float)Math.Truncate(centerVec.Y), (float)Math.Truncate(centerVec.Z)); RegionSelector centerRegion = new RegionSelector(selector.Player); centerRegion.SelectPrimary(center); centerRegion.SelectSecondary(centerVec); SetBlocks(centerRegion.GetSelectedBlocks(), pattern); }
public void ReplaceBlocks(RegionSelector selector, Mask mask, Pattern pattern) { var selected = selector.GetSelectedBlocks(); foreach (BlockCoordinates coordinates in selected) { if (mask.Test(coordinates)) { SetBlock(coordinates, pattern); } } }
public void Stack(RegionSelector selector, int count, BlockCoordinates dir, bool skipAir, bool moveSelection) { BlockCoordinates size = selector.GetMax() - selector.GetMin() + BlockCoordinates.One; var selected = new List <BlockCoordinates>(selector.GetSelectedBlocks()); // Save old blocks with new coordinates so we don't overwrite while traverse List <Block> movedBlocks = new List <Block>(); for (int i = 1; i <= count; i++) { foreach (var coord in selected.ToArray()) { Block block = _level.GetBlock(coord); block.Coordinates += (dir * size * i); movedBlocks.Add(block); } } // Actually stack them foreach (var block in movedBlocks) { if (skipAir && block is Air) { continue; } SetBlock(block); } // Move selection too last stack if (moveSelection) { selector.Select(selector.Position1 + (dir * size * count), selector.Position2 + (dir * size * count)); } }
public void SetBlocks(RegionSelector selector, Pattern pattern) { SetBlocks(selector.GetSelectedBlocks(), pattern); }