Example #1
0
    /// <summary>
    /// Changes how the UI should look like based on the game phase of the AR Player
    /// </summary>
    /// <param name="manager">The SetUp Manager that tells what game phase it is</param>
    public void SetUpUI(ARSetUp manager)
    {
        switch (manager.CurrGamePhase)
        {
        //Adds a button to complete scanning phase
        case GamePhase.Scanning:
            planeAreaText.gameObject.SetActive(true);
            planeCountText.gameObject.SetActive(true);
            ARUI.SetActive(true);

            if (!doneBtn)
            {
                //loops through to find the correct button
                foreach (Button b in ARUI.GetComponentsInChildren <Button>())
                {
                    if (b.gameObject.name == "Done")
                    {
                        doneBtn = b;
                        break;
                    }
                }
            }

            //Callback function after clicking the 'done' button
            doneBtn.onClick.AddListener(() =>
            {
                if (manager.CheckAggregrateArea())
                {
                    GamePhase nextLvl = (GamePhase)((int)manager.CurrGamePhase + 1);
                    manager.SetPhaseTo(nextLvl);
                }
                else
                {
                    message.SetMessage("Not enough play area! (Recommended: 3+ planes and over 4 units of play area)");
                }
            });
            break;

        //UI for placing traps
        case GamePhase.Placing:
            planeAreaText.gameObject.SetActive(false);
            planeCountText.gameObject.SetActive(false);
            ARUI.SetActive(true);

            //activates the 'Done' button
            doneBtn.gameObject.SetActive(true);

            //'resets' previously created button
            if (arUIbuttons != null)
            {
                foreach (GameObject obj in arUIbuttons)
                {
                    Destroy(obj);
                }
            }

            //refills the array of buttons
            arUIbuttons = new GameObject[manager.trapList.Length];
            for (int i = 0; i < manager.trapList.Length; i++)
            {
                arUIbuttons[i] = Instantiate(trapButtonPrefab, ARUI.transform);
                arUIbuttons[i].GetComponent <RectTransform>().anchoredPosition = new Vector2(-20, -100 - i * (trapButtonPrefab.GetComponent <RectTransform>().sizeDelta.y + 40));
                arUIbuttons[i].name = "TrapBtn";
                arUIbuttons[i].GetComponent <Image>().sprite = manager.trapList[i].image;
            }

            //loop through the buttons and hook up events
            for (int i = 0; i < arUIbuttons.Length; i++)
            {
                //variables for scope purposes
                int          num       = i;
                int          count     = arUIbuttons.Length;
                GameObject[] arbuttons = arUIbuttons;

                //callback function
                UnityAction action = () =>
                {
                    manager.SetCurrTrapSelection(num);

                    //loops through all the buttons
                    for (int j = 0; j < count; j++)
                    {
                        //sets currently selected button to un-interactable
                        if (j == num)
                        {
                            arbuttons[j].GetComponent <Button>().interactable = false;
                        }

                        //sets other buttons (if count > 0) to interactable
                        else if (manager.trapList[j].count > 0)
                        {
                            arbuttons[j].GetComponent <Button>().interactable = true;
                        }
                    }
                };

                arUIbuttons[i].GetComponent <Button>().onClick.AddListener(action);
            }

            UpdateTrapCount(manager);
            break;

        //Disable UI elements
        case GamePhase.Playing:
            ARUI.SetActive(false);
            //foreach (Button b in ARUI.GetComponentsInChildren<Button>())
            //    b.gameObject.SetActive(false);
            break;

        default:
            ARUI.SetActive(false);
            break;
        }

        foreach (Text t in ARUI.GetComponentsInChildren <Text>())
        {
            if (t.name == "Phase")
            {
                t.text = "Current Phase: " + manager.CurrGamePhase.ToString();
                break;
            }
        }
    }