using UnityEngine; using UnityEngine.UI; using System.Collections; using System.Collections.Generic; using Games.GlobeDefine; using GCGame.Table; using Module.Log; using GCGame; using System; public class MarketingActsRoot : UIControllerBase { #region public static void ShowMarketingAct(string actIDStr) { if (!MarketingActsRoot.Instance()) return; int actID = int.Parse(actIDStr); var actState = MarketingActsRoot.Instance().actStages.Find((actStage) => { if (actStage.actID == actID) return true; return false; }); if (actState != null) { MarketingActsRoot.Instance().OnActBtnClick(actState); } } public static void ShowMarketingActByUI(string uiName) { var actState = MarketingActsRoot.Instance().actStages.Find((actStage) => { var actinfo = TableManager.GetActInfoClientByID(actStage.actID); if (actinfo.UIPath.Equals(uiName)) return true; return false; }); if (actState != null) { MarketingActsRoot.Instance().OnActBtnClick(actState); } } #endregion #region public void Start() { SetInstance(this); ReqActList(); ShowRefresh(); } public void OnDestory() { SetInstance(null); } public void Close() { LuaUIManager.Instance.CloseUI("MarketingActsRoot"); } #endregion // 显示获得物品数据相关 public float showTipsInterval = 0.0f; // 显示提示的间隔 private Queue tipsQueue; // 等待显示的获取信息队列 public List actStages; // 目前开启的活动数组 // 现活动分两侧显示 public UIContainerBase _ActContainer_R; // 右侧显示的活动 public UIContainerBase _ActContainer_L; // 左侧显示的活动 虽说是左侧显示的活动,但仅为超值首冲活动服务,加上其他活动按钮上的显示会存在问题。 public Dictionary _ShowingWin = new Dictionary(); //public delegate void ShowSubActByID(GameObject uiGO); //public ShowSubActByID openSubActDel; private bool isOpenSubAct = false; private int entranceID = int.MinValue; private int actID = int.MinValue; public void SetActListMenu(List actStages) { List rightMarketingActState = new List(); List leftMarketingActState = new List(); for(int i = 0; i < actStages.Count; ++i) { if(actStages[i].leftOrRight == 0) { leftMarketingActState.Add(actStages[i]); } if(actStages[i].leftOrRight == 1) { rightMarketingActState.Add(actStages[i]); } } this.actStages = actStages; leftMarketingActState.Sort(ActMenuSort); rightMarketingActState.Sort(ActMenuSort); _ActContainer_L.InitContentItem(leftMarketingActState, OnActBtnClick); _ActContainer_R.InitContentItem(rightMarketingActState, OnActBtnClick); } public void OnActBtnClick(object actObj) { MarketingActState actState = actObj as MarketingActState; var tabAct = TableManager.GetActInfoClientByID(actState.actID, 0); if (tabAct == null) return; // vip特殊处理 if (actState.actID == 1000) { YuanBaoShopLogic.OpenVipPage(); } else if(actState.JumpTo != null && !string.IsNullOrEmpty(actState.JumpTo)) { string[] parms = actState.JumpTo.TrimEnd(' ', '"').Split('*'); if (parms.Length > 0) { int jumpToEnhance = Convert.ToInt32(parms[0]); if(jumpToEnhance == actState.actID) { LogModule.ErrorLog("ERROR: Trying jump to the same act !!!"); return; } } if (parms.Length > 1) { ItemGetPathPopRoot.GotoOperationalAct(Convert.ToInt32(parms[0]), Convert.ToInt32(parms[1])); } else if (parms.Length > 0) { ItemGetPathPopRoot.GotoOperationalAct(Convert.ToInt32(parms[0]), -1); } } else { Hashtable hash = new Hashtable(); hash.Add("ActState", actState); LuaUIManager.Instance.ShowLuaUI(tabAct.UIPath, LoadUICallBack, hash, true); } } // 每次关闭页面,更新红点信息。 public void ClearShowingWin(int actID) { _ShowingWin.Remove(actID); ReqActList(); } public void LoadUICallBack(bool sucess, object param, GameObject uiObj) { Hashtable hash = (Hashtable)param; MarketingActState actState = (MarketingActState)hash["ActState"]; if(_ShowingWin.ContainsKey(actState.actID)) { _ShowingWin.Remove(actState.actID); } _ShowingWin.Add(actState.actID, uiObj); var uiCs = uiObj.GetComponent(); if (uiCs != null) { uiCs._ActID = actState.actID; } var uiLua = uiObj.GetComponent(); if (uiLua != null) { uiLua.Awake(); uiLua.ActID = actState.actID; } uiObj.transform.SetAsLastSibling(); uiObj.SetActive(true); if (isOpenSubAct == true) { isOpenSubAct = false; if (actID != int.MinValue) { var luaScript = uiObj.GetComponent(); if (luaScript != null) { luaScript.CallScriptFuncAtPath(luaScript.luaScript + ".ShowActByID", this.actID); } } } // 清空指定打开页面记录 SetOpenData(); } public void LoadUICallBackLua(bool sucess, MarketingActState param, GameObject uiObj) { Hashtable hash = new Hashtable(); hash["ActState"] = param; LoadUICallBack(sucess, hash, uiObj); } #region public void ReqActList() { MarketingActsReq packet = new MarketingActsReq(); packet.actType = -1; packet.SendMsg(); //MarketingActsRet packetRet = new MarketingActsRet(); //packetRet.actType = -1; //packetRet.actIDState = new System.Collections.Generic.List(); //packetRet.actIDState.Add(new MarketingActState() { actID = 1, state = 0 }); //packetRet.actIDState.Add(new MarketingActState() { actID = 2, state = 0 }); //packetRet.actIDState.Add(new MarketingActState() { actID = 3, state = 1 }); //packetRet.actIDState.Add(new MarketingActState() { actID = 4, state = 1 }); //packetRet.SendMsg(); } #endregion #region showAnim public Animator _ShowAnim; private bool _FlagStateChange = true; private void Update() { if(_FlagStateChange) { AnimatorStateInfo info = _ShowAnim.GetCurrentAnimatorStateInfo(0); if (_ShowFlag) { if (!info.IsName("Show")) { _ShowAnim.Play("Show", 0, 0); } } else { if (!info.IsName("Hide")) { _ShowAnim.Play("Hide", 0, 0); } } _FlagStateChange = false; } } public static bool _ShowFlag = true; public void ShowRefresh() { _FlagStateChange = true; } public static void ShowBtns() { _ShowFlag = true; if (MarketingActsRoot.Instance()) { MarketingActsRoot.Instance().ShowRefresh(); } } public static void HideBtns() { _ShowFlag = false; if (MarketingActsRoot.Instance()) { MarketingActsRoot.Instance().ShowRefresh(); } } #endregion #region Show tips // 显示获得的信息 public void ShowGetTips(List awardList) { if(tipsQueue == null) { tipsQueue = new Queue(); } if (tipsQueue.Count > 0) { for (int i = 0; i < awardList.Count; i++) { tipsQueue.Enqueue(awardList[i]); } } else { for (int i = 0; i < awardList.Count; i++) { tipsQueue.Enqueue(awardList[i]); } StartCoroutine("ShowTips"); } } private IEnumerator ShowTips() { // 安全计数,防止死循环 int count = 0; while (tipsQueue.Count > 0) { MarketingActAwardItem item = tipsQueue.Dequeue(); Tab_CommonItem tab = TableManager.GetCommonItemByID(item.awardSubType, 0); string tip = tab.Name + " X " + item.awardNum; GUIData.AddNotifyData(tip); for (float i = 0.0f; i < showTipsInterval; i += Time.deltaTime) { yield return null; } count++; if (count > 50) { break; } } } #endregion // 替代 UIContainerBase.GetContainItem。 public MarketingMainMenu GetContainItem(int enhanceID) { bool hasFound = false; MarketingMainMenu result = null; _ActContainer_R.ForeachActiveItem((MarketingMainMenu obj) => { if (hasFound == false && obj.MyActState.actID == enhanceID) { hasFound = true; result = obj; } }); if(hasFound == true) { return result; } _ActContainer_L.ForeachActiveItem((MarketingMainMenu obj) => { if (hasFound == false && obj.MyActState.actID == enhanceID) { hasFound = true; result = obj; } }); return result; } //对外接口,开启入口活动的界面,entrance = 入口ID,actID = 活动ID。 public bool ShowActById(int entranceID = int.MinValue, int actID = int.MinValue) { if ((actID > 0 && GlobalData.IsMarketingActActive(actID) == false) || (actID < 0 && GlobalData.IsMarketingActActive(entranceID) == false)) { GUIData.AddNotifyData(StrDictionary.GetClientDictionaryString("#{6741}")); return false; } SetOpenData(entranceID, actID); isOpenSubAct = true; MarketingActState newAct = new MarketingActState(); newAct.actID = entranceID; OnActBtnClick(newAct); return true; } // 设置打开活动参数 private void SetOpenData(int entranceID = int.MinValue, int actID = int.MinValue) { this.entranceID = entranceID; this.actID = actID; } private int ActMenuSort(MarketingActState l, MarketingActState r) { Tab_ActInfoClient tab_l = TableManager.GetActInfoClientByID(l.actID, 0); Tab_ActInfoClient tab_r = TableManager.GetActInfoClientByID(r.actID, 0); if(tab_l.Order != -1 && tab_r.Order != -1) { return tab_l.Order.CompareTo(tab_r.Order); } else if(tab_l.Order != tab_r.Order) { return -tab_l.Order.CompareTo(tab_r.Order); } else { int index_l = actStages.IndexOf(l); int index_r = actStages.IndexOf(r); return index_l.CompareTo(index_r); } } // 标准化一次传过来的特效 // 因为这个特效需要匹配不同的大小框 //public static void GetEffet(float size, int quality, Transform parent) //{ // int effectID = -1; // if (quality == 1) // { // effectID = 7405; // } // else if (quality == 2) // { // effectID = 7405; // } // Tab_Effect effect = TableManager.GetEffectByID(effectID, 0); // if (effect != null) // { // Hashtable Info = new Hashtable(); // Info.Add("parent", parent); // Info.Add("size", size); // LoadAssetBundle.Instance.LoadGameObject(LoadAssetBundle.BUNDLE_PATH_EFFECT, effect.Path, // (string assetName, GameObject assetItem, Hashtable hashTable) => // { // Transform newParent = hashTable["size"] as Transform; // if (assetItem != null && newParent.gameObject.activeInHierarchy) // { // Transform newEffect = Instantiate(assetItem).transform; // float scale = (float)hashTable["size"]; // scale = scale / 72.0f; // newEffect.localScale = new Vector3(scale, scale, 1.0f); // newEffect.parent = newParent; // newEffect.localPosition = Vector3.zero; // } // }, Info); // } //} }