public void SetCurrentLevel(CSubLevel subLevel) { subLevel.tag = "Processed"; m_nCurSubIdx = subLevel.CurIdx; m_curSubLevel = subLevel; }
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); }
public void SetStartLevel(CSubLevel subLevel) { if (!subLevel.IsLoaded) { return; } m_startLevel = subLevel; }
//void Start() //{ // if (!m_isInit) // Initialized(null); //} public void Initialized(CSubLevel level) { if (m_isInit) { return; } m_subLevel = level; m_isInit = true; StartCoroutine(SpawnCoroutine()); }
public void ComeOutCurSubLevel(CSubLevel subLevel) { if (subLevel != m_curSubLevel) { return; } subLevel.tag = "SubLevel"; m_nCurSubIdx = 0; m_curSubLevel = null; }
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()); }
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); }
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); } }