private IEnumerator EvalationEndSequence()
    {
        yield return(new WaitUntil(() => menuManager.IsAppearButtonEnd));

        introUIManager.ToggleYukgack(true);
        introUIManager.ToggleTouchPanel(true);
        introUIManager.ToggleSkipButton(true);

        Debug.Log("EvalationEndSequence");

        yield return(StartCoroutine(yukgack.MoveTo(yukgackAppearPosition, yukgackAppearTime)));

        routineStream = new RoutineStream();
        yield return(StartCoroutine(yukgack.Talk("드디어 평가를 끝내셨군요! 좋은 성적을 받으셨다고 생각하나요?", routineStream)));

        routineStream = new RoutineStream();
        yield return(StartCoroutine(yukgack.Talk("전적을 누르게 되시면 자신의 평가에 대한 결과들을 다시 둘러볼 수 있어요.", routineStream)));

        routineStream = new RoutineStream();
        yield return(StartCoroutine(yukgack.Talk("시간 날때 전적을 보고 자신의 능력을 파악하는것도 중요해요.", routineStream)));

        routineStream = new RoutineStream();
        yield return(StartCoroutine(yukgack.Talk("그럼 앞으로의 활약을 기대할게요!", routineStream)));

        yield return(StartCoroutine(yukgack.SetDialogActive(false)));

        yield return(StartCoroutine(yukgack.MoveTo(originYukgackPosition, yukgackAppearTime)));

        introUIManager.ToggleYukgack(false);
        introUIManager.ToggleTouchPanel(false);
        introUIManager.ToggleSkipButton(false);

        introTrigger.isNeedEvalationEnd = false;
        NewGameManager.Instance.SaveIntroTrigger(introTrigger);
    }
Example #2
0
    private IEnumerator WriteToDialog(string text, RoutineStream clickFlag, float oneCharTime)
    {
        yield return(StartCoroutine(SetDialogActive(true)));

        //text = StringVariablePaser(text);
        dialogText.text = "";

        //0 이하면 그냥 바로 텍스트 완성
        if (oneCharTime > 0)
        {
            foreach (char letter in text.ToCharArray())
            {
                dialogText.text += letter;

                //빠른 넘김
                if (clickFlag.flag is bool && (bool)clickFlag.flag)
                {
                    clickFlag.flag = false;
                    break;
                }
                yield return(new WaitForSeconds(oneCharTime));
            }
        }
        dialogText.text = text;
    }
