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);
                }
            }
        }
Beispiel #2
0
        public WorkoutGenerator(RepScheme repScheme, Muscle muscleToWork, GeneratorSettings genSettings, int exerciseCount = 1)
        {
            RepScheme = repScheme;

            GeneratorSettings = genSettings;

            MuscleToWork = muscleToWork;

            ExerciseCount = exerciseCount;

            UsedExercises = new List <Exercise>();
        }
Beispiel #3
0
        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);
        }