VeeGen.Generators.VGGBSPDungeon.Split C# (CSharp) Method

Split() public method

public Split ( List mAreas, bool mHorizontal, bool mApplySplitOffset ) : List
mAreas List
mHorizontal bool
mApplySplitOffset bool
return List
        public List<VGArea> Split(List<VGArea> mAreas, bool mHorizontal, bool mApplySplitOffset)
        {
            List<VGArea> result = new List<VGArea>();

            foreach (VGArea area in mAreas)
            {
                int splitX;
                splitX = (area.XEnd - area.XStart)/2 > MinimumSplitDistance ? VGUtils.Random.Next(area.XStart + ((area.XEnd - area.XStart)/2) - MinimumSplitDistance, area.XStart + ((area.XEnd - area.XStart)/2) + MinimumSplitDistance) : VGUtils.Random.Next(area.XStart, area.XEnd);

                int splitY;
                splitY = (area.YEnd - area.YStart)/2 > MinimumSplitDistance ? VGUtils.Random.Next(area.YStart + ((area.YEnd - area.YStart)/2) - MinimumSplitDistance, area.YStart + ((area.YEnd - area.YStart)/2) + MinimumSplitDistance) : VGUtils.Random.Next(area.YStart, area.YEnd);

                int offset = 0;
                if (mApplySplitOffset) offset = SplitOffset;

                VGArea split1, split2;

                if (mHorizontal)
                {
                    if ((area.XEnd - SplitOffset) - (area.XStart + SplitOffset) <= SplitOffset) offset = 0;
                    if ((splitY - SplitOffset) - (area.YStart + SplitOffset) <= SplitOffset) offset = 0;
                    if ((splitY + SplitOffset) - (area.YEnd - SplitOffset) <= SplitOffset) offset = 0;

                    split1 = new VGArea(area.World, area.XStart + offset, area.YStart + offset, area.XEnd - offset, splitY - offset);
                    if (area.World.WorldArea.Contains(area.XStart, splitY - 1)) splitY--;
                    split2 = new VGArea(area.World, area.XStart + offset, splitY + offset, area.XEnd - offset, area.YEnd - offset);
                }
                else
                {
                    if ((splitX - offset) - (area.XStart + SplitOffset) <= SplitOffset) offset = 0;
                    if ((area.XEnd - SplitOffset) - (splitX + SplitOffset) <= SplitOffset) offset = 0;
                    if ((area.YEnd - SplitOffset) - (area.YStart + SplitOffset) <= SplitOffset) offset = 0;

                    split1 = new VGArea(area.World, area.XStart + offset, area.YStart + offset, splitX - offset, area.YEnd - offset);
                    if (area.World.WorldArea.Contains(splitX - 1, area.YStart)) splitX--;
                    split2 = new VGArea(area.World, splitX + offset, area.YStart + offset, area.XEnd - offset, area.YEnd - offset);
                }

                result.Add(split1);
                result.Add(split2);
            }

            return result;
        }