Ejemplo n.º 1
0
        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);
        }
Ejemplo n.º 2
0
 public void undoGroupExercise(muscleGroup group)
 {
     removeFromGroup(group.subGroup);
 }