void Update()
    {
        childTextLogText.fontSize = Screen.height * 14 / 380;

        //Adjust this panel size so that it is as big as a standard Magic The Gathering cards.
        rectTransform.sizeDelta = new Vector2((Screen.width / 3), ((Screen.width / 3) * panelProportion));

        /*
         * Control this game object visibility based on imageSwicth variable.
         * These code below is intended to control visibility of this game object and its
         *      child.
         * So that Log button can be used to toggle this game object and its child visibility and
         *      whether or not these game object is active or not.
         */
        if (imageSwitch == 1)
        {
            childPanelScrollTextLogImage.enabled = true;
            childTextClickToDismissText.enabled  = true;
            childTextLogText.enabled             = true;
            image.enabled = true;
        }
        else if (imageSwitch == -1)
        {
            childPanelScrollTextLogImage.enabled = false;
            childTextClickToDismissText.enabled  = false;
            childTextLogText.enabled             = false;
            image.enabled = false;
        }

        //PENDING: I think I can remove visitedExhibitionListCount and just use visitedExhibitiobList.Count for later on.
        visitedExhibitionListCount = visitedExhibitionList.Count;

        /*
         * This codes below is for controlling how many exhibition have been visited by the player.
         * The exhibition list will be reset when the reset button pressed.
         */
        if (visitedExhibitionListCount <= 0)
        {
            /*
             * This is the default text if there is nothing in the list or if the reset button ppressed.
             * Hence, you need to set the list to  empty when you want this default text to be displayed.
             */
            childTextLogText.text = "You have not visited any exhibition yet!\nPlease visit the primary exhibition.";

            /*
             * If the list count is 0, then there is no exhibition has been visited by the visitor,
             *      hence, here I initiated the List.
             */
            exhibitionCopyList = new List <ExhibitionCopy>();
        }

        /*
         * If there is a thing at least one, within the list this program will showed how many and what
         *      kind of exhibition has visited.
         */
        else if (visitedExhibitionListCount > 0)
        {
            //Check so that only one exhibition could enter the list everytime there is a change in visitedExhibitionListCount.
            if (visitedExhibitionListCount != visitedExhibitionListCountPrevious)
            {
                //Create a temporary holder for a copy of newly entered exhibition.
                exhibitionCopyTemporary = new ExhibitionCopy();
                //Assign the name of newly entered/visited exhibition.
                exhibitionCopyTemporary.exhibitionName = visitedExhibitionList[visitedExhibitionList.Count - 1];
                //Put this temporary exhibition into the list, so that next time we can use it again.
                exhibitionCopyList.Add(exhibitionCopyTemporary);

                if (visitedExhibitionListCount == 1)
                {
                    //Add notification when visitor visited new exhibition.
                    SetNotification(
                        "Welcome to "
                        + GameObject.Find(exhibitionCopyTemporary.exhibitionName).gameObject.transform.Find("Text").gameObject.GetComponent <Text>().text
                        + ", please tap your dice."
                        );
                }
                else
                {
                    int indexLastGameObject = -1;
                    //Backward loop through all visitedExhibitionList to find out the latest properly visited exhibition.
                    for (int i = visitedExhibitionList.Count - 1; i >= 0; i--)
                    {
                        if (
                            exhibitionCopyList[i].properlyVisited == true &&
                            indexLastGameObject == -1
                            )
                        {
                            indexLastGameObject = i;
                        }
                    }

                    if (
                        indexLastGameObject != -1 &&
                        (exhibitionCopyTemporary.exhibitionName == "ButtonExhibition" + exhibitionCopyList[indexLastGameObject].targetExhibitionIndex[0] ||
                         exhibitionCopyTemporary.exhibitionName == "ButtonExhibition" + exhibitionCopyList[indexLastGameObject].targetExhibitionIndex[1])
                        )
                    {
                        //Add notification when visitor visited new exhibition.
                        SetNotification(
                            "Welcome to "
                            + GameObject.Find(exhibitionCopyTemporary.exhibitionName).gameObject.transform.Find("Text").gameObject.GetComponent <Text>().text
                            + ", please tap your dice."
                            );
                    }
                    else if (indexLastGameObject == -1)
                    {
                        string currentExhibition =
                            GameObject.Find(exhibitionCopyTemporary.exhibitionName).gameObject.transform.Find("Text").gameObject.GetComponent <Text>().text;

                        if (currentExhibition != "Exhibition Prime")
                        {
                            SetNotification(
                                "Welcome to "
                                + currentExhibition
                                + ", please visit Exhibition Prime."
                                );
                        }
                        else if (currentExhibition == "Exhibition Prime")
                        {
                            SetNotification(
                                "Welcome to "
                                + currentExhibition
                                + ", please tap your dice."
                                );
                        }
                    }
                    else
                    {
                        //Add notification when visitor visited new exhibition.
                        SetNotification(
                            "Welcome to "
                            + GameObject.Find(exhibitionCopyTemporary.exhibitionName).gameObject.transform.Find("Text").gameObject.GetComponent <Text>().text
                            + ", please visit Exhibition "
                            + exhibitionCopyList[indexLastGameObject].targetExhibitionIndex[0]
                            + " or "
                            + exhibitionCopyList[indexLastGameObject].targetExhibitionIndex[1]
                            + "."
                            );
                    }
                }

                //Make sure this thing can only happened once.
                visitedExhibitionListCountPrevious = visitedExhibitionListCount;
            }

            //Check whether or not the latest exhibition visited is already tapped and received its random explanation.
            if (exhibitionCopyList[exhibitionCopyList.Count - 1].randomExplanation != "")
            {
                SetNotification(
                    exhibitionCopyList[exhibitionCopyList.Count - 1].randomExplanation
                    + ", please shake your dice."
                    );
                explanation = exhibitionCopyList[exhibitionCopyList.Count - 1].randomExplanation;
                if (explanation != explanationPrevious)
                {
                    scriptPanelContentShowCards.AddToExplanationHashSet(
                        exhibitionCopyList[exhibitionCopyList.Count - 1].randomExplanation,
                        exhibitionCopyList[exhibitionCopyList.Count - 1].exhibitionName
                        );
                    explanationPrevious = explanation;
                }

                /*
                 * If the latest exhibition has received its random explanation, then check whether or not dice has rolled within
                 *      this exhibition.
                 */
                if (exhibitionCopyList[exhibitionCopyList.Count - 1].rolledNumber != -1)
                {
                    /*
                     * If this exhibition is not button exhibition prime, which means the latest visited exhibition is a normal
                     *      exhibition.
                     */
                    if (exhibitionCopyList[exhibitionCopyList.Count - 1].exhibitionName == "ButtonExhibitionPrime")
                    {
                        //PENDING: I should have make this dynamic, so that it can handle dynamic amount of explanation.
                        if (exhibitionCopyList[exhibitionCopyList.Count - 1].rolledNumber <= scriptExhibitionDatabase.exhibitionArray[0].threshold)
                        {
                            exhibitionCopyList[exhibitionCopyList.Count - 1].targetExhibitionIndex[0] =
                                scriptExhibitionDatabase.exhibitionArray[0].targetExhibitionArray[0];
                            exhibitionCopyList[exhibitionCopyList.Count - 1].targetExhibitionIndex[1] =
                                scriptExhibitionDatabase.exhibitionArray[0].targetExhibitionArray[1];
                        }
                        else if (exhibitionCopyList[exhibitionCopyList.Count - 1].rolledNumber > scriptExhibitionDatabase.exhibitionArray[0].threshold)
                        {
                            exhibitionCopyList[exhibitionCopyList.Count - 1].targetExhibitionIndex[0] =
                                scriptExhibitionDatabase.exhibitionArray[0].targetExhibitionArray[2];
                            exhibitionCopyList[exhibitionCopyList.Count - 1].targetExhibitionIndex[1] =
                                scriptExhibitionDatabase.exhibitionArray[0].targetExhibitionArray[3];
                        }
                    }

                    /*
                     * These codes below are intended when the latest exhibitiob user visited is a exhibitiob prime.
                     * Basically the same code unless the index is 0 no matter what happened.
                     */
                    else
                    {
                        //PENDING: Same like above, I need to make this dynamic, perhaps using loop and change this into a List instead of using array.
                        if (exhibitionCopyList[exhibitionCopyList.Count - 1].rolledNumber <= scriptExhibitionDatabase.exhibitionArray[0].threshold)
                        {
                            exhibitionCopyList[exhibitionCopyList.Count - 1].targetExhibitionIndex[0] =
                                scriptExhibitionDatabase.exhibitionArray[
                                    int.Parse(exhibitionCopyList[exhibitionCopyList.Count - 1].exhibitionName.Replace("ButtonExhibition", ""))
                                ].targetExhibitionArray[0];
                            exhibitionCopyList[exhibitionCopyList.Count - 1].targetExhibitionIndex[1] =
                                scriptExhibitionDatabase.exhibitionArray[
                                    int.Parse(exhibitionCopyList[exhibitionCopyList.Count - 1].exhibitionName.Replace("ButtonExhibition", ""))
                                ].targetExhibitionArray[1];
                        }

                        else if (exhibitionCopyList[exhibitionCopyList.Count - 1].rolledNumber > scriptExhibitionDatabase.exhibitionArray[0].threshold)
                        {
                            exhibitionCopyList[exhibitionCopyList.Count - 1].targetExhibitionIndex[0] =
                                scriptExhibitionDatabase.exhibitionArray[
                                    int.Parse(exhibitionCopyList[exhibitionCopyList.Count - 1].exhibitionName.Replace("ButtonExhibition", ""))
                                ].targetExhibitionArray[2];
                            exhibitionCopyList[exhibitionCopyList.Count - 1].targetExhibitionIndex[1] =
                                scriptExhibitionDatabase.exhibitionArray[
                                    int.Parse(exhibitionCopyList[exhibitionCopyList.Count - 1].exhibitionName.Replace("ButtonExhibition", ""))
                                ].targetExhibitionArray[3];
                        }
                    }

                    string[] targetExhibitionTemp = new string[2];
                    //Fixing the primary exhibition.
                    for (int i = 0; i < 2; i++)
                    {
                        if (exhibitionCopyList[exhibitionCopyList.Count - 1].targetExhibitionIndex[i] == 0)
                        {
                            targetExhibitionTemp[i] = "Prime";
                        }
                        else
                        {
                            targetExhibitionTemp[i] = "" + exhibitionCopyList[exhibitionCopyList.Count - 1].targetExhibitionIndex[i];
                        }
                    }

                    SetNotification(

                        "You get "
                        + exhibitionCopyList[exhibitionCopyList.Count - 1].rolledNumber
                        + ", please visit exhibition "
                        + targetExhibitionTemp[0]
                        + " or "
                        + targetExhibitionTemp[1]
                        + "."
                        );
                }
            }

            /*
             * Temporary string to display in panel log.
             * This string will be iterated through all visited exhibition when there is a change within visitedExhibitionListCount.
             */
            string text = "";

            //Loop through copy of exhibition.
            for (int i = 0; i < exhibitionCopyList.Count; i++)
            {
                /*
                 * Check whether or not a copy of exhibition is a properly visited or not.
                 * Basically if a copy of exhibition has received explanation, rolled number, and destined targets
                 *      you can say that that copy of exhibition is properly visited.
                 */
                if (exhibitionCopyList[i].exhibitionName != "")
                {
                    if (exhibitionCopyList[i].randomExplanation != "")
                    {
                        if (exhibitionCopyList[i].rolledNumber != -1)
                        {
                            if (
                                exhibitionCopyList[i].targetExhibitionIndex[0] != -1 &&
                                exhibitionCopyList[i].targetExhibitionIndex[1] != -1
                                )
                            {
                                exhibitionCopyList[i].properlyVisited = true;
                            }
                        }
                    }
                }

                /*
                 * Temporary string that will held either blank string or not.
                 * Basically if a copy of an exhibition has all these string filled then
                 *      this particular copy of an exhibition is properly visited.
                 */
                string _exhibitionName         = "";
                string _randomExplanation      = "";
                string _targetExhibitionIndex  = "";
                string _targetExhibitionIndex0 = "";
                string _targetExhibitionIndex1 = "";

                if (exhibitionCopyList[i].exhibitionName != "")
                {
                    /*
                     * If this exhibition is not the first exhibition visited then put line break in
                     *      the front of the string.
                     */
                    if (i > 0)
                    {
                        _exhibitionName = "\n" + exhibitionCopyList[i].exhibitionName;
                    }

                    /*
                     * If this is the first exhibition visited, means this exhibition is exhibition prime,
                     *      then it is not necessary to put line break in front of the string.
                     */
                    else
                    {
                        _exhibitionName = exhibitionCopyList[i].exhibitionName;
                    }

                    //If this exhibition is already get its explanation then it is also eligible for getting target exhibition.
                    if (exhibitionCopyList[i].randomExplanation != "")
                    {
                        _randomExplanation = "\n    " + exhibitionCopyList[i].randomExplanation;

                        //If there is number rolled then assign target exhibition.
                        if (exhibitionCopyList[i].rolledNumber != -1)
                        {
                            //PENDING: Change this into dynamic if statement.
                            if (
                                exhibitionCopyList[i].targetExhibitionIndex[0] != -1 &&
                                exhibitionCopyList[i].targetExhibitionIndex[1] != -1
                                )
                            {
                                _targetExhibitionIndex0 = exhibitionCopyList[i].targetExhibitionIndex[0].ToString();
                                _targetExhibitionIndex1 = exhibitionCopyList[i].targetExhibitionIndex[1].ToString();
                                _targetExhibitionIndex  = "\n    Please visit exhibition " + _targetExhibitionIndex0 + " or " + _targetExhibitionIndex1;
                            }
                        }
                    }
                }

                //Accumulate all text.
                text = text + _exhibitionName + _randomExplanation + _targetExhibitionIndex;
            }

            //Display all text in the panel log.
            childTextLogText.text = text;
        }
    }
    void Update()
    {
        childTextLogText.fontSize = Screen.height*14/380;

        //Adjust this panel size so that it is as big as a standard Magic The Gathering cards.
        rectTransform.sizeDelta = new Vector2((Screen.width/3), ((Screen.width/3)*panelProportion));

        /*
        Control this game object visibility based on imageSwicth variable.
        These code below is intended to control visibility of this game object and its
            child.
        So that Log button can be used to toggle this game object and its child visibility and
            whether or not these game object is active or not.
        */
        if(imageSwitch == 1){

            childPanelScrollTextLogImage.enabled = true;
            childTextClickToDismissText.enabled = true;
            childTextLogText.enabled = true;
            image.enabled = true;

        }
        else if(imageSwitch == -1){

            childPanelScrollTextLogImage.enabled = false;
            childTextClickToDismissText.enabled = false;
            childTextLogText.enabled = false;
            image.enabled = false;

        }

        //PENDING: I think I can remove visitedExhibitionListCount and just use visitedExhibitiobList.Count for later on.
        visitedExhibitionListCount = visitedExhibitionList.Count;

        /*
        This codes below is for controlling how many exhibition have been visited by the player.
        The exhibition list will be reset when the reset button pressed.
        */
        if(visitedExhibitionListCount <= 0){

            /*
            This is the default text if there is nothing in the list or if the reset button ppressed.
            Hence, you need to set the list to  empty when you want this default text to be displayed.
            */
            childTextLogText.text = "You have not visited any exhibition yet!\nPlease visit the primary exhibition.";

            /*
            If the list count is 0, then there is no exhibition has been visited by the visitor,
                hence, here I initiated the List.
            */
            exhibitionCopyList = new List<ExhibitionCopy>();

        }

        /*
        If there is a thing at least one, within the list this program will showed how many and what
            kind of exhibition has visited.
        */
        else if(visitedExhibitionListCount > 0){

            //Check so that only one exhibition could enter the list everytime there is a change in visitedExhibitionListCount.
            if(visitedExhibitionListCount != visitedExhibitionListCountPrevious){

                //Create a temporary holder for a copy of newly entered exhibition.
                exhibitionCopyTemporary = new ExhibitionCopy();
                //Assign the name of newly entered/visited exhibition.
                exhibitionCopyTemporary.exhibitionName = visitedExhibitionList[visitedExhibitionList.Count - 1];
                //Put this temporary exhibition into the list, so that next time we can use it again.
                exhibitionCopyList.Add(exhibitionCopyTemporary);

                if(visitedExhibitionListCount == 1){

                    //Add notification when visitor visited new exhibition.
                    SetNotification(
                        "Welcome to "
                        + GameObject.Find(exhibitionCopyTemporary.exhibitionName).gameObject.transform.Find("Text").gameObject.GetComponent<Text>().text
                        + ", please tap your dice."
                    );

                }
                else{

                    int indexLastGameObject = -1;
                    //Backward loop through all visitedExhibitionList to find out the latest properly visited exhibition.
                    for(int i = visitedExhibitionList.Count - 1; i >= 0; i --){
                        if(
                            exhibitionCopyList[i].properlyVisited == true
                            && indexLastGameObject == -1
                        ){
                            indexLastGameObject = i;
                        }
                    }

                    if(
                        indexLastGameObject != -1 &&
                        (exhibitionCopyTemporary.exhibitionName == "ButtonExhibition" + exhibitionCopyList[indexLastGameObject].targetExhibitionIndex[0]
                        || exhibitionCopyTemporary.exhibitionName == "ButtonExhibition" + exhibitionCopyList[indexLastGameObject].targetExhibitionIndex[1])
                    ){

                        //Add notification when visitor visited new exhibition.
                        SetNotification(
                            "Welcome to "
                            + GameObject.Find(exhibitionCopyTemporary.exhibitionName).gameObject.transform.Find("Text").gameObject.GetComponent<Text>().text
                            + ", please tap your dice."
                        );

                    }
                    else if(indexLastGameObject == -1){

                        string currentExhibition =
                            GameObject.Find(exhibitionCopyTemporary.exhibitionName).gameObject.transform.Find("Text").gameObject.GetComponent<Text>().text;

                        if(currentExhibition != "Exhibition Prime"){

                            SetNotification(
                                "Welcome to "
                                + currentExhibition
                                + ", please visit Exhibition Prime."
                            );

                        }
                        else if(currentExhibition == "Exhibition Prime"){

                            SetNotification(
                                "Welcome to "
                                + currentExhibition
                                + ", please tap your dice."
                            );

                        }

                    }
                    else{

                        //Add notification when visitor visited new exhibition.
                        SetNotification(
                            "Welcome to "
                            + GameObject.Find(exhibitionCopyTemporary.exhibitionName).gameObject.transform.Find("Text").gameObject.GetComponent<Text>().text
                            + ", please visit Exhibition "
                            + exhibitionCopyList[indexLastGameObject].targetExhibitionIndex[0]
                            + " or "
                            + exhibitionCopyList[indexLastGameObject].targetExhibitionIndex[1]
                            + "."
                        );

                    }

                }

                //Make sure this thing can only happened once.
                visitedExhibitionListCountPrevious = visitedExhibitionListCount;

            }

            //Check whether or not the latest exhibition visited is already tapped and received its random explanation.
            if(exhibitionCopyList[exhibitionCopyList.Count - 1].randomExplanation != ""){

                SetNotification(
                    exhibitionCopyList[exhibitionCopyList.Count - 1].randomExplanation
                    + ", please shake your dice."
                );
                explanation = exhibitionCopyList[exhibitionCopyList.Count - 1].randomExplanation;
                if(explanation != explanationPrevious){

                    scriptPanelContentShowCards.AddToExplanationHashSet(
                        exhibitionCopyList[exhibitionCopyList.Count - 1].randomExplanation,
                        exhibitionCopyList[exhibitionCopyList.Count - 1].exhibitionName
                    );
                    explanationPrevious = explanation;

                }

                /*
                If the latest exhibition has received its random explanation, then check whether or not dice has rolled within
                    this exhibition.
                */
                if(exhibitionCopyList[exhibitionCopyList.Count - 1].rolledNumber != -1){

                    /*
                    If this exhibition is not button exhibition prime, which means the latest visited exhibition is a normal
                        exhibition.
                    */
                    if(exhibitionCopyList[exhibitionCopyList.Count - 1].exhibitionName == "ButtonExhibitionPrime"){

                        //PENDING: I should have make this dynamic, so that it can handle dynamic amount of explanation.
                        if(exhibitionCopyList[exhibitionCopyList.Count - 1].rolledNumber <= scriptExhibitionDatabase.exhibitionArray[0].threshold){

                            exhibitionCopyList[exhibitionCopyList.Count - 1].targetExhibitionIndex[0] =
                                scriptExhibitionDatabase.exhibitionArray[0].targetExhibitionArray[0];
                            exhibitionCopyList[exhibitionCopyList.Count - 1].targetExhibitionIndex[1] =
                                scriptExhibitionDatabase.exhibitionArray[0].targetExhibitionArray[1];

                        }
                        else if(exhibitionCopyList[exhibitionCopyList.Count - 1].rolledNumber > scriptExhibitionDatabase.exhibitionArray[0].threshold){

                            exhibitionCopyList[exhibitionCopyList.Count - 1].targetExhibitionIndex[0] =
                                scriptExhibitionDatabase.exhibitionArray[0].targetExhibitionArray[2];
                            exhibitionCopyList[exhibitionCopyList.Count - 1].targetExhibitionIndex[1] =
                                scriptExhibitionDatabase.exhibitionArray[0].targetExhibitionArray[3];

                        }

                    }

                    /*
                    These codes below are intended when the latest exhibitiob user visited is a exhibitiob prime.
                    Basically the same code unless the index is 0 no matter what happened.
                    */
                    else{

                        //PENDING: Same like above, I need to make this dynamic, perhaps using loop and change this into a List instead of using array.
                        if(exhibitionCopyList[exhibitionCopyList.Count - 1].rolledNumber <= scriptExhibitionDatabase.exhibitionArray[0].threshold){

                            exhibitionCopyList[exhibitionCopyList.Count - 1].targetExhibitionIndex[0] =
                                scriptExhibitionDatabase.exhibitionArray[
                                    int.Parse(exhibitionCopyList[exhibitionCopyList.Count - 1].exhibitionName.Replace("ButtonExhibition", ""))
                                ].targetExhibitionArray[0];
                            exhibitionCopyList[exhibitionCopyList.Count - 1].targetExhibitionIndex[1] =
                                scriptExhibitionDatabase.exhibitionArray[
                                    int.Parse(exhibitionCopyList[exhibitionCopyList.Count - 1].exhibitionName.Replace("ButtonExhibition", ""))
                                ].targetExhibitionArray[1];

                        }

                        else if(exhibitionCopyList[exhibitionCopyList.Count - 1].rolledNumber > scriptExhibitionDatabase.exhibitionArray[0].threshold){

                            exhibitionCopyList[exhibitionCopyList.Count - 1].targetExhibitionIndex[0] =
                                scriptExhibitionDatabase.exhibitionArray[
                                    int.Parse(exhibitionCopyList[exhibitionCopyList.Count - 1].exhibitionName.Replace("ButtonExhibition", ""))
                                ].targetExhibitionArray[2];
                            exhibitionCopyList[exhibitionCopyList.Count - 1].targetExhibitionIndex[1] =
                                scriptExhibitionDatabase.exhibitionArray[
                                    int.Parse(exhibitionCopyList[exhibitionCopyList.Count - 1].exhibitionName.Replace("ButtonExhibition", ""))
                                ].targetExhibitionArray[3];

                        }

                    }

                    string[] targetExhibitionTemp = new string[2];
                    //Fixing the primary exhibition.
                    for(int i = 0; i < 2; i ++){
                        if(exhibitionCopyList[exhibitionCopyList.Count - 1].targetExhibitionIndex[i] == 0){
                            targetExhibitionTemp[i] = "Prime";
                        }
                        else{
                            targetExhibitionTemp[i] = "" + exhibitionCopyList[exhibitionCopyList.Count - 1].targetExhibitionIndex[i];
                        }
                    }

                    SetNotification(

                        "You get "
                        + exhibitionCopyList[exhibitionCopyList.Count - 1].rolledNumber
                        + ", please visit exhibition "
                        + targetExhibitionTemp[0]
                        + " or "
                        + targetExhibitionTemp[1]
                        + "."
                    );

                }

            }

            /*
            Temporary string to display in panel log.
            This string will be iterated through all visited exhibition when there is a change within visitedExhibitionListCount.
            */
            string text = "";

            //Loop through copy of exhibition.
            for(int i = 0; i < exhibitionCopyList.Count; i ++){

                /*
                Check whether or not a copy of exhibition is a properly visited or not.
                Basically if a copy of exhibition has received explanation, rolled number, and destined targets
                    you can say that that copy of exhibition is properly visited.
                */
                if(exhibitionCopyList[i].exhibitionName != ""){

                    if(exhibitionCopyList[i].randomExplanation != ""){

                        if(exhibitionCopyList[i].rolledNumber != -1){

                            if(
                                exhibitionCopyList[i].targetExhibitionIndex[0] != -1 &&
                                exhibitionCopyList[i].targetExhibitionIndex[1] != -1
                            ){

                                exhibitionCopyList[i].properlyVisited = true;

                            }
                        }

                    }

                }

                /*
                Temporary string that will held either blank string or not.
                Basically if a copy of an exhibition has all these string filled then
                    this particular copy of an exhibition is properly visited.
                */
                string _exhibitionName = "";
                string _randomExplanation = "";
                string _targetExhibitionIndex = "";
                string _targetExhibitionIndex0 = "";
                string _targetExhibitionIndex1 = "";

                if(exhibitionCopyList[i].exhibitionName != ""){

                    /*
                    If this exhibition is not the first exhibition visited then put line break in
                        the front of the string.
                    */
                    if(i > 0){

                        _exhibitionName = "\n" + exhibitionCopyList[i].exhibitionName;

                    }

                    /*
                    If this is the first exhibition visited, means this exhibition is exhibition prime,
                        then it is not necessary to put line break in front of the string.
                    */
                    else{

                        _exhibitionName = exhibitionCopyList[i].exhibitionName;

                    }

                    //If this exhibition is already get its explanation then it is also eligible for getting target exhibition.
                    if(exhibitionCopyList[i].randomExplanation != ""){

                        _randomExplanation = "\n    " + exhibitionCopyList[i].randomExplanation;

                        //If there is number rolled then assign target exhibition.
                        if(exhibitionCopyList[i].rolledNumber != -1){

                            //PENDING: Change this into dynamic if statement.
                            if(
                                exhibitionCopyList[i].targetExhibitionIndex[0] != -1 &&
                                exhibitionCopyList[i].targetExhibitionIndex[1] != -1
                            ){

                                _targetExhibitionIndex0 = exhibitionCopyList[i].targetExhibitionIndex[0].ToString();
                                _targetExhibitionIndex1 = exhibitionCopyList[i].targetExhibitionIndex[1].ToString();
                                _targetExhibitionIndex = "\n    Please visit exhibition " + _targetExhibitionIndex0 + " or " + _targetExhibitionIndex1;

                            }

                        }

                    }

                }

                //Accumulate all text.
                text = text + _exhibitionName + _randomExplanation + _targetExhibitionIndex;

            }

            //Display all text in the panel log.
            childTextLogText.text = text;

        }
    }