using LitJson;
|
using System;
|
using System.Collections.Generic;
|
using System.Linq;
|
using UnityEngine;
|
using UnityEngine.UI;
|
|
|
namespace vnxbqy.UI
|
{
|
public class FamilyRechargeConnModel : Model, IBeforePlayerDataInitialize, IPlayerLoginOk, IOpenServerActivity
|
{
|
public event Action<int> onStateUpdate;
|
public Redpoint redPoint = new Redpoint(MainRedDot.BossTrialRepoint, MainRedDot.RedPoint_FamilyRecharge);
|
|
|
public const int activityType = (int)OpenServerActivityCenter.ActivityType.AT_Activity2;
|
public const int activityID = (int)NewDayActivityID.FamilyRechargeConnAct;
|
public static Operation operaType = Operation.default34;
|
|
public int actNum; //对应界面
|
public int m_AwardRecord;
|
public event Action UpdateAwardEvent;
|
|
public List<int> rechargePlayerIDs = new List<int>(); //充值玩家ID
|
public Dictionary<int, int> getAwardPlayerNums = new Dictionary<int, int>(); //领取奖励人数
|
|
FairyModel fairyModel { get { return ModelCenter.Instance.GetModel<FairyModel>(); } }
|
|
public override void Init()
|
{
|
OperationTimeHepler.Instance.operationStartEvent += OperationStartEvent;
|
OperationTimeHepler.Instance.operationEndEvent += OperationEndEvent;
|
OperationTimeHepler.Instance.operationAdvanceEvent += OperationAdvanceEvent;
|
fairyModel.FamilyActionInfoEvent += OnFamilyActionEvent;
|
PlayerDatas.Instance.fairyData.OnRefreshFairyMine += OnRefreshFairyMine;
|
OpenServerActivityCenter.Instance.Register(activityID, this, activityType);
|
}
|
|
public void OnBeforePlayerDataInitialize()
|
{
|
m_AwardRecord = 0;
|
rechargePlayerIDs.Clear();
|
getAwardPlayerNums.Clear();
|
}
|
|
public void OnPlayerLoginOk()
|
{
|
if (IsOpen)
|
QueryFamilyRecharge();
|
}
|
|
public override void UnInit()
|
{
|
OperationTimeHepler.Instance.operationStartEvent -= OperationStartEvent;
|
OperationTimeHepler.Instance.operationEndEvent -= OperationEndEvent;
|
OperationTimeHepler.Instance.operationAdvanceEvent -= OperationAdvanceEvent;
|
fairyModel.FamilyActionInfoEvent -= OnFamilyActionEvent;
|
PlayerDatas.Instance.fairyData.OnRefreshFairyMine -= OnRefreshFairyMine;
|
}
|
|
public bool IsOpen {
|
get {
|
return OperationTimeHepler.Instance.SatisfyOpenCondition(operaType);
|
}
|
}
|
|
public bool priorityOpen {
|
get {
|
return redPoint.state == RedPointState.Simple;
|
}
|
}
|
|
public bool IsAdvance {
|
get {
|
return OperationTimeHepler.Instance.SatisfyAdvanceCondition(operaType);
|
}
|
}
|
|
private void OperationEndEvent(Operation type, int state)
|
{
|
if (type == operaType && state == 0)
|
{
|
if (onStateUpdate != null)
|
{
|
onStateUpdate(activityID);
|
}
|
UpdateRedpoint();
|
}
|
}
|
|
private void OperationAdvanceEvent(Operation type)
|
{
|
if (type == operaType)
|
{
|
if (onStateUpdate != null)
|
{
|
onStateUpdate(activityID);
|
}
|
}
|
}
|
|
private void OperationStartEvent(Operation type, int state)
|
{
|
if (type == operaType && state == 0)
|
{
|
|
if (onStateUpdate != null)
|
{
|
onStateUpdate(activityID);
|
}
|
}
|
}
|
|
//0 不可领取(未达标或者领取超过家族总人数上限) 1 可领取 2 已领取
|
public int GetAwardState(int index)
|
{
|
//校验日期
|
OperationFamilyRechargeConn actInfo;
|
OperationTimeHepler.Instance.TryGetOperation(operaType, out actInfo);
|
if (actInfo == null) return 0;
|
|
if ((m_AwardRecord & 1 << index) > 0)
|
return 2;
|
|
int rechargeNum = rechargePlayerIDs.Count;
|
|
PlayerFairyData.FairyData fairy = PlayerDatas.Instance.fairyData.fairy;
|
if (fairy == null) return 0;
|
FamilyConfig cfg = FamilyConfig.Get(fairy.FamilyLV);
|
|
int memberCnt = cfg.memberCnt;
|
int needNum = actInfo.needPlayers[index];
|
|
if (rechargeNum >= needNum)
|
{
|
if (getAwardPlayerNums.ContainsKey(needNum) && getAwardPlayerNums[needNum] >= memberCnt)
|
{
|
return 0;
|
}
|
else
|
{
|
return 1;
|
}
|
}
|
|
return 0;
|
}
|
|
void UpdateRedpoint()
|
{
|
redPoint.state = RedPointState.None;
|
if (!IsOpen) return;
|
OperationFamilyRechargeConn actInfo;
|
OperationTimeHepler.Instance.TryGetOperation(operaType, out actInfo);
|
if (actInfo == null) return;
|
|
for (int i = 0; i < actInfo.needPlayers.Count; i++)
|
{
|
if (GetAwardState(i) == 1)
|
{
|
redPoint.state = RedPointState.Simple;
|
return;
|
}
|
}
|
|
}
|
|
public void UpdateActFamilyCTGAssistPlayerInfo(HAA78_tagMCActFamilyCTGAssistPlayerInfo netPack)
|
{
|
actNum = netPack.ActNum;
|
m_AwardRecord = (int)netPack.AwardRecord;
|
UpdateAwardEvent?.Invoke();
|
|
UpdateRedpoint();
|
}
|
|
public void SendGetAward(int num)
|
{
|
CA504_tagCMPlayerGetReward getReward = new CA504_tagCMPlayerGetReward();
|
getReward.RewardType = 74;
|
getReward.DataEx = (uint)num;
|
getReward.DataExStr = actNum.ToString();
|
getReward.DataExStrLen = (byte)getReward.DataExStr.Length;
|
GameNetSystem.Instance.SendInfo(getReward);
|
}
|
|
void OnFamilyActionEvent(int familyID, int type)
|
{
|
if (familyID != PlayerDatas.Instance.baseData.FamilyId)
|
{
|
return;
|
}
|
if (type != 14)
|
{
|
return;
|
}
|
var datas = fairyModel.familyActions[familyID][14];
|
if (datas.Length == 0)
|
{
|
return;
|
}
|
var data = datas[0];
|
|
if (data.Value1 != actNum)
|
return;
|
|
//data.UseData [[280182,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20],{'9':1,'10':1,'1':50,'5':1}]
|
|
JsonData json = JsonMapper.ToObject(data.UseData);
|
rechargePlayerIDs = new List<int>();
|
getAwardPlayerNums = new Dictionary<int, int>();
|
|
rechargePlayerIDs = JsonMapper.ToObject<List<int>>(json[0].ToJson());
|
|
JsonData awardNums = json[1];
|
foreach (var key in awardNums.Keys)
|
{
|
getAwardPlayerNums[int.Parse(key)] = (int)awardNums[key];
|
}
|
UpdateAwardEvent?.Invoke();
|
UpdateRedpoint();
|
|
}
|
|
void QueryFamilyRecharge()
|
{
|
if (PlayerDatas.Instance.baseData.FamilyId == 0)
|
{
|
return;
|
}
|
var pack = new CA408_tagCGQueryFamilyAction();
|
pack.ActionType = 14;
|
pack.FamilyID = PlayerDatas.Instance.baseData.FamilyId;
|
GameNetSystem.Instance.SendInfo(pack);
|
}
|
|
void OnRefreshFairyMine()
|
{
|
if (!PlayerDatas.Instance.fairyData.HasFairy)
|
{
|
rechargePlayerIDs.Clear();
|
getAwardPlayerNums.Clear();
|
}
|
if (IsOpen)
|
QueryFamilyRecharge();
|
}
|
}
|
}
|