UserM.ts 5.7 KB

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