Beispiel #1
0
    /// <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 + " - 이런 아이디 없음");
                }
            }
        }
    }
Beispiel #3
0
    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;
    }
Beispiel #4
0
    /// <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;
    }