UserM.ts 5.2 KB

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