| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208 |
- local SignData = class("SignData", require("DataBase"))
- local _toOpenUISign = 0; --0:哪个都不开启,1是开启UISign,2是开启UISign2,3是刷新签到界面
- 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是开启UISign,2是开启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
|