| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899 |
- 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<evt>();
- 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
- }
|