Example #3
0
    private IEnumerator Sequence()
    {
        introUIManager.ToggleSkipButton(true);
        yield return(new WaitForSeconds(2f));

        OnSpotlight();
        yield return(new WaitForSeconds(1f));

        yield return(StartCoroutine(yukgack.SetDialogActive(true)));

        routineStream = new RoutineStream();
        yield return(StartCoroutine(yukgack.Talk("게임능력평가에 오신 것을 환영합니다.", routineStream)));

        routineStream = new RoutineStream();
        yield return(StartCoroutine(yukgack.Talk("저는 당신의 평가를 돕기 위한 초고지능 AI 육각이입니다.", routineStream)));

        routineStream = new RoutineStream();
        yield return(StartCoroutine(yukgack.Talk("저희 게임능력평가는 여러가지 미니게임을 통해 당신을 총 5가지 항목으로 평가할 것입니다.", routineStream)));

        routineStream = new RoutineStream();
        yield return(StartCoroutine(yukgack.Talk("그럼 평가를 하러 가볼까요?", routineStream)));

        yield return(StartCoroutine(yukgack.SetDialogActive(false)));

        SetParent(spotlightObject, yukgack.GetComponent <RectTransform>());

        StartCoroutine(EndSequence());
    }
    private IEnumerator ConfirmSelectSubject() // 항목 선택한게 확실한지 다시 물어보는 함수
    {
        routineStream = new RoutineStream();
        string[] _chioce = { "응", "아니" };

        //introUIManager.UpYukgackCanvasLayerOrder(10);
        introUIManager.ToggleTouchPanel(false);

        highLight.SetActive(true);

        yield return(StartCoroutine(yukgack.MultipleTask(yukgack.RotateTo(yukgacRotateAngle, 0.1f),
                                                         yukgack.MoveTo(yukgacRotateAppearPosition, 0.1f))));

        //yield return StartCoroutine(yukgack.MoveTo(yukgacRotateBeforePosition, 0));
        //yield return StartCoroutine(yukgack.MultipleTask(yukgack.RotateTo(yukgacRotateAngle, 0),
        //    yukgack.MoveTo(yukgacRotateAppearPosition, 0.3f)));

        yield return(StartCoroutine(yukgack.Ask("원하시는 항목을 고르신건가요?", _chioce, routineStream, 0)));

        //introUIManager.RecoverYukgackCanvasLayerOrder();
        introUIManager.ToggleTouchPanel(true);
        Debug.Log("touchpanel");
        if (routineStream.result as string == _chioce[0])
        {
            routineStream = new RoutineStream();
            yield return(StartCoroutine(yukgack.Talk("고르셨으니 이제 항목으로 넘어가기 위해 시작버튼을 눌러주세요!", routineStream)));

            yield return(StartCoroutine(yukgack.SetDialogActive(false)));

            yield return(StartCoroutine(yukgack.MultipleTask(yukgack.RotateTo(Vector3.zero, 0.3f),
                                                             yukgack.MoveTo(originYukgackPosition, 0.3f))));

            introUIManager.ToggleYukgack(false);
            ActiveEvalationButton(); // 시작 버튼 활성화
            highLight.StartTracing(highLightStartButton);
        }
        else
        {
            routineStream = new RoutineStream();
            yield return(StartCoroutine(yukgack.Talk("이런, 죄송해요. 다시 고르실 때 까지 기다릴게요.", routineStream)));

            yield return(StartCoroutine(yukgack.SetDialogActive(false)));

            //yield return StartCoroutine(yukgack.MoveTo(yukgacRotateBeforePosition, 0.3f));

            yield return(StartCoroutine(yukgack.MultipleTask(yukgack.RotateTo(Vector3.zero, 0.3f),
                                                             yukgack.MoveTo(originYukgackPosition, 0.3f))));

            highLight.SetActive(false);

            yield return(StartCoroutine(WaitSelectSubject()));

            introUIManager.ToggleYukgack(true);
            StartCoroutine(ConfirmSelectSubject());
        }
    }
Example #5
0
    /// <summary>
    /// 다이얼로그에 대사가 나온다.
    /// </summary>
    /// <param name="text">적고 싶은 텍스트</param>
    /// <param name="clickFlag">대사를 스킵하거나 다음으로 넘어갈때 확인하는 값</param>
    /// <param name="oneCharTime">한 글자가 나오는데 소요되는 시간</param>
    /// <returns>루틴이 끝나면 반환된다.</returns>
    public IEnumerator Talk(string text, RoutineStream clickFlag, float oneCharTime = 0.04f)
    {
        SetTalkEndFlag(false);
        dialogText.GetComponent <RectTransform>().sizeDelta = new Vector2(textBoxWidth, textBoxHeightGenerally);

        yield return(StartCoroutine(WriteToDialog(text, clickFlag, oneCharTime)));

        dialogText.text = text;
        SetTalkEndFlag(true);
        yield return(new WaitUntil(() => (bool)clickFlag.flag));

        SetTalkEndFlag(false);
    }
