/// <summary> /// Adds a Room to the Services list. /// </summary> /// <param name="room">Room to add.</param> /// <param name="fit">Indicates whether the new Room should mutually fit to other Story features. Default is true.</param> /// <returns> /// True if one or more Rooms were added to the Story. /// </returns> public bool AddService(Room room, bool fit = true) { if (Perimeter == null || room.Perimeter == null || !Perimeter.Covers(perimeter)) { return(false); } var newRoom = new Room() { Color = room.Color, Elevation = Elevation, Height = Height, Name = room.Name, Perimeter = room.Perimeter }; var fitRooms = new List <Room> { newRoom }; if (fit) { var toRooms = new List <Room>(Exclusions); fitRooms = FitRooms(fitRooms, toRooms); toRooms.AddRange(fitRooms); Corridors = FitRooms(Corridors, toRooms); toRooms.AddRange(Corridors); Rooms = FitRooms(Rooms, toRooms); } if (fitRooms.Count == 0) { return(false); } Services.AddRange(fitRooms); return(true); }
/// <summary> /// Adds a Room to the Exclusions list. /// </summary> /// <param name="room">Room to add.</param> /// <param name="fit">Indicates whether the new room should mutually fit to other Story features. Default is true.</param> /// <returns> /// True if one or more rooms were added to the Story. /// </returns> public bool AddExclusion(Room room, bool fit = true) { if (Perimeter == null || room.Perimeter == null || !Perimeter.Covers(perimeter)) { return(false); } var newRoom = new Room() { Elevation = Elevation, Name = room.Name, Perimeter = room.Perimeter }; var toRooms = new List <Room> { newRoom }; if (fit) { Services = FitRooms(Services, toRooms); toRooms.AddRange(Services); Corridors = FitRooms(Corridors, toRooms); toRooms.AddRange(Corridors); Rooms = FitRooms(Rooms, toRooms); } Exclusions.Add(newRoom); return(true); }
/// <summary> /// Adds a Room to the Exclusions list. /// </summary> /// <param name="room">Room to add.</param> /// <param name="fit">Indicates whether the new room should mutually fit to other Story features. Default is true.</param> /// <returns> /// True if one or more rooms were added to the Story. /// </returns> public bool AddExclusion(Room room, bool fit = true) { if (Perimeter == null || room.Perimeter == null) { throw new ArgumentNullException(Messages.PERIMETER_NULL_EXCEPTION); } if (!Perimeter.Covers(perimeter)) { throw new ArgumentNullException(Messages.PERIMETER_PLACEMENT_EXCEPTION); } var newRoom = new Room() { Elevation = Elevation, Name = room.Name, Perimeter = room.Perimeter }; var toRooms = new List <Room> { newRoom }; if (fit) { Services = FitRooms(Services, toRooms); toRooms.AddRange(Services); Corridors = FitRooms(Corridors, toRooms); toRooms.AddRange(Corridors); Rooms = FitRooms(Rooms, toRooms); } Exclusions.Add(newRoom); return(true); }
/// <summary> /// Adds a Room to the Corridors list. /// </summary> /// <param name="room">Room to add.</param> /// <param name="fit">Indicates whether the new corridor should mutually fit to other Story features.</param> /// <param name="merge">Indicates whether the new corridor should merge with other corridors.</param> /// <returns> /// True if one or more rooms were added to the Story. /// </returns> public bool AddCorridor(Room room, bool fit = true, bool merge = true) { if (Perimeter == null || room.Perimeter == null || !Perimeter.Covers(perimeter)) { return(false); } var newRoom = new Room() { Color = room.Color, Elevation = Elevation, Height = room.Height, Name = room.Name, Perimeter = room.Perimeter }; var fitRooms = new List <Room> { newRoom }; if (fit) { var toRooms = new List <Room>(Exclusions); toRooms.AddRange(Services); fitRooms = FitRooms(fitRooms, toRooms, false); Rooms = FitRooms(Rooms, fitRooms); } if (fitRooms.Count == 0) { return(false); } Corridors.AddRange(fitRooms); var merged = Shaper.Merge(CorridorsAsPolygons); if (merge && merged.Count < Corridors.Count) { Corridors.Clear(); foreach (var corridor in merged) { Corridors.Add( new Room() { Color = room.Color, Elevation = Elevation, Height = room.Height, Name = room.Name, Perimeter = corridor }); } } return(true); }
/// <summary> /// Creates and adds an Opening to the Story by deriving the Perimeter from the supplied Room. /// </summary> /// <param name="room">Room representing the Opening.</param> /// <returns></returns> public bool AddOpening(Room opening) { if (opening.Perimeter == null || !Perimeter.Covers(opening.Perimeter)) { return(false); } var toRooms = new List <Room>() { opening }; Exclusions = FitRooms(Exclusions, toRooms); toRooms.AddRange(Exclusions); Services = FitRooms(Services, toRooms); toRooms.AddRange(Services); Corridors = FitRooms(Corridors, toRooms); toRooms.AddRange(Corridors); Rooms = FitRooms(Rooms, toRooms); Openings.Add(opening); return(true); }
/// <summary> /// Adds a Room to the Services list. /// </summary> /// <param name="room">Room to add.</param> /// <param name="fit">Indicates whether the new room should mutually fit to other Story features. Default is true.</param> /// <returns> /// True if one or more rooms were added to the Story. /// </returns> public bool AddService(Room room, bool fit = true) { if (Perimeter == null || room.Perimeter == null) { throw new ArgumentNullException(Messages.PERIMETER_NULL_EXCEPTION); } if (!Perimeter.Covers(perimeter)) { throw new ArgumentNullException(Messages.PERIMETER_PLACEMENT_EXCEPTION); } var newRoom = new Room() { Color = room.Color, Elevation = Elevation, Height = Height, Name = room.Name, Perimeter = room.Perimeter }; var fitRooms = new List <Room> { newRoom }; if (fit) { var toRooms = new List <Room>(Exclusions); fitRooms = FitRooms(fitRooms, toRooms); toRooms.AddRange(fitRooms); Corridors = FitRooms(Corridors, toRooms); toRooms.AddRange(Corridors); Rooms = FitRooms(Rooms, toRooms); } if (fitRooms.Count == 0) { return(false); } Services.AddRange(fitRooms); return(true); }