BagMgr.js 2.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  1. /**
  2. * 背包数据管理
  3. */
  4. let BagMgr = {
  5. // # 物品背包属性
  6. // .DataItemBag {
  7. // id 0: integer # 物品ID
  8. // count 1: integer # 物品数量
  9. // endTime 2: integer # 到期时间戳
  10. // }
  11. _items: [], // 背包基础信息
  12. init () {
  13. if (CC_EDITOR) {
  14. return;
  15. }
  16. this._items = [];
  17. // 推送消息
  18. cc.game.on('on_user_items', this._onUserItems, this);
  19. },
  20. _addItemData (data) {
  21. let isUpdate = false;
  22. for (let [idx, itemData] of Object.entries(this._items)) {
  23. if (itemData.id == data.id) {
  24. isUpdate = true;
  25. if (data.count <= 0) {
  26. // 删除操作
  27. this._items.splice(idx, 1);
  28. } else {
  29. // 更新操作
  30. this._items[idx] = data;
  31. }
  32. break;
  33. }
  34. }
  35. if (!isUpdate && data.count > 0) {
  36. // new操作
  37. this._items.push(data);
  38. }
  39. },
  40. //* ************* 用户信息获取 ************* *//
  41. getItemDataById(itemid) {
  42. for (const data of this._items) {
  43. if (data.id == itemid) {
  44. return data;
  45. }
  46. }
  47. return undefined;
  48. },
  49. getItemNumById(itemid) {
  50. for (const data of this._items) {
  51. if (data.id == itemid) {
  52. return data.count;
  53. }
  54. }
  55. return 0;
  56. },
  57. //* ************* 客户端请求/响应 ************* *//
  58. requestInfo () {
  59. G.NetworkMgr.sendSocketRequest('bag_get_info', {}, this._responseBagGetInfo.bind(this));
  60. },
  61. _responseBagGetInfo (data) {
  62. let responseInfo = data.responseInfo;
  63. if (responseInfo.code === 200) {
  64. // 玩家基础信息
  65. this._items = responseInfo.items;
  66. G.PublicMgr.emit(JMC.PUBLIC_MSG.BAG_INFO);
  67. } else {
  68. // 断开网络并且弹出重连窗口
  69. G.NetworkMgr.closeSocket();
  70. G.AppUtils.getSceneCtrl().showOfflineAlert();
  71. }
  72. },
  73. _onUserItems(data) {
  74. if (!data || !data.items || data.items.length == 0) return;
  75. for (const item of data.items)
  76. {
  77. this._addItemData(item);
  78. }
  79. }
  80. }
  81. module.exports = BagMgr;