import { _decorator, Component, Node } from 'cc'; import { saveRoot } from 'db://assets/scripts/uitl/baseData/saveCompent/MySave'; import { rootMgr } from '../../scene/RootMgr'; import { SaveBase } from 'db://assets/scripts/uitl/baseData/saveCompent/SaveBase'; const { ccclass, property } = _decorator; interface evt { useItem: (key: ItemKey) => void } @saveRoot('Item') export class ItemService extends SaveBase { map: { [key: string]: number } = {}; private _evt = chsdk.get_new_event(); public get evt() { return this._evt } // 是否是无限道具模式 isNotConsume = false get(key: ItemKey): number { let res; let value = this.map[key] if (!value) { res = 0 } else { res = value || 0 } return res } private set(key: ItemKey, value: number, save: boolean = true) { this.map[key] = value if (save) { rootMgr.game.evt.emit('save') } } getRewarded(key: ItemKey, num: number = 1, save: boolean = true) { this.set(key, this.get(key) + num, save) this.evt.emit('useItem', key) } // 初始道具,重置道具 flash() { } consume(type: ItemKey, use: number = 1, save: boolean = true): boolean { // 是否是无限道具模式 if (this.isNotConsume) { return true } let num = this.get(type) if (num < use) { return false } this.set(type, num - use, save) this.evt.emit('useItem', type) return true } isCanConsume(type: ItemKey, use: number = 1) { if (this.isNotConsume) { return true } let num = this.get(type) return num >= use } public serialize(): any { const data = { "map": { ...this.map }, }; return data } unserialize(data) { this.map = {} if (!data) return this this.map = data.map || {} return this } } // 道具枚举 export enum ItemKey { // 重拍 shuffle = 1, // 移除 remove, //加时间 addTime, // 挑战卷, Challenge, coin }