//-------------------------------------------------------- // [Author]: 第二世界 // [ Date ]: Thursday, September 07, 2017 //-------------------------------------------------------- using UnityEngine; using System.Collections; using UnityEngine.UI; using System; using System.Collections.Generic; //聊天面板 namespace Snxxz.UI { public class ChatFrame : MonoBehaviour { [SerializeField] Button _MailBtn;//邮件按钮 [SerializeField] Button _OneKeyBtn;//地图挂机 [SerializeField] Button _AutoBtn;//自动挂机 [SerializeField] Button _SetupBtn; [SerializeField] Image m_ImgAuto;//原地挂机 [SerializeField] Image m_ImgUnAuto; [SerializeField] Button m_TaskBtn;//任务按钮 [SerializeField] Button m_SocialBtn;//社交按钮 [SerializeField] Button m_TeamBtn;//队伍按钮 [SerializeField] RectTransform m_ContainerVoice; [SerializeField] Button m_Voice; [SerializeField] VoiceWidget m_VoiceWidget; List OneKeyList = new List(); TeamModel teamModel { get { return ModelCenter.Instance.GetModel(); } } CoinTaskTipModel coinTaskTip { get { return ModelCenter.Instance.GetModel(); } } DungeonModel dungeonModel { get { return ModelCenter.Instance.GetModel(); } } PlayerMainDate main { get { return ModelCenter.Instance.GetModel(); } } BossHomeModel bossHomeModel { get { return ModelCenter.Instance.GetModel(); } } void Awake() { var funconfig = FuncConfigConfig.Get("OneKeyBtnMap"); OneKeyList.AddRange(ConfigParse.GetMultipleStr(funconfig.Numerical1)); } public void Init() { MailAllModel.Instance.MailCntChangeEvent += MailCountChange; FuncOpen.Instance.OnFuncStateChangeEvent += OnFuncStateChangeEvent; _MailBtn.SetListener(MailButton); _OneKeyBtn.SetListener(OneKeyButton); _AutoBtn.SetListener(AutoButton); _SetupBtn.SetListener(OnSetBtn); m_TaskBtn.SetListener(TaskButton); m_SocialBtn.SetListener(FriendsButton); m_TeamBtn.SetListener(OpenTeam); m_Voice.SetListener(OpenVoice); MailCountChange(); UpdateVoiceState(); m_VoiceWidget.Init(); } public void UnInit() { m_VoiceWidget.Init(); teamModel.myTeamRefreshEvent -= UpdateVoiceState; PlayerDatas.Instance.fairyData.OnRefreshFairyInfo -= UpdateVoiceState; FuncOpen.Instance.OnFuncStateChangeEvent -= OnFuncStateChangeEvent; MailAllModel.Instance.DeleteMailEvent -= MailCountChange; } public void OnAfterOpen() { var mapId = PlayerDatas.Instance.baseData.MapID; var inDungeon = MapUtility.IsDungeon(mapId); m_TaskBtn.gameObject.SetActive(!inDungeon); _OneKeyBtn.gameObject.SetActive(!inDungeon || OneKeyList.Contains(mapId)); } private void OnFuncStateChangeEvent(int _type) { if ((FuncOpenEnum)_type == FuncOpenEnum.Chat) { UpdateVoiceState(); } } private void MailCountChange() { if (CrossServerUtility.IsCrossServer() || ClientCrossServerOneVsOne.isClientCrossServerOneVsOne) { _MailBtn.gameObject.SetActive(false); return; } List maillist = MailAllModel.Instance.GetTimeOrderMaillist(); bool isShowMail = false; if (maillist != null && PreFightMission.Instance.IsFinished()) { for (int i = 0; i < maillist.Count; i++) { if (maillist[i].IsRead == 0) { isShowMail = true; break; } else { if (maillist[i].Gold > 0 || maillist[i].GoldPaper > 0 || maillist[i].Silver > 0 || maillist[i].Count > 0) { isShowMail = true; break; } } } } _MailBtn.gameObject.SetActive(isShowMail); } private void OnSetBtn() { WindowCenter.Instance.Close(); WindowCenter.Instance.Open(false, 3); } private void TaskButton() { WindowCenter.Instance.Close(); WindowCenter.Instance.Open(); if (coinTaskTip.IsPopup) { coinTaskTip.IsPopup = false; } } private void OpenTeam() { WindowCenter.Instance.Close(); if (teamModel.myTeam.inTeam) { WindowCenter.Instance.Open(false, 1); } else { WindowCenter.Instance.Open(false, 0); } } private void OpenVoice() { m_VoiceWidget.Show(); } private void UpdateVoiceState() { var chatable = FuncOpen.Instance.IsFuncOpen((int)FuncOpenEnum.Chat); var guildVoiceEnable = false; var teamVoiceEnable = false; if (chatable) { guildVoiceEnable = PlayerDatas.Instance.fairyData.HasFairy; teamVoiceEnable = teamModel.myTeam.inTeam; } else { guildVoiceEnable = false; teamVoiceEnable = false; } m_ContainerVoice.gameObject.SetActive(chatable && (guildVoiceEnable || teamVoiceEnable)); } private void LateUpdate() { var isAuto = PlayerDatas.Instance.hero != null && PlayerDatas.Instance.hero.aiHandler != null && PlayerDatas.Instance.hero.aiHandler.IsAuto(); if (isAuto) { if (!m_ImgAuto.gameObject.activeSelf) { m_ImgAuto.gameObject.SetActive(true); } if (m_ImgUnAuto.gameObject.activeSelf) { m_ImgUnAuto.gameObject.SetActive(false); } if (!WindowCenter.Instance.IsOpen()) { WindowCenter.Instance.Open(true); } } else { if (m_ImgAuto.gameObject.activeSelf) { m_ImgAuto.gameObject.SetActive(false); } if (!m_ImgUnAuto.gameObject.activeSelf) { m_ImgUnAuto.gameObject.SetActive(true); } if (WindowCenter.Instance.IsOpen()) { WindowCenter.Instance.Close(); } } } void FriendsButton() { WindowCenter.Instance.Close(); WindowCenter.Instance.Open(); } void MailButton()//邮件按钮 { WindowCenter.Instance.Open(); WindowCenter.Instance.Close(); } void OneKeyButton()//地图挂机按钮 { if (CrossServerUtility.IsCrossServerBoss()) { SysNotifyMgr.Instance.ShowTip("CrossMap10"); return; } if (OneKeyList.Contains(PlayerDatas.Instance.baseData.MapID)) { var dataMapId = MapUtility.GetDataMapId(); var config = DungeonOpenTimeConfig.Get(dataMapId); string language = string.Empty; if (dataMapId == GeneralDefine.ruinsTranscriptMapId) { language = Language.Get(dungeonModel.mission.lineID > main.LayerNumberNow ? "WHMJ_Quit2" : "WHMJ_Quit1"); } else if (dataMapId == BossHomeModel.BOSSHOME_MAPID) { var vipLevel = PlayerDatas.Instance.baseData.VIPLv; var vipNeed = bossHomeModel.GetFloorVipRequirement(PlayerDatas.Instance.baseData.dungeonLineId + 1); var dungeonId = dungeonModel.GetDungeonId(dataMapId, PlayerDatas.Instance.baseData.dungeonLineId); var dungeonConfig = DungeonConfig.Get(dungeonId); if (vipLevel < vipNeed) { var moneyNeed = bossHomeModel.GetVipLackCost(PlayerDatas.Instance.baseData.dungeonLineId + 1); language = Language.Get("QuitRemindBossHome", dungeonConfig.FBName, vipNeed, moneyNeed); } else { language = Language.Get(config.ExitDescription); } } else { language = Language.Get(config.ExitDescription); } ConfirmCancel.ShowPopConfirm(Language.Get("Mail101"), language, (bool isOk) => { if (isOk) { GoToOneKeyButton(); } }); } else { GoToOneKeyButton(); } } void GoToOneKeyButton() { if (PlayerDatas.Instance.extersion.bossState == 1) { SysNotifyMgr.Instance.ShowTip("Task_Transfer1"); return; } var mapModel = ModelCenter.Instance.GetModel(); var point = mapModel.GetRecommendHangPoint(); var config = MapEventPointConfig.Get(point); var flyBootOwn = ModelCenter.Instance.GetModel().GetItemCountByID(PackType.Item, GeneralDefine.flyBootItemId); var isVipFreeTransfer = ModelCenter.Instance.GetModel().GetVipPrivilegeCnt(VipPrivilegeType.FreeTransfer) > 0; if (isVipFreeTransfer || flyBootOwn > 0) { MapTransferUtility.Instance.MissionFlyTo(config.MapID, config.NPCID); } else { MapTransferUtility.Instance.MoveToNPC(config.NPCID); } } void AutoButton()//原地挂机按钮 { var hero = PlayerDatas.Instance.hero; if (hero != null && !hero.ActorInfo.serverDie) { if (!hero.aiHandler.IsAuto()) { hero.Behaviour.StartHandupAI(); } else { hero.Behaviour.StopHandupAI(true); } } } } }