IEnumerator Brick007Detector() // { // 플레이어 등이 본 센서로 진입하는 시간 대기 yield return(new WaitForSeconds(0.2f)); // 아직도 위에 무언가 올라와 있는가? 를 확인하는 코루틴. // 무언가 물체가 위에 올라와있다면 대기 int layer = LayerMask.NameToLayer("Switchable"); while (Physics.Raycast(transform.position + Vector3.up, Vector3.down, 1, 1 << layer)) { Debug.DrawRay(transform.position, Vector3.up); //print($"[DEV] brick 007 detector is working now"); yield return(null); } //print($"[DEV] brick 007 detector is done"); if (BrickDataContainer.SwitchOff()) { GameObject.Find("FinishBrickRoot").transform.GetChild(0).gameObject.SetActive(false); } yield return(null); }
// Start is called before the first frame update void Start() { if (instance == null) { instance = this; //DontDestroyOnLoad(gameObject); } else { Destroy(gameObject); } // 현재 스테이지의 기존 최고 점수를 게임 플레이 환경에 전달 // 플레이 종료 시점에 플레이어의 기록과 전달된 기존 기록을 비교해 최고 점수 여부를 판별 List <int> stepScoreList = DataContainer.instance.GetGameRecordStagesStep(loadLevel); for (int i = 0; i < 9 - stepScoreList.Count; i++) { stepScoreList.Add(int.MaxValue); } BrickDataContainer.SetCurStageBestStep(stepScoreList[loadStage - 1]); stageInfos = new StageInfo[3]; LoadStageInfoFromJson(); }
/// <summary> /// 씬 전환시 호출. 레벨 및 스테이지에 따라 표시되는 팁을 제어 /// </summary> /// <param name="curLevel">현재 레벨 전달</param> public void LoadScene(string _targetScene, int curLevel, int curStage) { // 이미 동작중이면 중복 진행 X if (coroutine != null) { return; } // 버튼 사운드 UIAudioManager.instance.AudioPlay(0); // 플레이 데이터 초기화 BrickDataContainer.ResetAllIngameData(); // 로딩화면에서 출력되는 팁의 내용을 제어 int tipOrder = -1; if (curLevel == 1) { if (curStage == 1) { tipOrder = 0; } else if (curStage == 2) { tipOrder = 1; } } SetTip(tipOrder); targetScene = _targetScene; coroutine = LoadSceneActivation(); StartCoroutine(coroutine); }
IEnumerator Brick007() // Switch brick { if (BrickDataContainer.SwitchOn()) { GameObject.Find("FinishBrickRoot").transform.GetChild(0).gameObject.SetActive(true); } StartCoroutine(Brick007Detector()); coroutine = null; yield return(null); }
/// <summary> /// 인게임 및 클리어 UI에 표시되는 스텝 정보를 업데이트 /// </summary> public void UpdateStep() { StringBuilder sb = new StringBuilder(); //curStep.text = BrickDataContainer.GetStep() + " step"; sb.Append(BrickDataContainer.GetStep()).Append(" step"); curStep.text = sb.ToString(); sb.Clear(); clearStep.text = curStep.text; if (BrickDataContainer.GetStep() >= BrickDataContainer.GetCurStageBestStep()) { newRecord.SetActive(false); } }
/// <summary> /// 씬 전환시 호출 /// </summary> public void LoadScene(string _targetScene) { // 이미 동작중이면 중복 진행 X if (coroutine != null) { return; } // 버튼 사운드 UIAudioManager.instance.AudioPlay(0); // 플레이 데이터 초기화 BrickDataContainer.ResetAllIngameData(); // 로딩화면에서 표시되는 팁의 내용을 제어 SetTip(); // 랜덤 targetScene = _targetScene; coroutine = LoadSceneActivation(); StartCoroutine(coroutine); }
/// <summary> /// 게임 클리어시 brick[001]에서 호출. /// 스코어 및 레벨-스테이지 정보를 업데이트한다. /// </summary> public void GameClear() { int level = PlayerPrefs.GetInt("level"), stage = PlayerPrefs.GetInt("stage"); int score = BrickDataContainer.GetStep(); // 스코어 갱신 DataContainer.instance.UpdateScore(loadLevel, loadStage, score); // 가장 마지막 스테이지를 클리어했다면, 다음 스테이지 Unlock. if (level == loadLevel && stage == loadStage) { if (stage == 9) { if (level == 5) { // 최종 레벨의 최종 스테이지가 클리어 된 상황 } else { level += 1; stage = 1; } } else { stage += 1; } } PlayerPrefs.SetInt("level", level); PlayerPrefs.SetInt("stage", stage); // 변동 정보 로컬에 저장 DataContainer.instance.SaveLocalData_GameRecord(); }
private void Start() { audioSource = GetComponent <AudioSource>(); // 생명주기 Start()에서 각 brick 의 동작을 제어 switch (brickId) { case "000": // Start brick if (SceneManager.GetActiveScene().name == "StageMaker") { return; } MeshDisabler(); if (coroutine == null) { coroutine = Brick000(); StartCoroutine(coroutine); } break; case "001": // Finish brick if (SceneManager.GetActiveScene().name == "StageMaker") { return; } MeshDisabler(); // 비활성화 되어도 찾을 수 있도록 빈 오브젝트의 하위에서 동작된다. transform.parent = GameObject.Find("FinishBrickRoot").transform; break; case "003": // Breakable brick anim = GetComponent <Animation>(); break; case "004": // Elevate Up brick MeshDisabler(); break; case "005": // Elevate Down brick MeshDisabler(); break; case "007": // Switch if (SceneManager.GetActiveScene().name == "StageMaker") { return; } MeshDisabler(); if (BrickDataContainer.SwitchAdd()) { StartCoroutine(Brick007WaitFinishBrick(GameObject.Find("FinishBrickRoot").transform)); } break; case "008": MeshDisabler(); anim = GetComponent <Animation>(); anim.Play("Spin"); break; case "009": MeshDisabler(); break; case "010": if (SceneManager.GetActiveScene().name == "StageMaker") { return; } MeshDisabler(); laserTex = Resources.Load <Material>("Materials/Bricks/[010]Brick/LaserTexture"); //cubrickBurnOutMat = Resources.Load<Material>("Materials/Bricks/[010]Brick/BurnOutMat"); cubrickBurnOutSmog = Resources.Load <GameObject>("Prefabs/Bricks/[010]Brick/BurnOutSmog"); if (coroutine != null) { break; } coroutine = Brick010Detector(); StartCoroutine(coroutine); break; case "011": if (SceneManager.GetActiveScene().name == "StageMaker") { return; } anim = GetComponent <Animation>(); anim.Play(); break; } }