public WorkoutDay generateDay(int n) { //determine the amount of primary and secondary exercises to do int primaryCount = (int)(Math.Ceiling(n * 0.666666666) + 0.5); int secondaryCount = n - primaryCount; HashSet <string> excludedGroups = new HashSet <string>(); //note: eliminate this later on HashSet <Exercise> usedExercises = new HashSet <Exercise>(); string primary = getNextGroup(excludedGroups); excludedGroups.Add(primary); string secondary = getNextGroup(excludedGroups); WorkoutDay res = new WorkoutDay { uuid = Guid.NewGuid().ToString(), primaryGroup = primary, secondaryGroup = secondary, workoutItems = new List <workoutItem>(), date = DateTime.Now }; HashSet <Exercise> available = allExercises; //remove exercises that we don't have equipment for //available = Exercise.availableWithEquipment(available, equipmentAvailable, equipmentAvailable2, weightRequired); //remove exercises that aren't part of the main area HashSet <Exercise> exercisesInPrimaryGroup = Exercise.whereAreaIs(available, primary); HashSet <Exercise> exercisesInSecondaryGroup = Exercise.whereAreaIs(available, secondary); for (int u = 0; u < 2; u++) { bool isSecondary = u != 0; string section = isSecondary ? secondary : primary; int count = isSecondary ? secondaryCount : primaryCount; bool[] firstOfSubgroup = new bool[3] { true, true, true }; HashSet <Exercise> sectionExercies = isSecondary ? exercisesInSecondaryGroup : exercisesInPrimaryGroup; for (int i = 0; i < count; i++) { muscleGroup group = groups[section].generateGroupExercise(); HashSet <Exercise> exercisesInCurrentSubgroup = Exercise.subgroup(sectionExercies, group.subGroup); Exercise selectedExercise = null; if (firstOfSubgroup[group.subGroup - 1]) { firstOfSubgroup[group.subGroup - 1] = false; HashSet <Exercise> compoundExercisesInCurrentSubgroup = Exercise.onlycompound(exercisesInCurrentSubgroup); if (compoundExercisesInCurrentSubgroup.Count == 0) { selectedExercise = exercisesInCurrentSubgroup.randomElement(); } else { selectedExercise = compoundExercisesInCurrentSubgroup.randomElement(); } } else { selectedExercise = exercisesInCurrentSubgroup.randomElement(); } sectionExercies.Remove(selectedExercise); SetDetails details = SelectSetDetails(5);//5 sets per exercises is hardcoded in (should change this) List <set> itemSets = new List <set>(); foreach (SetDetail s in details.sets) { itemSets.Add(new set { reps = s.reps, percent1RM = s.Percent1RM, restTime = TimeSpan.FromSeconds(s.restTime) }); } res.workoutItems.Add(new workoutItem { uuid = Guid.NewGuid().ToString(), ex = selectedExercise, sets = itemSets }); } } return(res); }
public void undoGroupExercise(muscleGroup group) { removeFromGroup(group.subGroup); }