Files
BingoGrassland/Assets/BingoBrain/ModuleUI/BingoHall/BingoHallModel.cs
T
2026-04-20 13:49:36 +08:00

184 lines
5.7 KiB
C#

using System;
using System.Collections.Generic;
using UnityEngine;
using BingoBrain.Core;
namespace BingoBrain
{
public class BingoHallModel : BaseModel
{
public decimal show101;
public decimal show102;
public event Action RefreshUIEvent;
public bool IsAni { get; set; }
private void RefreshData(object obj)
{
if (!IsAni)
{
show101 = PreferencesMgr.Instance.Currency101;
show102 = PreferencesMgr.Instance.Currency102;
RefreshUI();
}
}
public string NextCardBoardTimeStr
{
get
{
long sum = PreferencesMgr.Instance.NextRecoveryTime - GameHelper.GetNowTime();
if (sum <= 0)
{
return string.Empty;
}
return GameHelper.GetNoDecimalUnitStr((int)sum);
}
}
public int CardBoardCountIndex
{
get { return PreferencesMgr.Instance.CardBoardIndex; }
set { PreferencesMgr.Instance.CardBoardIndex = value; }
}
/// <summary>
/// 最大卡牌数量
/// </summary>
public int MaxCardBoardSum { get; private set; }
/// <summary>
/// 恢复一张卡板的时间
/// </summary>
public int CardBoardRecoveryTime { get; private set; }
#region
protected override void OnInit()
{
}
protected override void OnDispose()
{
}
protected override void OnReset()
{
}
#endregion
#region
protected override void OnReadData()
{
MaxCardBoardSum = GameHelper.GetCommonModel().MaxCardBoardSum[0];
CardBoardRecoveryTime = GameHelper.GetCommonModel().CardBoardRecoveryTime;
show101 = PreferencesMgr.Instance.Currency101;
show102 = PreferencesMgr.Instance.Currency102;
}
#endregion
#region
protected override void AddListener()
{
CtrlDispatcher.Instance.AddListener(CtrlMsg.Game_Start, CalculateOfflineTime);
DataDispatcher.Instance.AddListener(PreferencesMsg.currency101, RefreshData);
DataDispatcher.Instance.AddListener(PreferencesMsg.currency102, RefreshData);
PreferencesDispatcher<int>.Instance.AddListener(PreferencesMsg.cardBoardSum, ChangeRecoveryTime);
Hall.Instance.UpdateSecondEvent += CheckCarBoard;
}
protected override void RemoveListener()
{
DataDispatcher.Instance.RemoveListener(PreferencesMsg.currency101, RefreshData);
DataDispatcher.Instance.RemoveListener(PreferencesMsg.currency102, RefreshData);
CtrlDispatcher.Instance.RemoveListener(CtrlMsg.Game_Start, CalculateOfflineTime);
PreferencesDispatcher<int>.Instance.RemoveListener(PreferencesMsg.cardBoardSum, ChangeRecoveryTime);
Hall.Instance.UpdateSecondEvent -= CheckCarBoard;
}
#endregion
/// <summary>
/// 改变卡板恢复时间
/// </summary>
private void ChangeRecoveryTime(object o)
{
ExiteValue<int> exiteValue = o as ExiteValue<int>;
if (exiteValue.oldValue >= MaxCardBoardSum)
{
if (exiteValue.newValue < MaxCardBoardSum)
{
PreferencesMgr.Instance.NextRecoveryTime =
GameHelper.GetNowTime() + CardBoardRecoveryTime;
}
}
}
/// <summary>
/// 在线恢复
/// </summary>
private void CheckCarBoard()
{
if (PreferencesMgr.Instance.CardBoardSum >= MaxCardBoardSum)
{
return;
}
if (GameHelper.GetNowTime() >= PreferencesMgr.Instance.NextRecoveryTime)
{
int val = Mathf.Clamp(PreferencesMgr.Instance.CardBoardSum + 1, 0, MaxCardBoardSum);
PreferencesMgr.Instance.CardBoardSum = val;
PreferencesMgr.Instance.NextRecoveryTime =
GameHelper.GetNowTime() + CardBoardRecoveryTime;
}
}
/// <summary>
/// 计算离线卡牌增加
/// </summary>
private void CalculateOfflineTime(object o)
{
if (PreferencesMgr.Instance.CardBoardSum >= MaxCardBoardSum)
{
return;
}
Debug.LogFormat("计算离线时间搓,当前时间搓{0},生成下一张卡牌的时间搓{1}", DateTimeBoardk.Instance.GetServerCurrTimestamp(),
PreferencesMgr.Instance.NextRecoveryTime);
if (GameHelper.GetNowTime() >= PreferencesMgr.Instance.NextRecoveryTime)
{
int val =
(int)(GameHelper.GetNowTime() - PreferencesMgr.Instance.NextRecoveryTime);
int sum1 = val / CardBoardRecoveryTime + 1;
int sum2 = val % CardBoardRecoveryTime;
int sum3 = Mathf.Clamp(sum1 + PreferencesMgr.Instance.CardBoardSum, 0, MaxCardBoardSum);
if (sum3 >= MaxCardBoardSum)
{
PreferencesMgr.Instance.NextRecoveryTime =
GameHelper.GetNowTime() + CardBoardRecoveryTime;
}
else
{
PreferencesMgr.Instance.NextRecoveryTime =
GameHelper.GetNowTime() + CardBoardRecoveryTime - sum2;
}
PreferencesMgr.Instance.CardBoardSum = sum3;
}
}
public void RefreshUI()
{
RefreshUIEvent?.Invoke();
}
}
}