예제 #1
0
    IEnumerator DisplayUpgrade(List <UpgradeChoice> choices)
    {
        upgradesIntroAnimator.SetBool("shown", true);
        yield return(new WaitForSeconds(upgradeDisplayDelay));

        int amount = 0;

        for (int i = 0; i < choices.Count; i++)
        {
            amount += choices[i].choices.Length;
        }

        int count = 0;

        UpgradeData[] datas = new UpgradeData[amount];
        for (int i = 0; i < choices.Count; i++)
        {
            for (int j = 0; j < choices[i].choices.Length; j++)
            {
                datas[count] = config.upgradeDatas[choices[i].choices[j]];
                count++;
            }
        }

        currentDisplays = new UpgradeChoiceDisplayUI[amount];

        float distance   = displayDistancesByAmount[amount];
        float minPos     = (-1 * (distance * (amount - 1))) / 2f;
        float uiDistance = displayUIDistancesByAmount[amount];
        float uiMinPos   = (-1 * (uiDistance * (amount - 1))) / 2f;

        for (int i = 0; i < amount; i++)
        {
            UpgradeChoiceDisplayUI newDisplayUI = Instantiate(upgradeChoiceDisplayUI, displayUIParent.transform).GetComponent <UpgradeChoiceDisplayUI>();
            UpgradeChoiceDisplay   newDisplay   = Instantiate(upgradeChoiceDisplay, displayParent.transform).GetComponent <UpgradeChoiceDisplay>();

            currentDisplays[i]         = newDisplayUI;
            newDisplayUI.choiceDisplay = newDisplay;

            RectTransform rt       = newDisplayUI.GetComponent <RectTransform>();
            RectTransform parentRT = displayUIParent.GetComponent <RectTransform>();
            rt.anchoredPosition = new Vector2(uiMinPos + (uiDistance * i), parentRT.anchoredPosition.y);

            Vector3 displayPos = new Vector3(0, 0, displayDistFromCamera);
            displayPos.x = minPos + distance * i;
            newDisplay.transform.localPosition  = displayPos;
            newDisplay.rotator.localEulerAngles = new Vector3(0, displayInitialRot, 0);
            newDisplay.rotator.DOLocalRotate(Vector3.zero, displaySpinningSpeed).SetEase(displaySpinningEase, displaySpinningEaseStrength);
            newDisplayUI.Initialize(datas[i]);

            yield return(new WaitForSeconds(delayBetweenDisplays));
        }
    }
예제 #2
0
    public void PickUpgrade(UpgradeChoiceDisplayUI clickedUI)
    {
        if (playerStats.upgradesPossessed.Length >= clickedUI.upgradeIndex)
        {
            playerStats.upgradesPossessed[clickedUI.upgradeIndex]        = true;
            playerStats.upgradeChoicesMade[clickedUI.upgradeChoiceIndex] = true;
            for (int i = 0; i < currentDisplays.Length; i++)
            {
                currentDisplays[i].Disappear();
            }

            DataManager.Instance.Save(SceneType.map);
        }

        upgradesIntroAnimator.SetBool("shown", false);
        MapManager.Instance.NextLevelIfSet();
        UpgradesDisplay.Instance.AddDisplay(config.upgradeDatas[clickedUI.upgradeIndex]);
    }