public WorkoutDayGenerator(RepScheme repScheme, SplitDay splitDay, GeneratorSettings _generatorSettings) { RepScheme = repScheme; SplitDay = splitDay; VolumePerDay = _generatorSettings.VolumePerDay; VolumeMuscleMap = new Dictionary <Muscle, int>(); GeneratorSettings = _generatorSettings; //large muscles worked twice as much as small foreach (Muscle muscle in SplitDay.Day.DaysMuscles .OrderBy(x => x.ID) .ThenBy(x => x.Muscle.Size) .Select(x => x.Muscle)) { if (GeneratorSettings.LaggingMuscles.Contains(muscle.Name)) { VolumeMuscleMap.Add(muscle, (VolumePerDay / muscle.Size) * 2); } else if (GeneratorSettings.OverDevelopedMuscles.Contains(muscle.Name)) { VolumeMuscleMap.Add(muscle, (VolumePerDay / muscle.Size) / 2); } else { VolumeMuscleMap.Add(muscle, VolumePerDay / muscle.Size); } } }
public WorkoutGenerator(RepScheme repScheme, Muscle muscleToWork, GeneratorSettings genSettings, int exerciseCount = 1) { RepScheme = repScheme; GeneratorSettings = genSettings; MuscleToWork = muscleToWork; ExerciseCount = exerciseCount; UsedExercises = new List <Exercise>(); }
public WorkoutRoutine Generate(GainzDBContext dbContext) { WorkoutRoutine workoutRoutine = new WorkoutRoutine { WorkoutDays = new List <WorkoutDay>() }; int frequency = (int)this.GeneratorSettings.Frequency; RepScheme repScheme = this.GeneratorSettings.RepScheme; workoutRoutine.Frequency = frequency; workoutRoutine.Volume = this.GeneratorSettings.Volume; workoutRoutine.RepScheme = repScheme; workoutRoutine.ExerciseTypes = this.GeneratorSettings.ExerciseTypes.Select(x => EnumLabelLookup.ExerciseTypeLabels[x]).ToList(); workoutRoutine.Name = NameGenerator.NameGenerator.getName(); var splits = dbContext.Splits .Include(x => x.SplitDays) .ThenInclude(x => x.Day) .ThenInclude(x => x.DaysMuscles) .ThenInclude(x => x.Muscle) .Where(x => x.Frequency == frequency).ToList(); if (splits.Count() == 0) { throw new Exception("No workout split available with selected Frequency"); } Random r = new Random(); Split split = splits.ElementAt(r.Next(splits.Count())); workoutRoutine.SplitName = split.Name; List <SplitDay> splitDays = split.SplitDays.OrderBy(x => x.ID).ToList(); Dictionary <string, WorkoutDay> likeDays = new Dictionary <string, WorkoutDay>(); foreach (SplitDay splitDay in splitDays) { WorkoutDayGenerator workoutDayGenerator = new WorkoutDayGenerator(repScheme, splitDay, GeneratorSettings); WorkoutDay workoutDay = likeDays.ContainsKey(splitDay.Day.Name) ? likeDays[splitDay.Day.Name] : workoutDayGenerator.Generate(dbContext); likeDays[splitDay.Day.Name] = workoutDay; workoutRoutine.WorkoutDays.Add(workoutDay); } return(workoutRoutine); }