public void CreateErrorPath(IRandom rand, FloorPlan floorPlan) { floorPlan.Clear(); RoomGen <T> room = this.GetDefaultGen(); room.PrepareSize(rand, Loc.One); room.SetLoc(Loc.Zero); floorPlan.AddRoom(room, new ComponentCollection()); }
public override void ApplyToPath(IRandom rand, FloorPlan floorPlan) { for (int ii = 0; ii < 10; ii++) { // always clear before trying floorPlan.Clear(); int tilesToOpen = floorPlan.DrawRect.Area * this.FillPercent.Pick(rand) / 100; if (tilesToOpen < 1) { tilesToOpen = 1; } int addBranch = this.BranchRatio.Pick(rand); int tilesLeft = tilesToOpen; // choose a room IRoomGen room = this.PrepareRoom(rand, floorPlan, false); // place in a random location room.SetLoc(new Loc( rand.Next(floorPlan.DrawRect.Left, floorPlan.DrawRect.Right - room.Draw.Width + 1), rand.Next(floorPlan.DrawRect.Top, floorPlan.DrawRect.Bottom - room.Draw.Height + 1))); floorPlan.AddRoom(room, this.RoomComponents.Clone()); GenContextDebug.DebugProgress("Start Room"); tilesLeft -= room.Draw.Area; // repeat this process until the requisite room amount is met int pendingBranch = 0; while (tilesLeft > 0) { (int area, int rooms)terminalResult = this.ExpandPath(rand, floorPlan, false); (int area, int rooms)branchResult = (0, 0); if (terminalResult.area > 0) { tilesLeft -= terminalResult.area; // add branch PER ROOM when we add over the min threshold for (int jj = 0; jj < terminalResult.rooms; jj++) { if (floorPlan.RoomCount + floorPlan.HallCount - terminalResult.rooms + jj + 1 > 2) { pendingBranch += addBranch; } } } else if (this.NoForcedBranches) { break; } else { pendingBranch = 100; } while (pendingBranch >= 100 && tilesLeft > 0) { branchResult = this.ExpandPath(rand, floorPlan, true); if (branchResult.area == 0) { break; } pendingBranch -= 100; // if we add any more than one room, that also counts as a branchable node pendingBranch += (branchResult.rooms - 1) * addBranch; tilesLeft -= branchResult.area; } if (terminalResult.area == 0 && branchResult.area == 0) { break; } } if (tilesLeft <= 0) { break; } } }