using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; using Games.Events; using GCGame.Table; using Module.Log; public class RechargeOrConsumeRankCS : MarketingUIBaseCS{ public enum ActType { Invalid, RechargeRank, // 充值排行榜 ConsumeRank // 消费排行榜 } private bool hasGetRank; // 本页面的信息需要接收两种协议信息。是否已收到排行榜信息 private static RechargeOrConsumeRankCS instance; public static RechargeOrConsumeRankCS Instance { get { return instance; } } public ActType actType = ActType.Invalid; public Button closeBtn; public Button tipBtn; public int tipID; public Button joinBtn; public Text selfRank; // 自己的排名 public Text selfCount; // 自己充值/消费数目 public Text remainTime; // 剩余时间 public UIContainerBase awardContainer; private bool hasGetAward; // 是否收到奖励列表信息 private RankElemStruct selfRankPacket; // 个人的排名信息 private string remainTimePacket; // 剩余时间 - 服务器信息格式 private List rankPacket; private List awardPacket; private List rankData = new List(); // 合并两个协议信息整理后的排行榜数据 private int beforeActId; private void Awake() { } protected virtual void OnEnable() { if (instance == null) { instance = this; } if(tipBtn != null) { tipBtn.onClick.RemoveAllListeners(); tipBtn.onClick.AddListener(() => MessageHelpLogic.ShowHelpMessage(tipID)); } Hashtable calbackparam = new Hashtable(); calbackparam["name"] = "MarketingActRank"; MessageEventCallBack fun = GetRankInfo; calbackparam.Add("callFun", fun); Games.Events.EventDispatcher.Instance.AddMessageEvent(Games.Events.EventId.RankInfoList, calbackparam); InitBtn(); hasGetRank = false; hasGetAward = false; AskForRankInfo(); AskForMenuID(); } protected virtual void OnDisable() { if (instance != null) { instance = null; } Games.Events.EventDispatcher.Instance.RemoveMessage(Games.Events.EventId.RankInfoList, "MarketingActRank"); if (MarketingActsRoot.Instance() != null) { if (MarketingActsRoot.Instance()._ShowingWin.ContainsKey(this._ActID)) { MarketingActsRoot.Instance().ClearShowingWin(this._ActID); } if (MarketingActsRoot.Instance()._ShowingWin.ContainsKey(beforeActId)) { MarketingActsRoot.Instance().ClearShowingWin(beforeActId); } } if(joinBtn != null) { joinBtn.onClick.RemoveAllListeners(); } if(tipBtn != null) { tipBtn.onClick.RemoveAllListeners(); } if(closeBtn != null) { closeBtn.onClick.RemoveAllListeners(); } } /// /// 初始化按钮监听 /// private void InitBtn() { if(joinBtn != null) { joinBtn.onClick.AddListener(OnJoinClick); } else { LogModule.ErrorLog("No joinBtn !"); } if (tipBtn != null) { // Todo } else { LogModule.DebugLog("No tipBtn !"); } if (closeBtn != null) { closeBtn.onClick.AddListener(Close); } else { LogModule.DebugLog("No closeBtn !"); } } private void Close() { this.gameObject.SetActive(false); } // 排名,充值数 private void InitSelfRank() { } // 剩余时间 private void InitRemainTime() { } private void InitTime(string timeStr) { if(remainTime == null) { return; } if(!string.IsNullOrEmpty(timeStr)) { remainTime.gameObject.SetActive(true); remainTime.text = StrDictionary.GetServerDictionaryFormatString(timeStr); } else { remainTime.gameObject.SetActive(false); } } private void InitSelfRank(RankElemStruct data) { if(data == null) { return; } for(int i = 0; i < data.numberfieldsCount; ++i) { switch(data.GetNumberfields(i).Propid) { case (int)RankWindowNew.RankPropID.RealRank: if(data.GetNumberfields(i).Propvalue != -1 && data.GetNumberfields(i).Propvalue != 0) { selfRank.text = data.GetNumberfields(i).Propvalue.ToString(); } else { selfRank.text = StrDictionary.GetClientDictionaryString("#{2049}"); } break; case (int)RankWindowNew.RankPropID.DailyConsume: selfCount.text = data.GetNumberfields(i).Propvalue.ToString(); break; case (int)RankWindowNew.RankPropID.DailyRecharge: selfCount.text = data.GetNumberfields(i).Propvalue.ToString(); break; } } } // 显示奖品 protected virtual void InitAwardItem(List data) { awardContainer.InitContentItem(data); } #region 接收协议 // 请求 protected virtual void AskForRankInfo() { //请求排行榜信息 CG_REQ_RANK_LIST send = (CG_REQ_RANK_LIST)PacketDistributed.CreatePacket(MessageID.PACKET_CG_REQ_RANK_LIST); if(actType == ActType.RechargeRank) { send.Ranktype = (int)RankWindowNew.RankType_T.DailyRecharge; } else if(actType == ActType.ConsumeRank) { send.Ranktype = (int)RankWindowNew.RankType_T.DailyConsume; } else { LogModule.ErrorLog("RechargeOrConsumeRankCS didn't set ActType, please check !"); return; } send.SendPacket(); } // 菜单请求 private void AskForMenuID() { MarketingActsReq req = new MarketingActsReq(); req.actType = this._ActID; req.SendMsg(); } // root菜单接收 protected override void MarketingActRetInner(MarketingActsRet marketActsRet) { if (marketActsRet != null && marketActsRet.actIDState.Count > 0) { beforeActId = this._ActID; MarketingActState tempActState = new MarketingActState(); tempActState.actID = marketActsRet.actIDState[0].actID; Hashtable param = new Hashtable(); param.Add("ActState", tempActState); if (MarketingActsRoot.Instance() != null) { MarketingActsRoot.Instance().LoadUICallBack(true, param, gameObject); } AskForInfo(); } } // 页面信息请求 protected void AskForInfo() { MarketingActAwardPageReq req = new MarketingActAwardPageReq(); req.actID = this._ActID; req.updateOrInit = 2; req.SendMsg(); } private void GetRankInfo(Hashtable addParam, Hashtable sendParam) { if (sendParam.Contains("data") == false) return; GC_RET_RANK_LIST packet = (GC_RET_RANK_LIST)sendParam["data"]; if (packet == null) return; if((int)RankWindowNew.RankType_T.DailyRecharge == packet.Ranktype && actType != ActType.RechargeRank) { LogModule.ErrorLog("Can't match rank type !"); } if ((int)RankWindowNew.RankType_T.DailyConsume == packet.Ranktype && actType != ActType.ConsumeRank) { LogModule.ErrorLog("Can't match rank type !"); } rankPacket = new List(packet.ranklistList); selfRankPacket = packet.Myrankinfo; hasGetRank = true; TryMerge(); } protected override void MarketingActPageAwardRetDelInner(object packet) { MarketingActAwardPageRet awardDatas = packet as MarketingActAwardPageRet; if(awardDatas != null) { awardPacket = awardDatas.awardTags; if(awardDatas.descList.Count > 0) { remainTimePacket = awardDatas.descList[0]; } hasGetAward = true; TryMerge(); } } private void TryMerge() { if(!hasGetRank || !hasGetAward) { return; } if(rankPacket == null) { return; } for(int i = 0; i < awardPacket.Count; ++i) { if(i < rankData.Count) { rankData[i].Init(); } else { rankData.Add(new MarketingRankTag.MarketingRankData()); } } var temp = new MarketingRankTag.MarketingRankData(); for (int i = 0; i < rankPacket.Count; ++i) { temp.Init(); // 数字信息 for (int j = 0; j < rankPacket[i].numberfieldsCount; ++j) { switch(rankPacket[i].GetNumberfields(j).Propid) { case (int)RankWindowNew.RankPropID.RealRank: temp.realRank = rankPacket[i].GetNumberfields(j).Propvalue; break; case (int)RankWindowNew.RankPropID.DailyRecharge: temp.realCount = rankPacket[i].GetNumberfields(j).Propvalue; break; case (int)RankWindowNew.RankPropID.DailyConsume: temp.realCount = rankPacket[i].GetNumberfields(j).Propvalue; break; case (int)RankWindowNew.RankPropID.UserProf: temp.profession = (int)rankPacket[i].GetNumberfields(j).Propvalue; break; } } // 文字信息 for(int j = 0; j < rankPacket[i].stringfieldsCount; ++j) { switch(rankPacket[i].GetStringfields(j).Propid) { case (int)RankWindowNew.RankPropID.UserName: temp.name = rankPacket[i].GetStringfields(j).Propvalue; break; case (int)RankWindowNew.RankPropID.HeadPicName: temp.pic = rankPacket[i].GetStringfields(j).Propvalue; break; } } if (temp.realRank != -1 && temp.realRank != 0) { rankData[(int)temp.realRank - 1].Replace(temp); } } for(int i = 0; i < rankData.Count; ++i) { if(i < awardPacket.Count) { if(!string.IsNullOrEmpty(awardPacket[i].descs[0])) { rankData[i].needCout = awardPacket[i].descs[0]; } rankData[i].awardItemList = awardPacket[i].awardItems; } } for(int i = 0; i < rankData.Count; ++i) { rankData[i].rank = i + 1; } InitSelfRank(selfRankPacket); InitTime(remainTimePacket); InitAwardItem(rankData); hasGetRank = false; hasGetAward = false; } #endregion private void OnJoinClick() { if (actType == ActType.Invalid) return; // 充值 - 打开充值界面 if(actType == ActType.RechargeRank) { YuanBaoShopLogic.OpenChargePage(); } // 消费 - 打开商城 else { UIManager.ShowUI(UIInfo.YuanBaoShop, delegate (bool bSucess, object param) { //if (bSucess) //{ // YuanBaoShopLogic.Instance()._TagPanel.ShowPage(3); //} }); } } }