Example #6
0
    private IEnumerator ShowResultRoutine(int nowLevel)
    {
        int totalResult = CaculateTotalGaugeInput();

        //코루틴의 기본적인 내용들
        //http://theeye.pe.kr/archives/tag/waituntil
        //gauge image 루틴 호출
        if (currentSubject != 0)
        {
            yield return(StartCoroutine(selectedGauge.ImageActivate(nowLevel)));
        }
        else
        {
            yield return(StartCoroutine(selectedGauge.ImageActivate(totalResult)));
        }
        yield return(new WaitForSeconds(0.5f));

        yield return(StartCoroutine(MoveResult()));

        yield return(new WaitForSeconds(0.5f));

        //육각이 등장
        //if (nowLevel <= selectedGauge.GetValue())
        //{
        //    //yukgack.Act(subject, NewGameManager.Instance.GetGameReuslts());
        //}
        string[] _ments = yukgack.EvalationMente(subject, NewGameManager.Instance.GetGameReuslts());

        yukgackAct.gameObject.SetActive(true);

        yield return(StartCoroutine(yukgackAct.MoveTo(yukgackAppearPosition, yukgackAppearTime)));

        yield return(StartCoroutine(yukgackAct.SetDialogActive(true)));

        if (_ments != null)
        {
            for (int i = 0; i < _ments.Length; i++)
            {
                routineStream = new RoutineStream();
                yield return(StartCoroutine(yukgackAct.Talk(_ments[i], routineStream)));
            }
        }

        //육각이 대사
        nextButton.gameObject.SetActive(true);  //육각이 대사 끝나고 나서 호출하는것으로 바꿔야함
    }
    private IEnumerator SubjectResultAfterTutorial() // 하나의 항목이 끝난 후에 실행되야 하는 함수
    {
        yield return(StartCoroutine(yukgack.MoveTo(yukgackAppearPosition, yukgackAppearTime)));

        routineStream = new RoutineStream();
        yield return(StartCoroutine(yukgack.Talk("한 항목에 대한 테스트를 끝내셨군요 이제 감이 잡히시나요?", routineStream)));

        routineStream = new RoutineStream();
        yield return(StartCoroutine(yukgack.Talk("남은 4가지 항목도 제가 설명드린대로, 끝내보자구요.", routineStream)));

        yield return(StartCoroutine(yukgack.SetDialogActive(false)));

        yield return(StartCoroutine(yukgack.MoveTo(originYukgackPosition, yukgackAppearTime)));

        introUIManager.ToggleYukgack(false);
        introUIManager.ToggleTouchPanel(false);
        introUIManager.ToggleSkipButton(false);
        introUIManager.IsTutorial = false;
        NewGameManager.Instance.SetTouchDisablePanel(false);

        EndResultAfter(); // 육각이가 사라지고 나서 실행되어야하는 함수
    }
    private IEnumerator StartSelectTutorial() // 항목 선택에 대해서 설명해주는 함수
    {
        highLight.SetActive(true);

        yield return(StartCoroutine(yukgack.MoveTo(yukgackAppearPosition, yukgackAppearTime)));

        routineStream = new RoutineStream();
        yield return(StartCoroutine(yukgack.Talk("방금 셔터가 내려오면서 사각이를 보셨나요?", routineStream)));

        routineStream = new RoutineStream();
        yield return(StartCoroutine(yukgack.Talk("저희 평가를 뒤에서 도와주는 아주 좋은 친구죠!", routineStream)));

        routineStream = new RoutineStream();
        yield return(StartCoroutine(yukgack.Talk("셔터가 내려올 때마다 보일테니 그의 노고를 알아주세요.", routineStream)));

        routineStream = new RoutineStream();
        yield return(StartCoroutine(yukgack.Talk("이제 저희는 평가를 위해 하나의 항목을 선택할 거에요.", routineStream)));

        routineStream = new RoutineStream();
        yield return(StartCoroutine(yukgack.Talk("제가 잠시 사라질테니 원하시는 항목을 하나 선택해주세요!", routineStream)));

        yield return(StartCoroutine(yukgack.SetDialogActive(false)));

        yield return(StartCoroutine(yukgack.MoveTo(originYukgackPosition, yukgackAppearTime)));

        highLight.SetActive(false);

        //introUIManager.ToggleYukgack(false);
        //AllowSelectSubejct(); // 항목 선택이 가능하게 하는 함수

        //yield return new WaitUntil(() => isSelectSubject); //항목을 누를때 까지 기다리게 하기
        yield return(StartCoroutine(WaitSelectSubject()));

        introUIManager.ToggleYukgack(true);
        StartCoroutine(ConfirmSelectSubject());
    }
