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);
    }