Пример #1
0
    public void SetCurrentLevel(CSubLevel subLevel)
    {
        subLevel.tag = "Processed";

        m_nCurSubIdx  = subLevel.CurIdx;
        m_curSubLevel = subLevel;
    }
Пример #2
0
    IEnumerator QuestStartCoroutine()
    {
        CRootLevel rootLevel = null;

        while (rootLevel == null)
        {
            rootLevel = CRootLevel.Inst;
            yield return(null);
        }

        CSubLevel subLevel = null;

        if (m_questTarget == null || m_questTarget.StayLevel.Count < 1)
        {
            yield break;
        }

        int nTargetStart = m_questTarget.StayLevel[0];

        while (subLevel == null)
        {
            yield return(null);

            if (rootLevel.SubLevels.Count <= nTargetStart)
            {
                continue;
            }

            subLevel = rootLevel.SubLevels[nTargetStart];
        }

        yield return(null);
    }
Пример #3
0
    public void SetStartLevel(CSubLevel subLevel)
    {
        if (!subLevel.IsLoaded)
        {
            return;
        }

        m_startLevel = subLevel;
    }
Пример #4
0
    //void Start()
    //{
    //    if (!m_isInit)
    //        Initialized(null);
    //}

    public void Initialized(CSubLevel level)
    {
        if (m_isInit)
        {
            return;
        }

        m_subLevel = level;

        m_isInit = true;
        StartCoroutine(SpawnCoroutine());
    }
Пример #5
0
    public void ComeOutCurSubLevel(CSubLevel subLevel)
    {
        if (subLevel != m_curSubLevel)
        {
            return;
        }

        subLevel.tag = "SubLevel";

        m_nCurSubIdx  = 0;
        m_curSubLevel = null;
    }
Пример #6
0
    public void Initialized(CSubLevel level, UnitType unitType, int nUnitIdx)
    {
        if (m_isInit)
        {
            return;
        }

        m_subLevel = level;

        CDataManager dataMgr = CDataManager.Inst;

        if (dataMgr != null)
        {
            CUnitData unit = dataMgr.UnitContainer.GetUnitData(unitType, nUnitIdx);

            if (unit != null)
            {
                m_spawnBase = unit;
            }
        }

        m_isInit = true;
        StartCoroutine(SpawnCoroutine());
    }
