Ch_turn.ts 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160
  1. import { AssetManager, director, instantiate, isValid, Node, Prefab } from "cc";
  2. import { bundleMgr } from "../Mgr/BundleMgr";
  3. import { resMgr } from "../Mgr/ResMgr";
  4. export interface evt {
  5. onComClick: () => void;
  6. onGetReward: (itemId: number, count: number) => void;
  7. onViedoReward: (success: boolean) => void;
  8. onSaveGameData: (save_data: number) => void;
  9. }
  10. export interface TurnObj {
  11. itemArr: Array<{ itemId: number, count: number, weigth: number }>;
  12. total: number;
  13. }
  14. /** 主窗口 */
  15. const mainPopup = "Turn/Prefab/Popup/turnPopup";
  16. /** 包名 */
  17. const bundleName = "Turn";
  18. /** 定义一个类 */
  19. class Ch_turn {
  20. /** 私有构造函数 */
  21. private constructor() { }
  22. /** 单例模式 */
  23. public static readonly instance: Ch_turn = new Ch_turn();
  24. private _firstParent: Node | null = null;
  25. private _secondParent: Node | null = null;
  26. private _itemArr: Array<{ itemId: number, count: number, weigth: number }> = [];
  27. private _data: TurnObj = { itemArr: this._itemArr, total: 0 };
  28. private _evt = chsdk.get_new_event<evt>();
  29. get evt() {
  30. return this._evt;
  31. }
  32. /**
  33. * 初始化数据
  34. * @param data
  35. */
  36. init(total: number = 0) {
  37. // 初始化
  38. this._data.total = total ? total : 0;
  39. }
  40. /** 公共点击事件 */
  41. onComClick() {
  42. this.evt.emit(this.evt.key.onComClick);
  43. }
  44. /**
  45. * 获得奖励
  46. * @param itemId
  47. */
  48. onGetReward(itemId: number, count: number) {
  49. // console.log("获得奖励", itemId);
  50. this.evt.emit(this.evt.key.onGetReward, itemId, count);
  51. }
  52. /**
  53. * 看视频广告
  54. */
  55. onViedoReward(success: boolean) {
  56. this.evt.emit(this.evt.key.onViedoReward, success);
  57. }
  58. /**
  59. * 保存游戏数据
  60. * @param save_data
  61. */
  62. onSaveGameData(total: number) {
  63. this._data.total = total;
  64. this.evt.emit(this.evt.key.onSaveGameData, total);
  65. }
  66. /**
  67. * 获取内部父节点
  68. * @returns
  69. */
  70. getInterParent() {
  71. return this._secondParent;
  72. }
  73. /**
  74. * 获取游戏数据
  75. */
  76. getGameData() {
  77. return this._data;
  78. }
  79. /**
  80. * 清空数据
  81. */
  82. protected clear() {
  83. this._data.total = 0;
  84. }
  85. /**
  86. * 加载分包
  87. * @param preogerss
  88. * @param onComplete
  89. */
  90. loadBundle(preogerss?: (progress: number) => void, onComplete?: (err: Error | null, bundle: AssetManager.Bundle | null) => void): void {
  91. const onProgress = (progress: number) => {
  92. chsdk.log.debug(`加载进度:${progress}%`);
  93. if (preogerss) {
  94. preogerss(progress);
  95. }
  96. };
  97. bundleMgr.getBundle(bundleName, onProgress)
  98. .then((bundle) => {
  99. if (bundle) {
  100. chsdk.log.debug('分包加载成功!');
  101. // 在这里可以执行加载完成后的操作
  102. if (onComplete) {
  103. onComplete(null, bundle);
  104. }
  105. } else {
  106. chsdk.log.debug('分包加载失败!');
  107. // 这里可以执行失败后的操作
  108. setTimeout(() => {
  109. // 这里可以尝试重新加载分包
  110. this.loadBundle(preogerss, onComplete);
  111. }, 1000);
  112. }
  113. })
  114. }
  115. /**
  116. * 显示主窗口
  117. * @param parent 父节点
  118. * @param interParent 界面父节点
  119. */
  120. show(parent?: Node, interParent?: Node) {
  121. this._firstParent = parent ? parent : null;
  122. this._secondParent = interParent ? interParent : null;
  123. resMgr.loadRes<Prefab>(mainPopup).then((prefab: Prefab) => {
  124. let node = instantiate(prefab);
  125. if (parent) {
  126. if (isValid(parent)) {
  127. node.parent = parent;
  128. } else {
  129. node.destroy();
  130. }
  131. }
  132. else {
  133. let canvas = director.getScene().getChildByName("Canvas");
  134. if (canvas) {
  135. node.parent = canvas;
  136. }
  137. }
  138. });
  139. }
  140. }
  141. /** 导出单例模式的实例 */
  142. export const ch_turn: Ch_turn = Ch_turn.instance;