UserM.ts 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196
  1. import EV, { EV_TYPE } from "../mgr/EV";
  2. import Utils from "../utils/Utils";
  3. import { WalletManager } from "../web3/WalletManager";
  4. import { GoodsId } from "./GoodsId";
  5. import WsM from "./WsM";
  6. import { EventTarget } from "cc";
  7. export class GoodInfo {
  8. id: number;
  9. count: number;
  10. }
  11. export class SeasonInfo {
  12. id: number;
  13. startTimeAt: number;
  14. endTimeAt: number;
  15. gamePassNum: number;
  16. }
  17. export class GameInfo {
  18. gameId: number;
  19. gameUser: number;
  20. myRewardPog: number;
  21. remainPog: number;
  22. seasonPog: number;
  23. }
  24. export class UserInfo {
  25. userId: number; // 用户id
  26. userName: string; // 用户名
  27. walletAddress: string; // 用户钱包
  28. systemWalletAddress: string; // 系统钱包
  29. season: SeasonInfo;
  30. currentTime: number; // 当前时间
  31. goodList: GoodInfo[];
  32. gameList: GameInfo[];
  33. }
  34. export class BindWalletResult {
  35. walletAddress: string;
  36. systemWalletAddress: string;
  37. }
  38. export class BadgeInfo {
  39. id: number; // 徽章id
  40. type: number; // 徽章类型
  41. num: number; // 数量
  42. addition: number; // 加成
  43. }
  44. export class MyBadgeInfo {
  45. badgeList: BadgeInfo[];
  46. }
  47. export default class UserM {
  48. isBindWallet(): boolean {
  49. return (
  50. this.data?.walletAddress != null && this.data?.walletAddress.length > 0
  51. );
  52. }
  53. async getBadgeList( ) {
  54. let result = await WsM.ins.syncRequest(20002, {});
  55. return result;
  56. }
  57. getGamePassCount() {
  58. return this.data?.season?.gamePassNum ?? 0;
  59. }
  60. addGoods(id: number, count: number) {
  61. let good = this.data.goodList.find((item) => item.id == id);
  62. if (good) {
  63. good.count += count;
  64. } else {
  65. this.data.goodList.push({ id: id, count: count });
  66. }
  67. this.refreshGoods(this.data.goodList);
  68. }
  69. subtractGoods(id: number, count: number) {
  70. let good = this.data.goodList.find((item) => item.id == id);
  71. if (good) {
  72. good.count -= count;
  73. if (good.count < 0) {
  74. good.count = 0;
  75. }
  76. }
  77. this.refreshGoods(this.data.goodList);
  78. }
  79. getGradeAddValue(): number {
  80. return 30;
  81. }
  82. getGradeName() {
  83. return "BRONZE";
  84. }
  85. getGrade(): number {
  86. return 1;
  87. }
  88. getDisPlayGoods(): GoodInfo[] {
  89. let DisplayIds = [
  90. GoodsId.FREE_ITEM_BOX,
  91. GoodsId.ITEM_BOX,
  92. GoodsId.FREE_POG_BOX,
  93. GoodsId.POG_BOX,
  94. GoodsId.GAME_PASS,
  95. GoodsId.GAME_PASS_SHARD,
  96. GoodsId.POG_CRITICAL_CARD,
  97. ];
  98. //不改變目標庫,換方式實現
  99. let list = [];
  100. for (let i = 0; i < this.data.goodList.length; i++) {
  101. let item = this.data.goodList[i];
  102. if (DisplayIds.indexOf(item.id) != -1) {
  103. if (item.count > 0) {
  104. list.push(item);
  105. }
  106. }
  107. }
  108. // 排序, 按照 DisplayIds的顺序倒序
  109. list = list.sort((a, b) => {
  110. return DisplayIds.indexOf(a.id) - DisplayIds.indexOf(b.id);
  111. });
  112. return list;
  113. }
  114. getEsTogDisplay(): string {
  115. return Utils.formatNumber(this.getGoodsCount(GoodsId.ES_TOG), 0);
  116. }
  117. getTogDisplay(): string {
  118. return Utils.formatNumber(this.getGoodsCount(GoodsId.TOG), 0);
  119. }
  120. getPogDisplay(): string {
  121. return Utils.formatNumber(this.getGoodsCount(GoodsId.POG), 0);
  122. }
  123. refreshGoods(goodList: GoodInfo[]) {
  124. this.data.goodList = goodList;
  125. EV.ins.emit(EV_TYPE.USER_GOOD_REFRESH, this.data.goodList);
  126. }
  127. getGoodsCount(id: number): number {
  128. return this.data.goodList.find((item) => item.id == id)?.count ?? 0;
  129. }
  130. getSeasonEndTimeText(): string {
  131. return Utils.formateDateRemaining(this.data.season.endTimeAt);
  132. }
  133. getUserName(): string {
  134. return this.data ? this.data.userName : "UnLogin";
  135. }
  136. private static _ins: UserM;
  137. public static get ins(): UserM {
  138. return (UserM._ins ??= new UserM());
  139. }
  140. public data: UserInfo;
  141. public async userInfo(): Promise<UserInfo> {
  142. if (this.data != null) {
  143. return this.data;
  144. }
  145. let result = await this.refreshInfo();
  146. return result;
  147. }
  148. async refreshInfo() {
  149. let result = await WsM.ins.syncRequest(20001, {});
  150. console.log("userInfo", result);
  151. Utils.setServerTime(result.currentTime);
  152. this.data = result;
  153. EV.ins.emit(EV_TYPE.USER_GOOD_REFRESH, this.data.goodList);
  154. return result;
  155. }
  156. refreshData() {
  157. this.data = null;
  158. this.userInfo();
  159. }
  160. public systemWalletAddress: string = "";
  161. async bindWallet(address: string): Promise<BindWalletResult> {
  162. return new Promise((resolve, reject) => {
  163. WsM.ins
  164. .syncRequest(23002, { wallet: address })
  165. .then((result) => {
  166. if (result) {
  167. this.systemWalletAddress = result.systemWalletAddress;
  168. resolve(result);
  169. } else {
  170. WalletManager.ins.disconnect();
  171. }
  172. })
  173. .catch((err) => {
  174. WalletManager.ins.disconnect();
  175. reject(err);
  176. });
  177. });
  178. }
  179. }