Exemplo n.º 1
0
    private void Awake()
    {
        if (_instance != null)
        {
            throw new UnityException("There's already an instance of " + this.GetType().Name);
        }
        _instance = this;

        m_dialogPanelText = GetComponentInChildren <TextMeshProUGUI>();
        if (!m_dialogPanelText)
        {
            throw new UnityException(this.name + " does not have a child with an TextMeshoProUGUI component on it");
        }
        m_continueButton = GetComponentInChildren <ContinueButton>(true);
        if (!m_continueButton)
        {
            throw new UnityException(this.name + " does not have a child with an ContinueButton component on it");
        }
    }
Exemplo n.º 2
0
    public void Talk(int dialogueId = -1)
    {
        if (!_curDialogAsset)
        {
            return;
        }
        if (_isClosing)
        {
            return;
        }

        if (dialogueId != -1)
        {
            for (int i = 0; i < _curDialogAsset.DialogueAssetList.Count; i++)
            {
                if (_curDialogAsset.DialogueAssetList[i].DialogueId == dialogueId)
                {
                    _index = i;
                    break;
                }
            }
        }
        else
        {
            if (!IsTalking)
            {
                _index = 0;
            }
        }

        if (!IsTalking)
        {
            IsTalking = true;
            //ActionManager.Instance.Invoke(ActionType.TalkStart);
            _dialogPanel = UIManager.Instance.OpenPanel <UIDialogPanel>(true, () =>
            {
                _isOpen = true;
                TimerManager.Instance.AddListener(0.1f, () => Talk());
            }, _curDialogAsset.DialogueAssetList[_index]);
            return;
        }


        if (!_isOpen || _dialogPanel == null)
        {
            return;
        }

        if (!_isClosing && _index >= _curDialogAsset.DialogueAssetList.Count)
        {
            if (_dialogPanel.IsTalking)
            {
                _dialogPanel.StopTalk();
            }
            else
            {
                TalkEnd();
            }
        }
        else
        {
            if (!_dialogPanel.IsCanTalk())
            {
                return;
            }
            //对话框类型相同直接谈话,不同则切换模式后谈话
            if (_dialogPanel.IsSameDialogType(_curDialogAsset.DialogueAssetList[_index].DialogType))
            {
                _dialogPanel.Talk(_curDialogAsset.DialogueAssetList[_index]);
                _index++;
            }
            else
            {
                //switch (_curDialogAsset.DialogueAssetList[_index].DialogType)
                //{
                //    case E_DialogType.Normal:
                //        break;
                //    case E_DialogType.FullScreen:
                //        _dialogPanel.HideBodys();
                //        _dialogPanel.HideDialog(true);
                //        break;
                //}
                UIManager.Instance.OpenPanel <UIMaskPanel>(true, () =>
                {
                    _dialogPanel.SetMessageByAsset(_curDialogAsset.DialogueAssetList[_index]);
                    Talk(_curDialogAsset.DialogueAssetList[_index].DialogueId);
                }, E_MaskType.GameStateChange);
            }
        }
    }
Exemplo n.º 3
0
    /// <summary>
    /// 段落结束
    /// </summary>
    public void TalkEnd()
    {
        GameData.Instance.ReadAsset(_curDialogAsset);
        GameData.Save();
        switch (_curDialogAsset.TalkEndEventType)
        {
        case E_TalkEndEventType.Transition:
            var maskType = CurDialogAsset.MaskType;
            if (maskType == E_MaskType.None)
            {
                var linkedAsset = _curDialogAsset.LinkedDialogAsset;
                SetTalkAsset(linkedAsset);
                _dialogPanel.SetMessageByAsset(linkedAsset.DialogueAssetList[0]);
                Talk(linkedAsset.DialogueAssetList[0].DialogueId);
            }
            else
            {
                UIManager.Instance.OpenPanel <UIMaskPanel>(true, () =>
                {
                    var linkedAsset = _curDialogAsset.LinkedDialogAsset;
                    SetTalkAsset(linkedAsset);
                    _dialogPanel.SetMessageByAsset(linkedAsset.DialogueAssetList[0]);
                    Talk(linkedAsset.DialogueAssetList[0].DialogueId);
                }, _curDialogAsset.MaskType);
            }
            break;

        case E_TalkEndEventType.Night:
            UIManager.Instance.OpenPanel <UIMaskPanel>(true, () =>
            {
                _index     = 0;
                _isOpen    = false;
                IsTalking  = false;
                _isClosing = false;
                UIManager.Instance.CloseAllNormalPanel(false);

                PlayerManager.Instance.NoteRecord(_curDialogAsset.NodeRecordDataList);
                UIManager.Instance.OpenPanel <UINoteBookPanel>(true, null, false);
                SetTalkAsset(_curDialogAsset.LinkedDialogAsset);
                _dialogPanel = null;
            }, E_MaskType.GameStateChange);
            break;

        case E_TalkEndEventType.Select:
            UIManager.Instance.OpenPanel <UISelectPanel>(true, null, _curDialogAsset.SelectDialogAssetList);
            break;

        case E_TalkEndEventType.GameOver:
            _isClosing = true;
            UIManager.Instance.OpenPanel <UIMaskPanel>(true, () =>
            {
                _index          = 0;
                _isOpen         = false;
                IsTalking       = false;
                _isClosing      = false;
                _curDialogAsset = null;
                _dialogPanel    = null;
                UIManager.Instance.CloseAllNormalPanel(false);
                UIManager.Instance.OpenPanel <UIMainMenuPanel>();
            }, E_MaskType.GameStateChange);
            break;
        }
    }