//-------------------------------------------------------- // [Author]: 第二世界 // [ Date ]: Tuesday, April 09, 2019 //-------------------------------------------------------- using System; using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; namespace vnxbqy.UI { public class HazyRegionDialogueWin : Window { [SerializeField] Button m_Skip; [SerializeField] Button m_EmptyAccepter; [SerializeField] Transform m_ContainerNpc; [SerializeField] RawImage m_RawNpc; [SerializeField] Text m_NpcName; [SerializeField] Text m_NpcDialogue; [SerializeField] Transform m_ContainerPlayer; [SerializeField] RawImage m_RawPlayer; [SerializeField] Text m_PlayerName; [SerializeField] Text m_PlayerDialogue; int dialogueIndex = 0; public static int adventureDialogueId = 0; public static event Action onDialogueComplete; private float m_WaitForCloseTime = 0; HazyRegionModel model { get { return ModelCenter.Instance.GetModel(); } } #region Built-in protected override void BindController() { } protected override void AddListeners() { m_EmptyAccepter.AddListener(OnClickEmpty); m_Skip.AddListener(OnSkip); } protected override void OnPreOpen() { dialogueIndex = 0; DisplayDialogue(); } protected override void OnAfterOpen() { } protected override void OnPreClose() { UI3DModelExhibition.Instance.StopShow(); } protected override void OnAfterClose() { if (!WindowCenter.Instance.IsOpen()) { WindowCenter.Instance.Open(); } } protected override void LateUpdate() { GA_Hero _hero = PlayerDatas.Instance.hero; if (_hero == null) { return; } if (_hero.LockTarget == null) { return; } float _chkDistSqrt = MathUtility.DistanceSqrtXZ(_hero.Pos, _hero.LockTarget.Pos); if (_chkDistSqrt > Mathf.Pow(GeneralDefine.FarawayNpcDist, 2)) { _hero.LockTarget = null; Close(); } if(model.auto) { m_WaitForCloseTime += Time.deltaTime; if(m_WaitForCloseTime > 3) { m_WaitForCloseTime = 0; OnClickEmpty(); } } } #endregion private void DisplayDialogue() { var config = AdventureDialogueConfig.Get(adventureDialogueId); var speakType = config.speakType[dialogueIndex]; m_ContainerNpc.SetActive(speakType == 0); m_ContainerPlayer.SetActive(speakType == 1); switch (speakType) { case 1: var job = PlayerDatas.Instance.baseData.Job; UI3DModelExhibition.Instance.ShowPlayer(m_RawPlayer, job, true); m_PlayerName.text = PlayerDatas.Instance.baseData.PlayerName; m_PlayerDialogue.text = Language.Get(config.dialogues[dialogueIndex]); break; case 0: var npcId = config.npcId; var npcConfig = NPCConfig.Get(npcId); m_NpcName.text = npcConfig.charName; m_NpcDialogue.text = Language.Get(config.dialogues[dialogueIndex]); var data = new UI3DNPCExhibitionData() { npcId = npcId, isDialogue = true, }; UI3DModelExhibition.Instance.ShowNPC(m_RawNpc, data); break; } } private void OnSkip() { Close(); if (onDialogueComplete != null) { onDialogueComplete(); } } private void OnClickEmpty() { var config = AdventureDialogueConfig.Get(adventureDialogueId); if (dialogueIndex < config.dialogues.Length - 1) { dialogueIndex += 1; DisplayDialogue(); } else { Close(); if (onDialogueComplete != null) { onDialogueComplete(); } } } } }