예제 #1
0
    /// <summary>
    ///  Loads battle/stage scene and sets active scene to it.
    /// </summary>
    /// <param name="sceneName"></param>
    /// <param name="stageInfoBase"></param>
    /// <returns></returns>
    private IEnumerator LoadBattleRoutine(string sceneName, StageInfoBase stageInfoBase)
    {
        SceneManager.LoadScene("loadingScene", LoadSceneMode.Additive);
        yield return(null);

        AsyncOperation asyncOperation  = SceneManager.LoadSceneAsync("battleUI", LoadSceneMode.Additive);
        AsyncOperation asyncOperation2 = SceneManager.LoadSceneAsync(sceneName, LoadSceneMode.Additive);

        while (!asyncOperation.isDone || !asyncOperation2.isDone)
        {
            yield return(null);
        }

        Scene scene = SceneManager.GetSceneByName(sceneName);

        SceneManager.SetActiveScene(scene);

        SetUpBattleScene(scene, stageInfoBase);

        StageManager.Instance.BattleManager.selectedTeam = selectedTeamNum;
        StageManager.Instance.BattleManager.SetStageBase(stageInfoBase);
        StageManager.Instance.BattleManager.InitializeProjectilePool();
        StageManager.Instance.InitalizeStage();
        InputManager.Instance.ResetManager();
        ParticleManager.Instance.ClearParticleSystems();
        ParticleManager.Instance.InitializeHitEffectInstances();
        isInBattle = true;
        SceneManager.UnloadSceneAsync("mainMenu");
        yield return(null);

        currentCoroutine = null;

        UIManager.Instance.LoadingScreen.endLoadingScreen = true;
    }
예제 #2
0
    public void AddToStageClearCount(string stageId)
    {
        if (!stageClearInfo.ContainsKey(stageId))
        {
            stageClearInfo.Add(stageId, 0);
        }
        stageClearInfo[stageId]++;

        if (stageClearInfo[stageId] > 0)
        {
            StageInfoBase stage         = ResourceManager.Instance.GetStageInfo(stageId);
            StageInfoBase unlockedStage = ResourceManager.Instance.GetStageInfo(stage.requiredToUnlock);

            if (!stageClearInfo.ContainsKey(stage.requiredToUnlock))
            {
                stageClearInfo.Add(stage.requiredToUnlock, 0);
            }

            if (unlockedStage.act != stage.act)
            {
                if (!worldUnlockInfo.ContainsKey(unlockedStage.act) || !worldUnlockInfo[unlockedStage.act])
                {
                    worldUnlockInfo.Add(unlockedStage.act, true);
                }
            }
        }

        SaveManager.CurrentSave.SavePlayerData();
    }
예제 #3
0
 public void SetStageBase(StageInfoBase stage)
 {
     stageInfo      = stage;
     Waves          = stage.enemyWaves;
     stageLevel     = stage.monsterLevel;
     EnemyPool      = new EnemyPool(ResourceManager.Instance.EnemyPrefab);
     DamageTextPool = new DamageTextPool(ResourceManager.Instance.DamageTextPrefab);
 }
예제 #4
0
    public void SetStageInfo(StageInfoBase stageInfoBase)
    {
        stageInfo      = stageInfoBase;
        stageNum       = stageInfoBase.stage;
        nameText.text  = "Stage " + stageInfo.act + "-" + stageInfo.stage;
        levelText.text = "Lv. " + stageInfo.monsterLevel;
        waveText.text  = "Waves: " + stageInfo.enemyWaves.Count;
        int clearCount = GameManager.Instance.PlayerStats.GetStageClearCount(stageInfo.idName);

        if (clearCount == 0)
        {
            clearText.text = "";
        }
        else if (clearCount > 1000)
        {
            clearText.text = "Cleared: 1000+";
        }
        else
        {
            clearText.text = "Cleared: " + clearCount;
        }

        bool isStageUnlocked = false;

        isStageUnlocked = GameManager.Instance.PlayerStats.IsStageUnlocked(stageInfo.idName);

        Button button = GetComponent <Button>();

        button.interactable = isStageUnlocked;
        if (isStageUnlocked)
        {
            lockImage.gameObject.SetActive(false);

            if (clearCount == 0)
            {
                stageBackgroundColor.color = new Color(0.82f, 0.41f, 0.41f);
            }
            else
            {
                stageBackgroundColor.color = new Color(0.24f, 0.73f, 0.44f);
            }
        }
        else
        {
            stageBackgroundColor.color = new Color(0.6f, 0.6f, 0.6f);
        }
    }
예제 #5
0
    /// <summary>
    /// Loads loading scene and starts coroutine for the battle/stage loading.
    /// </summary>
    /// <param name="stageInfoBase"></param>
    public void MoveToBattle(StageInfoBase stageInfoBase)
    {
        UIManager.Instance.CloseAllWindows();
        SetTimescale(1);

        SaveManager.SaveAll();
        currentSceneName = "stage" + stageInfoBase.sceneAct + '-' + stageInfoBase.sceneStage;

        if (currentCoroutine == null)
        {
            currentCoroutine = StartCoroutine(LoadBattleRoutine(currentSceneName, stageInfoBase));
        }
        else
        {
            return;
        }

        Camera.main.transform.position = new Vector3(0, 0, -10);

        isInMainMenu = false;
    }
