ro-webgl/Assets/Lua/Logic/SignDataOld.lua
2021-12-21 09:40:39 +08:00

208 lines
7.5 KiB
Lua
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

local SignData = class("SignData", require("DataBase"))
local _toOpenUISign = 0; --0哪个都不开启1是开启UISign2是开启UISign23是刷新签到界面
local _backPanelId = 0; --要返回得界面得id签到界面可以返回主城和冒险两个界面
local _circle = 30; --签到周期一个周期30天
local _getDataCb; --收到签到数据返回之后的回调
function SignData:ctor()
self.data = {}
end
function SignData:RegisterNetEvents()
--签到数据请求
ManagerContainer.NetManager:NetRegister(ProtoMsgId.SC_SIGN_UP_INFO_ACK, self.SCSignUpInfoAck, self)
ManagerContainer.NetManager:NetRegister(ProtoMsgId.SC_SIGN_UP_ACK, self.ScSignUpAck, self)
end
function SignData:Clear()
end
function SignData:Destroy()
if self.Clear then
self:Clear()
end
self:UnRegisterNetEvents()
end
function SignData:UnRegisterNetEvents()
ManagerContainer.NetManager:UnRegisterPbIdCallback(ProtoMsgId.SC_SIGN_UP_INFO_ACK)
ManagerContainer.NetManager:UnRegisterPbIdCallback(ProtoMsgId.SC_SIGN_UP_ACK)
end
-------------------custom code start------------------
function SignData:ScSignUpAck(_data)
ManagerContainer.LuaEventMgr:Dispatch(UIEventNames.AFTER_SIGN_UP_ACK, _data);
end
--判断是否播放过签到动画
function SignData:PlayedAnimation()
end
--向服务器请求签到的消息,传进来的参数 0哪个都不开启1是开启UISign2是开启UISign2,3是刷新签到界面
function SignData:CSSignUpReq(_openPanelIndex, _backlId, _cb)
local _isUnLock = self:GetIsUnLocked();
if not _isUnLock then return; end
_toOpenUISign = _openPanelIndex or 0;
_backPanelId = _backlId or Enum.UIPageName.UIMainCity1;
_getDataCb = _cb;
ManagerContainer.NetManager:SendMessage(ProtoMsgId.CS_SIGN_UP_INFO_REQ);
end
--收到了请求的服务器的签到数据
function SignData:SCSignUpInfoAck(_data)
local _isUnLock = self:GetIsUnLocked();
if not _isUnLock then return; end
if _data.error ~= Enum.NetErrorCode.ERROR_OK then
LogError("获取签到信息错误,错误码:", _data.error);
return;
end
self:SendData(_data);
end
--分发签到数据
function SignData:SendData(_data)
if _toOpenUISign == 0 then --哪个界面都不想打开,就是显示一下红点
local _canSign = self:JudgeCanSign(_data.sign_info.cur_sign_info.last_sign or 0);
ManagerContainer.LuaEventMgr:Dispatch(UIEventNames.RED_POINT_MGR_NOTICE, Enum.RPNotifyType.SignIn, _canSign);
else
--显示及一下红点
local _canSign = self:JudgeCanSign(_data.sign_info.cur_sign_info.last_sign or 0);
ManagerContainer.LuaEventMgr:Dispatch(UIEventNames.RED_POINT_MGR_NOTICE, Enum.RPNotifyType.SignIn, _canSign);
--整理数据
self:TidyData(_data);
if _toOpenUISign == 1 then --打开签到界面
self:OpenSign(_backPanelId);
elseif _toOpenUISign == 2 and _canSign then --打开签到的动画界面,动画播放完之后才会开启签到界面,这波操作只有当可签到的时候才会走到
if ManagerContainer.LuaUIMgr:HasOpenPage(Enum.UIPageName.UIBattle) then
ManagerContainer.LuaUIMgr:Hide(Enum.UIPageName.UIBattle);
ManagerContainer.LuaUIMgr:Open(Enum.UIPageName.UISign2);
end
--记录播放时间到玩家本地数据
--local _timeSecond = ManagerContainer.LuaTimerMgr:GetTimeSecond();
--UnityEngine.PlayerPrefs.SetInt("SignInAnimationState", _timeSecond)
elseif _toOpenUISign == 3 then --刷新签到页面
ManagerContainer.LuaEventMgr:Dispatch(UIEventNames.REFRESH_SIGN_UP_ACK);
end
end
end
--开启签到界面
function SignData:OpenSign(_id)
local _backId = Enum.UIPageName.UIMainCity1;
if _id ~= 0 then _backId = _id end
ManagerContainer.LuaUIMgr:Open(Enum.UIPageName.UISignIn, nil, _backPanelId)
if _getDataCb then
_getDataCb();
_getDataCb = nil;
end
end
--判断是否可播放签到前的动画
function SignData:JudgeCanPlay()
local _state = UnityEngine.PlayerPrefs.GetInt("SignInAnimationState") or 0; --这个存放的是上次签到的时间的转换成秒的数值
local _canSign = self:JudgeCanSign(_state);
return _canSign;
end
--整理签到数据
function SignData:TidyData(_data)
self._data = {};
--记录数据
self._data._curSignDay = _data.cur_sign_day or 1; --累计签到的下一天
self._data._curDay = _data.sign_info.cur_day or 0; --当前签到的累计天数
self._data._lastSign = 0; --上次签到的时间
if _data.sign_info.cur_sign_info then
self._data._lastSign = _data.sign_info.cur_sign_info.last_sign;
end
--根据记录的数据进行整理
self._data._cfgData = {};
self._data._canSign = self:JudgeCanSign(self._data._lastSign);
local _startDay, _endDay;
local _fmod = math.fmod(self._data._curDay, _circle);
if _fmod == 0 then
if self._data._canSign then
local _modf = math.modf(self._data._curSignDay / _circle);
_startDay = _modf * _circle + 1;
_endDay = (_modf + 1) * _circle;
else
local _modf = math.modf(self._data._curDay / _circle) - 1;
_startDay = _modf * _circle + 1;
_endDay = (_modf + 1) * _circle;
end
else
local _modf = math.modf(self._data._curDay / _circle);
_startDay = _modf * _circle + 1;
_endDay = (_modf + 1) * _circle;
end
for _i = _startDay, _endDay do
local _cfgData = ManagerContainer.CfgMgr:GetSignInCfg(_i);
table.insert(self._data._cfgData, _cfgData);
end
end
--获取已经整理好的数据
function SignData:GetData()
return self._data;
end
--获取签到界面关闭的时候要返回的界面的id
function SignData:GetBackPanelId()
return _backPanelId;
end
--判断是否能签到
function SignData:JudgeCanSign(_lastSign)
local _canSign = false; --当前是否能够签到
local _fiveOClickSecond = self:GetCurDayInFiveOClock();
local _lastFiveOClickSecond = _fiveOClickSecond - Constant.OneDaySeconds
local _curTime = ManagerContainer.LuaTimerMgr:GetTimeSecond();
if _lastSign < _lastFiveOClickSecond then --上次签到在昨天五点之前
_canSign = true;
else --上次签到在昨天五点之后
if _lastSign >= _fiveOClickSecond then --上次签到在今天五点之后,你就别签到了,已经签到过了
_canSign = false;
else
if _curTime > _fiveOClickSecond then --当前时间在今天五点之后
_canSign = true;
end
end
end
return _canSign;
end
--获取当天五点的时间戳,以秒为单位
function SignData:GetCurDayInFiveOClock()
local _second = CommonUtil.GetTodayTimeStamp(5);
return _second;
end
--获取当前签到功能是否解锁
function SignData:GetIsUnLocked()
local _isUnLock = ManagerContainer.UIFuncUnlockMgr:GetFuncLockStatusById(30);
return _isUnLock;
end
--获取周期
function SignData:GetCircle()
return _circle;
end
--TODO:临时代码以后删除所有跟_keepDialogue相关的都要删除
function SignData:KeepDialogue()
self._keepDialogue = true;
end
function SignData:GetKeepDialogue()
return self._keepDialogue;
end
-------------------custom code end--------------------
return SignData