/// <summary> /// Gets the current Speed touch question. /// </summary> /// <returns>The UIQ uestion.</returns> /// <param name="questionIndex">Question index.</param> /// <param name="answerButtons">Answer buttons.</param> public BaseQuestion GetUIQuestion(int questionIndex, int answerButtons = 4) { SpeedTouch questionType = SpeedTouchList[questionIndex]; AnswerInfos.Clear(); CurrentColorID = AnswerID.None; int colors = EnumUtil.GetValues <ColorEnum>().Count; //Initializing a Question BaseQuestion bq = new BaseQuestion(); bq.IgnoreClickCount = true; bq.IgnoreClickTime = true; bq.HasSequenceAnswer = false; bq.HasBoolValue = false; bq.HasTimerValue = true; bq.HasSequentialQuestions = true; bq.Pattern = QPattern.SpeedTouch; bq.QuestionType = QuestionType.Base; bq.TimeForQuestion = 0; bq.Options = new List <AnswerSpriteHolder>(); for (int i = 0; i < answerButtons; i++) { AnswerSpriteHolder answer = new AnswerSpriteHolder(); bq.Options.Add(answer); } // //Getting a random color for the question int randomColorIndex = (int)Random.Range(0, colors); //Shuffle FisherYatesShuffle shuffle = new FisherYatesShuffle(colors); shuffle.ShuffleList(); List <int> colorIndex = shuffle.ShuffledList; //Setting up button info for later assignment and setting up current answerID Color for the current question for (int i = 0; i < answerButtons; i++) { SpeedTouchAnswerInfo answerInfo = GetNewAnswerButton(); SetAnswer(ref answerInfo, (ColorEnum)colorIndex[i], (ColorEnum)randomColorIndex); AnswerInfos.Add(answerInfo); } //Assignment to answer buttons SetAnswerOption(ref bq, AnswerInfos, (ColorEnum)randomColorIndex, questionType); return(bq); }
/// <summary> /// Main method to set the question property and answer button property for each answer button /// </summary> /// <param name="question">Question.</param> /// <param name="answer">Answer.</param> /// <param name="randomColor">Random color.</param> /// <param name="questionType">Question type.</param> private void SetAnswerOption(ref BaseQuestion question, List <SpeedTouchAnswerInfo> answer, ColorEnum randomColor, SpeedTouch questionType) { ColorEnum color = GetColorBasedOnAnswerOrSpriteID(IDType.AnswerID, CurrentColorID); switch (questionType) { case SpeedTouch.OneX: question.Question = "Touch the " + color.ToString() + " balloon."; for (int i = 0; i < question.Options.Count; i++) { question.Options[i].IsCorrect = (CurrentColorID == answer[i].AnswerID) ? true : false; question.Options[i].ID = answer[i].AnswerID; question.Options[i].Sprite = answer[i].SpriteID; } break; case SpeedTouch.ExceptX: question.Question = "Touch any balloon except the " + color.ToString() + " balloon."; for (int i = 0; i < question.Options.Count; i++) { question.Options[i].IsCorrect = (CurrentColorID == answer[i].AnswerID) ? false : true; question.Options[i].ID = answer[i].AnswerID; question.Options[i].Sprite = answer[i].SpriteID; } break; case SpeedTouch.AnyX: question.Question = "Touch any " + color.ToString() + " balloon."; int secondColorPos = -1; int firstColorPos = -1; for (int i = 0; i < question.Options.Count; i++) { question.Options[i].ID = answer[i].AnswerID; question.Options[i].Sprite = answer[i].SpriteID; Debug.Log("Answer Image = " + question.Options[i].Sprite.ToString()); if (answer[i].AnswerID == CurrentColorID) { firstColorPos = i; } question.Options[i].IsCorrect = (CurrentColorID == answer[i].AnswerID) ? true : false; } secondColorPos = Random.Range(0, question.Options.Count); while (secondColorPos == firstColorPos) { secondColorPos = Random.Range(0, question.Options.Count); } question.Options[secondColorPos].ID = CurrentColorID; question.Options[secondColorPos].Sprite = GetSpriteIDBasedOnAnswerID(CurrentColorID); question.Options[secondColorPos].IsCorrect = true; break; case SpeedTouch.LeftX: question.Question = "Touch the balloon on the left of the " + color.ToString() + " balloon."; int randomLeftx = Random.Range(0, 10); randomLeftx = (randomLeftx % 2 == 0) ? 1 : 3; Debug.Log("randomLeftx = " + randomLeftx); CheckAndRearrangeAnswers(answer, randomLeftx); for (int i = 0; i < question.Options.Count; i++) { question.Options[i].ID = answer[i].AnswerID; question.Options[i].Sprite = answer[i].SpriteID; question.Options[i].IsCorrect = (i + 1 == randomLeftx) ? true : false; } break; case SpeedTouch.RightX: question.Question = "Touch the balloon on the right of the " + color.ToString() + " balloon."; int randomRightX = Random.Range(0, 2); randomRightX = (randomRightX == 1) ? 0 : 2; CheckAndRearrangeAnswers(answer, randomRightX); for (int i = 0; i < question.Options.Count; i++) { question.Options[i].ID = answer[i].AnswerID; question.Options[i].Sprite = answer[i].SpriteID; question.Options[i].IsCorrect = (i - 1 == randomRightX) ? true : false; } break; case SpeedTouch.AboveX: question.Question = "Touch the balloon above the " + color.ToString() + " balloon."; int randomAboveX = Random.Range(0, 2); randomAboveX = (randomAboveX == 1) ? 2 : 3; CheckAndRearrangeAnswers(answer, randomAboveX); for (int i = 0; i < question.Options.Count; i++) { question.Options[i].ID = answer[i].AnswerID; question.Options[i].Sprite = answer[i].SpriteID; question.Options[i].IsCorrect = (i + 2 == randomAboveX) ? true : false; Debug.Log("Answer Image = " + question.Options[i].Sprite.ToString()); } break; case SpeedTouch.BelowX: question.Question = "Touch the balloon below the " + color.ToString() + " balloon."; int randomBelowX = Random.Range(0, 2); randomBelowX = (randomBelowX == 1) ? 0 : 1; CheckAndRearrangeAnswers(answer, randomBelowX); for (int i = 0; i < question.Options.Count; i++) { question.Options[i].ID = answer[i].AnswerID; question.Options[i].Sprite = answer[i].SpriteID; question.Options[i].IsCorrect = (i - 2 == randomBelowX) ? true : false; Debug.Log("Answer Image = " + question.Options[i].Sprite.ToString()); } break; } }