// Instantiate Leaderboard entry Gameobject/prefab and apply the correct data to it.
    // WARNING, PREFAB COMPONENTS MUST BE IN THE RIGHT ORDER!!!
    public void UpdateLeaderboard(List <DataStructs.LeaderboardEntry> leaderboardList)
    {
        DestroyChildren(scrollRectParent);

        leaderboardList.Reverse();

        int numberToShow = leaderboardList.Count;

        if (leaderboardList.Count > maxNumberToShow)
        {
            numberToShow = maxNumberToShow;
        }

        for (int i = 0; i < numberToShow; i++)
        {
            DataStructs.LeaderboardEntry entry = leaderboardList[i];
            GameObject newEntryGameObject      = MonoBehaviour.Instantiate(leaderboardEntryPrefab, scrollRectParent.transform);

            // Apply the text
            Text[] textArray = newEntryGameObject.GetComponentsInChildren <Text>();
            FormatPrefabText(textArray, entry);

            // Apply Top 3 Entries Special Formats
            if (i < 3)
            {
                // Remove Text Rank Gameobject but store positional data for our new Gameobject that is about to be created
                Vector3 postionalData = textArray[0].gameObject.transform.localPosition;
                MonoBehaviour.Destroy(textArray[0].gameObject);

                // Create new game object and set image to be from the resources folder according to "i" value
                GameObject placingGameObject       = new GameObject("Image Rank");
                Image      image                   = placingGameObject.AddComponent <Image>() as Image;
                Sprite     leaderboardPlacingImage = Resources.Load <Sprite>("Leaderboard/placing" + (i + 1).ToString()); // Get leaderboard image
                image.sprite         = leaderboardPlacingImage;
                image.preserveAspect = true;

                // Position the new gameobject correctly and use the "RectTransform" Cast to modify the size of the image
                placingGameObject.transform.SetParent(newEntryGameObject.transform.transform);
                placingGameObject.transform.localScale    = new Vector3(1, 1, 1);
                placingGameObject.transform.localPosition = postionalData;
                RectTransform positionRect = (RectTransform)placingGameObject.transform;
                positionRect.sizeDelta = new Vector2(127, 63.5f);

                // Set colours of the scores =)
                switch (i)
                {
                case 0:
                    textArray[3].color = new Color32(255, 192, 35, 255);
                    break;

                case 1:
                    textArray[3].color = new Color32(240, 240, 240, 255);
                    break;

                case 2:
                    textArray[3].color = new Color32(216, 75, 54, 255);
                    break;

                default:
                    textArray[3].color = new Color32(137, 137, 137, 255);
                    break;
                }
            }

            // Apply Region Images
            Image[] imageArray = newEntryGameObject.GetComponentsInChildren <Image>();
            imageArray[1].sprite = Resources.Load <Sprite>("Avatars/" + entry.profilePicture.ToString());
            imageArray[3].sprite = Resources.Load <Sprite>("Countryflags/" + entry.region);

            newEntryGameObject.transform.SetSiblingIndex(i);
        }

        AddMyLeaderBoardEntry(FirebaseDB_Leaderboards.GenerateRandomEntry(560412));
        AddShowMoreEntry();
    }
 void InitializeFirebase()
 {
     FirebaseApp.DefaultInstance.SetEditorDatabaseUrl(DatabaseURL); // Apply database URL
     LeaderboardDB = new FirebaseDB_Leaderboards();                 // This is the leaderboard class that gets and sets leaderboard data
 }