Пример #7
0
    protected override bool MoveTargetCheck()
    {
        switch (m_unit.Status.CurState)
        {
        case State.Normal:
        {
            switch (m_moveState)
            {
            case MoveState.NORMAL:
            {
                //m_actCtrl.IsRun = false;
                m_navAgent.isStopped = false;
                m_navAgent.speed     = m_unit.Status.BaseStst.moveSpeed;

                m_actCtrl.MoveAmount = 0f;

                if (m_fStayTime >= m_areaMoveTime)
                {
                    m_nCurSubRoot++;
                    if (m_nCurSubRoot >= m_bossUnit.UnitData.StayLevel.Count)
                    {
                        m_nCurSubRoot = 0;
                    }
                    int nIdx = m_bossUnit.UnitData.StayLevel[m_nCurSubRoot];
                    m_unit.StayLevel = CRootLevel.Inst.SubLevels[nIdx];

                    if (m_unit.StayLevel == null)
                    {
                        return(false);
                    }

                    m_moveTarget    = CRootLevel.Inst.SubLevels[nIdx].transform;
                    m_moveTargetPos = m_moveTarget.position;

                    m_moveState = MoveState.FOLLOW;
                    m_fStayTime = 0f;

                    return(true);
                }

                m_fStayTime += Time.deltaTime;

                if (m_moveWays != null && m_moveWays.Count > 0 && m_moveTarget == null)
                {
                    CurMoveWayIdx   = 0;
                    m_moveTarget    = m_moveWays[CurMoveWayIdx];
                    m_moveTargetPos = m_moveTarget.position;
                    return(true);
                }

                if (m_moveTarget != null)
                {
                    MoveDir = (m_moveTargetPos - transform.position).normalized;

                    if (Vector3.Distance(m_moveTarget.position, transform.position) < 2.5f)
                    {
                        CurMoveWayIdx++;
                        if (m_moveWays.Count < 1)
                        {
                            CurMoveWayIdx = 0;
                        }
                        else
                        {
                            if (CurMoveWayIdx >= m_moveWays.Count)
                            {
                                CurMoveWayIdx = 0;
                            }

                            m_moveTarget    = m_moveWays[CurMoveWayIdx];
                            m_moveTargetPos = m_moveTarget.position;
                            return(true);
                        }
                    }
                }
                else
                {
                    MoveDir = Vector3.zero;
                }

                m_actCtrl.MoveAmount = MoveDir.magnitude * 0.75f;
            }
            break;

            case MoveState.FOLLOW:
            {
                //m_actCtrl.IsRun = false;
                m_navAgent.isStopped = false;
                m_navAgent.speed     = m_unit.Status.BaseStst.moveSpeed;
                MoveDir = (m_moveTargetPos - transform.position).normalized;
                m_actCtrl.MoveAmount = MoveDir.magnitude;

                if (m_moveTarget == null || m_unit.StayLevel == null || m_moveTarget != m_unit.StayLevel.transform)
                {
                    m_moveState          = MoveState.NORMAL;
                    m_navAgent.isStopped = true;
                    return(false);
                }

                if (Vector3.Distance(transform.position, m_moveTarget.position) < 3f)
                {
                    m_moveState          = MoveState.NORMAL;
                    m_navAgent.isStopped = true;
                    m_navAgent.speed     = m_unit.Status.BaseStst.moveSpeed;

                    if (m_unit.StayLevel.SpwanPoints.Count > 0)
                    {
                        m_moveWays = m_unit.StayLevel.SpwanPoints[0].GetWay(0);
                    }

                    return(false);
                }
            }
            break;

            case MoveState.ROUND:
            {
                //m_actCtrl.IsRun = false;
                m_navAgent.isStopped = true;
                m_moveState          = MoveState.NORMAL;
            }
            break;
            }
        }
        break;

        case State.Attack:
        {
            switch (m_moveState)
            {
            case MoveState.NORMAL:
            {
                //m_actCtrl.IsRun = false;
                m_navAgent.isStopped = false;

                if (m_actCtrl.InAction)
                {
                    return(false);
                }

                m_navAgent.speed = m_unit.Status.BaseStst.moveSpeed;
                m_moveTarget     = m_actCtrl.Target.transform;
                MoveDir          = (m_moveTarget.position - transform.position).normalized;

                if (Vector3.Distance(transform.position, m_moveTarget.position) > m_actCtrl.ActionRange)
                {
                    m_navAgent.isStopped = true;
                    m_moveState          = MoveState.FOLLOW;
                    m_moveTargetPos      = m_moveTarget.position + new Vector3(0f, 0f, 2f);
                    return(true);
                }
                else
                {
                    m_navAgent.isStopped = true;
                    m_roundAmount        = Random.Range(0f, 3f);
                    Vector3 randomPos = Random.Range(0, 1) == 0 ? Vector3.right : Vector3.left;
                    randomPos      *= 5f;
                    m_moveTargetPos = m_moveTarget.position + randomPos;
                    m_moveState     = MoveState.ROUND;
                    return(true);
                }
            }

            //break;
            case MoveState.FOLLOW:
            {
                //m_actCtrl.IsRun = true;
                m_navAgent.isStopped = false;
                MoveDir              = (m_moveTarget.position - transform.position).normalized;
                m_navAgent.speed     = m_unit.Status.BaseStst.moveSpeed * 1.2f;
                m_actCtrl.MoveAmount = MoveDir.magnitude;

                if (Vector3.Distance(transform.position, m_moveTarget.position) <= m_actCtrl.ActionRange)
                {
                    if (Random.value < 0.3f)
                    {
                        m_moveState   = MoveState.ROUND;
                        m_roundAmount = Random.Range(1f, 2f);
                        Vector3 randomPos = Random.Range(0, 1) == 0 ? new Vector3(1f, 0f, 1f) : new Vector3(-1, 0f, 1f);
                        randomPos      *= 5f;
                        m_moveTargetPos = m_moveTarget.position + randomPos;
                    }
                    else
                    {
                        m_actCtrl.CanAttack = true;
                        m_moveState         = MoveState.NORMAL;
                    }
                }
                else
                {
                    m_moveTargetPos = m_moveTarget.position;
                    return(true);
                }
            }
            break;

            case MoveState.ROUND:
            {
                //m_actCtrl.IsRun = false;
                m_navAgent.isStopped = false;
                m_navAgent.speed     = m_unit.Status.BaseStst.moveSpeed * 0.75f;
                MoveDir = (m_actCtrl.Target.transform.position - transform.position).normalized;
                m_actCtrl.MoveAmount = MoveDir.magnitude;

                if (m_fRoundTime >= m_roundAmount)
                {
                    m_fRoundTime = 0f;

                    if (Vector3.Distance(transform.position, m_moveTargetPos) > m_actCtrl.ActionRange)
                    {
                        m_navAgent.isStopped = true;
                        m_moveState          = MoveState.FOLLOW;
                        m_moveTargetPos      = m_moveTarget.position + new Vector3(0f, 0f, 2f);
                        return(true);
                    }

                    m_actCtrl.CanAttack = true;
                    m_moveState         = MoveState.NORMAL;
                    return(false);
                }
                else
                {
                    m_fRoundTime += Time.fixedDeltaTime;
                    if (Vector3.Distance(transform.position, m_moveTargetPos) < 1f)
                    {
                        Vector3 randomPos = Random.Range(0, 1) == 0 ? new Vector3(1f, 0f, 1f) : new Vector3(-1, 0f, 1f);
                        randomPos      *= 3f;
                        m_moveTargetPos = m_moveTarget.position + randomPos;
                        return(true);
                    }
                    return(true);
                }
            }
            }
        }
        break;

        case State.Scare:
        {
            CSubLevel fleePlace = CRootLevel.Inst.SubLevels[m_bossUnit.UnitData.StayLevel[0]];
            if (m_bossUnit.StayLevel == fleePlace)
            {
                if (Vector3.Distance(transform.position, m_moveTarget.position) < 3f)
                {
                    m_unit.Status.CurState = State.Normal;
                    m_moveWays             = m_unit.StayLevel.SpwanPoints[0].GetWay(0);
                    m_moveTarget           = m_moveWays[0];
                    return(false);
                }
            }
            else
            {
                m_moveTarget     = fleePlace.SpwanPoints[0].transform;
                m_unit.StayLevel = fleePlace;
                return(true);
            }
        }
        break;
        }
        return(false);
    }
