//-------------------------------------------------------- // [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()); } } #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().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(); } } }