Ejemplo n.º 1
0
        public List <Workout> Generate(GainzDBContext dbContext)
        {
            Workout workout = new Workout();


            //Find an Exercise in the database that works the current muscle and isn't used yet.
            //if prefercompound find one. else go for exercises that have a high muscle involvment

            List <Exercise> Exercises = dbContext.Exercises
                                        .Include(x => x.ExerciseMuscles)
                                        .ThenInclude(x => x.Muscle)
                                        .Where(e => e.ExerciseMuscles.FirstOrDefault(em => em.Muscle == MuscleToWork) != null &&
                                               GeneratorSettings.ExerciseTypes.Contains(e.ExerciseType) &&
                                               !UsedExercises.Any(x => x.ExerciseID == e.ExerciseID)
                                               )
                                        .ToList();


            var rnd = new Random();

            if (Exercises.Any(x => x.IsCompound))
            {
                Exercises = Exercises.Where(x => x.IsCompound).OrderBy(x => rnd.Next()).Take(ExerciseCount).ToList();
            }
            else
            {
                Exercises = Exercises.OrderBy(x => rnd.Next()).Take(ExerciseCount).ToList();
            }



            if (Exercises.Count() == 0)
            {
                var message = "Ran out of exercises to match current settings. ";
                if (this.GeneratorSettings.ExerciseTypes.Count == 1 &&
                    this.GeneratorSettings.ExerciseTypes[0] == Enums.ExerciseType.BodyweightNoEquipment)
                {
                    message += " Pick a frequency of 3 and try again for bodyweight workouts. There aren't enough bodyweight exercises " +
                               "in our system to generate more complex bodyweight routines.";
                }
                else
                {
                    message += " Try picking a different frequency, selecting more equipment, increasing rep range, or lowering volume";
                }
                throw new Exception(message);
            }
            Workouts = new List <Workout>();
            foreach (var exercise in Exercises)
            {
                Workouts.Add(new Workout {
                    Exercise = exercise, RepScheme = RepScheme
                });
            }

            UsedExercises.AddRange(Exercises);

            return(Workouts);
        }
Ejemplo n.º 2
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);
        }
Ejemplo n.º 3
0
        public WorkoutDay Generate(GainzDBContext dbContext)
        {
            WorkoutDay workoutDay = new WorkoutDay(SplitDay.Day.IsRest, SplitDay.Day.Name)
            {
                Workouts = new List <Workout>()
            };

            List <Exercise> usedExercises = new List <Exercise>();

            //Rest Day
            if (VolumeMuscleMap.Count == 0)
            {
                return(workoutDay);
            }

            WorkoutGenerator workoutGenerator = new WorkoutGenerator(RepScheme, VolumeMuscleMap.First().Key, GeneratorSettings);

            while (VolumeMuscleMap.Count > 0)
            {
                var muscle = VolumeMuscleMap.First().Key;
                var count  = VolumeMuscleMap[muscle] / RepScheme.TotalReps();
                workoutGenerator.ExerciseCount = count == 0 ? 1 : count;

                workoutGenerator.MuscleToWork = muscle;
                var workouts = workoutGenerator.Generate(dbContext);


                foreach (var workout in workouts)
                {
                    foreach (var workedMuscle in workout.Exercise.ExerciseMuscles.Select(x => x.Muscle))
                    {
                        if (VolumeMuscleMap.ContainsKey(workedMuscle))
                        {
                            VolumeMuscleMap[workedMuscle] -= workout.TotalReps();
                            if (VolumeMuscleMap[workedMuscle] <= 0)
                            {
                                VolumeMuscleMap.Remove(workedMuscle);
                            }
                        }
                    }
                }

                workoutDay.Workouts.AddRange(workouts);
            }



            return(workoutDay);
        }
Ejemplo n.º 4
0
 public ExerciseMusclesController(GainzDBContext context)
 {
     _context = context;
 }
Ejemplo n.º 5
0
 public MusclesController(GainzDBContext context)
 {
     _context = context;
 }
Ejemplo n.º 6
0
 public SplitsController(GainzDBContext context)
 {
     _context = context;
 }
Ejemplo n.º 7
0
 public DaysController(GainzDBContext context)
 {
     _context = context;
 }
Ejemplo n.º 8
0
 public GeneratorController(GainzDBContext context)
 {
     _context = context;
 }