Example #9
0
    /// <summary>
    /// 다이얼로그에 대사와 선택지가 뜨고, 선택을 하면 반환된다.
    /// </summary>
    /// <param name="text">선택지에 대한 대사</param>
    /// <param name="choice">선택지 문구 배열</param>
    /// <param name="answer">대사를 스킵하거나, 질의의 값을 기록한다.</param>
    /// <param name="oneCharTime">한 글자가 나오는데 소요되는 시간</param>
    /// <returns>루틴이 끝나면 반환된다.</returns>
    public IEnumerator Ask(string text, string[] choice, RoutineStream answer, float oneCharTime = 0.04f)
    {
        // 말하기 ( 묻기 )
        dialogText.GetComponent <RectTransform>().sizeDelta = new Vector2(textBoxWidth, textBoxHeightWhenAsk);
        yield return(StartCoroutine(WriteToDialog(text, answer, oneCharTime)));

        // 버튼 만들 준비
        GameObject[] buttonList = new GameObject[choice.Length];
        buttonParent.GetComponent <HorizontalLayoutGroup>().spacing = 100f / choice.Length;

        // 버튼 만들기
        RoutineStream trigger = new RoutineStream();

        trigger.flag = false;
        for (int i = 0; i < choice.Length; ++i)
        {
            buttonList[i] = Instantiate(buttonProto, buttonParent.transform);
            buttonList[i].GetComponentInChildren <Text>().text = choice[i];
            //choice[i]를 사용하면 참조로 접근하기 때문에 문제가 생김
            //이를 해결하기 위해 변수에 값을 복사에 사용
            string item = choice[i];
            buttonList[i].GetComponent <Button>().onClick.AddListener(() => { trigger.flag = true; answer.result = item; });
        }
        // 버튼 활성화 ( 보이게하기 )
        buttonParent.SetActive(true);

        // 버튼 누를때까지 기다리기
        yield return(new WaitUntil(() => (bool)trigger.flag));

        // 버튼 비활성화 및 제거
        buttonParent.SetActive(false);
        foreach (GameObject item in buttonList)
        {
            Destroy(item);
        }
    }
    private IEnumerator StartDetailTutorial() // 항목 평가에 대해서 설명해수는 함수(슬롯 머신 화면)
    {
        ActiveTutorial();
        yield return(new WaitForSeconds(4f));

        introUIManager.ToggleYukgack(true);
        highLight.SetActive(true);

        yield return(StartCoroutine(yukgack.MoveTo(yukgackAppearPosition, yukgackAppearTime)));

        routineStream = new RoutineStream();
        yield return(StartCoroutine(yukgack.Talk("좋아요. 무사히 여기까지 왔군요! 이제 이곳에 대해 설명드릴거에요.", routineStream)));

        highLight.StartTracing(highLightSamgacks);

        routineStream = new RoutineStream();
        yield return(StartCoroutine(yukgack.Talk("일단 양쪽에 있는 이 친구들은 “삼각응원단”이에요. 당신의 평가를 응원해주는 친구들이죠!", routineStream)));

        routineStream = new RoutineStream();
        yield return(StartCoroutine(yukgack.Talk("당신의 평가가 어떻게 진행되는지에 따라, 이 친구들의 반응이 달라질거에요.", routineStream)));

        highLight.StopTracing(highLightSamgacks);
        highLight.StartTracing(highLightStatus);

        routineStream = new RoutineStream();
        yield return(StartCoroutine(yukgack.Talk("단계는 당신이 진행할 미니게임의 난이도를 결정합니다. 당신이 게임클리어를 성공하면 한단계 높아지고, 실패하면 한단계 낮아지죠.", routineStream)));

        routineStream = new RoutineStream();
        yield return(StartCoroutine(yukgack.Talk("그리고 게임을 “완벽하게” 클리어하면 두단계가 올라가요!", routineStream)));

        routineStream = new RoutineStream();
        yield return(StartCoroutine(yukgack.Talk("높은 점수를 얻고싶다면 완벽하게 클리어하는 것이 좋겠죠?", routineStream)));

        routineStream = new RoutineStream();
        yield return(StartCoroutine(yukgack.Talk("8/8은 현재 남은 게임의 횟수를 뜻해요. 왼쪽의 8은 현재 남은횟수, 오른쪽의 8은 전체 횟수를 뜻하죠.", routineStream)));

        highLight.StopTracing(highLightStatus);
        highLight.StartTracing(highLightSlotMachine);

        routineStream = new RoutineStream();
        yield return(StartCoroutine(yukgack.Talk("가운데 GAME SELECT 버튼은 누르게되면 당신이 진행하게될 게임이 선택돼요.", routineStream)));

        highLight.StopTracing(highLightSlotMachine);

        routineStream = new RoutineStream();
        yield return(StartCoroutine(yukgack.Talk("자 이제 한번 해볼까요? 8번의 테스트 이후에 다시 보도록해요!", routineStream)));

        yield return(StartCoroutine(yukgack.SetDialogActive(false)));

        yield return(StartCoroutine(yukgack.MoveTo(originYukgackPosition, yukgackAppearTime)));

        introUIManager.ToggleYukgack(false);
        introUIManager.ToggleSkipButton(false);
        introUIManager.ToggleTouchPanel(false);
        introUIManager.IsTutorial = false;
        highLight.SetActive(false);

        EndDetailExplanYukgack(); // 육각이가 사라지고 나서 실행되어야하는 함수

        NewGameManager.Instance.SetTouchDisablePanel(false);
    }
    private IEnumerator MenuSequence() // 메뉴 설명을 위한 연출
    {
        introUIManager.ToggleTouchPanel(true);
        introUIManager.ToggleSkipButton(true);
        highLight.SetActive(true);

        if (IsFirstStartIntroScene())
        {
            yield return(StartCoroutine(FadeIn()));
        }

        yield return(new WaitUntil(() => menuManager.IsAppearButtonEnd));

        introUIManager.ToggleYukgack(true);

        yield return(StartCoroutine(yukgack.MoveTo(yukgackAppearPosition, yukgackAppearTime)));

        routineStream = new RoutineStream();
        yield return(StartCoroutine(yukgack.Talk("좋아요! 게임을 시작하기에 앞서, 버튼들에 대한 설명을 해드리죠.", routineStream)));

        highLight.StartTracing(highLightMenuButtons);
        StartCoroutine(yukgack.SetEmotion(Face.LookLeft));

        routineStream = new RoutineStream();
        yield return(StartCoroutine(yukgack.Talk("우선 이 버튼들은 게임을 위한 버튼이에요!", routineStream)));

        routineStream = new RoutineStream();
        yield return(StartCoroutine(yukgack.Talk("새로하기를 누르면 평가를 시작합니다.", routineStream)));

        routineStream = new RoutineStream();
        yield return(StartCoroutine(yukgack.Talk("평가를 하던 도중에 나왔을때 이어하기 버튼을 누르면 하던 평가를 이어서 할 수 있어요.", routineStream)));

        highLight.StopTracing(highLightMenuButtons);
        StartCoroutine(yukgack.SetEmotion(Face.Idle));

        yield return(StartCoroutine(yukgack.SetDialogActive(false)));

        StartCoroutine(yukgack.DialogMoveTo(dialogRightPosition, 0));

        yield return(StartCoroutine(yukgack.MoveTo(yukgacLeftPosition, 1f)));

        highLight.StartTracing(highLightRecordButton);
        StartCoroutine(yukgack.SetEmotion(Face.LookRight));

        routineStream = new RoutineStream();
        yield return(StartCoroutine(yukgack.Talk("이곳은 당신의 전적을 볼 수 있는 곳이에요!", routineStream)));

        routineStream = new RoutineStream();
        yield return(StartCoroutine(yukgack.Talk("나중에 평가가 끝난 뒤에 보시면, 평가에 대한 분석을 보실 수 있어요.", routineStream)));

        highLight.StopTracing(highLightRecordButton);
        StartCoroutine(yukgack.SetEmotion(Face.Idle));

        routineStream = new RoutineStream();
        yield return(StartCoroutine(yukgack.Talk("여기서 알려드릴건 다 알려드린 것 같군요! 그럼 새로하기를 눌러 평가를 시작해 볼까요?", routineStream)));

        yield return(StartCoroutine(yukgack.SetDialogActive(false)));

        yield return(StartCoroutine(yukgack.MoveTo(yukgackDisappearPosition, yukgackAppearTime)));

        introUIManager.ToggleYukgack(false);
        introUIManager.ToggleTouchPanel(false);
        introUIManager.ToggleSkipButton(false);
        highLight.SetActive(false);

        introTrigger.isNeedMenu = false;
        NewGameManager.Instance.SaveIntroTrigger(introTrigger);
    }