/// <summary> /// Determine our next question /// </summary> public void NextQuestion() { //First, determine what our current level should be, and by threshold move to the next level if needed MM_Training_Level FoundLevel; if (CurrentLevel == null) { PriorLevel = null; if (!Levels.TryGetValue(0, out FoundLevel)) { TrainingMode = enumTrainingMode.NotTraning; return; } else { CurrentLevel = FoundLevel; } } else if (LevelScore >= CurrentLevel.ExitThresholdScore && QuestionsRight >= CurrentLevel.NumberOfQuestions) { if (!Levels.TryGetValue(CurrentLevel.ID + 1, out FoundLevel)) { MessageTime = DateTime.Now; TrainingMode = enumTrainingMode.UserWon; return; } else { CurrentLevel = FoundLevel; } } else if (QuestionsWrong >= CurrentLevel.FailureThreshold) { MessageTime = DateTime.Now; TrainingMode = enumTrainingMode.UserFailed; return; } //Based on our question, determine our next if (PriorLevel != CurrentLevel) { PrepareLevel(); } //If we have no elements, assume we won if (AvailableElements.Length == 0) { TrainingMode = enumTrainingMode.UserWon; return; } //Pick random elements based on our needs TargetElement = AvailableElements[rnd.Next(0, AvailableElements.Length)]; if (TargetElement is MM_Line || TargetElement is MM_Substation) { } else { TargetElement = TargetElement.Substation; } //Now, handle our target element if (TargetElement is MM_Substation) { MM_Substation TargetSub = (MM_Substation)TargetElement; QuestionText = "Where is substation " + TargetSub.LongName + (String.Equals(TargetSub.LongName, TargetSub.Name, StringComparison.CurrentCultureIgnoreCase) ? "?" : " (" + TargetSub.Name + ")?"); } else if (TargetElement is MM_Line) { MM_Line TargetLine = (MM_Line)TargetElement; QuestionText = "Where is line " + TargetLine.Name + " (from " + TargetLine.Substation1.LongName + " to " + TargetLine.Substation2.LongName + ")?"; } else { QuestionText = "Where is " + TargetElement.ElemType.Name + " " + TargetElement.Name + "?"; } Data_Integration.ReportSystemLevelData(QuestionText); TrainingMode = enumTrainingMode.QuestionAsked; TimeQuestionPresented = DateTime.Now; }