123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475 |
- import { assetManager, JsonAsset } from "cc"
- import { isNumber } from "db://assets/script/Manager/Utils"
- import { IData } from "./interfaceMgr"
- export type OptionObjectKey<E> = {
- [P in keyof E]?: E[P]
- }
- export class Data<T extends IData> {
- protected _data: T[] = null
- protected className = ''
- get data() {
- return this._data
- }
- processItem(data: T): T {
- return data
- }
- clone(v: T) {
- if (!v) return undefined
- return {
- ...v
- }
- }
- split(v: any) {
- return `${v}`.split('|').map(v => Number(v))
- }
- split2(v: any) {
- return `${v}`.split('|').map(v => (v))
- }
- async loadData() {
- if (this._data != null) return true
- return new Promise<boolean>((resolve, reject) => {
- assetManager.getBundle('hall').load(`data/${this.className}`, (error, data: JsonAsset) => {
- if (!error) {
- this._data = (data.json as T[]).filter(v => isNumber(v.id)).map(v => this.processItem(v))
- console.log(`load ${this.className} data success`)
- resolve(true)
- } else {
- reject(error)
- }
- })
- })
- }
- private predicate(q: OptionObjectKey<T>, v: T) {
- const keys = Object.keys(q)
- for (let index = 0; index < keys.length; index++) {
- if (q[keys[index]] != v[keys[index]]) return false
- }
- return true
- }
- findOne(q: OptionObjectKey<T>) {
- return this.data.find(v => this.predicate(q, v))
- }
- find(q: OptionObjectKey<T>) {
- return this.data.filter(v => this.predicate(q, v))
- }
- findById(id: number) {
- return this.data.find(v => v.id == id)
- }
- findByDifferentId(id: number) {
- return this.data.filter(v => v.id != id)
- }
- }
|