SignDataOld.lua 7.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208
  1. local SignData = class("SignData", require("DataBase"))
  2. local _toOpenUISign = 0; --0:哪个都不开启,1是开启UISign,2是开启UISign2,3是刷新签到界面
  3. local _backPanelId = 0; --要返回得界面得id,签到界面可以返回主城和冒险两个界面
  4. local _circle = 30; --签到周期,一个周期30天
  5. local _getDataCb; --收到签到数据返回之后的回调
  6. function SignData:ctor()
  7. self.data = {}
  8. end
  9. function SignData:RegisterNetEvents()
  10. --签到数据请求
  11. ManagerContainer.NetManager:NetRegister(ProtoMsgId.SC_SIGN_UP_INFO_ACK, self.SCSignUpInfoAck, self)
  12. ManagerContainer.NetManager:NetRegister(ProtoMsgId.SC_SIGN_UP_ACK, self.ScSignUpAck, self)
  13. end
  14. function SignData:Clear()
  15. end
  16. function SignData:Destroy()
  17. if self.Clear then
  18. self:Clear()
  19. end
  20. self:UnRegisterNetEvents()
  21. end
  22. function SignData:UnRegisterNetEvents()
  23. ManagerContainer.NetManager:UnRegisterPbIdCallback(ProtoMsgId.SC_SIGN_UP_INFO_ACK)
  24. ManagerContainer.NetManager:UnRegisterPbIdCallback(ProtoMsgId.SC_SIGN_UP_ACK)
  25. end
  26. -------------------custom code start------------------
  27. function SignData:ScSignUpAck(_data)
  28. ManagerContainer.LuaEventMgr:Dispatch(UIEventNames.AFTER_SIGN_UP_ACK, _data);
  29. end
  30. --判断是否播放过签到动画
  31. function SignData:PlayedAnimation()
  32. end
  33. --向服务器请求签到的消息,传进来的参数 0:哪个都不开启,1是开启UISign,2是开启UISign2,3是刷新签到界面
  34. function SignData:CSSignUpReq(_openPanelIndex, _backlId, _cb)
  35. local _isUnLock = self:GetIsUnLocked();
  36. if not _isUnLock then return; end
  37. _toOpenUISign = _openPanelIndex or 0;
  38. _backPanelId = _backlId or Enum.UIPageName.UIMainCity1;
  39. _getDataCb = _cb;
  40. ManagerContainer.NetManager:SendMessage(ProtoMsgId.CS_SIGN_UP_INFO_REQ);
  41. end
  42. --收到了请求的服务器的签到数据
  43. function SignData:SCSignUpInfoAck(_data)
  44. local _isUnLock = self:GetIsUnLocked();
  45. if not _isUnLock then return; end
  46. if _data.error ~= Enum.NetErrorCode.ERROR_OK then
  47. LogError("获取签到信息错误,错误码:", _data.error);
  48. return;
  49. end
  50. self:SendData(_data);
  51. end
  52. --分发签到数据
  53. function SignData:SendData(_data)
  54. if _toOpenUISign == 0 then --哪个界面都不想打开,就是显示一下红点
  55. local _canSign = self:JudgeCanSign(_data.sign_info.cur_sign_info.last_sign or 0);
  56. ManagerContainer.LuaEventMgr:Dispatch(UIEventNames.RED_POINT_MGR_NOTICE, Enum.RPNotifyType.SignIn, _canSign);
  57. else
  58. --显示及一下红点
  59. local _canSign = self:JudgeCanSign(_data.sign_info.cur_sign_info.last_sign or 0);
  60. ManagerContainer.LuaEventMgr:Dispatch(UIEventNames.RED_POINT_MGR_NOTICE, Enum.RPNotifyType.SignIn, _canSign);
  61. --整理数据
  62. self:TidyData(_data);
  63. if _toOpenUISign == 1 then --打开签到界面
  64. self:OpenSign(_backPanelId);
  65. elseif _toOpenUISign == 2 and _canSign then --打开签到的动画界面,动画播放完之后才会开启签到界面,这波操作只有当可签到的时候才会走到
  66. if ManagerContainer.LuaUIMgr:HasOpenPage(Enum.UIPageName.UIBattle) then
  67. ManagerContainer.LuaUIMgr:Hide(Enum.UIPageName.UIBattle);
  68. ManagerContainer.LuaUIMgr:Open(Enum.UIPageName.UISign2);
  69. end
  70. --记录播放时间到玩家本地数据
  71. --local _timeSecond = ManagerContainer.LuaTimerMgr:GetTimeSecond();
  72. --UnityEngine.PlayerPrefs.SetInt("SignInAnimationState", _timeSecond)
  73. elseif _toOpenUISign == 3 then --刷新签到页面
  74. ManagerContainer.LuaEventMgr:Dispatch(UIEventNames.REFRESH_SIGN_UP_ACK);
  75. end
  76. end
  77. end
  78. --开启签到界面
  79. function SignData:OpenSign(_id)
  80. local _backId = Enum.UIPageName.UIMainCity1;
  81. if _id ~= 0 then _backId = _id end
  82. ManagerContainer.LuaUIMgr:Open(Enum.UIPageName.UISignIn, nil, _backPanelId)
  83. if _getDataCb then
  84. _getDataCb();
  85. _getDataCb = nil;
  86. end
  87. end
  88. --判断是否可播放签到前的动画
  89. function SignData:JudgeCanPlay()
  90. local _state = UnityEngine.PlayerPrefs.GetInt("SignInAnimationState") or 0; --这个存放的是上次签到的时间的转换成秒的数值
  91. local _canSign = self:JudgeCanSign(_state);
  92. return _canSign;
  93. end
  94. --整理签到数据
  95. function SignData:TidyData(_data)
  96. self._data = {};
  97. --记录数据
  98. self._data._curSignDay = _data.cur_sign_day or 1; --累计签到的下一天
  99. self._data._curDay = _data.sign_info.cur_day or 0; --当前签到的累计天数
  100. self._data._lastSign = 0; --上次签到的时间
  101. if _data.sign_info.cur_sign_info then
  102. self._data._lastSign = _data.sign_info.cur_sign_info.last_sign;
  103. end
  104. --根据记录的数据进行整理
  105. self._data._cfgData = {};
  106. self._data._canSign = self:JudgeCanSign(self._data._lastSign);
  107. local _startDay, _endDay;
  108. local _fmod = math.fmod(self._data._curDay, _circle);
  109. if _fmod == 0 then
  110. if self._data._canSign then
  111. local _modf = math.modf(self._data._curSignDay / _circle);
  112. _startDay = _modf * _circle + 1;
  113. _endDay = (_modf + 1) * _circle;
  114. else
  115. local _modf = math.modf(self._data._curDay / _circle) - 1;
  116. _startDay = _modf * _circle + 1;
  117. _endDay = (_modf + 1) * _circle;
  118. end
  119. else
  120. local _modf = math.modf(self._data._curDay / _circle);
  121. _startDay = _modf * _circle + 1;
  122. _endDay = (_modf + 1) * _circle;
  123. end
  124. for _i = _startDay, _endDay do
  125. local _cfgData = ManagerContainer.CfgMgr:GetSignInCfg(_i);
  126. table.insert(self._data._cfgData, _cfgData);
  127. end
  128. end
  129. --获取已经整理好的数据
  130. function SignData:GetData()
  131. return self._data;
  132. end
  133. --获取签到界面关闭的时候要返回的界面的id
  134. function SignData:GetBackPanelId()
  135. return _backPanelId;
  136. end
  137. --判断是否能签到
  138. function SignData:JudgeCanSign(_lastSign)
  139. local _canSign = false; --当前是否能够签到
  140. local _fiveOClickSecond = self:GetCurDayInFiveOClock();
  141. local _lastFiveOClickSecond = _fiveOClickSecond - Constant.OneDaySeconds
  142. local _curTime = ManagerContainer.LuaTimerMgr:GetTimeSecond();
  143. if _lastSign < _lastFiveOClickSecond then --上次签到在昨天五点之前
  144. _canSign = true;
  145. else --上次签到在昨天五点之后
  146. if _lastSign >= _fiveOClickSecond then --上次签到在今天五点之后,你就别签到了,已经签到过了
  147. _canSign = false;
  148. else
  149. if _curTime > _fiveOClickSecond then --当前时间在今天五点之后
  150. _canSign = true;
  151. end
  152. end
  153. end
  154. return _canSign;
  155. end
  156. --获取当天五点的时间戳,以秒为单位
  157. function SignData:GetCurDayInFiveOClock()
  158. local _second = CommonUtil.GetTodayTimeStamp(5);
  159. return _second;
  160. end
  161. --获取当前签到功能是否解锁
  162. function SignData:GetIsUnLocked()
  163. local _isUnLock = ManagerContainer.UIFuncUnlockMgr:GetFuncLockStatusById(30);
  164. return _isUnLock;
  165. end
  166. --获取周期
  167. function SignData:GetCircle()
  168. return _circle;
  169. end
  170. --TODO:临时代码,以后删除,所有跟_keepDialogue相关的都要删除
  171. function SignData:KeepDialogue()
  172. self._keepDialogue = true;
  173. end
  174. function SignData:GetKeepDialogue()
  175. return self._keepDialogue;
  176. end
  177. -------------------custom code end--------------------
  178. return SignData