/// <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; }
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(); }
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); }
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); } }
/// <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; }
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; } }
/// <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); }