ItemService.ts 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899
  1. import { _decorator, Component, Node } from 'cc';
  2. import { saveRoot } from 'db://assets/scripts/uitl/baseData/saveCompent/MySave';
  3. import { rootMgr } from '../../scene/RootMgr';
  4. import { SaveBase } from 'db://assets/scripts/uitl/baseData/saveCompent/SaveBase';
  5. const { ccclass, property } = _decorator;
  6. interface evt {
  7. useItem: (key: ItemKey) => void
  8. }
  9. @saveRoot('Item')
  10. export class ItemService extends SaveBase {
  11. map: { [key: string]: number } = {};
  12. private _evt = chsdk.get_new_event<evt>();
  13. public get evt() {
  14. return this._evt
  15. }
  16. // 是否是无限道具模式
  17. isNotConsume = false
  18. get(key: ItemKey): number {
  19. let res;
  20. let value = this.map[key]
  21. if (!value) {
  22. res = 0
  23. } else {
  24. res = value || 0
  25. }
  26. return res
  27. }
  28. private set(key: ItemKey, value: number, save: boolean = true) {
  29. this.map[key] = value
  30. if (save) {
  31. rootMgr.game.evt.emit('save')
  32. }
  33. }
  34. getRewarded(key: ItemKey, num: number = 1, save: boolean = true) {
  35. this.set(key, this.get(key) + num, save)
  36. this.evt.emit('useItem', key)
  37. }
  38. // 初始道具,重置道具
  39. flash() {
  40. }
  41. consume(type: ItemKey, use: number = 1, save: boolean = true): boolean {
  42. // 是否是无限道具模式
  43. if (this.isNotConsume) {
  44. return true
  45. }
  46. let num = this.get(type)
  47. if (num < use) {
  48. return false
  49. }
  50. this.set(type, num - use, save)
  51. this.evt.emit('useItem', type)
  52. return true
  53. }
  54. isCanConsume(type: ItemKey, use: number = 1) {
  55. if (this.isNotConsume) {
  56. return true
  57. }
  58. let num = this.get(type)
  59. return num >= use
  60. }
  61. public serialize(): any {
  62. const data = {
  63. "map": { ...this.map },
  64. };
  65. return data
  66. }
  67. unserialize(data) {
  68. this.map = {}
  69. if (!data) return this
  70. this.map = data.map || {}
  71. return this
  72. }
  73. }
  74. // 道具枚举
  75. export enum ItemKey {
  76. // 重拍
  77. shuffle = 1,
  78. // 移除
  79. remove,
  80. //加时间
  81. addTime,
  82. // 挑战卷,
  83. Challenge,
  84. coin
  85. }