/// <summary> 던전 정보 초기화 </summary> IEnumerator InitDayDungeonBaseData() { JsonData json = null; // 던전 데이터 불러온다. yield return(StartCoroutine(AssetLoader.LoadJsonData("data/daydungeon", "DayDungeon", x => json = x))); dayDungeonBaseDataDic = new Dictionary <string, DayDungeonBaseData>(); for (int i = 0; i < json.Count; i++) { DayDungeonBaseData dungeon = new DayDungeonBaseData(json[i]); dayDungeonBaseDataDic.Add(dungeon.id, dungeon); } }
public static void InitBlueTeam() { blueTeamDataList.Clear(); string key = UIDayDungeonLobby.Instance.currentTapDay.ToString() + "_" + UIDayDungeonLobby.Instance.dungeonLevel; if (GameDataManager.dayDungeonBaseDataDic.ContainsKey(key)) { DayDungeonBaseData data = GameDataManager.dayDungeonBaseDataDic[key]; for (int i = 0; i < data.monsterList.Count; i++) { DayDungeonMonsterData monster = data.monsterList[i]; for (int j = 0; j < monster.amount; j++) { if (GameDataManager.heroBaseDataDic.ContainsKey(monster.id)) { HeroBaseData heroBaseData = GameDataManager.heroBaseDataDic[monster.id]; HeroData hero = new HeroData(heroBaseData); hero.InitTestData(heroBaseData.id, monster.maxHp, monster.attackPower, monster.defensePower); blueTeamDataList.Add(hero); } else { Debug.LogError(monster.id + " - 이런 아이디 없음"); } } } if (data.bossData != null) { DayDungeonMonsterData boss = data.bossData; if (GameDataManager.heroBaseDataDic.ContainsKey(boss.id)) { HeroBaseData heroBaseData = GameDataManager.heroBaseDataDic[boss.id]; HeroData hero = new HeroData(heroBaseData); hero.InitTestData(heroBaseData.id, boss.maxHp, boss.attackPower, boss.defensePower); blueTeamDataList.Add(hero); } else { Debug.LogError(boss.id + " - 이런 아이디 없음"); } } } }
IEnumerator ShowCoroutine() { string key = currentTapDay.ToString() + "_" + dungeonLevel; //Debug.Log(key); if (GameDataManager.dayDungeonBaseDataDic.ContainsKey(key)) { DayDungeonBaseData data = GameDataManager.dayDungeonBaseDataDic[key]; textDungeonName.text = data.name; if (string.IsNullOrEmpty(data.bossData.id) == false) { if (bossObj != null) { bossObj.SetActive(false); bossObj.transform.SetParent(CharacterEmptyPool.Instance.transform); } GameObject go = null; yield return(StartCoroutine(CharacterEmptyPool.Instance.GetHero(data.bossData.id, x => go = x))); bossObj = go; bossObj.transform.position = pivot.position; bossObj.transform.SetParent(pivot); bossObj.transform.localScale = Vector3.one; //bossObj.SetActive(true); } for (int i = 0; i < monsterSlotList.Count; i++) { monsterSlotList[i].InitSlot(); } for (int i = 0; i < data.monsterList.Count; i++) { string monsterID = data.monsterList[i].id; int amount = data.monsterList[i].amount; if (GameDataManager.heroBaseDataDic.ContainsKey(monsterID)) { HeroBaseData heroBaseData = GameDataManager.heroBaseDataDic[monsterID]; monsterSlotList[i].InitSlot(heroBaseData, amount); } } battleStartButton.interactable = currentTapDay == BattleDayDungeonManager.today && dungeonLevel <= topLevel; if (GameDataManager.moneyBaseDataDic.ContainsKey(data.rewardID)) { MoneyBaseData moneyBase = GameDataManager.moneyBaseDataDic[data.rewardID]; AssetLoader.AssignImage(imageReward, "sptire/material", "Atlas_Material", moneyBase.spriteName); textRewardName.text = moneyBase.name; textRewardAmount.text = data.rewardAmont.ToStringABC(); } } if (bossObj != null) { bossObj.SetActive(true); } dayDungeonCanvas.enabled = true; lightPanel.SetActive(true); dayDungeonPanel.SetActive(true); showCoroutine = null; }
/// <summary> 배틀 진행 </summary> IEnumerator BattleProcess() { if (onStartBattle != null) { onStartBattle(); } float startTime = Time.time; float elapsedTime = 0f; ////페이드인 battlePhase = BattlePhase.FadeIn; fadeInProcess = 0f; while (elapsedTime < battleFadeInTime) { fadeInProcess = elapsedTime / battleFadeInTime; elapsedTime = Time.time - startTime; yield return(null); } fadeInProcess = 1f; //전투 준비 battlePhase = BattlePhase.Ready; //전투 battlePhase = BattlePhase.Battle; //영웅들 하나씩 출전 yield return(StartCoroutine(SpawnHero(BattleUnit.Team.Red))); //상대 팀 출전 yield return(StartCoroutine(SpawnHero(BattleUnit.Team.Blue))); //스테이지 시작 trigger for (int i = 0; i < redTeamList.Count; i++) { BattleHero hero = redTeamList[i]; for (int a = 0; a < hero.buffController.buffList.Count; a++) { Buff buff = hero.buffController.buffList[a]; if (buff.baseData.trigger != "OnStartStage") { continue; } if (buff.triggerProbability < UnityEngine.Random.Range(1, 10001)) { continue; } BattleUnit target = null; if (buff.baseData.triggerTarget == "SkillTarget") { target = hero; } else if (buff.baseData.triggerTarget == "BuffTarget") { target = hero; } if (target && !target.isDie) { target.buffController.AttachBuff(hero, buff.baseData.triggerBuff, 1, buff); } } } for (int i = 0; i < blueTeamList.Count; i++) { BattleHero hero = blueTeamList[i]; // 던전 버프 적용 string key = UIDayDungeonLobby.Instance.currentTapDay.ToString() + "_" + UIDayDungeonLobby.Instance.dungeonLevel; if (GameDataManager.dayDungeonBaseDataDic.ContainsKey(key)) { DayDungeonBaseData data = GameDataManager.dayDungeonBaseDataDic[key]; hero.buffController.AttachBuff(hero, data.buffID); } for (int a = 0; a < hero.buffController.buffList.Count; a++) { Buff buff = hero.buffController.buffList[a]; if (buff.baseData.trigger != "OnStartStage") { continue; } if (buff.triggerProbability < UnityEngine.Random.Range(1, 10001)) { continue; } BattleUnit target = null; if (buff.baseData.triggerTarget == "SkillTarget") { target = hero; } else if (buff.baseData.triggerTarget == "BuffTarget") { target = hero; } if (target && !target.isDie) { target.buffController.AttachBuff(hero, buff.baseData.triggerBuff, 1, buff); } } } // 전투 시작 시간 체크 pvpStartTime = Time.time + pvpTime; LoadingManager.Close(); isWin = false; //아군 혹은 적군 전부 사망할 때 까지 전투 상태 while (battlePhase == BattlePhase.Battle) { if (battleTeamList[0].isAllDie) { break; } if (battleTeamList[1].isAllDie) { isWin = true; break; } pvpReminingTime = pvpStartTime - Time.time; if (isGiveUp) { isWin = false; break; } if (pvpReminingTime <= 0) { // 남은 체력 비교 if (CompareHp()) { isWin = true; } break; } yield return(null); } battlePhase = BattlePhase.Finish; //yield return new WaitForSeconds(2f); //페이드아웃 battlePhase = BattlePhase.FadeOut; startTime = Time.time; elapsedTime = 0f; fadeOutProcess = 0f; while (elapsedTime < battleFadeOutTime) { fadeOutProcess = elapsedTime / battleFadeOutTime; elapsedTime = Time.time - startTime; yield return(null); } fadeOutProcess = 1f; if (isWin) { BattleDayDungeonManager.DayDungeonServerConnect(DayDungeonServerConnectType.BattleResult, ServerResult); } else { BattleEnd(); } yield break; }