예제 #1
0
    public void MapClassSetting(int iCurBlock)  //현재 맵의 클래스 셋팅(블록)
    {
        //현재 블럭에 맞는 클래스들을 각각 설정
        GameManager.instance.BlockIndex = iCurBlock;
        int iMax = m_BlockList[iCurBlock].BlockClass.Length;

        for (int i = 1; i < 4; i++)
        {
            //초기화 부분
            m_BlockNode.transform.GetChild(i).transform.GetChild((int)BLOCK_COMPONENT.COMPONENT_AREA).GetComponent <AreaPoint>()?.CoroutineStart(false); //에리어 포인트 스탑
            m_BlockNode.transform.GetChild(i).transform.GetChild((int)BLOCK_COMPONENT.COMPONENT_MARK).gameObject.SetActive(false);                       //마크 삭제
            if (i == 1 || i == 2)
            {
                //0->에리어 포인트 1->마크(Companion, boss), 2->스포트라이트 3-<히트포인트 4-<에너미매니저
                GameObject Node = m_BlockNode.transform.GetChild(i).transform.GetChild((int)BLOCK_COMPONENT.COMPONENT_SPOT_LIGHT).gameObject;
                if (Node != null)
                {
                    Node.GetComponent <SpotLight>().CoroutineStart(false);   //코루틴 스탑
                    Node.SetActive(false);
                }

                Node = m_BlockNode.transform.GetChild(i).transform.GetChild((int)BLOCK_COMPONENT.COMPONENT_HIT_POINT).gameObject;
                Node.SetActive(false);  //히트 포인트 체크

                Node = m_BlockNode.transform.GetChild(i).transform.GetChild((int)BLOCK_COMPONENT.COMPONENT_ENEMY_MANAGER).gameObject;
                if (Node != null)
                {
                    Node.GetComponent <EnemyManager>().EnemyListClear();   //코루틴 스탑
                    Node.SetActive(false);
                }
            }
        }

        for (int i = 0; i < iMax; i++)
        {
            switch (m_BlockList[iCurBlock].BlockClass[i])
            {
            case MAP_BLOCK_CLASS.BLOCK_START:
                float fX = 0.0f;
                fX = m_BlockNode.transform.GetChild(i).transform.position.x;
                //if (GameManager.instance.MissionStatus == MISSION_STATUS.MISSION_START ||
                //    GameManager.instance.MissionStatus == MISSION_STATUS.MISSION_BATTLE_LOSE)
                //{
                //    //미션 스타트나, 배틀 루즈시 블럭의 처음 위치로
                //    fX = m_BlockNode.transform.GetChild(i).transform.position.x;
                //}
                //else
                //{
                //    fX = GameManager.instance.CurXPosition;
                //}
                m_PlayerObject.SetActive(false);
                m_PlayerObject.transform.position = new Vector3(fX, (float)1.6);
                Camera.main.GetComponent <FollowCharacter>().m_PlayerTR = m_PlayerObject.transform;
                break;

            case MAP_BLOCK_CLASS.BLOCK_MONSTER:
                //해당 몬스터를 잡은 상태라면
                //일반 몬스터는 노란색 1,1,0
                //0->에리어 포인트 1->마크(Companion, boss), 2->스포트라이트 3-<히트포인트 4-<에너미매니저
                if (GameManager.instance.BlockList[iCurBlock].m_bActive)
                {
                    m_BlockNode.transform.GetChild(i).transform.GetChild((int)BLOCK_COMPONENT.COMPONENT_SPOT_LIGHT)?.gameObject.SetActive(true);
                    m_BlockNode.transform.GetChild(i).transform.GetChild((int)BLOCK_COMPONENT.COMPONENT_HIT_POINT)?.gameObject.SetActive(true);
                    SpotLight Spot = m_BlockNode.transform.GetChild(i).GetComponentInChildren <SpotLight>();

                    Spot.OnOffSpeed = m_fNormalSpeed;
                    Spot.OnOffTime  = m_fNormalDelayTime;

                    Spot.CoroutineStart(true);
                    Spot.BlockIndex = i;        //블록 인덱스
                    Spot.ColorSetting(1.0f, 1.0f, 0.0f);
                    EnemyManager Enemy = m_BlockNode.transform.GetChild(i).transform.GetChild((int)BLOCK_COMPONENT.COMPONENT_ENEMY_MANAGER).GetComponent <EnemyManager>();
                    Enemy.Init(GameManager.instance.StageIndex, GameManager.instance.BlockIndex, CHARACTER_TYPE.CHAR_ENEMY);
                    //해당 몬스터를 잡으면 더이 상 활성화 X
                }
                break;

            case MAP_BLOCK_CLASS.BLOCK_COMPANION:
                if (GameManager.instance.BlockList[iCurBlock].m_bActive)
                {
                    m_BlockNode.transform.GetChild(i).transform.GetChild((int)BLOCK_COMPONENT.COMPONENT_MARK)?.gameObject.SetActive(true);
                    m_BlockNode.transform.GetChild(i).transform.GetChild((int)BLOCK_COMPONENT.COMPONENT_AREA)?.GetComponent <AreaPoint>().CallBackSetting(CompanionBlock); //엔드포인트 셋팅
                    m_BlockNode.transform.GetChild(i).transform.GetChild((int)BLOCK_COMPONENT.COMPONENT_AREA)?.GetComponent <AreaPoint>().CoroutineStart(true);            //코루틴 스탑
                }
                //동료 블럭
                break;

            case MAP_BLOCK_CLASS.BLOCK_BOSS:
                if (GameManager.instance.BlockList[iCurBlock].m_bActive)
                {
                    m_BlockNode.transform.GetChild(i).transform.GetChild((int)BLOCK_COMPONENT.COMPONENT_MARK)?.gameObject.SetActive(true);
                    m_BlockNode.transform.GetChild(i).transform.GetChild((int)BLOCK_COMPONENT.COMPONENT_HIT_POINT)?.gameObject.SetActive(true);
                    //히트 체크 계속 켜줌

                    EnemyManager Enemy = m_BlockNode.transform.GetChild(i).transform.GetChild((int)BLOCK_COMPONENT.COMPONENT_ENEMY_MANAGER).GetComponent <EnemyManager>();
                    Enemy.Init(GameManager.instance.StageIndex, GameManager.instance.BlockIndex, CHARACTER_TYPE.CHAR_BOSS);
                    //해당 몬스터를 잡으면 더이 상 활성화 X
                }
                //보스 블럭
                break;

            case MAP_BLOCK_CLASS.BLOCK_DANGEROUS:
                //일반 몬스터는 노란색 1,0,0
                if (GameManager.instance.BlockList[iCurBlock].m_bActive)
                {
                    m_BlockNode.transform.GetChild(i).transform.GetChild((int)BLOCK_COMPONENT.COMPONENT_SPOT_LIGHT)?.gameObject.SetActive(true);
                    m_BlockNode.transform.GetChild(i).transform.GetChild((int)BLOCK_COMPONENT.COMPONENT_HIT_POINT)?.gameObject.SetActive(true);

                    SpotLight Spot = m_BlockNode.transform.GetChild(i).GetComponentInChildren <SpotLight>();

                    Spot.OnOffSpeed = m_fDangerSpeed;
                    Spot.OnOffTime  = m_fDangerDelayTime;

                    Spot.CoroutineStart(true);
                    Spot.BlockIndex = i;        //블록 인덱스
                    Spot.ColorSetting(1.0f, 0.0f, 0.0f);

                    EnemyManager Enemy = m_BlockNode.transform.GetChild(i).transform.GetChild((int)BLOCK_COMPONENT.COMPONENT_ENEMY_MANAGER).GetComponent <EnemyManager>();
                    Enemy.Init(GameManager.instance.StageIndex, GameManager.instance.BlockIndex, CHARACTER_TYPE.CHAR_DANGEROUS);
                    //해당 몬스터를 잡으면 더이 상 활성화 X
                }
                break;

            case MAP_BLOCK_CLASS.BLOCK_END:
                m_BlockNode.transform.GetChild(i).transform.GetChild((int)BLOCK_COMPONENT.COMPONENT_AREA).GetComponent <AreaPoint>().CallBackSetting(EndPoint); //엔드포인트 셋팅
                m_BlockNode.transform.GetChild(i).transform.GetChild((int)BLOCK_COMPONENT.COMPONENT_AREA).GetComponent <AreaPoint>().CoroutineStart(true);      //코루틴 스탑
                break;
            }
        }

        m_PlayerObject.SetActive(true);
        for (int i = 0; i < m_BlockList.Count; i++)
        {
            if (i == iCurBlock)
            {
                m_BlockInputList[i].CurPlayer(true);
            }
            else
            {
                m_BlockInputList[i].CurPlayer(false);
            }

            m_BlockInputList[i].SelectOK(false);
        }
        //그리고 미니맵에 현재 위치 표시
    }