void SmoothArea(CARuleset ruleset, List <Tile> area) { int[,] tmpMap = new int[map.GetLength(0), map.GetLength(1)]; for (int x = 0; x < columns; x++) { for (int y = 0; y < rows; y++) { tmpMap[x, y] = map[x, y]; } } foreach (Tile c in area) { int neighbourRoomTiles = CheckNeighbourhood(c.tileX, c.tileY, ruleset.neighbourhoodType); if (tmpMap[c.tileX, c.tileY] == 1 && neighbourRoomTiles >= ruleset.newMin && neighbourRoomTiles <= ruleset.newMax) { tmpMap[c.tileX, c.tileY] = 0; } else if (tmpMap[c.tileX, c.tileY] == 0 && neighbourRoomTiles >= ruleset.survMin && neighbourRoomTiles <= ruleset.survMax) { tmpMap[c.tileX, c.tileY] = 0; } else { tmpMap[c.tileX, c.tileY] = 1; } } map = tmpMap; }
void SmoothMap(CARuleset ruleset) { int[,] tmpMap = new int[map.GetLength(0), map.GetLength(1)]; for (int x = 0; x < columns; x++) { for (int y = 0; y < rows; y++) { tmpMap[x, y] = map[x, y]; if (x == 0 || y == 0 || x == columns - 1 || y == rows - 1) { continue; } int neighbourRoomTiles = CheckNeighbourhood(x, y, ruleset.neighbourhoodType); if (tmpMap[x, y] == 1 && neighbourRoomTiles >= ruleset.newMin && neighbourRoomTiles <= ruleset.newMax) { tmpMap[x, y] = 0; } else if (tmpMap[x, y] == 0 && neighbourRoomTiles >= ruleset.survMin && neighbourRoomTiles <= ruleset.survMax) { tmpMap[x, y] = 0; } else { tmpMap[x, y] = 1; } } } map = tmpMap; }
void GenerateMap() { map = new int[columns, rows]; if (useRandomSeed) { seed = Time.time.ToString(); } RandomFillMap(); CARuleset ruleset = new CARuleset(neighbourhoodType, surviveMin, surviveMax, newMin, newMax); for (int i = 0; i < smoothingIterations; i++) { SmoothMap(ruleset); } if (hybridMode) { CARuleset ruleset2 = new CARuleset(neighbourhoodTypeHybrid, surviveMinHybrid, surviveMaxHybrid, newMinHybrid, newMaxHybrid); for (int i = 0; i < smoothingIterationsHybrid; i++) { SmoothMap(ruleset2); } } }
void GenerateArea(List <Tile> area) { RandomFillArea(area); CARuleset ruleset = new CARuleset(neighbourhoodType, surviveMin, surviveMax, newMin, newMax); for (int i = 0; i < smoothingIterations; i++) { SmoothArea(ruleset, area); } if (hybridMode) { CARuleset ruleset2 = new CARuleset(neighbourhoodTypeHybrid, surviveMinHybrid, surviveMaxHybrid, newMinHybrid, newMaxHybrid); for (int i = 0; i < smoothingIterationsHybrid; i++) { SmoothArea(ruleset2, area); } } }
public CASettings(string presetSettings = "default") { seed = "default seed"; useRandomSeed = true; levelWidth = 80; levelHeight = 80; maxRoomSize = 10000; maxWallSize = 10000; enableConnections = true; if (presetSettings == "maze") { wallFill = 60; iterations1 = 6; iterations2 = 4; enableSecondRuleset = true; ruleset1 = new CARuleset(NeighbourhoodType.Moore, 3, 8, 5, 8); ruleset2 = new CARuleset(NeighbourhoodType.Neuman, 1, 4, 3, 3); minRoomSize = 8; minWallSize = 4; useDirectConnections = false; maxLeavingConnections = 5; connectionSizeFactor = 8; maxConnectionLengthX = 8; maxConnectionLengthY = 8; } else if (presetSettings == "severs") { wallFill = 60; iterations1 = 6; iterations2 = 4; enableSecondRuleset = true; ruleset1 = new CARuleset(NeighbourhoodType.Moore, 3, 8, 5, 8); ruleset2 = new CARuleset(NeighbourhoodType.Neuman, 1, 4, 3, 3); minRoomSize = 8; minWallSize = 4; useDirectConnections = false; maxLeavingConnections = 5; connectionSizeFactor = 8; maxConnectionLengthX = 8; maxConnectionLengthY = 8; } else if (presetSettings == "cave") { wallFill = 60; iterations1 = 6; iterations2 = 4; enableSecondRuleset = true; ruleset1 = new CARuleset(NeighbourhoodType.Moore, 3, 8, 5, 8); ruleset2 = new CARuleset(NeighbourhoodType.Neuman, 1, 4, 3, 3); minRoomSize = 8; minWallSize = 4; useDirectConnections = false; maxLeavingConnections = 5; connectionSizeFactor = 8; maxConnectionLengthX = 8; maxConnectionLengthY = 8; } else { wallFill = 60; iterations1 = 6; iterations2 = 4; enableSecondRuleset = true; ruleset1 = new CARuleset(NeighbourhoodType.Moore, 3, 8, 5, 8); ruleset2 = new CARuleset(NeighbourhoodType.Neuman, 1, 4, 3, 3); minRoomSize = 8; minWallSize = 4; useDirectConnections = false; maxLeavingConnections = 5; connectionSizeFactor = 8; maxConnectionLengthX = 8; maxConnectionLengthY = 8; } }