| //--------------------------------------------------------  | 
| //    [Author]:           第二世界  | 
| //    [  Date ]:           Monday, April 09, 2018  | 
| //--------------------------------------------------------  | 
|   | 
| using System;  | 
| using System.Collections;  | 
| using System.Collections.Generic;  | 
|   | 
| using UnityEngine;  | 
| using UnityEngine.UI;  | 
|   | 
| namespace vnxbqy.UI {  | 
|   | 
|     public class ChatWin : Window  | 
|     {  | 
|         [SerializeField] Button m_CloseBtn;  | 
|         [SerializeField] Text m_ChatTip;  | 
|         [SerializeField] ChatSendComponent m_ChatSend;  | 
|         [SerializeField] ScrollerController m_ChannelControl;  | 
|         [SerializeField] ChatContentBehaviour m_ChatContent;  | 
|         [SerializeField] ChatRecently m_ChatRecently;  | 
|         [SerializeField] Button m_ChannelBtn;  | 
|         [SerializeField] Text m_ChannelInfo;  | 
|   | 
|         ChatCenter m_ChatCenter;  | 
|         ChatCenter chatCenter  | 
|         {  | 
|             get  | 
|             {  | 
|                 return m_ChatCenter ?? (m_ChatCenter = ModelCenter.Instance.GetModel<ChatCenter>());  | 
|             }  | 
|         }  | 
|   | 
|         #region Built-in  | 
|         protected override void BindController()  | 
|         {  | 
|         }  | 
|   | 
|         protected override void AddListeners()  | 
|         {  | 
|             m_CloseBtn.onClick.AddListener(OnClose);  | 
|             m_ChannelBtn.onClick.AddListener(OnChannelBtn);  | 
|         }  | 
|   | 
|         protected override void OnPreOpen()  | 
|         {  | 
|             if (!IsSatisfyShowChannel(ChatCtrl.Inst.presentChatType))  | 
|             {  | 
|                 ChatCtrl.Inst.presentChatType = ChatInfoType.System;  | 
|             }  | 
|   | 
|             m_ChatSend.parent = this;  | 
|             ChatCtrl.Inst.lockUpdate = false;  | 
|             ChatCtrl.Inst.OnPteChatChangeEvent += OnPteChatChangeEvent;  | 
|             ChatCtrl.Inst.OpenPteChatEvent += OpenPteChatEvent;  | 
|             DisplayChannel();  | 
|             OnChatTypeChange();  | 
|             chatCenter.UpdateChatContentPos();  | 
|         }  | 
|   | 
|         protected override void OnAfterOpen()  | 
|         {  | 
|             AchievementRandomWord();  | 
|             if (ChatCtrl.Inst.openFromDaily)  | 
|             {  | 
|                 AssitRandomChat();  | 
|                 ChatCtrl.Inst.needCheckAssitChat = true;  | 
|             }  | 
|             else if (ChatCtrl.Inst.openFromGem)  | 
|             {  | 
|                 string chat = Language.Get("ThanksGift" + UnityEngine.Random.Range(1, 4));  | 
|                 if (chat != string.Empty)  | 
|                 {  | 
|                     chatCenter.ChangeChatValue(chat, false, true);  | 
|                 }  | 
|             }  | 
|             else if (ChatCtrl.Inst.openFromFairyTask)  | 
|             {  | 
|                 TaskRandomChat();  | 
|             }  | 
|             ChatCtrl.Inst.openFromDaily = false;  | 
|             ChatCtrl.Inst.openFromGem = false;  | 
|             ChatCtrl.Inst.openFromFairyTask = false;  | 
|         }  | 
|   | 
|         protected override void OnPreClose()  | 
|         {  | 
|             ChatCtrl.Inst.OnPteChatChangeEvent -= OnPteChatChangeEvent;  | 
|             ChatCtrl.Inst.OpenPteChatEvent -= OpenPteChatEvent;  | 
|             ChatCtrl.Inst.openFromDaily = false;  | 
|             ChatCtrl.Inst.openFromGem = false;  | 
|             ChatCtrl.Inst.needCheckAssitChat = false;  | 
|             ChatCtrl.Inst.openFromFairyTask = false;  | 
|             //chatCenter.ChangeChatValue(string.Empty, false, true);  | 
|             //ChatCtrl.Inst.itemPlaceList.Clear();  | 
|         }  | 
|   | 
|         protected override void OnAfterClose()  | 
|         {  | 
|         }  | 
|         #endregion  | 
|   | 
|         private void OpenPteChatEvent()  | 
|         {  | 
|             OnChannelSelect(ChatInfoType.Friend);  | 
|         }  | 
|   | 
|         private void DisplayChannel()  | 
|         {  | 
|             m_ChannelControl.Refresh();  | 
|             for (int i = 0; i < chatCenter.chatChannels.Count; i++)  | 
|             {  | 
|                 if (IsSatisfyShowChannel(chatCenter.chatChannels[i]))  | 
|                 {  | 
|                     m_ChannelControl.AddCell(ScrollerDataType.Normal, (int)chatCenter.chatChannels[i], OnChannelSelect);  | 
|                 }  | 
|             }  | 
|             m_ChannelControl.Restart();  | 
|   | 
|             m_ChannelControl.JumpIndex(Math.Min((int)ChatCtrl.Inst.presentChatType, m_ChannelControl.GetNumberOfCells(m_ChannelControl.m_Scorller) - 1));  | 
|   | 
|         }  | 
|   | 
|         private bool IsSatisfyShowChannel(ChatInfoType channel)  | 
|         {  | 
|             if (CrossServerUtility.IsCrossServer())  | 
|             {  | 
|                 if (channel == ChatInfoType.Team || channel == ChatInfoType.Invite)  | 
|                 {  | 
|                     return false;  | 
|                 }  | 
|             }  | 
|             return true;  | 
|         }  | 
|   | 
|         private void OnPteChatChangeEvent()  | 
|         {  | 
|             if (ChatCtrl.Inst.presentChatType == ChatInfoType.Friend)  | 
|             {  | 
|                 OnChatTypeChange();  | 
|             }  | 
|         }  | 
|   | 
|         private void OnChatTypeChange()  | 
|         {  | 
|             m_ChannelBtn.SetActive(false);  | 
|             m_ChannelInfo.SetActive(false);  | 
|             m_ChatSend.placeholder.text= Language.Get("L1111");  | 
|             m_CloseBtn.SetActive(ChatCtrl.Inst.presentChatType != ChatInfoType.Friend);  | 
|             switch (ChatCtrl.Inst.presentChatType)  | 
|             {  | 
|                 case ChatInfoType.Trumpet:  | 
|                     m_ChatRecently.SetActive(false);  | 
|                     m_ChatTip.SetActive(false);  | 
|                     m_ChatSend.SetActive(true);  | 
|                     m_ChatSend.placeholder.text = Language.Get("L1012");  | 
|                     break;  | 
|                 case ChatInfoType.Invite:  | 
|                 case ChatInfoType.System:  | 
|                     m_ChatRecently.SetActive(false);  | 
|                     m_ChatTip.text = Language.Get("L1109");  | 
|                     m_ChatTip.SetActive(true);  | 
|                     m_ChatSend.SetActive(false);  | 
|                     break;  | 
|                 case ChatInfoType.World:  | 
|                 case ChatInfoType.Area:  | 
|                 case ChatInfoType.CrossServer:  | 
|                 case ChatInfoType.default1:  | 
|                     m_ChatRecently.SetActive(false);  | 
|                     m_ChatTip.SetActive(false);  | 
|                     m_ChatSend.SetActive(true);  | 
|                     break;  | 
|                 case ChatInfoType.Team:  | 
|                     m_ChatRecently.SetActive(false);  | 
|                     var _team = ModelCenter.Instance.GetModel<TeamModel>().myTeam;  | 
|                     m_ChatSend.SetActive(_team.teamId > 0);  | 
|                     m_ChatTip.SetActive(_team.teamId <= 0);  | 
|                     m_ChatTip.text = Language.Get("L1110");  | 
|                     break;  | 
|                 case ChatInfoType.Fairy:  | 
|                     m_ChatRecently.SetActive(false);  | 
|                     m_ChannelBtn.SetActive(!PlayerDatas.Instance.fairyData.HasFairy);  | 
|                     m_ChannelInfo.SetActive(!PlayerDatas.Instance.fairyData.HasFairy);  | 
|                     m_ChatTip.SetActive(!PlayerDatas.Instance.fairyData.HasFairy);  | 
|                     m_ChatSend.SetActive(PlayerDatas.Instance.fairyData.HasFairy);  | 
|                     if (!PlayerDatas.Instance.fairyData.HasFairy)  | 
|                     {  | 
|                         m_ChatTip.text = Language.Get("L1011");  | 
|                     }  | 
|                     break;  | 
|                 case ChatInfoType.Friend:  | 
|                     m_ChatSend.SetActive(true);  | 
|                     m_ChatTip.SetActive(false);  | 
|                     if (!m_ChatRecently.gameObject.activeSelf)  | 
|                     {  | 
|                         m_ChatRecently.SetActive(true);  | 
|                     }  | 
|                     break;  | 
|             }  | 
|             m_ChatContent.chatType = ChatCtrl.Inst.presentChatType;  | 
|             ChatCtrl.Inst.ViewChat(ChatCtrl.Inst.presentChatType);  | 
|         }  | 
|   | 
|         private void OnChannelSelect(CellView _cell)  | 
|         {  | 
|             if ((ChatInfoType)_cell.index == ChatInfoType.CrossServer)  | 
|             {  | 
|                 if (!FuncOpen.Instance.IsFuncOpen(162))  | 
|                 {  | 
|                     SysNotifyMgr.Instance.ShowTip("CrossServerHint");  | 
|                     return;  | 
|                 }  | 
|             }  | 
|             OnChannelSelect((ChatInfoType)_cell.index);  | 
|         }  | 
|   | 
|         private void OnChannelSelect(ChatInfoType _type)  | 
|         {  | 
|             ChatCtrl.Inst.presentChatType = _type;  | 
|             m_ChannelControl.m_Scorller.RefreshActiveCellViews();  | 
|             if (_type == ChatInfoType.Friend)  | 
|             {  | 
|                 ChatCtrl.Inst.lockUpdate = true;  | 
|             }  | 
|             else  | 
|             {  | 
|                 ChatCtrl.Inst.lockUpdate = false;  | 
|             }  | 
|             OnChatTypeChange();  | 
|             chatCenter.UpdateChatContentPos();  | 
|         }  | 
|   | 
|         private void OnChannelBtn()  | 
|         {  | 
|             switch (ChatCtrl.Inst.presentChatType)  | 
|             {  | 
|                 case ChatInfoType.Fairy:  | 
|                     {  | 
|                         int limit = FuncOpenLVConfig.Get((int)FuncOpenEnum.Fairy).LimitLV;  | 
|                         if (PlayerDatas.Instance.baseData.LV < limit)  | 
|                         {  | 
|                             ServerTipDetails.DisplayNormalTip(Language.Get("L1136", limit));  | 
|                             return;  | 
|                         }  | 
|                         CloseImmediately();  | 
|                         WindowJumpMgr.Instance.WindowJumpTo(JumpUIType.UnionFunc3);  | 
|                     }  | 
|                     break;  | 
|             }  | 
|         }  | 
|   | 
|         private void AchievementRandomWord()  | 
|         {  | 
|             if (AchievementGoto.achievementType != AchievementGoto.RandomFairyChat  | 
|                 && AchievementGoto.achievementType != AchievementGoto.RandomWorldChat)  | 
|             {  | 
|                 return;  | 
|             }  | 
|             AchievementGoto.achievementType = 0;  | 
|             if (AchievementGoto.achievementType == AchievementGoto.RandomFairyChat && !PlayerDatas.Instance.fairyData.HasFairy)  | 
|             {  | 
|                 return;  | 
|             }  | 
|             if (ChatCtrl.Inst.achievementRandoms.ContainsKey(ChatCtrl.Inst.presentChatType))  | 
|             {  | 
|                 var _list = ChatCtrl.Inst.achievementRandoms[ChatCtrl.Inst.presentChatType];  | 
|                 int _index = UnityEngine.Random.Range(0, _list.Count);  | 
|                 chatCenter.ChangeChatValue(Language.Get(_list[_index]), false, true);  | 
|             }  | 
|             var _effect = AchievementGuideEffectPool.Require(1);  | 
|             _effect.transform.SetParentEx(m_ChatSend.sendBtn.transform, Vector3.zero, Vector3.zero, Vector3.one);  | 
|         }  | 
|   | 
|         private void AssitRandomChat()  | 
|         {  | 
|             chatCenter.ChangeChatValue(ChatCtrl.Inst.GetAssitRandomChat(ChatCtrl.Inst.presentChatType), false, true);  | 
|         }  | 
|   | 
|         private void TaskRandomChat()  | 
|         {  | 
|             chatCenter.ChangeChatValue(ChatCtrl.Inst.GetTaskRandomChat(ChatCtrl.Inst.presentChatType), false, true);  | 
|         }  | 
|   | 
|         private void GemFlauntChat()  | 
|         {  | 
|             chatCenter.ChangeChatValue(ChatCtrl.Inst.GetGemFlauntChat(), false, true);  | 
|             var _effect = AchievementGuideEffectPool.Require(1);  | 
|             _effect.transform.SetParentEx(m_ChatSend.sendBtn.transform, Vector3.zero, Vector3.zero, Vector3.one);  | 
|         }  | 
|   | 
|         private void OnClose()  | 
|         {  | 
|             Close();  | 
|         }  | 
|     }  | 
|   | 
| }  | 
|   | 
|   | 
|   | 
|   |