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);
    }
Ejemplo n.º 2
0
    // 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();
    }
Ejemplo n.º 3
0
    /// <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);
        }
    }
Ejemplo n.º 6
0
    /// <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);
    }
Ejemplo n.º 7
0
    /// <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;
        }
    }