Esempio n. 1
0
        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));
        }
Esempio n. 2
0
        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);
        }
Esempio n. 3
0
        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);
        }
Esempio n. 4
0
        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);
                }
            }
        }
Esempio n. 5
0
        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));
            }
        }
Esempio n. 6
0
 public void SetBlocks(RegionSelector selector, Pattern pattern)
 {
     SetBlocks(selector.GetSelectedBlocks(), pattern);
 }