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