UserM.ts 5.8 KB

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