예제 #1
0
    //IEnumerator CloseAfterRun()
    //{

    //    for (int i = 0; i < heroSelectSlotList.Count; i++)
    //    {
    //        if (heroSelectSlotList[i].battleHero != null)
    //            heroSelectSlotList[i].battleHero.skeletonAnimation.state.SetAnimation(0, heroSelectSlotList[i].battleHero.runAnimation, true);
    //    }

    //    yield return new WaitForSeconds(1.7f);
    //}


    /// <summary> 영웅 출전 </summary>
    IEnumerator StartExploration()
    {
        bool isNewBattle = Battle.currentBattleGroup.battleType != battleGroupID;

        //던전 아이디
        //string dungeonID = Battle.currentBattleGroupID;

        //선택된 영웅을 해당 씬에 배치하면서 전투 시작
        if (selectedHeroDataList == null || selectedHeroDataList.Count == 0)
        {
            Debug.Log("선택한 영웅이 없습니다.");
            yield break;
        }

        for (int i = 0; i < heroSelectSlotList.Count; i++)
        {
            if (heroSelectSlotList[i].battleHero != null)
            {
                heroSelectSlotList[i].battleHero.skeletonAnimation.state.SetAnimation(0, heroSelectSlotList[i].battleHero.spineAnimationRun /*runAnimation*/, true);
            }
        }


        //yield return new WaitForSeconds(2.2f);

        for (int i = 0; i < selectedHeroDataList.Count; i++)
        {
            HeroData d = HeroManager.heroDataDic[selectedHeroDataList[i].id];
            d.battleGroupID = battleGroupID;
            //d.isUsing = true;
        }

        //리스트 새로 만들어서 배틀그룹 생성
        List <HeroData> heroList = new List <HeroData>(selectedHeroDataList);

        if (isNewBattle)
        {
            UIFadeController.FadeOut(1f);

            while (!UIFadeController.isFinishFadeOut)
            {
                yield return(null);
            }
        }

        //Battle.CreateBattleGroup(battleGroupID, heroList);

        BattleGroup battleGroup = Battle.battleGroupList.Find(x => x.battleType == battleGroupID);

        //새로운 배틀그룹 생성
        if (!battleGroup)
        {
            Battle.CreateBattleGroup(battleGroupID, heroList);

            battleGroup = Battle.battleGroupList.Find(x => x.battleType == battleGroupID);

            while (!battleGroup.isInitialized)
            {
                yield return(null);
            }
        }
        //기본 배틀그룹의 멤버 변경
        else
        {
            //기존 멤버중 없던애는 배틀 그룹에 새로 추가 & 스폰
            for (int i = 0; i < heroList.Count; i++)
            {
                //기존 멤버는 가만히 냅둠
                if (battleGroup.originalMember.Find(x => x.heroData == heroList[i]))
                {
                    continue;
                }

                BattleHero battleHero = null;
                yield return(StartCoroutine(actorPool.Instance.GetActor(heroList[i].heroID, x => battleHero = x)));

                if (!battleHero)
                {
                    continue;
                }

                battleHero.team = BattleUnit.Team.Red;
                battleHero.Init(battleGroup, heroList[i]);
                battleHero.gameObject.SetActive(true);
                battleHero.ReGen();

                battleGroup.redTeamList.Add(battleHero);
                battleGroup.originalMember.Add(battleHero);
            }

            //기존 멤버 중 제외된 애는 배틀그룹에서 제외
            for (int i = battleGroup.originalMember.Count - 1; i >= 0; i--)
            {
                HeroData heroData = heroList.Find(x => x == battleGroup.originalMember[i].heroData);
                if (heroData != null)
                {
                    continue;
                }

                BattleHero h = battleGroup.originalMember[i];
                h.heroData.battleGroupID = string.Empty;
                h.Despawn();
                //battleGroup.originalMember[i].SetBattleGroup(null);
                //battleGroup.originalMember[i].gameObject.SetActive(false);
                battleGroup.originalMember.Remove(h);
                battleGroup.redTeamList.Remove(h);

                //h.heroData.battleGroupID = string.Empty;
                //h.Despawn();
            }

            //데이타 저장
            Battle.SaveStageInfo(battleGroup);
        }


        //Battle.ShowBattle(battleGroupID);

        //이렇게 안 하면 가장 마지막에 봤던 전투그룹으로 돌아가서 출전 후 다른 전투그룹이 비쳐짐
        Battle.lastBattleGroupID = battleGroupID;

        //전투 화면으로 돌아가고 창 닫기
        SceneLobby.Instance.SceneChange(LobbyState.Battle);
        Close();

        //한프레임 쉬어야 프리킹 현상 없음
        yield return(null);

        //페이드 인
        if (isNewBattle)
        {
            UIFadeController.FadeIn(1f);
        }
    }