using System;
|
|
public class FestivalActivityCheckInManager : GameSystemManager<FestivalActivityCheckInManager>, IOpenServerActivity
|
{
|
public readonly int ActNum = 30;
|
|
public override void Init()
|
{
|
DTC0102_tagCDBPlayer.beforePlayerDataInitializeEventOnRelogin += OnBeforePlayerDataInitializeEventOnRelogin;
|
OperationTimeHepler.Instance.operationTimeUpdateEvent += OperationTimeUpdateEvent;
|
OperationTimeHepler.Instance.operationStartEvent += OperationStartEvent;
|
OperationTimeHepler.Instance.operationEndEvent += OperationEndEvent;
|
OperationTimeHepler.Instance.operationAdvanceEvent += OperationAdvanceEvent;
|
FuncOpen.Instance.OnFuncStateChangeEvent += OnFuncStateChangeEvent;
|
GeneralActInfoManager.Instance.OnUpdateActSignInfosEvent += OnUpdateActSignInfosEvent;
|
TimeMgr.Instance.OnDayEvent += OnDayEvent;
|
}
|
|
public override void Release()
|
{
|
DTC0102_tagCDBPlayer.beforePlayerDataInitializeEventOnRelogin -= OnBeforePlayerDataInitializeEventOnRelogin;
|
OperationTimeHepler.Instance.operationTimeUpdateEvent -= OperationTimeUpdateEvent;
|
OperationTimeHepler.Instance.operationStartEvent -= OperationStartEvent;
|
OperationTimeHepler.Instance.operationEndEvent -= OperationEndEvent;
|
OperationTimeHepler.Instance.operationAdvanceEvent -= OperationAdvanceEvent;
|
FuncOpen.Instance.OnFuncStateChangeEvent -= OnFuncStateChangeEvent;
|
GeneralActInfoManager.Instance.OnUpdateActSignInfosEvent -= OnUpdateActSignInfosEvent;
|
TimeMgr.Instance.OnDayEvent -= OnDayEvent;
|
}
|
|
private void OnBeforePlayerDataInitializeEventOnRelogin()
|
{
|
}
|
|
private void OnDayEvent()
|
{
|
UpdateRedPoint();
|
}
|
|
private void OnUpdateActSignInfosEvent(int arg1, int arg2)
|
{
|
UpdateRedPoint();
|
}
|
|
private void OnFuncStateChangeEvent(int obj)
|
{
|
if (obj != (int)FuncOpenEnum.FestivalActivity)
|
return;
|
UpdateRedPoint();
|
}
|
|
public const int activityType = (int)OpenServerActivityCenter.ActivityType.AT_DateActivity;
|
public const int activityID = (int)NewDayActivityID.FestivalActivityCheckInAct;
|
public static OperationType operaType = OperationType.FestivalActivity_CheckIn;
|
|
public Redpoint redPoint = new Redpoint(MainRedDot.FestivalActivityRepoint,
|
FestivalActivityManager.Instance.GetRedPointId(FestivalActivityRepointType.CheckIn));
|
|
public bool IsOpen => OperationTimeHepler.Instance.SatisfyOpenCondition(operaType);
|
public bool IsAdvance => OperationTimeHepler.Instance.SatisfyAdvanceCondition(operaType);
|
public bool priorityOpen => redPoint.state == RedPointState.Simple;
|
public event Action<int> onStateUpdate;
|
|
private void OperationTimeUpdateEvent(OperationType type)
|
{
|
if (type == operaType)
|
{
|
UpdateRedPoint();
|
}
|
}
|
|
private void OperationStartEvent(OperationType type, int state)
|
{
|
if (type == operaType && state == 0)
|
{
|
UpdateRedPoint();
|
onStateUpdate?.Invoke(activityID);
|
}
|
}
|
|
private void OperationEndEvent(OperationType type, int state)
|
{
|
if (type == operaType)
|
{
|
UpdateRedPoint();
|
onStateUpdate?.Invoke(activityID);
|
}
|
}
|
|
private void OperationAdvanceEvent(OperationType type)
|
{
|
if (type == operaType)
|
{
|
UpdateRedPoint();
|
onStateUpdate?.Invoke(activityID);
|
}
|
}
|
|
public void UpdateRedPoint()
|
{
|
redPoint.state = RedPointState.None;
|
if (!FuncOpen.Instance.IsFuncOpen((int)FuncOpenEnum.FestivalActivity))
|
return;
|
if (!IsOpen)
|
return;
|
|
if (HasCheckInCanHave())
|
{
|
redPoint.state = RedPointState.Simple;
|
}
|
}
|
|
public OperationCheckInActivityInfo GetOperationCheckInInfo()
|
{
|
OperationTimeHepler.Instance.TryGetOperation(operaType, out OperationCheckInActivityInfo act);
|
return act;
|
}
|
|
public bool GetActInfo(out OperationCheckInActivityInfo act, out ActSignConfig config)
|
{
|
config = null;
|
act = GetOperationCheckInInfo();
|
if (act == null)
|
return false;
|
config = ActSignConfig.Get(act.CfgID);
|
return config != null;
|
}
|
|
private int GetNowDayNum()
|
{
|
var act = GetOperationCheckInInfo();
|
if (act == null) return 0;
|
|
int dayNum = act.IndexOfDays(TimeUtility.ServerNow);
|
return dayNum < 0 ? 0 : dayNum + 1;
|
}
|
|
private bool IsCheckInGridUnlock(int gridDayNum)
|
{
|
int nowDayNum = GetNowDayNum();
|
if (nowDayNum <= 0) return false;
|
|
return nowDayNum >= gridDayNum;
|
}
|
|
/// <summary>
|
/// 0-未解锁 1-可签 2-已签
|
/// </summary>
|
public int GetCheckInState(int gridDayNum)
|
{
|
// 签到活动的ActType默认为0
|
if (GeneralActInfoManager.Instance.IsDaySigned(0, ActNum, gridDayNum)) return 2;
|
if (IsCheckInGridUnlock(gridDayNum)) return 1;
|
return 0;
|
}
|
|
public void SendGetCheckInReward()
|
{
|
// 签到活动的ActType默认为0
|
GeneralActInfoManager.Instance.SendGetSignReward(0, ActNum);
|
}
|
|
public bool HasCheckInCanHave()
|
{
|
if (!GetActInfo(out var act, out var config))
|
return false;
|
|
int templateID = config.SignTempID;
|
var list = ActSignAwardConfig.GetDayNumSortList(templateID);
|
if (list == null) return false;
|
|
for (int i = 0; i < list.Count; i++)
|
{
|
int dayNum = list[i];
|
int state = GetCheckInState(dayNum);
|
if (state == 1) return true;
|
}
|
return false;
|
}
|
|
public void GetActTimeStr(TextEx timeText, string key = "TimeRush05")
|
{
|
var act = GetOperationCheckInInfo();
|
if (act == null)
|
{
|
timeText.text = Language.Get("OSActivity6");
|
return;
|
}
|
timeText.text = Language.Get(key, TimeUtility.SecondsToShortDHMS(act.GetResetSurplusTime()));
|
}
|
}
|