예제 #6
0
    public void StageButtonOnClick(StageInfoBase stageInfo)
    {
        confirmButton.interactable = false;
        isTeamSelected             = false;
        selectedStage = stageInfo;
        UIManager.Instance.OpenWindow(teamSelectParent, false);
        for (int i = 0; i < teamSelectionPanels.Count; i++)
        {
            TeamSelectionPanel selectionPanel = teamSelectionPanels[i];
            Button             button         = selectionPanel.GetComponent <Button>();
            button.onClick.RemoveAllListeners();
            button.onClick.AddListener(delegate { TeamPanelOnClick(selectionPanel); });
            selectionPanel.GetComponent <Image>().color = Color.white;

            int heroCount = 0;
            for (int j = 0; j < 5; j++)
            {
                HeroData hero = GameManager.Instance.PlayerStats.heroTeams[i][j];
                TeamSelectionHeroSlot teamSelectionHeroSlot = teamSelectionPanels[i].heroSlots[j];
                teamSelectionHeroSlot.GetComponent <Image>().color = new Color(0.7f, 0.7f, 0.7f);
                if (hero != null)
                {
                    teamSelectionHeroSlot.nameText.text  = hero.Name;
                    teamSelectionHeroSlot.levelText.text = "Lv" + hero.Level.ToString("N0");
                    teamSelectionHeroSlot.sprite.sprite  = ResourceManager.Instance.GetHeroSprite(hero.spriteName);
                    teamSelectionHeroSlot.sprite.color   = Color.white;
                    heroCount++;
                }
                else
                {
                    teamSelectionHeroSlot.nameText.text  = "";
                    teamSelectionHeroSlot.levelText.text = "";
                    teamSelectionHeroSlot.sprite.color   = new Color(1f, 1f, 1f, 0f);
                }
            }

            button.interactable = heroCount > 0;
        }
    }
예제 #7
0
    /// <summary>
    /// Coroutine for loading the UI for battle scene. Instantiates actors for the selected hero team.
    /// </summary>
    /// <param name="sceneToMergeTo"></param>
    /// <returns></returns>
    private void SetUpBattleScene(Scene sceneToMergeTo, StageInfoBase stageInfoBase)
    {
        Scene scene = SceneManager.GetSceneByName("battleUI");

        SceneManager.MergeScenes(scene, sceneToMergeTo);
        SummonScrollWindow summonScroll = UIManager.Instance.SummonScrollWindow;

        HashSet <AbilityBase> abilitiesInUse = new HashSet <AbilityBase>();
        HashSet <EnemyBase>   enemiesInUse   = new HashSet <EnemyBase>();

        inBattleHeroes.Clear();

        foreach (HeroData data in PlayerStats.heroTeams[selectedTeamNum])
        {
            if (data == null)
            {
                continue;
            }

            data.ClearTemporaryBonuses(true);

            GameObject actor = Instantiate(ResourceManager.Instance.HeroPrefab.gameObject);
            data.InitHeroActor(actor);
            HeroActor heroActor = actor.GetComponent <HeroActor>();

            if (heroActor == null)
            {
                continue;
            }

            foreach (AbilityBase abilityBase in heroActor.GetAbilitiyBasesInList())
            {
                abilitiesInUse.Add(abilityBase);
                if (abilityBase.hasLinkedAbility)
                {
                    AbilityBase linkedBase = ResourceManager.Instance.GetAbilityBase(abilityBase.linkedAbility.abilityId);
                    while (linkedBase != null)
                    {
                        abilitiesInUse.Add(linkedBase);

                        if (linkedBase.hasLinkedAbility)
                        {
                            linkedBase = ResourceManager.Instance.GetAbilityBase(linkedBase.linkedAbility.abilityId);
                        }
                        else
                        {
                            linkedBase = null;
                        }
                    }
                }
            }

            summonScroll.AddHeroActor(heroActor);
            inBattleHeroes.Add(data);
        }

        foreach (EnemyWave enemyWave in stageInfoBase.enemyWaves)
        {
            foreach (EnemyWaveItem enemyWaveItem in enemyWave.enemyList)
            {
                EnemyBase enemyBase = ResourceManager.Instance.GetEnemyBase(enemyWaveItem.enemyName);
                enemiesInUse.Add(enemyBase);
                foreach (EnemyBase.EnemyAbilityBase ability in enemyBase.abilitiesList)
                {
                    abilitiesInUse.Add(ResourceManager.Instance.GetAbilityBase(ability.abilityName));
                }
            }
        }

        /*
         * foreach (AbilityBase abilityBase in abilitiesInUse)
         *  Debug.Log(abilityBase.idName);
         */

        ResourceManager.Instance.LoadAbilitySpritesToBeUsed(abilitiesInUse);
        ResourceManager.Instance.LoadEnemySpritesToBeUsed(enemiesInUse);
    }