UnityGameProjectsCode / Rise2Point0Game / ResolutionGridFiller.cs
ResolutionGridFiller.cs
Raw
using System.Collections.Generic;
using TMPro;
using UnityEngine;
using UnityEngine.UI;

public class ResolutionGridFiller : MonoBehaviour
{
    public GameObject gridObject;
    private SettingsManager settingsMgr;
    private List<GameObject> createdGridEntries = new List<GameObject>();
    private int currentItemIndex;

    private void Start()
    {
        settingsMgr = ObjectManager.GetObject(4).GetComponent<SettingsManager>();
    }

    public void FillGrid(string[] resTexts, int currentIndex)
    {
        for (int i = 0; i < resTexts.Length; i++)
        {
            GameObject newGridEntry = Instantiate(gridObject as GameObject, this.transform);
            newGridEntry.GetComponentInChildren<TextMeshProUGUI>().text = resTexts[i];

            if (i != currentIndex)
                newGridEntry.GetComponent<Toggle>().isOn = false;

            newGridEntry.GetComponent<ResolutionItem>().SetResIndex(i);

            createdGridEntries.Add(newGridEntry);
        }

        SetExplicitNavigation();
        currentItemIndex = currentIndex;
    }

    private void SetExplicitNavigation()
    {
        //for each added board entry set the explicit movement for buttons.
        int indexID = 0;

        foreach (GameObject resolutionEntry in createdGridEntries)
        {
            if (indexID == 0)
            {
                var navigation = resolutionEntry.GetComponent<Toggle>().navigation;

                navigation.selectOnDown = createdGridEntries[1].GetComponent<Toggle>();
                navigation.selectOnUp = createdGridEntries[createdGridEntries.Count - 1].GetComponent<Toggle>();

                resolutionEntry.GetComponent<Toggle>().navigation = navigation;
                indexID++;
            }
            else if (indexID < createdGridEntries.Count - 1)
            {
                var navigation = resolutionEntry.GetComponent<Toggle>().navigation;

                navigation.selectOnDown = createdGridEntries[indexID + 1].GetComponent<Toggle>();
                navigation.selectOnUp = createdGridEntries[indexID - 1].GetComponent<Toggle>();

                resolutionEntry.GetComponent<Toggle>().navigation = navigation;
                indexID++;
            }
            else if (indexID == createdGridEntries.Count - 1)
            {
                var navigation = resolutionEntry.GetComponent<Toggle>().navigation;

                navigation.selectOnDown = createdGridEntries[0].GetComponent<Toggle>();
                navigation.selectOnUp = createdGridEntries[indexID - 1].GetComponent<Toggle>();

                resolutionEntry.GetComponent<Toggle>().navigation = navigation;
                indexID++;
            }
        }
    }

    public GameObject GetGridObject(int index)
    {
        return createdGridEntries[index];
    }

    public void TurnOffInactiveItems()
    {
        for (int i = 0; i < createdGridEntries.Count; i++)
        {
            if (i != currentItemIndex)
                createdGridEntries[i].GetComponent<Toggle>().isOn = false;
        }
    }

    public void ClearGrid()
    {
        for (int i = createdGridEntries.Count - 1; i >= 0; i--)
        {
            Destroy(createdGridEntries[i]);
        }

        createdGridEntries.Clear();
    }

    public void SetResolution(int position)
    {
        currentItemIndex = position;
        settingsMgr.SetScreenResolution(position);
    }
}