using System;
|
using System.Collections.Generic;
|
using System.Linq;
|
|
|
/// <summary>
|
/// 古宝养成排行榜活动
|
/// </summary>
|
namespace vnxbqy.UI
|
{
|
public class TreasurePavilionRankActModel : Model, IBeforePlayerDataInitialize, IPlayerLoginOk, IOpenServerActivity
|
{
|
public OperationTreasurePavilionAct operationAct = null;
|
public OperationTreasurePavilionActCross operationCrossAct = null;
|
public static Operation operaType = Operation.default41;
|
public static Operation operaTypeCross = Operation.default42;
|
public static int rankType = 39; //本服个人排行
|
public static int crossRankType = 163; //跨服个人排行
|
public static List<int> rankList = new List<int>() { rankType, crossRankType };
|
|
|
int regesitType = (int)NewDayActivityID.TreasurePavilionAct;
|
int regesitCrossType = (int)NewDayActivityID.TreasurePavilionActCross;
|
|
Redpoint parentRedpoint = new Redpoint(MainRedDot.TreasurePavilionRankActRepoint);
|
|
public bool IsOpen
|
{
|
get
|
{
|
//return OperationTimeHepler.Instance.SatisfyOpenCondition(operaType);
|
return OperationTimeHepler.Instance.SatisfyOpenCondition(operaType) &&
|
OperationTimeHepler.Instance.SatisfyOpenCondition(operaTypeCross, ILTimeUtility.ServerCrossNow);
|
}
|
}
|
|
//是否参与活动时间,由跨服封包决定,以跨服时间为准
|
public bool IsJoin
|
{
|
get
|
{
|
return OperationTimeHepler.Instance.SatisfyJoinCondition(operaTypeCross, ILTimeUtility.ServerCrossNow);
|
}
|
}
|
|
public bool IsPrepareTime
|
{
|
get
|
{
|
if (!IsOpen) return false;
|
return OperationTimeHepler.Instance.IsPrepareTime(operaTypeCross, ILTimeUtility.ServerCrossNow);
|
}
|
}
|
|
//是否展示结果时间, 以跨服时间为准(前提为以判断是活动中)
|
public bool IsResultShowTime
|
{
|
get
|
{
|
if (operationCrossAct == null)
|
return false;
|
return operationCrossAct.IsShowResultTime();
|
}
|
|
}
|
|
public bool IsAdvance
|
{
|
get
|
{
|
return false;
|
}
|
}
|
|
public bool priorityOpen
|
{
|
get
|
{
|
return false;
|
}
|
}
|
|
public event Action OnPlayerInfo;
|
public event Action<int> onStateUpdate;
|
public byte actNum; //对应界面
|
public int actScore { get; protected set; } //当前活动积分,用于排行榜和战令解锁
|
|
|
//排行榜名次信息
|
private int m_SelectRank = 0;
|
public int SelectRank
|
{
|
get { return m_SelectRank; }
|
set
|
{
|
m_SelectRank = value;
|
}
|
}
|
|
//排行榜奖励信息
|
private int m_SelectAwardRank = 0;
|
public int SelectAwardRank
|
{
|
get { return m_SelectAwardRank; }
|
set
|
{
|
m_SelectAwardRank = value;
|
}
|
}
|
|
//查询第一名信息,界面快速切换查询回包和界面不一致 需多个ID记录
|
public int no1PlayerID = 0;
|
public int no1PlayerIDCross = 0;
|
|
|
|
public override void Init()
|
{
|
OperationTimeHepler.Instance.operationStartEvent += OperationStartEvent;
|
OperationTimeHepler.Instance.operationEndEvent += OperationEndEvent;
|
OpenServerActivityCenter.Instance.Register(regesitType, this, (int)OpenServerActivityCenter.ActivityType.AT_Activity2);
|
OpenServerActivityCenter.Instance.Register(regesitCrossType, this, (int)OpenServerActivityCenter.ActivityType.AT_Activity2);
|
|
OperationTimeHepler.Instance.operationTimeUpdateEvent += operationTimeUpdateEvent;
|
RedpointCenter.Instance.redpointValueChangeEvent += OnRedpointChange;
|
}
|
|
public void OnBeforePlayerDataInitialize()
|
{
|
operationAct = null;
|
operationCrossAct = null;
|
actScore = 0;
|
no1PlayerID = 0;
|
no1PlayerIDCross = 0;
|
}
|
|
public void OnPlayerLoginOk()
|
{
|
UpdateRedpoint();
|
}
|
|
public override void UnInit()
|
{
|
OperationTimeHepler.Instance.operationStartEvent -= OperationStartEvent;
|
OperationTimeHepler.Instance.operationEndEvent -= OperationEndEvent;
|
|
OperationTimeHepler.Instance.operationTimeUpdateEvent -= operationTimeUpdateEvent;
|
RedpointCenter.Instance.redpointValueChangeEvent -= OnRedpointChange;
|
}
|
|
|
void OnRedpointChange(int id)
|
{
|
if (id == MainRedDot.RankActRepoint)
|
{
|
parentRedpoint.state = RedpointCenter.Instance.GetRedpointState(MainRedDot.RankActRepoint);
|
}
|
}
|
|
private void OperationEndEvent(Operation operationType, int state)
|
{
|
if (operationType == operaType && state == 0)
|
{
|
if (onStateUpdate != null)
|
{
|
onStateUpdate(regesitType);
|
}
|
WindowCenter.Instance.Close<TreasurePavilionRankActWin>();
|
}
|
}
|
|
private void OperationStartEvent(Operation operationType, int state)
|
{
|
if (operationType == operaType && state == 0)
|
{
|
if (onStateUpdate != null)
|
{
|
onStateUpdate(regesitType);
|
}
|
}
|
}
|
|
private void operationTimeUpdateEvent(Operation obj)
|
{
|
if (obj != operaType && obj != operaTypeCross)
|
return;
|
|
OperationBase operationBase1;
|
if (OperationTimeHepler.Instance.TryGetOperationTime(operaTypeCross, out operationBase1))
|
{
|
operationCrossAct = operationBase1 as OperationTreasurePavilionActCross;
|
}
|
|
OperationBase operationBase;
|
if (OperationTimeHepler.Instance.TryGetOperationTime(operaType, out operationBase))
|
{
|
operationAct = operationBase as OperationTreasurePavilionAct;
|
}
|
|
if (operationCrossAct != null && operationAct != null)
|
UpdateRedpoint();
|
WindowCenter.Instance.Close<TreasurePavilionRankActWin>();
|
}
|
|
#region 服务端数据
|
|
public void UpdateGubaoPlayerInfo(HAA82_tagMCActGubaoPlayerInfo netPack)
|
{
|
actNum = netPack.ActNum;
|
actScore = (int)netPack.Score;
|
UpdateRedpoint();
|
OnPlayerInfo?.Invoke();
|
}
|
|
|
#endregion
|
|
void UpdateRedpoint()
|
{
|
}
|
|
//获取排行榜排名对应的奖励数据配置名次
|
public int GetRankDataIndex(int rank, Dictionary<int, ActBillboardAwards> rankInfo)
|
{
|
rank += 1;
|
var keys = rankInfo.Keys.ToList();
|
keys.Sort();
|
for (int i = 0; i < keys.Count; i++)
|
{
|
if (rank <= keys[i])
|
{
|
return keys[i];
|
}
|
}
|
return -1;
|
}
|
|
public int GetPlayerId(RankData rankData)
|
{
|
// 检查输入数据是否为空
|
if (rankData == null)
|
return 0;
|
|
// 根据 SelectRank 的值选择对应的 ID
|
switch (SelectRank)
|
{
|
case 0:
|
case 1:
|
return (int)rankData.id;
|
case 2:
|
return (int)rankData.id2;
|
default:
|
return 0;
|
}
|
}
|
}
|
}
|
|