public void SelectButton() { if (!container) { container = FindObjectOfType <multipleContainer>(); } if (container.SelectedAnswer != null) { if (container.SelectedAnswer == this) { container.SelectedAnswer.image.color = Color.white; container.submit.interactable = false; container.SelectedAnswer = null; return; } else { container.SelectedAnswer.image.color = Color.white; container.SelectedAnswer = null; } } container.submit.interactable = true; image.color = Color.yellow; container.SelectedAnswer = this; }
//Called only when a quiz begins. Loads a question AND sets health/attack. public virtual void loadMonster() { if (!multipleContainer) { multipleContainer = FindObjectOfType <multipleContainer>(); } multipleContainer.SetAttacks(false, true); DestroyMonster(); if (parent.quizRunning.monsterArt != null) { sprite = Instantiate(parent.quizRunning.monsterArt, monsterSpot.transform, false); sprite.transform.localScale = parent.quizRunning.monsterArt.transform.localScale; animator = sprite.GetComponent <Animator>(); startingPosition = sprite.transform.localPosition; startingRotation = sprite.transform.localRotation; } if (parent == null) { parent = GameObject.Find("MonsterManager").GetComponent <MonsterManager>(); } enemyPhase = false; enemyPhase = questions.MakeQuestion(parent.quizRunning); health = parent.quizRunning.MonsterHealth; attack = parent.quizRunning.MonsterAttack; bar.setMaxHealth(health, false); if (parent.quizRunning.Hard) { bar.wait = false; } if (!music) { music = FindObjectOfType <MusicManager>(); } if (music) { music.SetCombatMusic(parent.quizRunning.Operator, parent.quizRunning.boss); } }
//Uses given values to calculate a random sum and its components, then store and display them. internal bool MakeQuestion(QuizButton a_running, bool bossAttacking = false) { if (calculator == null) { calculator = FindObjectOfType <Calculator>(); } if (container == null) { container = FindObjectOfType <multipleContainer>(); } button = a_running; float[] numbers = new float[button.variableCount]; answer = -2; string oper = ""; int rand = 1; //Randomise as many numbers as required, within range. for (int i = 0; i < a_running.variableCount; i++) { numbers[i] = (int)Random.Range(button.minNumber, (button.maxNumber + 1)); } float multiple = 1; switch (a_running.Operator) { case operators.Addition: answer = numbers[0]; for (int i = 1; i < a_running.variableCount; i++) { answer += numbers[i]; oper = "+ "; } break; case operators.Subtraction: answer = numbers[0]; for (int i = 1; i < a_running.variableCount; i++) { answer -= numbers[i]; oper = "- "; } break; case operators.Multiplication: //If operator is 'x', second number is one of two possible numbers if (a_running.boss && a_running.validNumbers != 0) { rand = Random.Range(0, (a_running.validNumbers)); } else { rand = Random.Range(0, (a_running.secondFixedNumber.Length)); } numbers[1] = a_running.secondFixedNumber[rand]; multiple = numbers[1]; answer = numbers[0] * numbers[1]; oper = "x "; break; case operators.Division: rand = Random.Range(0, (a_running.secondFixedNumber.Length)); numbers[1] = a_running.secondFixedNumber[rand]; multiple = numbers[1]; answer = numbers[0] / numbers[1]; oper = "÷ "; break; default: return(CalculateBODMAS(a_running, 0, bossAttacking)); } bool rounding = a_running.preventRounding; if (a_running.preventRounding) //if box is ticked, need to make sure numbers don't require rounding up. { rounding = PreventRounding(numbers, a_running, (int)answer); } bool whole = IsWhole(answer); //if Answer is too low/too high, or requires rounding to solve, we try again. if (answer < a_running.minAnswer || answer > a_running.maxAnswer || rounding || !whole || answer == previousAnswer) { return(MakeQuestion(a_running, bossAttacking)); } previousAnswer = answer; string answerNeeded = answer.ToString("F0"); bool enemyPhase = container.SetMultiple((int)answer, a_running, multiple, bossAttacking); string answerWords; answerWords = " "; answerWords += numbers[0].ToString("F0"); for (int i = 1; i < a_running.variableCount; i++) { answerWords += oper + numbers[i].ToString("F0"); answer += numbers[i]; } answerWords += "= "; questionNeeded = answerWords; calculator.answerNeeded = answerNeeded; return(enemyPhase); }