public override void Generate(VGArea mArea) { // Create a clone of the world's map VGArea areaClone = mArea.Clone(); // Set all solids to walls for (int iY = 0; iY < areaClone.Height; iY++) { for (int iX = 0; iX < areaClone.Width; iX++) { if (areaClone[iX, iY].Value == ValueSolid) { mArea[iX, iY].Set(ValueWall); } } } // Create a clone of the world's map areaClone = mArea.Clone(); // Sets all walls with 9 wall neighbors to solid for (int iY = 0; iY < areaClone.Height; iY++) { for (int iX = 0; iX < areaClone.Width; iX++) { if (areaClone.GetTileNeighborsCountByValue(iX, iY, ValueWall) > 8) { mArea[iX, iY].Set(ValueSolid); } } } }
public override void Generate(VGArea mArea) { // Create a clone of the world's map VGArea areaClone = mArea.Clone(); // Set all solids to walls for (int iY = 0; iY < areaClone.Height; iY++) for (int iX = 0; iX < areaClone.Width; iX++) if (areaClone[iX, iY].Value == ValueSolid) mArea[iX, iY].Set(ValueWall); // Create a clone of the world's map areaClone = mArea.Clone(); // Sets all walls with 9 wall neighbors to solid for (int iY = 0; iY < areaClone.Height; iY++) for (int iX = 0; iX < areaClone.Width; iX++) if (areaClone.GetTileNeighborsCountByValue(iX, iY, ValueWall) > 8) mArea[iX, iY].Set(ValueSolid); }
public override void Generate(VGArea mArea) { // Randomly put solid tiles in the world int solidTilesAmount = (mArea.Width * mArea.Height) / 100 * InitialSolidPercent; for (int i = 0; i < solidTilesAmount; i++) { mArea.GetRandomTile().Set(ValueSolid); } // Iterate generation for (int iteration = 0; iteration < Iterations; iteration++) { // Create a clone of the world's map VGArea areaClone = mArea.Clone(); // Cellar automata rule 4-5 for (int iY = 0; iY < areaClone.Height; iY++) { for (int iX = 0; iX < areaClone.Width; iX++) { if (areaClone.GetTileNeighborsCountByValue(iX, iY, 1, ValueSolid) <= RequiredSolidToStarve) { mArea[iX, iY].Set(ValuePassable); } else if (areaClone.GetTileNeighborsCountByValue(iX, iY, 1, ValueSolid) >= RequiredSolidToSolidify) { mArea[iX, iY].Set(ValueSolid); } } } } }
public override void Generate(VGArea mArea) { FinalAreas.Add(mArea.Clone()); for (int i = 0; i < Splits; i++) { FinalAreas = Split(FinalAreas, i % 2 == 0, i == Splits - 1); } List <VGArea> toRemove = FinalAreas.Where(t => VGUtils.GetRandomInt(0, 100) <= RemoveChancePercent).ToList(); foreach (VGArea area in toRemove) { FinalAreas.Remove(area); } if (IsBorder) { foreach (VGArea area in FinalAreas) { foreach (VGTile tile in area.GetBorderTiles()) { tile.Set(ValueSolid, false); } } } if (IsCarved) { foreach (VGArea area in FinalAreas) { for (int iY = 1 + CarveOffset; iY < area.Height - 1 - CarveOffset; iY++) { for (int iX = 1 + CarveOffset; iX < area.Width - 1 - CarveOffset; iX++) { area[iX, iY].Set(ValueRoom); } } } } if (IsConnected) { for (int index = 0; index < FinalAreas.Count - 1; index++) { Connect(FinalAreas[index], FinalAreas[index + 1]); } } mArea.SetBorder(1); }
public override void Generate(VGArea mArea) { // Randomly put solid tiles in the world int solidTilesAmount = (mArea.Width*mArea.Height)/100*InitialSolidPercent; for (int i = 0; i < solidTilesAmount; i++) mArea.GetRandomTile().Set(ValueSolid); // Iterate generation for (int iteration = 0; iteration < Iterations; iteration++) { // Create a clone of the world's map VGArea areaClone = mArea.Clone(); // Cellar automata rule 4-5 for (int iY = 0; iY < areaClone.Height; iY++) { for (int iX = 0; iX < areaClone.Width; iX++) { if (areaClone.GetTileNeighborsCountByValue(iX, iY, 1, ValueSolid) <= RequiredSolidToStarve) mArea[iX, iY].Set(ValuePassable); else if (areaClone.GetTileNeighborsCountByValue(iX, iY, 1, ValueSolid) >= RequiredSolidToSolidify) mArea[iX, iY].Set(ValueSolid); } } } }
public override void Generate(VGArea mArea) { FinalAreas.Add(mArea.Clone()); for (int i = 0; i < Splits; i++) FinalAreas = Split(FinalAreas, i%2 == 0, i == Splits - 1); List<VGArea> toRemove = FinalAreas.Where(t => VGUtils.GetRandomInt(0, 100) <= RemoveChancePercent).ToList(); foreach (VGArea area in toRemove) FinalAreas.Remove(area); if (IsBorder) foreach (VGArea area in FinalAreas) foreach(VGTile tile in area.GetBorderTiles()) tile.Set(ValueSolid, false); if (IsCarved) foreach (VGArea area in FinalAreas) for (int iY = 1 + CarveOffset; iY < area.Height - 1 - CarveOffset; iY++) for (int iX = 1 + CarveOffset; iX < area.Width - 1 - CarveOffset; iX++) area[iX, iY].Set(ValueRoom); if (IsConnected) for (int index = 0; index < FinalAreas.Count - 1; index++) Connect(FinalAreas[index], FinalAreas[index + 1]); mArea.SetBorder(1); }