using UnityEngine; using UnityEngine.UI; using System.Collections; using System.Collections.Generic; using Games.GlobeDefine; using GCGame; using Module.Log; using GCGame.Table; using System; public class MessageTips : MonoBehaviour { public enum MsgType { Dual, //切磋 Team, //邀请入队 BOSS, //BOSS复活提示 } public delegate void Invate_Fun(object[] param); public class TipDatas { public MsgType m_type; public string tips; public float startTime; public object[] param; public Invate_Fun OkBack; public Invate_Fun CancleBack; public Invate_Fun TimeOutBack; } private static List tipLists = new List(); public static void ClearTypeData(MsgType type) { List removes = new List(); for (int i = 0; i < tipLists.Count; i++) { if (tipLists[i].m_type == type) removes.Add(tipLists[i]); } for (int i = 0; i < removes.Count; i++) { tipLists.Remove(removes[i]); } } public static void OpenOKCancelBox(int type,string tip,bool TimeDown,Invate_Fun OkBack, Invate_Fun CancleBack, Invate_Fun TimeOutBack, object[] param) { TipDatas data = new TipDatas(); data.tips = tip; data.m_type = (MsgType)type; if (TimeDown) data.startTime = Time.realtimeSinceStartup; else data.startTime = -1; data.OkBack = OkBack; data.CancleBack = CancleBack; data.TimeOutBack = TimeOutBack; data.param = param; //默认要把BOSS放在最底层 if (data.m_type == MsgType.BOSS && tipLists.Count>0) { int index = 0; for (; index < tipLists.Count; index++) { //排除BOSS提示重复添加 if (tipLists[index].m_type == MsgType.BOSS && tipLists[index].param.Length>0 && param.Length>0 && object.Equals( param[0], tipLists[index].param[0])) { tipLists.RemoveAt(index); break; } } } if (data.m_type == MsgType.BOSS && param.Length > 0) tipLists.Insert(0, data); if (data.m_type != MsgType.BOSS) tipLists.Add(data); UIManager.ShowUI(UIInfo.MessageTips,delegate(bool bSuccess, object param1) { if(bSuccess) { MessageTips tipMsg = UIManager.GetUIComponent(UIInfo.MessageTips); if (tipMsg != null) tipMsg.UpdateInvate(); } }); } void OnEnable() { UpdateInvate(); } void Update() { if (_CurrShowTipData!=null) { if (_CurrShowTipData.startTime > 0 && Time.realtimeSinceStartup - _CurrShowTipData.startTime > 30) { GUIData.AddNotifyData(GCGame.Table.StrDictionary.GetClientDictionaryString("#{4911}")); if (InvateTimeOut != null) InvateTimeOut(_CurrShowTipData.param); RemoveInvate(); return; } } } public void OnBtnClose() { tipLists.Clear(); UIManager.CloseUI(UIInfo.MessageTips); } public GameObject MainWnd; public Text InvateMsg; Invate_Fun InvateOK; Invate_Fun InvateCancle; Invate_Fun InvateTimeOut; public void UpdateInvate() { if (tipLists.Count == 0) { OnBtnClose(); return; } InvateOK = null; InvateCancle = null; InvateTimeOut = null; PushOneTip(tipLists[tipLists.Count - 1]); } private TipDatas _CurrShowTipData = null; public void PushOneTip(TipDatas data) { _CurrShowTipData = data; InvateMsg.text = data.tips; InvateOK = data.OkBack; InvateCancle = data.CancleBack; InvateTimeOut = data.TimeOutBack; } public void OnBtnInvateOk() { if(_CurrShowTipData!=null) { if(_CurrShowTipData.startTime > 0 && Time.realtimeSinceStartup - _CurrShowTipData.startTime > 30) { GUIData.AddNotifyData(GCGame.Table.StrDictionary.GetClientDictionaryString("#{4911}")); RemoveInvate(); return; } if (InvateOK != null) InvateOK(_CurrShowTipData.param); } RemoveInvate(); } public void OnBtnInvateCancel() { if (InvateCancle != null && _CurrShowTipData!=null) InvateCancle(_CurrShowTipData.param); RemoveInvate(false); } private void RemoveInvate(bool RemoveTypeAll = true) { MsgType type = _CurrShowTipData.m_type; if (tipLists.Count>0) { if(RemoveTypeAll) { ClearTypeData(type); } else { tipLists.Remove(_CurrShowTipData); } } _CurrShowTipData = null; if (type == MsgType.Team) { MainWnd.SetActive(false); StopCoroutine(TeamCallBack()); StartCoroutine(TeamCallBack()); return; } UpdateInvate(); } IEnumerator TeamCallBack() { yield return new WaitForSeconds(0.6f); MainWnd.SetActive(true); UpdateInvate(); } }