Beispiel #1
0
    void talk(int id, bool isNpc)//playerMove에서 isAction이 false면 안움직임. 그래서 계속 이야기 할 수 있는 것임.
    {
        int    questTalkIndex = 0;
        string talkData       = "";

        if (typeEffect.isAnim)
        {
            typeEffect.SetMsg("");
            return;
        }
        else
        {
            questTalkIndex = questManager.GetQuestTalkIndex(id);
            talkData       = talkManager.GetTalk(id + questTalkIndex, talkIndex); //조니 id : 20000, +10
        }

        if (talkData == null)//얘기가 더이상 없을 때 (대화가 끝났을 때, 물건 조사가 끝났을 때)
        {
            isAction  = false;
            talkIndex = 0;
            Debug.Log(questManager.CheckQuest(id));

            eraseItem();
            return;
        }

        int portraitNum = int.Parse(talkData.Split(':')[1]);

        if (isNpc)//npc와 말할 때
        {
            typeEffect.SetMsg(talkData.Split(':')[0]);

            /* 말하는 대상이 Fitra 일때만 오른쪽 portrait 활성화
             * 혼잣말을 할 때는 아무 캐릭터도 보이지 않게 하기 위해서 투명도를 올림.
             */
            if (portraitNum >= 1 && portraitNum <= 4)  // 피트라가 말할 때라면
            {
                portraitRightImg.sprite = talkManager.GetPortrait(portraitNum);
                portraitLeftImg.color   = new Color(1, 1, 1, 0);
                portraitRightImg.color  = new Color(1, 1, 1, 1);
                portraitBigImg.color    = new Color(1, 1, 1, 0);

                if (prevPortrait != portraitRightImg.sprite)
                {
                    if (talkIndex > 0)
                    {
                        portraitRightAnimator.SetTrigger("doEffect");
                    }
                    prevPortrait = portraitRightImg.sprite;
                }
            }

            else if (portraitNum == 0) // portrait가 안보여야 할 떄라면
            {
                portraitLeftImg.color  = new Color(1, 1, 1, 0);
                portraitRightImg.color = new Color(1, 1, 1, 0);
                portraitBigImg.color   = new Color(1, 1, 1, 0);
            }

            else if (portraitNum == 200)                             //대화도중 npc에게 booster을 받았다면 (jhonny만 booster을 주기때문에 portrait는 조니로 고정해둠)
            {
                portraitLeftImg.sprite = talkManager.GetPortrait(5); // jhonny의 웃는얼굴임.
                portraitLeftImg.color  = new Color(1, 1, 1, 1);
                portraitRightImg.color = new Color(1, 1, 1, 0);
                portraitBigImg.color   = new Color(1, 1, 1, 0);
                energyBooster.getBooster();
            }
            else if (portraitNum == 4000)                             //정전 수리 component를 발견했다면
            {
                portraitRightImg.sprite = talkManager.GetPortrait(1); // jhonny의 웃는얼굴임.
                portraitLeftImg.color   = new Color(1, 1, 1, 0);
                portraitRightImg.color  = new Color(1, 1, 1, 1);
                portraitBigImg.color    = new Color(1, 1, 1, 0);

                componentItem.getComponentItem();
            }
            else if (portraitNum == 23)
            {
                portraitBigImg.sprite  = talkManager.GetPortrait(portraitNum); // 폐기 문서
                portraitLeftImg.color  = new Color(1, 1, 1, 0);
                portraitRightImg.color = new Color(1, 1, 1, 0);
                portraitBigImg.color   = new Color(1, 1, 1, 1);
            }
            else
            {
                portraitLeftImg.sprite = talkManager.GetPortrait(portraitNum);
                portraitLeftImg.color  = new Color(1, 1, 1, 1);
                portraitRightImg.color = new Color(1, 1, 1, 0);
                portraitBigImg.color   = new Color(1, 1, 1, 0);

                if (prevPortrait != portraitLeftImg.sprite)
                {
                    if (talkIndex > 0)
                    {
                        portraitLeftAnimator.SetTrigger("doEffect");
                    }
                    prevPortrait = portraitLeftImg.sprite;
                }
            }
        }
        else // 물건을 조사할 때
        {
            if (portraitNum == 200) // energybooster 을 발견했을 때. (energy booster의 대화 끝에는 200번 써줌)
            {
                if (objData.isChecked)//이미 확인했던 Locker 라면 아이템이 계속 나오면 안됨
                {
                    typeEffect.SetMsg("\n" + "\n" + "..이미 열었던 곳이야");
                }
                else//처음 확인하는 Locker 이라면 energy booster을 얻는다.
                {
                    typeEffect.SetMsg(talkData.Split(':')[0]);
                    energyBooster.getBooster();
                    objData.isChecked = true;
                }
            }
            else
            {
                typeEffect.SetMsg(talkData.Split(':')[0]);
            }

            portraitLeftImg.color  = new Color(1, 1, 1, 0);
            portraitRightImg.color = new Color(1, 1, 1, 0);
            portraitBigImg.color   = new Color(1, 1, 1, 0);
        }

        isAction = true;
        talkIndex++;
        questManager.ControlObject();
    }