RedBagData.ts 8.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231
  1. // Learn TypeScript:
  2. // - https://docs.cocos.com/creator/manual/en/scripting/typescript.html
  3. // Learn Attribute:
  4. // - https://docs.cocos.com/creator/manual/en/scripting/reference/attributes.html
  5. // Learn life-cycle callbacks:
  6. // - https://docs.cocos.com/creator/manual/en/scripting/life-cycle-callbacks.html
  7. import { Timer } from "../../../mk/system/TimerSystem";
  8. import RedBagItem, { RedBagItemType } from "../../module/redBagItem/RedBagItem";
  9. const { ccclass, property } = cc._decorator;
  10. /**[FC][V2.0.1]气泡红包数据 */
  11. @ccclass
  12. export default class RedBagData extends cc.Component {
  13. /** 是否初始化了 */
  14. public ifInit: boolean = false;
  15. /** 是否开启 */
  16. public ifOpen: boolean = false;
  17. /** 正在计时 */
  18. public isCounting: boolean = false;
  19. /** 总的倒计时时间 */
  20. public countTotalTime: number = 300;
  21. /** 开始界面 */
  22. private startRedBagItemArr: RedBagItem[] = [];
  23. /** 开始界面倒计时剩余时间 */
  24. public curStartLeftTime: number = 0;
  25. /** 开始界面倒计时的时间 */
  26. private storageKey_startCountEndTime: string = "startCountEndTime";
  27. /** 关卡界面 */
  28. private levelRedBagItemArr: RedBagItem[] = [];
  29. /** 关卡界面倒计时剩余时间 */
  30. public curLevelLeftTime: number = 0;
  31. /** 关卡界面倒计时的时间 */
  32. private storageKey_levelCountEndTime: string = "levelCountEndTime";
  33. /**初始化 */
  34. public init() {
  35. if (this.ifInit) {
  36. return;
  37. }
  38. this.ifInit = true;
  39. this.ifOpen = gData.gameData.configs.GlobalCfg.redBagLimitSwitch == 0 ? false : true;
  40. console.log("===[v2.0.1] 初始化 switch", gData.gameData.configs.GlobalCfg.redBagLimitSwitch, gData.gameData.configs.GlobalCfg.levelRedBagSwitch);
  41. if (this.ifOpen) {
  42. this.checkOfflineTime();
  43. }
  44. else {
  45. mk.storage.setStorage(this.storageKey_startCountEndTime, null);
  46. mk.storage.setStorage(this.storageKey_levelCountEndTime, null);
  47. }
  48. }
  49. //数组操作相关-----------------------------------------------------------------------------------
  50. /** 添加进数组
  51. * @param type 气泡红包类型
  52. * @param redBadItem 气泡红包脚本本身
  53. */
  54. public addRedBagItem(type: RedBagItemType, redBadItem: RedBagItem) {
  55. if (type == RedBagItemType.StartUI) {
  56. this.startRedBagItemArr.push(redBadItem);
  57. }
  58. else if (type == RedBagItemType.LevelUI) {
  59. this.levelRedBagItemArr.push(redBadItem);
  60. }
  61. }
  62. /** 从数组中移除
  63. * @param type 气泡红包类型
  64. * @param redBadItem 气泡红包脚本本身
  65. */
  66. public removeRedBagItem(type: RedBagItemType, redBagItem: RedBagItem) {
  67. let redBagItemArr: RedBagItem[] = [];
  68. if (type == RedBagItemType.StartUI) {
  69. redBagItemArr = this.startRedBagItemArr;
  70. }
  71. else if (type == RedBagItemType.LevelUI) {
  72. redBagItemArr = this.levelRedBagItemArr;
  73. }
  74. if (redBagItemArr.length > 1) {
  75. let index = redBagItemArr.indexOf(redBagItem);
  76. if (index != -1) {
  77. redBagItemArr.splice(index, 1);
  78. }
  79. }
  80. }
  81. //倒计时相关---------------------------------------------------------------------------------------
  82. /** 检测离线时间 */
  83. public checkOfflineTime() {
  84. let curDate = new Date().getTime();
  85. let startCountEndDate = mk.storage.getStorage(this.storageKey_startCountEndTime);
  86. // console.log("===[v2.0.1] lastDate", lastDate);
  87. if (startCountEndDate) {
  88. let gapTime = Math.floor((startCountEndDate - curDate) * 0.001);
  89. if (gapTime >= 5) {
  90. this.startCountDown(RedBagItemType.StartUI, gapTime);
  91. }
  92. else {
  93. }
  94. }
  95. else {
  96. }
  97. let levelCountEndDate = mk.storage.getStorage(this.storageKey_levelCountEndTime);
  98. if (levelCountEndDate) {
  99. console.log("==[ levelCountEndDate", levelCountEndDate, levelCountEndDate - curDate);
  100. let gapTime = Math.floor((levelCountEndDate - curDate) * 0.001);
  101. if (gapTime >= 5) {
  102. this.startCountDown(RedBagItemType.LevelUI, gapTime);
  103. }
  104. else {
  105. }
  106. }
  107. else {
  108. }
  109. }
  110. /** 开始倒计时 */
  111. public startCountDown(type: RedBagItemType, leftTime: number) {
  112. console.log("===[v2.0.1 type", RedBagItemType[type], leftTime);
  113. if (type == RedBagItemType.StartUI) {
  114. this.curStartLeftTime = leftTime;
  115. let countEnddate = new Date().getTime() + leftTime * 1000;
  116. mk.storage.setStorage(this.storageKey_startCountEndTime, countEnddate);
  117. }
  118. else if (type == RedBagItemType.LevelUI) {
  119. this.curLevelLeftTime = leftTime;
  120. let countEnddate = new Date().getTime() + leftTime * 1000;
  121. mk.storage.setStorage(this.storageKey_levelCountEndTime, countEnddate);
  122. }
  123. if (!this.isCounting) {
  124. this.isCounting = true;
  125. this.schedule(this.countDown, 1);
  126. }
  127. }
  128. /** 倒计时 */
  129. countDown() {
  130. if (this.curStartLeftTime > 0) {
  131. let time = --this.curStartLeftTime;
  132. if (time <= 0) {
  133. this.curStartLeftTime = 0;
  134. this.stopCountDown(RedBagItemType.StartUI);
  135. return;
  136. }
  137. let timeStr = mk.time.format(time, "m:s");
  138. for (var i = 0; i < this.startRedBagItemArr.length; i++) {
  139. let redBagItem: RedBagItem = this.startRedBagItemArr[i];
  140. redBagItem.countDown(timeStr);
  141. }
  142. }
  143. if (this.curLevelLeftTime > 0) {
  144. let time = --this.curLevelLeftTime;
  145. if (time <= 0) {
  146. this.curLevelLeftTime = 0;
  147. this.stopCountDown(RedBagItemType.LevelUI);
  148. return;
  149. }
  150. let timeStr = mk.time.format(time, "m:s");
  151. for (var i = 0; i < this.levelRedBagItemArr.length; i++) {
  152. let redBagItem: RedBagItem = this.levelRedBagItemArr[i];
  153. redBagItem.countDown(timeStr);
  154. }
  155. }
  156. }
  157. /** 结束倒计时 */
  158. public stopCountDown(type: RedBagItemType) {
  159. if (type == RedBagItemType.StartUI) {
  160. for (var i = 0; i < this.startRedBagItemArr.length; i++) {
  161. let redBagItem: RedBagItem = this.startRedBagItemArr[i];
  162. redBagItem.stopCountDown();
  163. }
  164. mk.storage.setStorage(this.storageKey_startCountEndTime, null);
  165. }
  166. else if (type == RedBagItemType.LevelUI) {
  167. for (var i = 0; i < this.levelRedBagItemArr.length; i++) {
  168. let redBagItem: RedBagItem = this.levelRedBagItemArr[i];
  169. redBagItem.stopCountDown();
  170. }
  171. mk.storage.setStorage(this.storageKey_levelCountEndTime, null);
  172. }
  173. if (this.curStartLeftTime <= 0 && this.curLevelLeftTime <= 0) {
  174. this.isCounting = false;
  175. this.unschedule(this.countDown);
  176. }
  177. }
  178. reset() {
  179. for (var i = 0; i < this.startRedBagItemArr.length; i++) {
  180. let redBagItem: RedBagItem = this.startRedBagItemArr[i];
  181. redBagItem.reset();
  182. }
  183. for (var i = 0; i < this.levelRedBagItemArr.length; i++) {
  184. let redBagItem: RedBagItem = this.levelRedBagItemArr[i];
  185. redBagItem.reset();
  186. }
  187. }
  188. public showTip(type: RedBagItemType) {
  189. let redBagItemArr: RedBagItem[] = [];
  190. if (type == RedBagItemType.StartUI) {
  191. redBagItemArr = this.startRedBagItemArr;
  192. }
  193. else if (type == RedBagItemType.LevelUI) {
  194. redBagItemArr = this.levelRedBagItemArr;
  195. }
  196. let length = redBagItemArr.length;
  197. let index = mk.math.random(0, length - 1);
  198. let redBagItem: RedBagItem = redBagItemArr[index];
  199. redBagItem.showTip();
  200. }
  201. public showNewTip(curIndex: number) {
  202. }
  203. }