/// <summary> /// Try to assign a camper to existing blocks of the activity. /// </summary> /// <param name="camper">Camper to assign</param> /// <param name="limitByOptimal">Do not exceed optimal capacity</param> /// <returns>true if the camper was assigned</returns> public bool TryAssignCamperToExistingActivityBlock(Camper camper, Boolean limitByOptimal) { bool didAssign = false; int capacity = (limitByOptimal) ? OptimalCapacity : MaximumCapacity; var firstFitBlock = _scheduledBlocks.Find( b => camper.IsAvailableInTimeSlot(b.TimeSlot) && b.AssignedCampers.Count < capacity); if (firstFitBlock != null) { // If this assign fails something is wrong because it was checked in the find. didAssign = camper.TryAssignBlock(firstFitBlock); } return(didAssign); }
/// <summary> /// Try to assign the camper to a new activity block for the activity. /// </summary> /// <param name="camper">Camper to assign</param> /// <param name="activityDefinition">Activity to assign to</param> /// <returns>true if the camper was assigned</returns> public bool TryAssignCamperToNewActivityBlock(Camper camper) { // Go through the campers unused slots and try to create to create // an activity block. Boolean didAssignCamper = false; for (int slotNumber = 0; slotNumber < ActivityBlock.MaximumTimeSlots && !didAssignCamper; slotNumber++) { if (camper.IsAvailableInTimeSlot(slotNumber)) { var newActivityBlock = TryCreateBlock(slotNumber); didAssignCamper = camper.TryAssignBlock(newActivityBlock); } } return(didAssignCamper); }