uint ItemData.Ins.resource.GardenTaskNumTime 体力更新时间
uint ItemData.Ins.resource.GardenTaskNum 剩余体力值
float GardenTaskData.Ins.unix 当前本地时间 减去体力更新时间
uint _taskNum;需要回复的体力值= GardenTaskData.Ins.unix/每一个体力恢复需要的时间
ILBridge.Ins.onUpdate Update 委托事件 也可以做成计时器形式 最好每秒执行一次
假如 最大体力值 是200 每五分钟恢复一点体力值 也就是 300秒恢复一点
Text _txtTechtime 用来显示恢复体力 的文本组件
void SetTime ()
{
if ( ItemData.Ins.resource.GardenTaskNumTime != 0 && ItemData.Ins.resource.GardenTaskNum < 200 )
{
GardenTaskData.Ins.unix = ItemData.Ins.GetCurrentTimeUnix () - ItemData.Ins.resource.GardenTaskNumTime;
if ( GardenTaskData.Ins.unix > 300 )
{
_taskNum = ( uint ) GardenTaskData.Ins.unix / 300;
ItemData.Ins.resource.GardenTaskNum += _taskNum;
if ( ItemData.Ins.resource.GardenTaskNum >= 200 )
{
ItemData.Ins.resource.GardenTaskNum = 200;
}
else
{
GardenTaskData.Ins.unix -= ( _taskNum * 300 );
ILBridge.Ins.onUpdate += ToRecoverTili;
}
}
else
{
ILBridge.Ins.onUpdate += ToRecoverTili;
}
}
_txtTechtime.text = $"{ItemData.Ins.resource.GardenTaskNum}/{200}";
}
private void ToRecoverTili ()
{
GardenTaskData.Ins.unix += Time.deltaTime;
if ( GardenTaskData.Ins.unix > 300 )
{
ItemData.Ins.resource.GardenTaskNum += 1;
GardenTaskData.Ins.unix -= 300;
_txtTechtime.text = $"{ItemData.Ins.resource.GardenTaskNum}/{200}";
}
if ( ItemData.Ins.resource.GardenTaskNum >= 200 )
{
ItemData.Ins.resource.GardenTaskNum = 200;
ILBridge.Ins.onUpdate -= ToRecoverTili;//这里恢复满了 关闭计时器
_txtTechtime.text = $"{ItemData.Ins.resource.GardenTaskNum}/{200}";
}
}
public class GardenTaskBuyNumView : AView
{
/// <summary>
/// 下次体力恢复时间
/// </summary>
[AttComInfo("TextNextTili")]
Text _textNextTili;
/// <summary>
/// 全部体力恢复时间
/// </summary>
[AttComInfo("TextAllTili")]
Text _textAllTili;
/// <summary>
/// 今日可购买体力次数
/// </summary>
[AttComInfo("TextCanBuy")]
Text _textCanBuy;
float _time = 0;
private VipConfigVO _cfg;
/// <summary>
/// 可购买次数
/// </summary>
long num;
//初始化s
protected override void OnInit (object data)
{
base.OnInit (data);
_cfg = GameManageHub.Ins.GameConfigMgr.VipConfig.GetMap () [( int ) ItemData.Ins.vipthislevel + 1];
num = _cfg.gardenTaskBuytimes - ItemData.Ins.resource.GardenTaskBuyNum;
if ( ItemData.Ins.resource.GardenTaskNumTime != 0 && ItemData.Ins.resource.GardenTaskNum < 200 )
{
_textNextTili.text = SetTime (300 - GardenTaskData.Ins.unix % 300);
float num = (200- ItemData.Ins.resource.GardenTaskNum ) * 300 - GardenTaskData.Ins.unix;
_textAllTili.text = SetTime (num);
}
else
{
_textNextTili.text = "00:00:00";
_textAllTili.text = "00:00:00";
}
_textCanBuy.text = num + CharTable.GetChinese (275);
ILBridge.Ins.onUpdate += ShowTiliInfo;
}
private void ShowTiliInfo ()
{
_time += Time.deltaTime;
if ( _time > 1 )
{
float num = ( 200 - ItemData.Ins.resource.GardenTaskNum ) * 300 - GardenTaskData.Ins.unix;
if ( num <= 0 )
{
_textNextTili.text = "00:00:00";
_textAllTili.text = "00:00:00";
}
else
{
_textNextTili.text = SetTime (300 - GardenTaskData.Ins.unix % 300);
_textAllTili.text = SetTime (num);
}
}
}
private string SetTime(float unix)
{
int h = 0;
int m = 0;
int s = 0;
h = (int)unix / 3600;
unix -= h * 3600;
m = ( int ) unix / 60;
unix -= m * 60;
s = ( int ) unix % 60;
return SetTimeString (h) + ":" + SetTimeString (m) + ":" + SetTimeString (s);
}
private string SetTimeString(int num)
{
if ( num < 10 )
{
return "0" + num;
}
else
{
return num.ToString ();
}
}
protected override void OnDisable ()
{
base.OnDisable ();
ILBridge.Ins.onUpdate -= ShowTiliInfo;
}
}