441 lines
12 KiB
C#
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);
|
|
//}
|
|
});
|
|
}
|
|
}
|
|
}
|