Пример #8
0
    IEnumerator StartGame()
    {
        m_stageUI = CStageUIManager.Inst;

        while (m_stageUI == null)
        {
            yield return(null);
        }

        if (m_stageUI != null)
        {
            while (m_stageUI.MessageUI == null)
            {
                yield return(null);
            }

            while (!m_stageUI.MessageUI.IsLoaded)
            {
                yield return(null);
            }
        }

        #region ObjectPoolWait

        while (CObjectPool.Inst == null)
        {
            yield return(null);
        }

        while (CObjectPool.Inst.IsInit == false)
        {
            yield return(null);
        }

        #endregion

        //TODO: 플레이어 생성(임시)
        while (CRootLevel.Inst == null)
        {
            yield return(null);
        }

        if (!IsGameStart)
        {
            #region BossRespon

            CUnitData targetData = m_questManager.QuestTarget;

            if (targetData != null)
            {
                if (m_questManager.SelectQuest != null && m_questManager.SelectQuest.Value.mainTargetType == UnitType.Boss)
                {
                    GameObject bossGo = CObjectPool.Inst.GetUnit(UnitType.Boss, targetData.Index);

                    if (bossGo == null)
                    {
                        IsGameStart = true;
                        yield break;
                    }

                    CBossUnit boss = bossGo.GetComponent <CBossUnit>();

                    if (boss != null)
                    {
                        boss.ResetUnit();

                        while (!CRootLevel.Inst.SubLevels.ContainsKey(targetData.StayLevel[0]))
                        {
                            yield return(null);
                        }

                        CSubLevel startLevel = CRootLevel.Inst.SubLevels[targetData.StayLevel[0]];

                        bossGo.transform.parent = null;
                        boss.ResetUnit();
                        boss.StayLevel            = startLevel;
                        bossGo.transform.position = startLevel.SpwanPoints == null ?
                                                    startLevel.transform.position + Vector3.up * 5f : startLevel.SpwanPoints[0].transform.position + Vector3.up * 2f;
                        bossGo.transform.rotation = Quaternion.identity;
                        bossGo.SetActive(true);

                        if (startLevel.SpwanPoints != null)
                        {
                            while (boss.Movement == null)
                            {
                                yield return(null);
                            }

                            boss.Movement.MoveWays = startLevel.SpwanPoints[0].GetWay(0);
                        }
                    }
                    else
                    {
                        Destroy(bossGo);
                        CLoadingScene.LoadingScene("Lobby");
                        yield break;
                    }
                }
            }
            #endregion
            IsGameStart = true;

            #region PlyaerCreateTemp

            GameObject playerPrefab = Resources.Load <GameObject>("Prefabs/Character/Player");
            GameObject startGo      = GameObject.FindWithTag("StartPoint");
            m_startPoint = startGo == null ? null : startGo.transform;
            GameObject player = Instantiate(playerPrefab, m_startPoint == null ? Vector3.zero : m_startPoint.position, Quaternion.identity);
            player.name = playerPrefab.name;

            #endregion
        }

        yield return(null);

        Data.QuestInfo?questInfo = m_questManager.SelectQuest;

        if (questInfo != null)
        {
            m_stageUI.MessageUI.ShowMainMessage(questInfo.Value.areaName, 3f, new Color(0.8f, 0.5f, 0f, 0.5f), MessageClipType.QuestStart);
            yield return(new WaitForSeconds(3f));

            m_stageUI.MessageUI.ShowSubMessage(questInfo.Value.questName, 3f);
            yield return(null);
        }
        else
        {
            m_stageUI.MessageUI.ShowSubMessage("Quest Start", 3f);
            yield return(null);
        }
    }