Files
JJBB/Assets/Project/Script/LuaScripts/UI/RechargeOrConsumeRankCS/RechargeOrConsumeRankCS.cs
2024-08-23 15:49:34 +08:00

441 lines
12 KiB
C#

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<RankElemStruct> rankPacket;
private List<MarketingActAwardTag> awardPacket;
private List<MarketingRankTag.MarketingRankData> rankData = new List<MarketingRankTag.MarketingRankData>(); // 合并两个协议信息整理后的排行榜数据
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();
}
}
/// <summary>
/// 初始化按钮监听
/// </summary>
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<MarketingRankTag.MarketingRankData> 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<RankElemStruct>(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);
//}
});
}
}
}