@zhongguo168a/yxeditor-common 0.0.55 → 0.0.56

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"index.esm.js","sources":["../src/libs/utils/NetUtil.ts","../src/libs/utils/ErrorUtil.ts","../src/libs/ui/uimgr.ts","../src/libs/timer/Timer.ts","../src/libs/event/EventItem.ts","../src/libs/event/XEvent.ts","../src/libs/log/Logger.ts","../src/libs/log/LogManager.ts","../src/libs/pool/PoolSet.ts","../src/libs/event/EventDispatcher.ts","../src/libs/utils/ConvertUtil.ts","../src/libs/utils/MapUtil.ts","../src/libs/utils/ScaleUtil.ts","../src/libs/utils/IdentUtil.ts","../src/libs/ds/TreeSource.ts","../src/libs/ds/ListSource.ts","../src/libs/ds/Dictionary.ts","../src/libs/ds/DictSource.ts","../src/libs/ds/List.ts","../src/libs/frame/Controller.ts","../src/libs/mvc/Model.ts","../src/libs/mvc/Factory.ts","../src/libs/frame/Route.ts","../src/libs/frame/RouteController.ts","../src/libs/frame/UIObjectDict.ts","../src/libs/frame/ViewRepo.ts","../src/libs/frame/RouteView.ts","../src/libs/frame/ViewHistory.ts","../src/libs/event/Listener.ts","../src/libs/event/CallbackList.ts","../src/libs/event/Dispatcher.ts","../src/libs/event/SampleCallbackList.ts","../src/libs/loader/ParseAtlas.ts","../src/libs/loader/AssetManager.ts","../src/libs/loader/AssetLoader.ts","../src/libs/utils/ArrayUtil.ts","../src/libs/utils/BitUtil.ts","../src/libs/utils/CavansUtil.ts","../src/libs/utils/CameraUtil.ts","../src/libs/utils/DocUtil.ts","../src/libs/utils/Eventutil.ts","../src/libs/utils/float-util.ts","../src/libs/utils/format-util.ts","../src/libs/utils/GeometryUtil.ts","../src/libs/utils/MathUtil.ts","../src/libs/utils/PathUtil.ts","../src/libs/utils/RandUtil.ts","../src/libs/utils/ResUtil/LoadAtlas.ts","../src/libs/utils/ResUtil.ts","../src/libs/utils/StringUtil.ts","../src/libs/utils/TimeUtil.ts","../src/libs/utils/TreeUtil.ts","../src/libs/utils/UIUtil.ts","../src/libs/utils/WidgetUtil.ts"],"sourcesContent":["export class NetUtil {\n // 获取URL的参数对象\n decodeLocationSearch(search: string): any {\n if (!search) {\n return {}\n }\n if (search[0] == \"/\") {\n search = search.substring(1);\n }\n //1.将?替换为空\n search = search.replace(/^\\?/, \"\");\n //2.以&符号拆分\n let params = search.split(\"&\");\n if (params.length === 1 && params[0] === \"\") {\n return \"null\"\n }\n //3.创建一个json变量\n let json: any = {};\n //4.遍历这个拆分后的数组\n for (let i = 0; i < params.length; i++) {\n //5.url[i]是当前数据,把当前数据再以=拆分的到一个数组,数组的第一个元素就是属性名,第二个就是属性值\n var cur = params[i].split(\"=\");\n //6.将数组中的第一个元素作为json的属性名,,第二个作为属性值\n json[cur[0]] = cur[1];\n }\n return json;\n }\n\n encodeLocationSearch(params: any, firstChat: \"\" | \"?\" | \"&\" = \"?\"): string {\n let arr = [];\n for (let key in params) {\n arr.push(key + \"=\" + params[key])\n }\n if (arr.length > 0) {\n return firstChat + arr.join(\"&\")\n }\n return \"\";\n }\n\n // 获取当前页面的url信息\n getLocation(): Location {\n return window.location;\n }\n\n /**\n * 获取Loation的参数\n */\n getLocationParams(): any {\n return this.decodeLocationSearch(this.getLocation().search);\n }\n\n}\n\nexport const netutil = new NetUtil()\n","import { netutil } from \"./NetUtil\";\r\n\r\nexport interface IError {\r\n isCancel(): boolean\r\n\r\n is(ident: string): boolean\r\n\r\n toString(): string\r\n\r\n has(ident: string): boolean\r\n}\r\n\r\n/**\r\n * 链式错误\r\n * err1 <argA=val&argB=val>\r\n */\r\nexport class LinkError implements IError {\r\n next: LinkError;\r\n ident: string;\r\n args: { [key: string]: any };\r\n\r\n /**\r\n * 判断当前错误是否 cancel 错误\r\n */\r\n public isCancel(): boolean {\r\n return this.is(\"cancel\")\r\n }\r\n\r\n /**\r\n * 当前的错误编号是否与指定的错误编号一致\r\n * @param ident\r\n */\r\n public is(ident: string): boolean {\r\n return this.ident === ident;\r\n }\r\n\r\n /**\r\n * 错误链中是否包含有 指定的错误编号\r\n * @param ident\r\n */\r\n public has(ident: string): boolean {\r\n if (this.ident === ident) {\r\n return true\r\n }\r\n\r\n return this.next.has(ident);\r\n }\r\n\r\n public toString(): string {\r\n let arr = [];\r\n for (let key in this.args) {\r\n arr.push(`${key}=${this.args[key] ? this.args[key] : \"null\"}`);\r\n }\r\n let msg = `${this.ident}`;\r\n if (arr.length > 0) {\r\n msg += `?${arr.join(\"&\")}`\r\n }\r\n if (this.next) {\r\n msg += \": \" + this.next.toString();\r\n }\r\n return msg;\r\n }\r\n}\r\n\r\nexport class ErrorUtil {\r\n\r\n parse(errString: string): LinkError {\r\n let errArr = errString.split(\": \");\r\n let cur: LinkError;\r\n let first: LinkError;\r\n for (let i = 0; i < errArr.length; i++) {\r\n let errStr = errArr[i];\r\n let errItems = errStr.split(\"?\");\r\n let err = new LinkError();\r\n err.ident = errItems[0];\r\n if (errItems.length > 1) {\r\n err.args = netutil.decodeLocationSearch(errItems[1])\r\n }\r\n if (cur) {\r\n cur.next = err;\r\n } else {\r\n first = err;\r\n }\r\n\r\n cur = err;\r\n }\r\n return first;\r\n }\r\n\r\n\r\n create(ident: string, args: { [key: string]: any; } = null): LinkError {\r\n let obj = new LinkError();\r\n obj.ident = ident;\r\n obj.args = args\r\n return obj;\r\n }\r\n\r\n warp(err: LinkError, ident, args: { [key: string]: any; } = null): LinkError {\r\n let obj = new LinkError();\r\n obj.next = err;\r\n obj.ident = ident;\r\n obj.args = args\r\n return obj;\r\n }\r\n\r\n to(err: IError): LinkError {\r\n if (err instanceof LinkError) {\r\n return err;\r\n }\r\n\r\n\r\n if (typeof err === \"string\") {\r\n return this.create(err);\r\n }\r\n\r\n throw \"convert to LinkError failed\"\r\n\r\n }\r\n}\r\n\r\n\r\nexport const errorutil = new ErrorUtil();","/**\n * 单例的UI对象\n */\nimport {HorizontalTextAlignment, VerticalTextAlignment} from \"cc\";\nimport {IError, errorutil} from \"../utils/ErrorUtil\";\n\n\ninterface IUIObject {\n x: number;\n y: number;\n z: number;\n width: number;\n height: number;\n}\n\nexport class UISingleConfig {\n /**\n * 创建函数\n */\n public creator: () => any;\n\n /**\n * 指定键值\n * 可通过键值获得 ui对象\n */\n public name: string;\n\n\n constructor({\n name,\n creator,\n }: { name: string, creator: () => any }) {\n this.name = name;\n this.creator = creator;\n }\n}\n\n/**\n * 单例的UI对象\n */\nexport class UIPoolConfig {\n /**\n * 创建函数\n * 对象需要实现recycle方法\n */\n public creator: () => any;\n\n /**\n * 指定键值\n * 可通过键值获得 ui对象\n */\n public name: string;\n\n /**\n * 过期帧数,默认为永不过期(0)\n */\n public expired: number = 0;\n\n\n constructor({\n name,\n creator,\n expired = 0,\n }: { name: string, expired?: number, creator: () => any }) {\n this.name = name;\n this.creator = creator;\n this.expired = expired;\n }\n}\n\n/**\n * UI对象的缓存管理器,自动管理UI对象的创建和销毁\n * 为了避免页面中的组件经常创建和销毁,可使用此对象管理\n * 例如各种面板,背包栏等,不想每次关闭页面都重新创建对象,影响操作流畅性。在内存足够的情况下,交由 UIManager 管理。\n * 另外可以使用UI管理器中的对象池\n * 对于不需要管理的对象,直接在页面中创建,释放/等待垃圾回收\n *\n * 需要注册\n */\nexport class UIManager {\n /**\n * ui单例对象缓存数量的最大值\n */\n public singleObjectMax: number = 0;\n\n protected singleObjs: any = {};\n protected singleList = [];\n protected singleCounts: any = {};\n protected singleConfigs: any = {};\n\n protected pools: any = {};\n protected poolConfig: any = {};\n\n constructor() {\n }\n\n /**\n * 注册一个ui对象配置\n * @param config\n */\n registerPool(config: UIPoolConfig) {\n this.poolConfig[config.name] = config;\n }\n\n /**\n * 获取UI对象池中的一个对象\n * @param key\n */\n getPoolObject(key: string): [any, IError] {\n let config: UIPoolConfig = this.poolConfig[key];\n let p: any[] = this.pools[key];\n if (!p) {\n p = [];\n this.pools[key] = p;\n }\n if (p.length === 0) {\n let obj: any;\n try {\n obj = config.creator();\n } catch (e) {\n if (e instanceof Error) {\n e.message = \"get single ui object: \" + e.message;\n console.error(e.stack);\n }\n\n return [null, errorutil.create(`creator error`, {key: key})]\n }\n\n return [obj, null];\n }\n return [p.pop(), null];\n }\n\n /**\n * 返回UI到对象池中\n * @param key\n * @param obj\n */\n backPoolObject(key: string, obj: any) {\n let config: UIPoolConfig = this.poolConfig[key];\n let p: any[] = this.pools[key];\n if (!p) {\n p = [];\n this.pools[key] = p;\n }\n\n if (obj[\"recycle\"]) {\n obj.recycle();\n }\n p.push(obj);\n }\n\n /**\n * 注册一个ui对象配置\n * @param config\n */\n registerSingle(config: UISingleConfig) {\n this.singleConfigs[config.name] = config;\n }\n\n /**\n * 获取单例的UI对象\n * 引用计数+1\n * @param key\n */\n getSingle(key: string): [any, IError] {\n let obj = this.singleObjs[key];\n if (!obj) {\n let config = this.singleConfigs[key]\n if (!config) {\n return [null, errorutil.create(`config not found`, {key: key})]\n }\n try {\n obj = config.creator();\n } catch (e) {\n if (e instanceof Error) {\n e.message = \"get single ui object: \" + e.message;\n console.error(e.stack);\n }\n\n return [null, errorutil.create(`creator error`, {key: key})]\n }\n\n if (!obj) {\n return [null, errorutil.create(`creator return null`, {key: key})];\n }\n\n this.singleObjs[key] = obj;\n this.addCleanList(key);\n }\n this.mark(key);\n return [obj, null];\n }\n\n /**\n * 返还UI对象\n * 引用计数-1,当引用计数等于0时,放入待清理列表\n * @param key\n */\n backSingle(key: string) {\n this.unmark(key);\n }\n\n private mark(key: string) {\n this.singleCounts[key]++;\n let idx = this.singleList.indexOf(key);\n if (idx !== -1) {\n this.singleList.splice(idx, 1);\n }\n }\n\n private unmark(key: string) {\n this.singleCounts[key]--;\n if (this.singleCounts[key] === 0) {\n this.addCleanList(key);\n }\n }\n\n private clean(key: string) {\n this.singleCounts[key] = 0;\n this.addCleanList(key);\n }\n\n protected addCleanList(key: string) {\n this.singleList.push(key);\n // 每次创建对象后,都清理一下缓存\n let self = this;\n setTimeout(() => {\n self.cleanObjects();\n })\n }\n\n protected cleanObjects() {\n if (this.singleList.length > this.singleObjectMax) {\n let count = this.singleList.length - this.singleObjectMax;\n for (let i = 0; i < count; i++) {\n let key = this.singleList.shift();\n delete this.singleObjs[key];\n delete this.singleCounts[key];\n }\n }\n }\n\n public showTips(msg: string) {\n\n }\n\n // 以b为基准,调整a的位置\n alignObject(alignment: HorizontalTextAlignment, a: IUIObject, b: IUIObject, offset: number = 0) {\n let type: number = alignment;\n switch (type) {\n case HorizontalTextAlignment.CENTER:\n a.x = b.x + (b.width - a.width) * 0.5;\n break;\n case HorizontalTextAlignment.LEFT:\n a.x = b.x;\n break;\n case HorizontalTextAlignment.RIGHT:\n a.x = b.x + (b.width - a.width);\n break;\n default:\n }\n a.x += offset;\n }\n\n // 以b为基准,调整a的位置\n alignVertObject(alignment: VerticalTextAlignment, a: IUIObject, b: IUIObject, offset: number = 0) {\n let type: number = alignment;\n switch (type) {\n case VerticalTextAlignment.TOP:\n a.y = b.y;\n break;\n case VerticalTextAlignment.CENTER:\n a.y = b.y + (b.height - a.height) * 0.5;\n break;\n case VerticalTextAlignment.BOTTOM:\n a.y = b.y + (b.height - a.height);\n break;\n default:\n }\n\n a.y += offset;\n }\n\n // /**\n // * 打开对话框\n // * @param route\n // */\n // async openDialog(route: Route) {\n // let pagekey = route.path;\n // let config = this.configs[pagekey];\n // if (!config) {\n // console.error(\"open dialog: page config not found: \" + pagekey)\n // return;\n // }\n // if (config.refClass === null) {\n // console.error(\"open dialog: ref not found: \" + pagekey)\n // return;\n // }\n //\n // let page = new config.refClass();\n // page[\"_route\"] = route;\n // page[\"_config\"] = config;\n // this.dialogs.push(page);\n // return this._open(page)\n // }\n // getDialogsByKey(route: Route): IPage[] {\n // return this.getDialogs((page: IPage) => {\n // return page.route.key === route.key;\n // })\n // }\n //\n // getDialogsByPath(route: Route): IPage[] {\n // return this.getDialogs((page: IPage) => {\n // return page.route.path === route.path;\n // })\n // }\n //\n // getDialogs(filter: (page: IPage) => boolean): IPage[] {\n // let r = [];\n // for (let val of this.dialogs) {\n // if (filter(val)) {\n // r.push(val);\n // }\n // }\n //\n // return r;\n // }\n //\n // stopDialog(page: IPage, reason: string = \"\") {\n // let idx = this.dialogs.indexOf(page);\n // if (idx === -1) {\n // console.warn(\"stop dialog: not found\")\n // return;\n // }\n // this._stop(page, reason);\n // }\n\n}\n\nexport var uimgr = new UIManager();\n","import {director, macro, Scheduler} from \"cc\";\n\nexport class Timer {\n get scheduler(): Scheduler {\n return this._scheduler;\n }\n\n private _scheduler: Scheduler;\n\n constructor() {\n this._scheduler = director.getScheduler();\n }\n\n /**\n * 定时执行一次。\n * @param delay 延迟时间(单位为毫秒)。\n * @param caller 执行域(this)。\n * @param method 定时器回调函数。\n */\n once(delay: number, caller: any, method: (dt?: number) => void): void {\n this._scheduler.schedule(method, caller, delay / 1000, 0, 0, false);\n }\n\n /**\n * 定时重复执行。\n * @param delay 间隔时间(单位毫秒)。\n * @param caller 执行域(this)。\n * @param method 定时器回调函数。\n */\n loop(delay: number, caller: any, method: (dt?: number) => void): void {\n this._scheduler.schedule(method, caller, delay / 1000, macro.REPEAT_FOREVER, 0, false);\n }\n\n /**\n * 清理定时器。\n * @param caller 执行域(this)。\n * @param method 定时器回调函数。\n */\n clear(caller: any, method: Function): void {\n this._scheduler.unschedule(method, caller);\n }\n\n\n /**\n * 清理对象身上的所有定时器。\n * @param caller 执行域(this)。\n */\n clearAll(caller: any): void {\n this._scheduler.unscheduleAllForTarget(caller);\n }\n\n\n /**\n * 延迟执行。\n * @param caller 执行域(this)。\n * @param method 定时器回调函数。\n */\n callLater(caller: any, method: (dt?: number) => void): void {\n if (!this._scheduler.isScheduled(method, caller)) {\n this._scheduler.schedule(method, caller, 0, 0, 0, false);\n }\n }\n\n /**\n * 暂停时钟\n */\n pause(caller: any): void {\n this._scheduler.pauseTarget(caller)\n }\n\n /**\n * 恢复时钟\n */\n resume(caller: any): void {\n this._scheduler.resumeTarget(caller)\n }\n\n recycle() {\n this._scheduler.unscheduleAll();\n director.getScheduler().unscheduleUpdate(this._scheduler)\n }\n\n dispose() {\n this._scheduler.unscheduleAll();\n director.getScheduler().unscheduleUpdate(this._scheduler)\n this._scheduler = null;\n }\n}\n\n\nexport const timer = new Timer();","import {XEvent} from \"./XEvent\";\r\n\r\nexport class EventItem {\r\n public recycle() {\r\n this.listener = null;\r\n this.type = \"\";\r\n this.sub = \"\";\r\n this.sub2 = \"\";\r\n this.caller = null;\r\n this.args = null;\r\n }\r\n\r\n\r\n public dispose() {\r\n this.recycle();\r\n }\r\n\r\n public dispatch(event: XEvent) {\r\n this.listener.call(this.caller, event, event.dispatchParams)\r\n }\r\n\r\n\r\n public listener: (event: XEvent) => void;\r\n public caller: any;\r\n /**\r\n * 事件类型\r\n */\r\n type: string = \"\";\r\n /**\r\n * 子事件\r\n * 如果sub == \"\" 或者 sub == \"*\", 则不需要检查sub值\r\n */\r\n sub: string = \"\";\r\n /**\r\n * 子事件2\r\n * 如果sub == \"\" 或者 sub == \"*\", 则不需要检查sub值\r\n */\r\n sub2: string = \"\";\r\n\r\n args: any;\r\n\r\n once: boolean;\r\n}\r\n\r\n","/**\r\n * 事件\r\n */\r\nexport class XEvent {\r\n /**\r\n *\r\n */\r\n dispatcher: any;\r\n /**\r\n * 子事件\r\n */\r\n sub: string;\r\n /**\r\n * 子事件\r\n */\r\n sub2: string;\r\n /**\r\n * 事件\r\n */\r\n type: string;\r\n\r\n /**\r\n * 监听时传递的参数\r\n */\r\n onParams: any;\r\n /**\r\n * 触发时传递的参数\r\n */\r\n dispatchParams: any;\r\n\r\n public toString(): string {\r\n return `Event[${this.type} + \".\" + ${this.sub}]`\r\n }\r\n\r\n public clone(): XEvent {\r\n let newevent = new XEvent();\r\n newevent.sub = this.sub;\r\n newevent.sub2 = this.sub2;\r\n newevent.type = this.type;\r\n newevent.onParams = this.onParams;\r\n newevent.dispatchParams = this.dispatchParams;\r\n newevent.dispatcher = this.dispatcher;\r\n return newevent;\r\n }\r\n\r\n public recycle() {\r\n this.type = \"\";\r\n this.sub = \"\";\r\n this.sub2 = \"\";\r\n this.dispatcher = null;\r\n this.dispatchParams = null;\r\n this.onParams = null;\r\n }\r\n\r\n public dispose() {\r\n this.recycle();\r\n }\r\n}\r\n","export enum LogLevel {\r\n DEBUG,\r\n INFO,\r\n WARNING,\r\n ERROR,\r\n}\r\n\r\n\r\nexport class Logger {\r\n name: string;\r\n level: LogLevel;\r\n ignoreRegexp = [];\r\n ignoreString = [];\r\n\r\n protected _enable: boolean = true;\r\n\r\n disable() {\r\n this._enable = false;\r\n }\r\n\r\n canLogByLevel(level: LogLevel): boolean {\r\n if (!this._enable) {\r\n return false;\r\n }\r\n return level >= this.level;\r\n }\r\n\r\n\r\n canLog(msg: string, level: LogLevel): boolean {\r\n if (!this._enable) {\r\n return false;\r\n }\r\n if (level < this.level) {\r\n return false;\r\n }\r\n\r\n for (let val of this.ignoreString) {\r\n if (msg.indexOf(val) != -1) {\r\n return false;\r\n }\r\n }\r\n\r\n for (let val of this.ignoreRegexp) {\r\n let regexp = new RegExp(val);\r\n if (regexp.test(msg)) {\r\n return false;\r\n }\r\n }\r\n\r\n return true;\r\n }\r\n\r\n debug(msg: string, ...data: any[]) {\r\n msg = `[${this.name}] ` + msg;\r\n if (!this.canLog(msg, LogLevel.DEBUG)) {\r\n return;\r\n }\r\n console.debug(msg, ...data)\r\n }\r\n\r\n\r\n info(msg: string, ...data: any[]) {\r\n msg = `[${this.name}] ` + msg;\r\n if (!this.canLog(msg, LogLevel.INFO)) {\r\n return;\r\n }\r\n console.log(msg, ...data)\r\n }\r\n\r\n infof(msgCreator: () => string) {\r\n if (!this._enable) {\r\n return;\r\n }\r\n if (LogLevel.INFO < this.level) {\r\n return;\r\n }\r\n if (!msgCreator) {\r\n return;\r\n }\r\n let msg = `[${this.name}] ` + msgCreator();\r\n console.log(msg)\r\n }\r\n\r\n\r\n warning(msg: string, ...data: any[]) {\r\n msg = `[${this.name}] ` + msg;\r\n if (!this.canLog(msg, LogLevel.WARNING)) {\r\n return;\r\n }\r\n console.warn(msg, ...data)\r\n }\r\n\r\n error(msg: string, ...data: any[]) {\r\n msg = `[${this.name}] ` + msg;\r\n if (!this.canLog(msg, LogLevel.ERROR)) {\r\n return;\r\n }\r\n console.error(msg, ...data)\r\n }\r\n}","import {Logger, LogLevel} from \"./Logger\";\r\n\r\nexport const LOGGER_EVENT = \"Event\"\r\n\r\nexport class LogManager {\r\n /**\r\n * 获取事件的日志管理\r\n * 日志的group为事件类型\r\n */\r\n getEventLogger(): Logger {\r\n return this.getLogger(LOGGER_EVENT)\r\n }\r\n\r\n /**\r\n * 获取日志管理\r\n */\r\n getLogger(name: string): Logger {\r\n let l = this._loggers[name];\r\n if (!l) {\r\n l = new Logger();\r\n l.name = name;\r\n l.level = LogLevel.INFO;\r\n this._loggers[name] = l;\r\n }\r\n return l;\r\n }\r\n\r\n protected _loggers = {};\r\n\r\n\r\n /**\r\n * 是否开启日志\r\n */\r\n enable: boolean = true;\r\n\r\n // 忽视输出的日志\r\n protected ignores: any[] = [];\r\n\r\n /**\r\n * 忽视包含指定字符串的日志\r\n * @param val\r\n */\r\n ignoreString(val: string) {\r\n this.ignores.push(val);\r\n }\r\n\r\n /**\r\n * 取消指定的日志\r\n * @param val\r\n */\r\n ignoreStringCancel(val: string) {\r\n let idx = this.ignores.indexOf(val);\r\n if (idx !== -1) {\r\n this.ignores.splice(idx, 1);\r\n }\r\n }\r\n\r\n /**\r\n * 是否可以输出日志\r\n * @param type\r\n * @private\r\n */\r\n canLog(type: string): boolean {\r\n if (type.charAt(type.length - 1) === \"*\") {\r\n return false;\r\n }\r\n for (let val of this.ignores) {\r\n if (type.indexOf(val) !== -1) {\r\n return false;\r\n }\r\n }\r\n return true\r\n }\r\n\r\n\r\n public disableSystemConsole() {\r\n console.log = function () {\r\n };\r\n console.debug = function () {\r\n };\r\n console.info = function () {\r\n };\r\n console.warn = function () {\r\n };\r\n console.error = function () {\r\n };\r\n }\r\n\r\n\r\n}\r\n\r\nexport const logmgr = new LogManager();","export type CreatorFunction = (...args: any[]) => {};\n\n/**\n * 回收的方法\n * 使用回收方法的原因是,某些对象没有recycle函数,由不方便实现recycle函数\n */\nexport type RecycleFunction = (item: any, ...args: any[]) => void;\n\n/**\n * 释放的方法\n */\nexport type DisposeFunction = (item: any, ...args: any[]) => void;\n\n\n/**\n * 对象池\n */\nexport class Pool {\n creatorFunction: CreatorFunction;\n recycleFunction: RecycleFunction;\n disposeFunction: DisposeFunction;\n name: string = \"\";\n list: any[];\n\n constructor(config: {\n creatorFunction: CreatorFunction;\n recycleFunction?: RecycleFunction;\n disposeFunction?: DisposeFunction;\n name?: string;\n }) {\n if (!config) {\n throw new Error(\"需要设置config\")\n }\n this.creatorFunction = config.creatorFunction;\n this.recycleFunction = config.recycleFunction;\n this.disposeFunction = config.disposeFunction;\n this.list = [];\n }\n\n /**\n * 获取一个对象\n */\n getObject(...args: any[]): any {\n if (this.list.length > 0) {\n return this.list.pop()\n }\n return this.creatorFunction(...args);\n }\n\n /**\n * 回收一个对象\n * @param obj\n */\n recycleObject(obj: any) {\n if (!obj) {\n return;\n }\n if (this.recycleFunction) {\n this.recycleFunction(obj)\n }\n this.list.push(obj);\n }\n\n /**\n * 释放一个对象\n * @param obj\n */\n disposeObject(obj: any) {\n if (!obj) {\n return;\n }\n if (this.disposeFunction) {\n this.disposeFunction(obj)\n }\n }\n\n /**\n * 释放对象池\n */\n dispose() {\n for (let obj of this.list) {\n obj.dispose();\n }\n this.creatorFunction = null;\n this.name = \"\";\n this.list = null;\n }\n}\n\n/**\n * 对象池\n */\nexport class SamplePool {\n list: any[];\n\n constructor() {\n this.list = [];\n }\n\n /**\n * 获取一个对象\n */\n get(): any {\n if (this.list.length > 0) {\n return this.list.pop()\n }\n return null;\n }\n\n /**\n * 回收一个对象\n * @param obj\n */\n put(obj: any) {\n if (!obj) {\n return;\n }\n this.list.push(obj);\n }\n}\n\n\n/**\n * 对象池\n */\nexport class SamplePoolSet {\n get(name: string): any {\n let pool = this.pools[name];\n if (!pool) {\n pool = new SamplePool();\n this.pools[name] = pool;\n }\n return pool.get();\n }\n\n put(name: string, item: any) {\n let pool = this.pools[name];\n if (!pool) {\n pool = new SamplePool();\n this.pools[name] = pool;\n }\n pool.put(item);\n }\n\n protected pools = {};\n}\n\n\n","/**\n * 事件字符串分隔符\n */\nimport { IEventDispatcher } from \"./iface\";\nimport { EventItem } from \"./EventItem\";\nimport { XEvent } from \"./XEvent\";\nimport { LogLevel } from \"../log/Logger\";\nimport { logmgr } from \"../log/LogManager\";\nimport { Scheduler } from \"cc\";\nimport { Pool } from \"../pool/PoolSet\";\n\n\nconst log = logmgr.getEventLogger()\n\n/**\n * 事件派发器\n */\nexport class EventDispatcher implements IEventDispatcher/*, ISchedulable */ {\n\n constructor() {\n Scheduler.enableForTarget(this);\n }\n\n dispose() {\n this.isDispose = true;\n this._onEventItems = null;\n }\n\n /**\n * 暂停监听\n */\n pause() {\n this._isPause = true;\n }\n\n resume() {\n this._isPause = false;\n }\n\n protected _isPause: boolean = false;\n\n has(type: string, caller: any, listener: Function): boolean {\n return !!this.getItem(type, caller, listener);\n }\n\n getItem(type: string, caller: any, listener: Function): EventItem {\n let eventType = \"\";\n let eventSub = \"\";\n let eventSub2 = \"\";\n if (type.indexOf(\".\") != -1) {\n [eventType, eventSub, eventSub2] = type.split(\".\");\n } else {\n eventType = type;\n }\n let items = this.getOnEventItems(eventType);\n for (const item of items) {\n if (item.type == type\n && item.sub == eventSub\n && item.sub2 == eventSub2\n && item.caller == caller\n && item.listener == listener\n ) {\n return item;\n }\n }\n\n return null;\n }\n\n /**\n * 监听事件,如果监听已经存在则返回\n * @param type\n * @param caller\n * @param listener 为了性能考虑, event使用了对象池处理。因此处理函数不应该保存event的引用。如有需要,可通过新建对象或Event.Clone()实现\n * @param args\n */\n on(type: string, caller: any, listener: (event: XEvent, dispatchParams: any) => void, args?: any): EventItem {\n if (!listener) {\n throw new Error(\"listerner is null\")\n }\n\n let existed = this.getItem(type, caller, listener);\n if (existed) {\n return existed;\n }\n\n let item = eventItemPool.getObject();\n item.caller = caller;\n item.listener = listener;\n item.args = args;\n if (type.indexOf(\".\") != -1) {\n [item.type, item.sub, item.sub2] = type.split(\".\");\n } else {\n item.type = type;\n }\n let items = this.getOnEventItems(item.type);\n items.push(item);\n if (log.canLogByLevel(LogLevel.DEBUG)) {\n log.debug(`on ${type}, caller=${caller}, args=${args}`)\n }\n return item;\n }\n\n\n once(type: string, caller: any, listener: (event: XEvent) => void, args?: any): EventItem {\n if (!listener) {\n throw new Error(\"listerner is null\")\n }\n if (this.has(type, caller, listener)) {\n return;\n }\n\n let item: EventItem = eventItemPool.getObject();\n if (type.indexOf(\".\") != -1) {\n [item.type, item.sub, item.sub2] = type.split(\".\");\n } else {\n item.type = type;\n }\n item.caller = caller;\n item.listener = listener;\n item.args = args;\n item.once = true;\n let items = this.getOnEventItems(item.type);\n items.push(item);\n\n if (log.canLogByLevel(LogLevel.DEBUG)) {\n log.debug(`once ${type}, caller=${caller}, args=`, args)\n }\n\n return item;\n }\n\n offItem(item: EventItem) {\n this.off(item.type, item.caller, item.listener);\n }\n\n off(type: string, caller: any, listener: Function): void {\n if (log.canLogByLevel(LogLevel.DEBUG)) {\n log.debug(`off ${type}, caller=${caller}`)\n }\n let items = this.getOnEventItems(type);\n for (let i = 0; i < items.length; i++) {\n let item = items[i];\n if (item.caller !== caller) {\n continue\n }\n if (listener !== listener) {\n continue\n }\n eventItemPool.recycleObject(item);\n items.splice(i, 1)\n return;\n }\n }\n\n offAll(type?: string): void {\n if (log.canLogByLevel(LogLevel.DEBUG)) {\n log.debug(`offAll ${type}`)\n }\n let items = this.getOnEventItems(type);\n if (!type) {\n items.length = 0;\n }\n }\n\n offAllCaller(caller: any) {\n if (log.canLogByLevel(LogLevel.DEBUG)) {\n log.debug(`offAllCaller start: caller=${caller}, len=${this._onEventItems.length}`)\n }\n\n let m = this._onEventItems;\n for (let type in m) {\n let items = m[type];\n if (!items) {\n continue;\n }\n items = items.filter((value: EventItem, index: number, array: EventItem[]) => {\n return value.caller !== caller;\n })\n m[type] = items;\n }\n\n if (log.canLogByLevel(LogLevel.DEBUG)) {\n log.debug(`offAllCaller end: caller=${caller}, len=${this._onEventItems.length}`)\n }\n }\n\n /**\n * 派发事件\n * @param type 事件类型\n * @param params 事件参数\n * @param disableLog\n */\n dispatch(type: string, params?: any, disableLog: boolean = false): void {\n this.dispatchSub(type, params, disableLog);\n }\n\n /**\n * 派发事件\n * @param type 事件类型.子事件.子事件2\n * @param params 事件参数\n * @param disableLog\n */\n dispatchSub(type: string, params?: any, disableLog: boolean = false): void {\n if (this._isPause) {\n return;\n }\n let eventType = \"\";\n let eventSub = \"\";\n let eventSub2 = \"\";\n if (type.indexOf(\".\") != -1) {\n [eventType, eventSub, eventSub2] = type.split(\".\");\n } else {\n eventType = type;\n }\n\n if (!this._onEventItems[eventType]) {\n return;\n }\n let items = this._onEventItems[eventType];\n if (items.length == 0) {\n return;\n }\n // 减少log代码?有没有这个必要?\n if (!disableLog) {\n if (log.canLogByLevel(LogLevel.INFO)) {\n log.info(`[DISPATCH] ${type}.${this.toString()} [PARAMS]=`, params)\n }\n }\n\n let event: XEvent = eventPool.getObject();\n event.dispatcher = this;\n event.dispatchParams = params;\n event.sub = eventSub;\n event.sub2 = eventSub2;\n event.type = eventType;\n for (let on of items) {\n if (event.sub) {\n if (on.sub != \"\" && on.sub != \"*\") {\n if (on.sub != event.sub) {\n continue;\n }\n }\n }\n\n if (event.sub2) {\n if (on.sub2 != \"\" && on.sub2 != \"*\") {\n if (on.sub2 != event.sub2) {\n continue;\n }\n }\n }\n\n event.onParams = on.args;\n on.dispatch(event);\n\n }\n\n eventPool.recycleObject(event);\n }\n\n toString() {\n return `EventDispatcher`;\n }\n\n protected getOnEventItems(type: string): EventItem[] {\n let items = this._onEventItems[type];\n if (!items) {\n items = [];\n this._onEventItems[type] = items;\n }\n return items;\n }\n\n id?: string;\n uuid?: string;\n name: string;\n private _onEventItems: { [key: string]: EventItem[] } = {};\n protected isDispose: boolean = false;\n\n}\n\n\n/**\n * 全局的事件派发器\n */\nexport const eventmgr = new EventDispatcher();\nlet eventPool = new Pool({\n creatorFunction: function () {\n return new XEvent();\n },\n recycleFunction: function (item: XEvent): void {\n item.recycle();\n },\n disposeFunction: function (item: XEvent): void {\n item.dispose();\n }\n})\n\nlet eventItemPool = new Pool({\n creatorFunction: function () {\n return new EventItem();\n },\n recycleFunction: function (item: EventItem): void {\n item.recycle();\n },\n disposeFunction: function (item: EventItem): void {\n item.dispose();\n }\n})\n","export class ConvertUtil {\n anyToBoolean(val: any, defaultValue: boolean = false): boolean {\n if (val == null) {\n return defaultValue;\n }\n switch (typeof val) {\n case \"string\":\n return val === \"true\";\n case \"number\":\n return val > 0;\n case \"boolean\":\n return val\n }\n return defaultValue\n }\n\n anyToInt(val: any, defaultValue: number = 0): number {\n if (val == null) {\n return defaultValue;\n }\n switch (typeof val) {\n case \"string\":\n if (val === \"\") {\n return 0;\n }\n return parseInt(val, 10);\n case \"number\":\n return val;\n }\n return defaultValue;\n }\n\n anyToFloat(val: any, defaultValue: number = 0): number {\n if (val == null) {\n return defaultValue;\n }\n\n switch (typeof val) {\n case \"string\":\n if (val === \"\") {\n return 0.0;\n }\n return parseFloat(val);\n case \"number\":\n return val;\n }\n return defaultValue;\n }\n\n anyToString(val: any, defaultValue: string = \"\"): string {\n if (val == null) {\n return defaultValue;\n }\n\n switch (typeof val) {\n case null:\n return defaultValue;\n case \"string\":\n return val;\n case \"number\":\n return val.toString();\n case \"boolean\":\n return val ? \"true\" : \"false\";\n case \"object\":\n return JSON.stringify(val);\n }\n return defaultValue;\n }\n\n /**\n * 未定义的值转化成零值,否则返回原值\n * @param val\n * @param type\n */\n undefinedToZero(val: any, type: string): any {\n if (val === undefined) {\n switch (type) {\n case \"string\":\n return \"\";\n case \"number\":\n return 0;\n case \"bigInt\":\n return 0;\n case \"boolean\":\n return false;\n case \"symbol\":\n return null;\n case \"object\":\n return null;\n case \"function\":\n return null;\n }\n }\n return val;\n }\n}\n\nexport const convertutil = new ConvertUtil();","import { Dictionary } from \"../ds\";\nimport { convertutil } from \"./ConvertUtil\";\n\nexport class MapObject extends Dictionary<string, MapValue> {\n constructor(public object: {}) {\n super();\n }\n\n getValue(key: string): MapValue {\n let value = this.get(key);\n if (!value) {\n value = new MapValue(this, key);\n this.set(key, value);\n }\n return value;\n }\n}\n\nexport class MapValue {\n constructor(public obj: {}, public key: any) {\n\n }\n\n isUndefined(): boolean {\n return this.obj[this.key] == undefined;\n }\n\n toNumber(): number {\n return maputil.number(this.obj, this.key);\n }\n\n toString(): string {\n return maputil.string(this.obj, this.key);\n }\n toBoolean(): boolean {\n return maputil.boolean(this.obj, this.key);\n }\n toAny(): any {\n return this.obj[this.key];\n }\n}\n\nexport class MapUtil {\n\n /**\n * 获取所欲的值\n */\n values<T = any>(m: { [key: string]: T; }): T[] {\n let r: T[] = [];\n for (let key in m) {\n r.push(m[key])\n }\n\n return r;\n }\n\n /**\n * 获取所有的键\n */\n keys(m: { [key: string]: any; }): string[] {\n let r: string[] = [];\n for (let key in m) {\n r.push(key)\n }\n return r;\n }\n\n /**\n * 以字符串数字作为键值的map,转化成数组\n */\n toList<T = any>(m: { [key: string]: T; }): T[] {\n let r: T[] = [];\n for (let key in m) {\n r[parseInt(key, 10)] = m[key]\n }\n return r;\n }\n\n /**\n * 以字符串数字作为键值的map,转化成数组\n */\n listToMap(list: any[]): any {\n let r = {}\n if (list) {\n for (let i = 0; i < list.length; i++) {\n r[i.toString()] = list[i];\n }\n }\n return r;\n }\n\n /**\n * 转换成数字, 如果原值无效, 返回0\n * @constructor\n */\n has(m: any, key: string): boolean {\n return m.hasOwnProperty(key);\n }\n\n /**\n * 转换成数字, 如果原值无效, 返回0\n * @constructor\n */\n number(m: any, key: string, dflt: number = 0): number {\n if (!m) {\n return dflt;\n }\n let data = m[key];\n if (!data) {\n return dflt\n }\n\n if (typeof data !== \"number\") {\n data = parseFloat(data)\n }\n\n return data;\n }\n\n /**\n * 转换成字符串, 如果原值无效, 返回\"\"\n * @constructor\n */\n string(m: any, key: string, dflt: string = \"\"): string {\n if (!m) {\n return dflt;\n }\n let data = m[key];\n if (!data) {\n return dflt\n }\n\n return data;\n }\n\n /**\n * 转换成布尔值, 如果原值无效, 返回false\n * @constructor\n */\n boolean(m: any, key: string, dflt: boolean = false): boolean {\n if (!m) {\n return dflt;\n }\n let data = m[key];\n if (data === undefined || data === null) {\n return dflt\n }\n\n return data;\n }\n\n /**\n * 转换成{}, 如果原值无效, 返回{}\n * @constructor\n */\n map(m: any, key: string, dflt: boolean | Object = false): any {\n if (!m) {\n return dflt;\n }\n let data = m[key];\n if (!data) {\n if (dflt instanceof Object) {\n data = dflt;\n m[key] = data;\n } else if (dflt) {\n data = {};\n m[key] = data;\n }\n }\n\n return data;\n }\n\n /**\n * 转换成[], 如果原值无效, 返回[]\n * @constructor\n */\n array(m: any, key: string, dflt: boolean | Array<any> = false): any[] {\n if (!m || !m[key]) {\n if (dflt instanceof Array) {\n m[key] = dflt;\n return m[key];\n } else if (dflt) {\n m[key] = [];\n return m[key];\n }\n return null;\n }\n let data = m[key];\n if (data instanceof Array) {\n return data;\n }\n\n let r = [];\n for (let k in data) {\n r[parseInt(k, 10)] = data[k];\n }\n\n return r;\n }\n\n /**\n * 返回第一个符合条件的key\n * @param m\n * @param conf\n */\n keyOfConf(m: any, conf: (key: string, item: any) => boolean): string {\n for (let key in m) {\n if (conf(key, m[key])) {\n return key;\n }\n }\n\n return \"\";\n }\n\n /**\n * 比较对象,并返回包含差异的对象\n * 如果返回 undefined 表示没有差异\n * @param obj\n * @param parent\n * @param removeDefault\n */\n diff(obj: any, parent: any, removeDefault: boolean = true): any {\n let result;\n switch (typeof obj) {\n case 'undefined':\n break;\n case 'string':\n if (obj !== parent) {\n if (obj !== \"\") {\n result = obj + '';\n }\n }\n break;\n case 'number':\n if (obj !== parent) {\n // if (obj !== 0) {// 这里会排除掉默认的\n // o = obj - 0;\n // }\n result = obj;\n }\n break;\n case 'boolean':\n if (obj !== parent) {\n if (obj !== false) {\n result = obj;\n }\n }\n break;\n case 'object':\n if (obj === null) {\n result = undefined;\n } else {\n if (obj instanceof Array) {\n let tempObj = [];\n for (let i = 0; i < obj.length; i++) {\n let a = obj[i];\n let b = undefined;\n if (parent) {\n b = parent[i];\n }\n let v = this.diff(a, b, removeDefault);\n if (v !== undefined) {\n tempObj.push(v);\n }\n }\n if (obj.length > 0) {\n result = tempObj;\n } else {\n if (removeDefault) {\n result = undefined;\n } else {\n result = tempObj;\n }\n }\n } else {\n let tempObj = {};\n let count = 0;\n for (let k in obj) {\n let a = obj[k];\n let b = undefined;\n if (parent) {\n b = parent[k];\n }\n let v = this.diff(a, b, removeDefault);\n if (v !== undefined) {\n tempObj[k] = v;\n count++;\n }\n }\n if (count > 0) {\n result = tempObj;\n } else {\n if (removeDefault) {\n result = undefined;\n } else {\n if (parent) {\n result = undefined;\n } else {\n result = tempObj;\n }\n }\n }\n\n }\n }\n break;\n default:\n result = obj;\n break;\n }\n return result;\n }\n\n /**\n * 克隆对象\n * @param obj\n */\n clone(obj: any): any {\n let o;\n switch (typeof obj) {\n case 'undefined':\n break;\n case 'string':\n o = obj + '';\n break;\n case 'number':\n o = obj - 0;\n break;\n case 'boolean':\n o = obj;\n break;\n case 'object':\n if (obj === null) {\n o = null;\n } else {\n if (obj instanceof Array) {\n o = [];\n for (let i = 0; i < obj.length; i++) {\n o.push(this.clone(obj[i]));\n }\n } else {\n o = {};\n for (let k in obj) {\n o[k] = this.clone(obj[k]);\n }\n }\n }\n break;\n default:\n o = obj;\n break;\n }\n return o;\n }\n\n /**\n * 通过path设置属性,创建不存在的路径对象\n * @param obj\n * @param path \"/key1/key2\"\n * @param data\n */\n setByPath(obj: any, path: string, data: any) {\n if (!obj) {\n return;\n }\n\n if (path[0] != \"/\") {\n throw new Error(\"非法路径: \" + path)\n }\n if (path == \"/\") {\n throw new Error(\"无法处理路径: \" + path)\n }\n path = path.substring(1);\n let arr = path.split(\"/\");\n let lastkey = arr.pop();\n let cur = obj;\n for (let item of arr) {\n let n = cur[item];\n if (!n) {\n n = {};\n cur[item] = n;\n }\n cur = n;\n }\n cur[lastkey] = data;\n }\n\n /**\n * 通过path删除\n * @param obj\n * @param path \"/key1/key2\"\n */\n removeByPath(obj: any, path: string) {\n if (!obj) {\n return;\n }\n let arr = path.split(\"/\");\n arr.shift();// 去掉空字符\n let lastkey = arr.pop();\n let cur = obj;\n for (let item of arr) {\n let n = cur[item];\n if (!n) {\n n = {};\n cur[item] = n;\n }\n cur = n;\n }\n\n cur[lastkey] = undefined;\n delete cur[lastkey];\n }\n\n\n /**\n * 通过path获取属性\n * @param obj\n * @param path\n */\n getByPath(obj: any, path: string): any {\n if (path === \"/\") {\n return obj;\n }\n if (path[0] !== \"/\") {\n path = \"/\" + path;\n }\n let pathARr = path.split(\"/\");\n pathARr.shift();// 去掉第一个\"/\"\n let lastkey = pathARr.pop();\n let cur = obj;\n for (let prop of pathARr) {\n cur = cur[prop];\n if (!cur) {\n return null;\n }\n }\n\n return cur[lastkey];\n }\n\n\n flat(obj: any, split = \"/\"): any {\n let result = {};\n this._flat(obj, result, \"\", split);\n return result\n }\n\n _flat(obj: any, result: any, path: string, split = \"/\"): any {\n for (let key in obj) {\n let val = obj[key];\n let type = typeof val;\n let id = path + split + key;\n switch (type) {\n case \"object\":\n this._flat(val, result, id, split)\n break;\n default:\n result[id] = val;\n }\n }\n }\n\n /**\n * 比较两个对象,包括基础类型\n * @param a\n * @param b\n */\n compare(a: any, b: any): boolean {\n\n let typea = typeof a;\n let typeb = typeof b;\n if (a == null || b == null) {\n return a == b;\n }\n\n if (typea !== typeb) {\n return false;\n }\n\n switch (typea) {\n case \"object\":\n // 获取对象的属性集合(数组)\n let aProps = Object.getOwnPropertyNames(a);\n let bProps = Object.getOwnPropertyNames(b);\n\n // 属性个数(长度)不同,对象肯定不同\n if (aProps.length !== bProps.length) {\n return false;\n }\n\n for (let i = 0; i < aProps.length; i++) {\n let propName = aProps[i];\n\n if (!this.compare(a[propName], b[propName])) {\n return false;\n }\n }\n break;\n default:\n return a === b;\n }\n\n\n return true;\n }\n\n /**\n * 从[from]对象复制到 [to]对象\n * 如果from字段为object并且等于null,则设置to字段为null\n * 如果from字段为undefined, 则不覆盖\n * @param from\n * @param to\n * @param tokey 如果[to]存在key才进行拷贝\n */\n public copy(from: any, to: any, tokey: boolean = false) {\n if (!from || !to) {\n return\n }\n for (let fromKey in from) {\n\n if (tokey) {\n if (!to.hasOwnProperty(fromKey)) {\n continue\n }\n }\n let toChild = to[fromKey];\n let fromChild = from[fromKey];\n\n let type = typeof toChild;\n if (type === \"undefined\") {\n type = typeof fromChild;\n }\n\n toChild = convertutil.undefinedToZero(toChild, type)\n fromChild = convertutil.undefinedToZero(fromChild, type)\n switch (type) {\n case \"object\":\n if (fromChild) {\n if (Array.isArray(fromChild)) {\n if (!toChild) {\n toChild = [];\n to[fromKey] = toChild;\n }\n\n if (fromChild) {\n this.copy(fromChild, toChild)\n }\n } else {\n if (!toChild) {\n toChild = {};\n to[fromKey] = toChild;\n }\n this.copy(fromChild, toChild)\n }\n } else {\n to[fromKey] = null;\n }\n break;\n case \"string\":\n if (toChild === fromChild) {\n continue;\n }\n to[fromKey] = fromChild;\n break;\n default:\n if (toChild === fromChild) {\n continue\n }\n to[fromKey] = fromChild;\n }\n }\n }\n\n /**\n * 去掉兼职\n */\n flatString(target: any): string {\n let result = \"[\";\n let arr = [];\n for (const targetKey in target) {\n let targetVal = target[targetKey];\n if (targetKey == \"_type\") {\n result += targetVal + \"#\"\n continue;\n }\n let type = typeof targetVal;\n switch (type) {\n case \"object\":\n if (targetVal) {\n arr.push(this.flatString(targetVal));\n } else {\n arr.push(\"null\")\n }\n break;\n default:\n if (targetVal) {\n arr.push(targetVal)\n } else {\n arr.push(\"null\")\n }\n\n }\n }\n result += arr.join(\", \")\n result += \"]\"\n return result;\n }\n}\n\nexport const maputil = new MapUtil();\n","import {math} from \"cc\";\n\nexport class ScaleUtil {\n tenToAny = [ // 0-75 共76个\n \"0\", \"1\", \"2\", \"3\", \"4\", \"5\", \"6\", \"7\", \"8\", \"9\", // 1-10\n \"A\", \"B\", \"C\", \"D\", \"E\", \"F\", \"G\", \"H\", \"I\", \"J\", // 11-20\n \"K\", \"L\", \"M\", \"N\", \"O\", \"P\", \"Q\", \"R\", \"S\", \"T\", // 21-30\n \"U\", \"V\", \"W\", \"X\", \"Y\", \"Z\", \"a\", \"b\", \"c\", \"d\", // 31-40\n \"e\", \"f\", \"g\", \"h\", \"i\", \"j\", \"k\", \"l\", \"m\", \"n\", // 41-50\n \"o\", \"p\", \"q\", \"r\", \"s\", \"t\", \"u\", \"v\", \"w\", \"x\", // 51-60\n \"y\", \"z\", \":\", \";\", \"<\", \"=\", \">\", \"?\", \"@\", \"{\", // 61-80\n \"]\", \"^\", \"_\", \"{\", \"|\", \"}\", // 71-75\n ]\n\n allstr = \"0123456789\" +\n \"ABCDEFGHIJ\" +\n \"KLMNOPQRST\" +\n \"UVWXYZabcd\" +\n \"efghijklmn\" +\n \"opqrstuvwx\" +\n \"yz:;<=>?@[]\" +\n \"^_{|}\"\n\n\n// RandString 生成随机字符串\n randString(size: number, n: number): string {\n var s = \"\";\n let nstr = this.allstr.substring(0, n)\n for (let i = 0; i < size; i++) {\n let c = nstr[math.randomRangeInt(0, n)]\n s += c\n }\n return s;\n }\n\n//var tenToAny map[int]string = map[int]string{0: \"0\", 1: \"1\", 2: \"2\", 3: \"3\", 4: \"4\", 5: \"5\", 6: \"6\", 7: \"7\", 8: \"8\", 9: \"9\", 10: \"a\", 11: \"b\", 12: \"c\", 13: \"d\", 14: \"e\", 15: \"f\", 16: \"g\", 17: \"h\", 18: \"i\", 19: \"j\", 20: \"k\", 21: \"l\", 22: \"m\", 23: \"n\", 24: \"o\", 25: \"p\", 26: \"q\", 27: \"r\", 28: \"s\", 29: \"t\", 30: \"u\", 31: \"v\", 32: \"w\", 33: \"x\", 34: \"y\", 35: \"z\", 36: \":\", 37: \";\", 38: \"<\", 39: \"=\", 40: \">\", 41: \"?\", 42: \"@\", 43: \"[\", 44: \"]\", 45: \"^\", 46: \"_\", 47: \"{\", 48: \"|\", 49: \"}\", 50: \"A\", 51: \"B\", 52: \"C\", 53: \"D\", 54: \"E\", 55: \"F\", 56: \"G\", 57: \"H\", 58: \"I\", 59: \"J\", 60: \"K\", 61: \"L\", 62: \"M\", 63: \"N\", 64: \"O\", 65: \"P\", 66: \"Q\", 67: \"R\", 68: \"S\", 69: \"T\", 70: \"U\", 71: \"V\", 72: \"W\", 73: \"X\", 74: \"Y\", 75: \"Z\"}\n\n// DecimalTo 10进制转任意进制 n\n decimalTo(num: number, n: number): string {\n if (num === 0) {\n return \"0\"\n }\n let newNumStr = \"\"\n\n var remainder = 0\n var remainderString = \"\"\n\n while (num !== 0) {\n remainder = num % n\n if (remainder < 0) {\n remainder = n + remainder\n }\n remainderString = this.tenToAny[remainder]\n newNumStr = remainderString + newNumStr\n num = Math.round(num / n);\n //fmt.Println(\"newNumStr>>>\", newNumStr, num)\n }\n return newNumStr\n }\n\n// Findkey map根据value找key\n findkey(instr: string): number {\n let result = -1\n for (let i = 0; i < this.tenToAny.length; i++) {\n let val = this.tenToAny[i];\n if (instr === val) {\n result = i\n }\n }\n return result\n }\n\n// ToDecimal n进制转化成10进制\n toDecimal(num: string, n: number): number {\n var newNum = 0\n let nNum = num.length - 1\n\n var pow = 1\n var cnt = 1\n for (let i = nNum; i >= 0; i--) {\n let char = num[i];\n if (cnt === 1) {\n pow = 1\n } else {\n pow = pow * n\n }\n\n let tmp = this.findkey(char)\n newNum = newNum + tmp * pow\n cnt++\n }\n return newNum\n }\n}\n\n\nexport const scaleutil = new ScaleUtil();\n","import {scaleutil} from \"./ScaleUtil\";\r\n\r\nexport class IdentUtil {\r\n\r\n /**\r\n * 设置时间的基线,通过减去已经过去的时间,可缩短id长度\r\n * 注:同一个项目必须拥有同样的基线,否则有几率出现相同的id!\r\n * 注2:基线必须与精度符合\r\n * @param time\r\n */\r\n setTimeBaseline(time: number) {\r\n this._baseline = time;\r\n }\r\n\r\n protected _baseline: number = 0;\r\n\r\n /**\r\n * 设置时间的精度\r\n * @param precision\r\n */\r\n setTimePrecision(precision: \"ms\" | \"s\") {\r\n this._precision = precision;\r\n }\r\n\r\n protected _precision: string = \"s\";\r\n\r\n /**\r\n * 设置随机数的长度\r\n * @param value\r\n */\r\n setRandLength(value: number = 3) {\r\n this._randLength = value;\r\n }\r\n\r\n protected _randLength: number = 3;\r\n\r\n\r\n genOne(): string {\r\n let time = Date.now();\r\n switch (this._precision) {\r\n case \"s\":\r\n time = Math.floor(time / 1000);\r\n break;\r\n case \"ms\":\r\n time = Date.now();\r\n break;\r\n }\r\n if (time != this._lastTime) {\r\n this._count = 0;\r\n this._lastTime = time;\r\n }\r\n this._count++\r\n let timestr = scaleutil.decimalTo(Math.floor(time - this._baseline), 62);\r\n let countstr = scaleutil.decimalTo(this._count, 62);\r\n return timestr + scaleutil.decimalTo(countstr.length, 62) + countstr;\r\n }\r\n\r\n protected _count = 0;\r\n protected _lastTime: number = 0;\r\n}\r\n\r\n\r\nexport const identutil = new IdentUtil();","import { EventDispatcher } from \"../event/EventDispatcher\";\r\nimport { maputil } from \"../utils/MapUtil\";\r\nimport { identutil } from \"../utils/IdentUtil\";\r\n\r\nexport class TreeIterator {\r\n break() {\r\n this._isBreak = true;\r\n }\r\n\r\n isBreak(): boolean {\r\n return this._isBreak;\r\n }\r\n\r\n protected _isBreak;\r\n}\r\n\r\nexport interface ITreeListItem {\r\n /**\r\n * 路径\r\n */\r\n path: string;\r\n\r\n /**\r\n * 自定义数据\r\n */\r\n data?: any;\r\n\r\n /**\r\n * 功能性标签,用于开发组件时,记录组件的状态。例如title, icon, 显示树的组件,需要 expanded,selected标签\r\n */\r\n tags?: { [key: string]: any }\r\n\r\n /**\r\n * 是否树叶\r\n */\r\n isLeaf: boolean;\r\n\r\n}\r\n\r\nfunction fixPath(path): string {\r\n if (path == 0) {\r\n return path;\r\n }\r\n if (path[0] != \"/\") {\r\n path = \"/\" + path\r\n }\r\n if (path.length > 1) {\r\n if (path[path.length - 1] == \"/\") {\r\n path = path.substring(0, path.length - 1);\r\n }\r\n }\r\n\r\n return path;\r\n\r\n}\r\n\r\nexport class TreeNode<T = any> {\r\n\r\n get root(): TreeRoot {\r\n return this._root;\r\n }\r\n\r\n /**\r\n * 根节点\r\n */\r\n protected _root: TreeRoot;\r\n /**\r\n * 编号\r\n */\r\n uuid: string;\r\n\r\n /**\r\n * 编号\r\n */\r\n id: string;\r\n\r\n /**\r\n * 自定义数据\r\n */\r\n data: T;\r\n\r\n /**\r\n * 是否树叶\r\n */\r\n isLeaf: boolean = true;\r\n\r\n /**\r\n * 功能性标签,用于开发组件时,记录组件的状态。例如title, icon, 显示树的组件,需要 expanded,selected标签\r\n */\r\n tags: { [key: string]: any }\r\n\r\n /**\r\n * 深度\r\n */\r\n get depth(): number {\r\n return this._depth;\r\n }\r\n\r\n private _depth: number = 0;\r\n\r\n /**\r\n * 父节点\r\n */\r\n parent: TreeNode;\r\n\r\n /**\r\n * 子节点\r\n */\r\n children: TreeNode[];\r\n\r\n /**\r\n * 设置根\r\n * @param val\r\n */\r\n setRoot(val: TreeRoot) {\r\n this._root = val;\r\n }\r\n\r\n getTags(): { [key: string]: any } {\r\n if (!this.tags) {\r\n this.tags = {};\r\n }\r\n return this.tags;\r\n }\r\n\r\n getTag(name: string): any {\r\n return this.getTags()[name];\r\n }\r\n\r\n removeTag(name: string) {\r\n if (this.tags) {\r\n delete this.tags[name];\r\n }\r\n }\r\n\r\n\r\n setTag(name: string, value: any) {\r\n this.getTags()[name] = value;\r\n }\r\n\r\n\r\n constructor(id: string, isLeaf?: boolean) {\r\n this.uuid = identutil.genOne()\r\n this.id = id;\r\n if (isLeaf == undefined) {\r\n isLeaf = false;\r\n } else {\r\n this.isLeaf = isLeaf;\r\n }\r\n if (!isLeaf && !this.children) {\r\n this.children = [];\r\n }\r\n }\r\n\r\n public addChild(val: TreeNode) {\r\n let node = this.getChildById(val.id);\r\n if (node) {\r\n return;\r\n }\r\n val._root = this._root;\r\n val.parent = this;\r\n if (!this.children) {\r\n this.children = [];\r\n }\r\n this.children.push(val);\r\n //\r\n val.fixDepthAndRoot(this._depth + 1, this.root)\r\n }\r\n\r\n public getChildIndex(val: TreeNode): number {\r\n for (let i = 0; i < this.children.length; i++) {\r\n let child = this.children[i];\r\n if (child == val) {\r\n return i;\r\n }\r\n }\r\n\r\n return -1;\r\n }\r\n\r\n\r\n public insertChild(val: TreeNode, index: number) {\r\n let indexVal = this.children.indexOf(val);\r\n if (indexVal != -1) {\r\n this.children.splice(indexVal, 1);\r\n }\r\n this.children.splice(index, 0, val);\r\n }\r\n\r\n public removeChild(val: TreeNode) {\r\n let index = this.children.indexOf(val);\r\n if (index != -1) {\r\n this.children.splice(index, 1);\r\n val.parent = null;\r\n }\r\n }\r\n\r\n public removeChildren() {\r\n if (this.children) {\r\n for (let child of this.children) {\r\n child.parent = null;\r\n }\r\n }\r\n\r\n this.children = [];\r\n }\r\n\r\n public get name(): string {\r\n let parent = this.parent;\r\n if (parent) {\r\n if (parent.id == \"/\") {\r\n return this.id.replace(parent.id, \"\")\r\n } else {\r\n return this.id.replace(parent.id + \"/\", \"\")\r\n }\r\n }\r\n\r\n return this.id;\r\n }\r\n\r\n public setDepth(val: number) {\r\n this._depth = val;\r\n }\r\n\r\n public containsById(id: string): boolean {\r\n return this.getChildById(id) != null;\r\n }\r\n\r\n /**\r\n * 通过编号获取子节点\r\n * @param id\r\n */\r\n public getChildById(id: string): TreeNode {\r\n if (!this.children) {\r\n return\r\n }\r\n for (let i = 0; i < this.children.length; i++) {\r\n let node = this.children[i];\r\n if (node.id == id) {\r\n return node;\r\n }\r\n }\r\n return null;\r\n }\r\n\r\n /**\r\n * 返回相邻的上一个节点\r\n */\r\n public prevNode(): TreeNode {\r\n let parent = this.parent;\r\n if (!parent) {\r\n return null;\r\n }\r\n let children = parent.children;\r\n let index = children.indexOf(this);\r\n if (index == -1) {\r\n throw \"节点数据异常\"\r\n }\r\n if (index == 0) {// 自己就是最后一个\r\n return null;\r\n }\r\n return children[index - 1];\r\n }\r\n\r\n /**\r\n * 返回相邻的下一个节点\r\n */\r\n public nextNode(): TreeNode {\r\n let parent = this.parent;\r\n if (!parent) {\r\n return null;\r\n }\r\n let children = parent.children;\r\n let index = children.indexOf(this);\r\n if (index == -1) {\r\n throw \"节点数据异常\"\r\n }\r\n if (index == children.length - 1) {// 自己就是最后一个\r\n return null;\r\n }\r\n return children[index + 1];\r\n }\r\n\r\n /**\r\n * 如果返回true则删除节点,包含当前节点\r\n * @param f\r\n */\r\n public walkRemove(f: (node: TreeNode) => boolean) {\r\n this._walkRemove(f);\r\n }\r\n\r\n private _walkRemove(f: (node: TreeNode) => boolean) {\r\n try {\r\n if (f(this)) {\r\n this.parent.removeChild(this);\r\n return;\r\n }\r\n } catch (e) {\r\n console.warn(e.stack)\r\n return false;\r\n }\r\n\r\n\r\n if (!this.isLeaf) {\r\n if (this.children && this.children.length > 0) {\r\n for (let i = this.children.length - 1; i >= 0; i--) {\r\n let val = this.children[i];\r\n val._walkRemove(f)\r\n }\r\n }\r\n }\r\n return true;\r\n }\r\n\r\n /**\r\n * 如果返回true则继续,包含当前节点\r\n * @param f\r\n * @param inChild\r\n */\r\n public walk(f: (node: TreeNode) => boolean, inChild?: (node: TreeNode) => boolean) {\r\n this._walk(f, inChild);\r\n }\r\n\r\n private _walk(f: (node: TreeNode) => boolean, inChild?: (node: TreeNode) => boolean): boolean {\r\n try {\r\n if (!f(this)) {\r\n return false;\r\n }\r\n } catch (e) {\r\n console.warn(e.stack)\r\n return false;\r\n }\r\n\r\n\r\n if (!this.isLeaf) {\r\n let checkChildren = inChild ? inChild(this) : true;\r\n if (checkChildren) {\r\n if (this.children && this.children.length > 0) {\r\n for (let val of this.children) {\r\n if (!val._walk(f)) {\r\n return false\r\n }\r\n }\r\n }\r\n }\r\n\r\n }\r\n return true;\r\n }\r\n\r\n /**\r\n * 从当前节点(包括)遍历父节点链,包含当前节点\r\n * @param f\r\n */\r\n public walkParent(f: (node: TreeNode) => boolean) {\r\n let cur: TreeNode = this;\r\n while (cur) {\r\n try {\r\n if (!f(cur)) {\r\n return false;\r\n }\r\n } catch (e) {\r\n console.warn(e.stack)\r\n return false;\r\n }\r\n\r\n\r\n cur = cur.parent\r\n }\r\n }\r\n\r\n /**\r\n * 从当前节点往前遍历(深度),包含当前节点\r\n * @param f\r\n * @param inChild\r\n */\r\n public walkPrev(f: (node: TreeNode) => boolean, inChild?: (node: TreeNode) => boolean) {\r\n try {\r\n if (!f(this)) {\r\n return false;\r\n }\r\n } catch (e) {\r\n console.warn(e.stack)\r\n return false;\r\n }\r\n\r\n let parent = this.parent;\r\n if (!parent) {\r\n return false;\r\n }\r\n\r\n if (!parent.isLeaf) {\r\n let checkChildren = inChild ? inChild(this.parent) : true;\r\n if (checkChildren) {\r\n if (parent.children && parent.children.length > 0) {\r\n let nodeIndex = parent.children.indexOf(this);\r\n for (let i = nodeIndex - 1; i >= 0; i--) {\r\n let child = parent.children[i];\r\n if (!child._walkPrev(f, inChild)) {\r\n return false\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n return parent.walkPrev(f);\r\n }\r\n\r\n private _walkPrev(f: (node: TreeNode) => boolean, inChild?: (node: TreeNode) => boolean): boolean {\r\n if (this.isLeaf) {\r\n if (!f(this)) {\r\n return false;\r\n }\r\n } else {\r\n if (!this.isLeaf) {\r\n let checkChildren = inChild ? inChild(this) : true;\r\n if (checkChildren) {\r\n if (this.children && this.children.length > 0) {\r\n for (let i = this.children.length - 1; i >= 0; i--) {\r\n let child = this.children[i];\r\n if (!child._walkPrev(f, inChild)) {\r\n return false\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n if (!f(this)) {\r\n return false;\r\n }\r\n }\r\n\r\n\r\n return true;\r\n }\r\n\r\n\r\n public dump() {\r\n this.walk((node: TreeNode): boolean => {\r\n let prefix = \"\";\r\n for (let i = 0; i < node.depth; i++) {\r\n prefix += \" \"\r\n }\r\n console.log(prefix + \"-\" + node.id)\r\n return true;\r\n });\r\n }\r\n first(): TreeNode {\r\n if (this.children.length > 0) {\r\n return this.children[0];\r\n }\r\n return null;\r\n }\r\n /**\r\n * 遍历节点,查找指定编号的节点\r\n */\r\n public findById(id: string): TreeNode {\r\n return this._findOne((node: TreeNode) => {\r\n return node.id == id;\r\n });\r\n }\r\n\r\n /**\r\n * 如果返回true则继续\r\n * @param f\r\n */\r\n public findOne(f: (node: TreeNode) => boolean): TreeNode {\r\n return this._findOne(f);\r\n }\r\n\r\n private _findOne(f: (node: TreeNode) => boolean): TreeNode {\r\n if (f(this)) {\r\n return this;\r\n }\r\n if (this.children && this.children.length > 0) {\r\n for (let val of this.children) {\r\n let r = val._findOne(f);\r\n if (r) {\r\n return r;\r\n }\r\n }\r\n }\r\n\r\n return null;\r\n }\r\n\r\n /**\r\n * 通过路径获取节点\r\n * 格式为 /path1/path2/...\r\n * 如果 path == \"/\",则返回自身\r\n * @param path\r\n */\r\n getNodeByPath(path: string): TreeNode {\r\n path = fixPath(path);\r\n if (!path) {\r\n return;\r\n }\r\n if (path == \"/\") {\r\n return this;\r\n }\r\n return this.getNodeByPathArr(path.substring(1).split(\"/\"))\r\n }\r\n\r\n protected getNodeByPathArr(pathArr: string[]): TreeNode {\r\n if (this.children) {\r\n let id = pathArr.shift();\r\n for (const child of this.children) {\r\n if (child.id == id) {\r\n if (pathArr.length == 0) {\r\n return child;\r\n }\r\n return child.getNodeByPathArr(pathArr);\r\n }\r\n }\r\n }\r\n return null;\r\n }\r\n\r\n getName(): string {\r\n if (this.tags && this.tags[\"title\"]) {\r\n return this.tags[\"title\"];\r\n }\r\n return this.id;\r\n }\r\n\r\n getPath(): string {\r\n let result = this.id;\r\n let cur: TreeNode = this.parent;\r\n while (cur) {\r\n if (cur.id == \"/\") { // 根节点\r\n result = \"/\" + result;\r\n } else {\r\n result = cur.id + \"/\" + result;\r\n }\r\n\r\n\r\n cur = cur.parent\r\n }\r\n return result;\r\n }\r\n\r\n\r\n /**\r\n * 如果返回true则继续\r\n * @param f\r\n */\r\n public find(f: (node: TreeNode) => boolean): TreeNode[] {\r\n return this._find(f);\r\n }\r\n\r\n private _find(f: (node: TreeNode) => boolean): TreeNode[] {\r\n let r = [];\r\n if (f(this)) {\r\n r.push(this);\r\n }\r\n if (this.children && this.children.length > 0) {\r\n for (let val of this.children) {\r\n r = r.concat(val._find(f))\r\n }\r\n }\r\n\r\n return r;\r\n }\r\n\r\n\r\n public toRoot(): TreeRoot {\r\n let root = TreeRoot.create();\r\n root.origin = this.clone();\r\n root.origin.id = \"/\"\r\n root.origin.fixDepthAndRoot(0, root);\r\n return root;\r\n }\r\n\r\n public clone(): TreeNode {\r\n let node = new TreeNode(this.id, this.isLeaf);\r\n node.tags = maputil.clone(this.tags);\r\n node.data = this.data;\r\n node._depth = this.depth;\r\n if (this.isLeaf) {\r\n return node;\r\n }\r\n this.cloneChildrenTo(node);\r\n return node;\r\n }\r\n\r\n protected cloneChildrenTo(node: TreeNode) {\r\n for (let i = 0; i < this.children.length; i++) {\r\n let child = this.children[i];\r\n let newChild = child.clone();\r\n newChild.parent = node;\r\n //\r\n node.children[i] = newChild;\r\n }\r\n }\r\n\r\n\r\n public fixDepthAndRoot(depth: number, root: TreeRoot) {\r\n this._depth = depth;\r\n this._root = root;\r\n if (this.isLeaf) {\r\n return\r\n }\r\n if (this.children) {\r\n for (const child of this.children) {\r\n child.fixDepthAndRoot(depth + 1, root)\r\n }\r\n }\r\n }\r\n\r\n public toString() {\r\n return `TreeNode[${this.id}]`\r\n }\r\n}\r\n\r\n\r\nexport class TreeRoot<NODE = any> extends EventDispatcher {\r\n /**\r\n * 添加数据节点\r\n * dispatchParams = {node:TreeNode, parent:TreeNode|TreeRoot}\r\n */\r\n static EVENT_ADD = \"add\";\r\n\r\n /**\r\n * 移除数据节点\r\n * dispatchParams = {node:TreeNode, parent:TreeNode|TreeRoot}\r\n */\r\n static EVENT_REMOVE = \"remove\";\r\n\r\n /**\r\n * 插入数据节点\r\n * dispatchParams = {node:TreeNode, before:TreeNode}\r\n */\r\n static EVENT_INSERT = \"insert\";\r\n\r\n /**\r\n * 刷新数据节点\r\n * dispatchParams = {node:TreeNode}\r\n */\r\n static EVENT_REFRESH = \"refresh\";\r\n\r\n /**\r\n * 设置数据时触发\r\n * dispatchParams = {node:TreeNode}\r\n */\r\n static EVENT_DATA_SET = \"data_set\";\r\n\r\n /**\r\n * 设置数据时触发\r\n * dispatchParams = {node:TreeNode, tag:string, value:any}\r\n */\r\n static EVENT_TAGS_SET = \"tags_set\";\r\n\r\n static create() {\r\n return new TreeRoot()\r\n }\r\n\r\n /**\r\n * 通过列表生成一个树结构\r\n * @param items\r\n * @param existed 列表将添加的已经存在的树结构\r\n */\r\n static createByList(items: ITreeListItem[], existed?: TreeRoot): TreeRoot {\r\n let root: TreeRoot = existed;\r\n if (!root) {\r\n root = TreeRoot.create();\r\n }\r\n\r\n for (let val of items) {\r\n let node: any;\r\n if (val.path == \"\") {\r\n continue;\r\n }\r\n if (val.path == \"/\") {\r\n node = root.origin;\r\n } else {\r\n let arr = val.path.substring(1).split(\"/\");\r\n node = root.createNode(arr.pop(), val.isLeaf);\r\n root.addNode(node, arr.join(\"/\"), true)\r\n }\r\n node.data = val.data;\r\n node.tags = val.tags;\r\n }\r\n\r\n return root;\r\n }\r\n\r\n\r\n static sortChildrenByName(node: TreeNode, des: boolean = false) {\r\n node.walk((node) => {\r\n if (!node.isLeaf) {\r\n node.children.sort((a, b) => {\r\n if (des) {\r\n return b.getName().localeCompare(a.getName())\r\n } else {\r\n return a.getName().localeCompare(b.getName())\r\n }\r\n })\r\n }\r\n return true;\r\n });\r\n }\r\n\r\n\r\n constructor() {\r\n super();\r\n\r\n this.origin = this.createNode(\"/\", false);\r\n this.origin.setRoot(this);\r\n this.origin.setTag(\"title\", true)\r\n this.name = this.uuid;\r\n }\r\n\r\n setNodeData(node: TreeNode, data: any) {\r\n if (node.data == data) {\r\n return\r\n }\r\n node.data = data\r\n this.dispatch(TreeRoot.EVENT_DATA_SET, { node: node })\r\n }\r\n\r\n setNodeTags(node: TreeNode, tag: string, value: any, force: boolean = false) {\r\n let tags = node.getTags();\r\n if (!force) {\r\n if (tags[tag] === value) {\r\n return;\r\n }\r\n }\r\n tags[tag] = value;\r\n this.dispatch(TreeRoot.EVENT_TAGS_SET, { node: node, tag: tag, value: value })\r\n }\r\n\r\n getNodeByPath(path: string): TreeNode {\r\n return this.origin.getNodeByPath(path) as TreeNode;\r\n }\r\n\r\n makeNodeByPath(path: string): TreeNode {\r\n if (path == \"\" || path == \"/\") {\r\n return;\r\n }\r\n if (path[0] == \"/\") {\r\n path = path.substring(1);\r\n }\r\n let arr = path.split(\"/\");\r\n let curPath = \"/\";\r\n let lastNode;\r\n for (const string of arr) {\r\n let node = this.createNode(string, false);\r\n this.addNode(node, curPath);\r\n\r\n lastNode = node;\r\n curPath += string + \"/\";\r\n }\r\n\r\n return lastNode;\r\n }\r\n\r\n /**\r\n * 添加节点,按照 node.path 添加到正确的位置\r\n * @param node\r\n * @param parentPath 如果父节点路径为 \"\", 则添加到起源节点\r\n * @param autoCreateParent 如果父节点不存在,自动创建\r\n */\r\n addNode(node: TreeNode, parentPath: string = \"\", autoCreateParent: boolean = false) {\r\n if (parentPath == \"\") {\r\n parentPath = \"/\"\r\n }\r\n let parent = this.origin.getNodeByPath(parentPath)\r\n if (!parent) {\r\n if (autoCreateParent) {\r\n parent = this.makeNodeByPath(parentPath);\r\n } else {\r\n console.warn(`TreeRoot.addNode: parent not found: parentPath=${parentPath}, node.id=${node.id}`)\r\n return\r\n }\r\n }\r\n parent.addChild(node);\r\n this.dispatch(TreeRoot.EVENT_ADD, { node: node, parent: parent });\r\n }\r\n\r\n\r\n removeNode(node: TreeNode) {\r\n let parent = node.parent;\r\n if (!parent) {\r\n return;\r\n }\r\n let index = parent.children.indexOf(node);\r\n if (index != -1) {\r\n parent.children.splice(index, 1);\r\n }\r\n this.dispatch(TreeRoot.EVENT_REMOVE, { node: node, parent: parent });\r\n node.parent = null;\r\n }\r\n\r\n removeChildren(node: TreeNode) {\r\n let children = node.children.concat();\r\n for (let item of children) {\r\n this.removeNode(item)\r\n }\r\n }\r\n\r\n insertNode(node: TreeNode, before: TreeNode, resetId: boolean = true) {\r\n let parent = before.parent;\r\n let index = parent.getChildIndex(before);\r\n if (index == -1) {\r\n throw new Error(\"getChildIndex: 数据异常\")\r\n }\r\n let children = before.parent.children;\r\n let indexLast = parent.getChildIndex(node);\r\n if (indexLast == -1) {\r\n indexLast = children.length;\r\n }\r\n\r\n before.parent.insertChild(node, index);\r\n if (resetId) {\r\n let indexMin = Math.min(index, indexLast);\r\n let indexMax = Math.max(index, indexLast);\r\n for (let i = indexMin; i < indexMax + 1; i++) {\r\n let child = children[i];\r\n child.id = i.toString();\r\n child.setTag(\"title\", i.toString())\r\n this.refresh(child);\r\n }\r\n }\r\n this.dispatch(TreeRoot.EVENT_INSERT, { node: node, before: before });\r\n }\r\n\r\n walk(f: (node: TreeNode) => boolean, inChild?: (node: TreeNode) => boolean) {\r\n this.origin.walk(f, inChild)\r\n }\r\n\r\n walkPrev(f: (node: TreeNode) => boolean, inChild?: (node: TreeNode) => boolean) {\r\n this.origin.walkPrev(f, inChild)\r\n }\r\n\r\n /**\r\n * 派发 refresh 消息\r\n * @param node\r\n */\r\n refresh(node: TreeNode) {\r\n this.dispatch(TreeRoot.EVENT_REFRESH, { node: node });\r\n }\r\n\r\n /**\r\n * 克隆当前的树结\r\n * * 新的tags克隆旧的data\r\n * * 新的data指向旧的data\r\n */\r\n clone(): TreeRoot {\r\n let root = TreeRoot.create();\r\n root.origin = this.origin.clone();\r\n root.origin.fixDepthAndRoot(0, root);\r\n return root;\r\n }\r\n\r\n public toString() {\r\n return `TreeRoot`\r\n }\r\n\r\n createNode(id: string, isLeaf?: boolean): TreeNode {\r\n let node = new TreeNode(id, isLeaf);\r\n node.setRoot(this);\r\n return node;\r\n }\r\n\r\n\r\n /**\r\n * origin的第一个child\r\n */\r\n get firstNode(): TreeNode {\r\n if (!this.origin) {\r\n return null;\r\n }\r\n if (!this.origin.children) {\r\n return null;\r\n }\r\n return this.origin.children[0]\r\n }\r\n\r\n origin: TreeNode\r\n\r\n}\r\n\r\n\r\n///////////////////////////\r\n\r\nexport class TreeRootPlugin {\r\n root: TreeRoot\r\n}\r\n\r\n\r\nexport class TreeNodePlugin {\r\n node: TreeNode\r\n}\r\n","import { EventDispatcher } from \"../event/EventDispatcher\";\r\nimport {identutil} from \"../utils/IdentUtil\";\r\n\r\nexport interface IListItem {\r\n /**\r\n * 编号\r\n */\r\n id: string;\r\n\r\n /**\r\n * 自定义数据\r\n */\r\n data?: any;\r\n\r\n /**\r\n * 功能性标签,用于开发组件时,记录组件的状态。例如title, icon, 显示树的组件,需要 expanded,selected标签\r\n */\r\n tags?: { [key: string]: any }\r\n}\r\n\r\nexport class ListNode {\r\n static create(id: string, data?: any) {\r\n let node = new ListNode();\r\n node.id = id;\r\n node.data = data;\r\n return node;\r\n }\r\n\r\n constructor() {\r\n this.uuid = identutil.genOne()\r\n }\r\n\r\n root: ListSource;\r\n\r\n uuid: string;\r\n id: string;\r\n data: any;\r\n tags = {};\r\n\r\n getTags(): { [key: string]: any } {\r\n if (!this.tags) {\r\n this.tags = {};\r\n }\r\n return this.tags;\r\n }\r\n\r\n setTags(tags: { [key: string]: any }){\r\n let obj = this.getTags();\r\n for (const key in tags) {\r\n obj[key] = tags[key];\r\n }\r\n }\r\n\r\n getTag(name: string): any {\r\n return this.getTags()[name];\r\n }\r\n\r\n setTag(name: string, value: any) {\r\n this.getTags()[name] = value;\r\n }\r\n}\r\n\r\nexport class ListSource extends EventDispatcher {\r\n /**\r\n * 通过数组创建 ListSource。ListSource的id自动生成。如果需要指定编号,可设置 idCreator\r\n * @param arr\r\n * @param idCreator\r\n */\r\n static createByArray(arr: any[], idCreator?: (item: any) => string) {\r\n let root = new ListSource();\r\n for (let i = 0; i < arr.length; i++) {\r\n let item = arr[i];\r\n let id = \"\";\r\n if (idCreator) {\r\n id = idCreator(item);\r\n } else {\r\n id = identutil.genOne();\r\n }\r\n let node = ListNode.create(id, item);\r\n root.add(node, false);\r\n }\r\n return root;\r\n }\r\n\r\n static createByListItem(arr: IListItem[], target?: ListSource): any {\r\n if(!target){\r\n target = new ListSource()\r\n }\r\n for (let i = 0; i < arr.length; i++) {\r\n let item = arr[i];\r\n let id = \"\";\r\n let node = ListNode.create(id);\r\n node.id = item.id;\r\n node.tags = item.tags;\r\n node.data = item.data;\r\n target.add(node, false);\r\n }\r\n return target;\r\n }\r\n\r\n /**\r\n * 设置数据时触发\r\n * dispatchParams = {node:ListNode}\r\n */\r\n static EVENT_ADD = \"add\";\r\n /**\r\n * 设置数据时触发\r\n * dispatchParams = {node:ListNode, index:number}\r\n */\r\n static EVENT_REMOVE = \"remove\";\r\n\r\n /**\r\n * 设置数据时触发\r\n */\r\n static EVENT_REMOVE_ALL = \"remove_all\";\r\n\r\n /**\r\n * 刷新数据节点\r\n * dispatchParams = {node:ListNode}\r\n */\r\n static EVENT_REFRESH = \"refresh\";\r\n\r\n /**\r\n * 设置数据时触发\r\n * dispatchParams = nodes: [ListNode], indexs: [number]\r\n */\r\n static EVENT_SWAP = \"swap\";\r\n /**\r\n * 设置数据时触发\r\n * dispatchParams = {node:ListNode, data:any}\r\n */\r\n static EVENT_DATA_SET = \"data_set\";\r\n /**\r\n * 设置数据时触发\r\n * dispatchParams = {node:ListNode, tag:string, value:any}\r\n */\r\n static EVENT_TAGS_SET = \"tags_set\";\r\n\r\n protected _identFunc: (node: ListNode) => boolean;\r\n\r\n public at(index: number): ListNode {\r\n return this._data[index];\r\n }\r\n\r\n public first(): ListNode {\r\n return this._data[0]\r\n }\r\n\r\n public last(): ListNode {\r\n return this._data[this._data.length - 1]\r\n }\r\n\r\n public length(): number {\r\n return this._data.length;\r\n }\r\n\r\n /**\r\n * 添加项,无法添加相同的项\r\n * @param node\r\n * @param enableDispatch 默认为true\r\n */\r\n public add(node: ListNode, enableDispatch: boolean = true) {\r\n if (this.contains(node)) {\r\n return;\r\n }\r\n this._data.push(node);\r\n node.root = this;\r\n if (enableDispatch) {\r\n this.dispatch(ListSource.EVENT_ADD, {node: node})\r\n }\r\n }\r\n\r\n public getById(id: string): ListNode {\r\n for (let i = 0; i < this._data.length; i++) {\r\n let node = this._data[i];\r\n if (node.id == id) {\r\n return node;\r\n }\r\n }\r\n return null;\r\n }\r\n\r\n public remove(node: ListNode) {\r\n let index = this._data.indexOf(node);\r\n if (index == -1) {\r\n return;\r\n }\r\n\r\n node.root = null;\r\n this._data.splice(index, 1);\r\n this.dispatch(ListSource.EVENT_REMOVE, {node: node, index: index})\r\n }\r\n\r\n public removeAll() {\r\n this._data.length = 0;\r\n this.dispatch(ListSource.EVENT_REMOVE_ALL)\r\n }\r\n\r\n public swap(a: ListNode, b: ListNode) {\r\n let aidx = this.indexOf(a);\r\n let bidx = this.indexOf(b);\r\n let d = this._data;\r\n [d[aidx], d[bidx]] = [d[bidx], a[aidx]];\r\n this.dispatch(ListSource.EVENT_SWAP, {nodes: [a, b], indexs: [aidx, bidx]})\r\n }\r\n\r\n public contains(node: ListNode): boolean {\r\n return this.indexOf(node) != -1\r\n }\r\n\r\n\r\n public containsById(id: string): boolean {\r\n return this.indexOfById(id) != -1\r\n }\r\n\r\n\r\n public indexOf(node: ListNode): number {\r\n for (let i = 0; i < this._data.length; i++) {\r\n let item = this._data[i];\r\n if (item.id == node.id) {\r\n return i;\r\n }\r\n }\r\n\r\n return -1\r\n }\r\n\r\n public indexOfById(id: string): number {\r\n for (let i = 0; i < this._data.length; i++) {\r\n let item = this._data[i];\r\n\r\n if (item.id == id) {\r\n return i;\r\n }\r\n }\r\n\r\n return -1\r\n }\r\n\r\n setData(node: ListNode, data: any) {\r\n if (!node) {\r\n return;\r\n }\r\n node.data = data\r\n this.dispatch(ListSource.EVENT_DATA_SET, {node: node, data: data})\r\n }\r\n\r\n\r\n setNodeTags(node: ListNode, tag: string, value: any) {\r\n let tags = node.getTags();\r\n if (tags[tag] === value) {\r\n return;\r\n }\r\n tags[tag] = value;\r\n this.dispatch(ListSource.EVENT_TAGS_SET, {node: node, tag: tag, value: value})\r\n }\r\n\r\n /**\r\n * 派发 refresh 消息\r\n * @param node\r\n */\r\n refresh(node: ListNode) {\r\n this.dispatch(ListSource.EVENT_REFRESH, {node: node});\r\n }\r\n\r\n walk(f: (node: ListNode) => boolean) {\r\n for (let i = 0; i < this.length(); i++) {\r\n let item = this._data[i];\r\n if (!f(item)) {\r\n return false;\r\n }\r\n }\r\n }\r\n\r\n walkPrev(node: ListNode, f: (node: ListNode) => boolean) {\r\n let index = this.indexOf(node);\r\n if (index == -1) {\r\n return;\r\n }\r\n for (let i = index; i >= 0; i--) {\r\n let item = this._data[i];\r\n if (!f(item)) {\r\n return false;\r\n }\r\n }\r\n }\r\n\r\n get data(): any[] {\r\n return this._data;\r\n }\r\n\r\n private _data = [];\r\n}","export class DictIterator {\n break() {\n this._isBreak = true;\n }\n\n isBreak(): boolean {\n return this._isBreak;\n }\n\n protected _isBreak;\n}\n\nexport class Dictionary<K = string, V = any> {\n constructor(data?: any) {\n if (data) {\n this._data = data;\n } else {\n this._data = {};\n }\n this._onSet = null;\n this._onDelete = null;\n }\n\n public reset(data: any): void {\n this._reset(data);\n }\n\n protected _reset(data: any, size?: number): void {\n this._data = data;\n if (size == undefined) {\n for (let _ in data) {\n size++;\n }\n }\n this.size = size;\n }\n\n public getData(): any {\n return this._data;\n }\n\n /**\n * 如果使用了 onSet or onDelete,需要注意清理\n */\n public clear(): void {\n this._data = {};\n this.size = 0;\n }\n\n /**\n * 克隆自身所有项到【target】对象,并返回【target】对象\n * @param target\n */\n public clone(target: this): this {\n for (const key in this._data) {\n let item = this._data[key];\n // @ts-ignore\n target.setData(key, item);\n }\n return target as this;\n }\n\n public resetByDict(dict: Dictionary): void {\n this._data = dict._data;\n this.size = dict.size;\n }\n\n public onSet(caller: any, handler: (key: K, value: V) => void): void {\n this._onSetCaller = caller;\n this._onSet = handler;\n }\n\n public onDelete(caller: any, handler: (key: K, value: V) => void): void {\n this._onDelete = handler;\n this._onDeleteCaller = caller;\n }\n\n\n /**\n * 设置键值对,如果没有发生变化,不会触发onSet函数\n * @param key\n * @param value\n */\n public set(key: K, value: V): void {\n this.setData(key, value);\n }\n\n private setData(key: K, value: V): void {\n if (this._data.hasOwnProperty(key)) {// 已经存在,数量不变化\n } else {\n this.size++;\n }\n let existed = this._data[key];\n if (existed == value) {\n return;\n }\n this._data[key] = value;\n if (this._onSet !== null) {\n this._onSet.call(this._onSetCaller, key, value);\n }\n }\n\n\n public setByMap(m: any): void {\n for (const key in m) {\n let item = m[key];\n // @ts-ignore\n this.setData(key, item);\n }\n }\n\n public addDictionary(other: Dictionary<K, V>): void {\n if (other.length() == 0) {\n return;\n }\n for (const key in other._data) {\n let item = other._data[key];\n // @ts-ignore\n this.setData(key, item);\n }\n }\n\n public deleteDictionary(other: Dictionary<K, V>): void {\n if (other.length() == 0) {\n return;\n }\n for (const key in other._data) {\n // @ts-ignore\n this.delete(key);\n }\n }\n\n /**\n * 如果不存在,返回 undefined\n * @param key\n */\n public get(key: K): V {\n return this._data[key];\n }\n\n public exist(key: K): boolean {\n return !!this._data[key];\n }\n\n public delete(key: K): void {\n this.deleteData(key);\n }\n\n private deleteData(key: K): void {\n const value = this._data[key];\n if (value === undefined) {\n return;\n }\n if (this._onDelete !== null) {\n this._onDelete.call(this._onDeleteCaller, key, value);\n }\n this._data[key] = null;\n delete this._data[key];\n this.size--;\n }\n\n public exists(key: K): boolean {\n return !!this._data[key];\n }\n\n public length(): number {\n return this.size;\n }\n\n public pop(key: K): [V, boolean] {\n const value = this._data[key];\n this.deleteData(key);\n return [value, value !== undefined];\n }\n\n public isEmpty(): boolean {\n return this.length() === 0;\n }\n\n\n public items(): V[] {\n const items: V[] = [];\n for (const key in this._data) {\n let item = this._data[key];\n items.push(item);\n }\n return items;\n }\n\n public keys(): K[] {\n const keys: K[] = [];\n for (const key in this._data) {\n keys.push(key as K);\n }\n return keys;\n }\n\n /**\n *\n * @param handler 可以使用【iterator】中断遍历\n * @return iterator 获取是否中断了\n */\n public forEach(handler: (key: K, val: V, iterator: DictIterator) => void): DictIterator {\n let iterator = new DictIterator();\n for (const key in this._data) {\n let val = this._data[key]\n // @ts-ignore\n handler(key, val, iterator)\n if (iterator.isBreak()) {\n return iterator;\n }\n }\n return iterator;\n }\n\n\n /**\n */\n public first(): V | undefined {\n for (const key in this._data) {\n return this._data[key]\n }\n return undefined\n }\n\n /**\n * @param handler 返回true结束迭代\n */\n public firstByCondition(handler: (key: K, val: V) => boolean): V | undefined {\n for (const key in this._data) {\n let val = this._data[key]\n // @ts-ignore\n if (handler(key, val)) {\n return val;\n }\n }\n }\n\n\n /**\n * 移除符合条件的项\n * @param cond 可以使用【iterator】中断遍历\n */\n public removeByCondition(cond: (key: K, val: V, iterator: DictIterator) => boolean) {\n let newdata = this._data;\n let newsize = this.size;\n let iterator = new DictIterator();\n for (const key in this._data) {\n let val = this._data[key]\n // @ts-ignore\n if (cond(key, val, iterator)) {\n newsize--;\n delete newdata[key];\n }\n if (iterator.isBreak()) {\n break;\n }\n }\n this.size = newsize;\n }\n\n /**\n * 查找符合条件的项保存到【target】对象中,并返回【target】对象\n * @param cond 可以使用【iterator】中断遍历\n * @param target 存到目标对象中\n */\n public findByCondition(cond: (key: K, val: V, iterator: DictIterator) => boolean, target: Dictionary): this {\n if (!target) {\n throw new Error(\"需要设置目标对象\")\n }\n let iterator = new DictIterator();\n let newdata = {}\n let newsize = 0;\n for (const key in this._data) {\n let val = this._data[key]\n // @ts-ignore\n if (cond(key, val, iterator)) {\n newsize++;\n newdata[key] = val;\n }\n if (iterator.isBreak()) {\n break;\n }\n }\n target._reset(newdata, newsize);\n return target as this;\n }\n\n\n public groupByCondition(createKey: (key: K, val: V) => string, ITEM_CLASS?: any): { [key: string]: any } {\n let newdata = {}\n for (const key in this._data) {\n let val = this._data[key]\n // @ts-ignore\n let newkey = createKey(key, val);\n let dict: Dictionary = newdata[newkey];\n if (!dict) {\n if (ITEM_CLASS) {\n dict = new ITEM_CLASS();\n } else {\n dict = new Dictionary();\n }\n newdata[newkey] = dict;\n }\n dict.set(key, val);\n }\n return newdata;\n }\n\n\n protected size: number = 0;\n private _data: any;\n private _onSet: ((key: K, value: V) => void) | null;\n private _onDelete: ((key: K, value: V) => void) | null;\n private _onSetCaller: any;\n private _onDeleteCaller: any;\n\n}","import {Dictionary} from \"./Dictionary\";\nimport {identutil} from \"../utils/IdentUtil\";\nimport {ListSource} from \"./ListSource\";\nimport {EventDispatcher} from \"../event/EventDispatcher\";\n\n\nexport class DictNode {\n\n static create(id: string, data?: any) {\n let node = new DictNode();\n node.id = id;\n node.data = data;\n return node;\n }\n\n constructor() {\n this.uuid = identutil.genOne()\n }\n\n uuid: string;\n id: string;\n data: any;\n tags = {};\n\n getTags(): { [key: string]: any } {\n if (!this.tags) {\n this.tags = {};\n }\n return this.tags;\n }\n\n getTag(name: string): any {\n return this.getTags()[name];\n }\n\n setTag(name: string, value: any) {\n this.getTags()[name] = value;\n }\n\n /**\n * 清理【data】和【tags】\n */\n clean() {\n this.data = null;\n this.tags = {};\n }\n}\n\nexport class DictSource extends Dictionary<string, DictNode> {\n /**\n * 刷新数据节点\n * dispatchParams = {node:ListNode}\n */\n static EVENT_REFRESH = \"refresh\";\n\n /**\n * 设置数据时触发\n * dispatchParams = {node:ListNode, tag:string, value:any}\n */\n static EVENT_TAGS_SET = \"tags_set\";\n\n setNodeTags(node: DictNode, tag: string, value: any) {\n let tags = node.getTags();\n if (tags[tag] === value) {\n return;\n }\n tags[tag] = value;\n this._dispatcher.dispatch(ListSource.EVENT_TAGS_SET, {node: node, tag: tag, value: value})\n }\n\n refreshNode(node: DictNode) {\n this._dispatcher.dispatch(ListSource.EVENT_REFRESH, {node: node})\n }\n\n get dispatcher(): EventDispatcher {\n return this._dispatcher;\n }\n\n protected _dispatcher = new EventDispatcher();\n}","export class ListIterator {\r\n break() {\r\n this._isBreak = true;\r\n }\r\n\r\n isBreak(): boolean {\r\n return this._isBreak;\r\n }\r\n\r\n protected _isBreak;\r\n}\r\n\r\nexport class List<T = any> {\r\n constructor() {\r\n this._onSet = null;\r\n this._onDelete = null;\r\n }\r\n\r\n public onSet(caller: any, handler: (value: T) => void): void {\r\n this._onSetCaller = caller;\r\n this._onSet = handler;\r\n }\r\n\r\n public onDelete(caller: any, handler: (value: T) => void): void {\r\n this._onDelete = handler;\r\n this._onDeleteCaller = caller;\r\n }\r\n\r\n\r\n firstByCondition(conf: (index: number, item: T) => boolean): [number, T] {\r\n let data = this._data;\r\n for (let i = 0; i < data.length; i++) {\r\n let item = data[i];\r\n if (conf(i, item)) {\r\n return [i, item]\r\n }\r\n }\r\n\r\n return [-1, null];\r\n }\r\n\r\n lastByCondition(conf: (index: number, item: T) => boolean): [number, T] {\r\n let data = this._data;\r\n for (let i = data.length - 1; i >= 0; i--) {\r\n let item = data[i];\r\n if (conf(i, item)) {\r\n return [i, item]\r\n }\r\n }\r\n return [-1, null];\r\n }\r\n\r\n forEach(handler: (index: number, item: T, iterator: ListIterator) => void) {\r\n let iterator = new ListIterator();\r\n let data = this._data;\r\n for (let i = 0; i < data.length; i++) {\r\n let item = data[i];\r\n handler(i, item, iterator);\r\n if (iterator.isBreak()) {\r\n return iterator;\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * 移除符合条件的项, 从后往前遍历\r\n * @param cond 可以使用【iterator】中断遍历\r\n * @param removedList 设置后,可获得被移除的项\r\n */\r\n public removeByCondition(cond: (index: number, val: T, iterator: ListIterator) => boolean, removedList?: List): this {\r\n let iterator = new ListIterator();\r\n let data = this._data;\r\n for (let i = data.length - 1; i >= 0; i--) {\r\n let item = data[i];\r\n if (cond(i, item, iterator)) {\r\n if (removedList) {\r\n removedList.push(item)\r\n }\r\n this.remove(item);\r\n }\r\n if (iterator.isBreak()) {\r\n break;\r\n }\r\n }\r\n\r\n return removedList as this;\r\n }\r\n\r\n /**\r\n * 查找符合条件的项保存到【target】对象中,并返回【target】对象\r\n * @param cond 可以使用【iterator】中断遍历\r\n * @param target 存到目标对象中\r\n */\r\n public findByCondition(cond: (index: number, val: T, iterator: ListIterator) => boolean, target: List): this {\r\n if (!target) {\r\n throw new Error(\"需要设置目标对象\")\r\n }\r\n let iterator = new ListIterator();\r\n let data = this._data;\r\n for (let i = 0; i < data.length; i++) {\r\n let item = data[i];\r\n if (cond(i, item, iterator)) {\r\n\r\n }\r\n if (iterator.isBreak()) {\r\n break;\r\n }\r\n }\r\n return target as this;\r\n }\r\n\r\n\r\n pop(): T {\r\n let item = this._data.pop();\r\n this.callRemove(item)\r\n return item;\r\n }\r\n\r\n shift(): T {\r\n let item = this._data.shift();\r\n this.callRemove(item);\r\n return item;\r\n }\r\n\r\n\r\n first(): T {\r\n return this._data[0];\r\n }\r\n\r\n last(): T {\r\n return this._data[this._data.length - 1];\r\n }\r\n\r\n removeAt(index: number) {\r\n if (index >= 0) {\r\n let removed = this._data.splice(index, 1);\r\n this.callRemove(removed[0])\r\n }\r\n }\r\n\r\n remove(item: T) {\r\n let data = this._data;\r\n let index = data.indexOf(item);\r\n if (index != -1) {\r\n data.splice(index, 1);\r\n this.callRemove(item);\r\n }\r\n }\r\n\r\n /**\r\n * 把【other】的项合并到自身\r\n * @param other\r\n */\r\n removeList(other: List<T>): void {\r\n for (const item of other._data) {\r\n this.remove(item);\r\n }\r\n }\r\n\r\n sort(compareFn?: (a: T, b: T) => number) {\r\n this._data.sort(compareFn)\r\n }\r\n\r\n reverse() {\r\n this._data.reverse();\r\n }\r\n\r\n clear() {\r\n this._data.length = 0;\r\n }\r\n\r\n /**\r\n * 克隆自身所有项到【target】对象,并返回【target】对象\r\n * @param target\r\n */\r\n clone(target: this): this {\r\n let newdata = target.getData().concat(this._data);\r\n target.resetData(newdata);\r\n return target as this;\r\n }\r\n\r\n get length(): number {\r\n return this._data.length;\r\n }\r\n\r\n insertAt(index: number, ...item: T[]) {\r\n this._data.splice(index, 0, ...item);\r\n this.callPush(item);\r\n }\r\n\r\n /**\r\n * @param beforeItem\r\n * @param item\r\n */\r\n insertBefore(beforeItem: T, ...item: T[]) {\r\n let data = this._data;\r\n let index = data.indexOf(beforeItem);\r\n if (index == -1) {\r\n data.push(item);\r\n } else {\r\n data.splice(index - 1, 0, ...item);\r\n }\r\n this.callPush(item);\r\n }\r\n\r\n /**\r\n * @param afterItem\r\n * @param item\r\n */\r\n insertAfter(afterItem: T, ...item: T[]) {\r\n let data = this._data;\r\n let index = data.indexOf(afterItem);\r\n if (index == -1) {\r\n data.push(item);\r\n } else {\r\n data.splice(index, 0, ...item);\r\n }\r\n\r\n this.callPush(item);\r\n }\r\n\r\n at(index: number): T {\r\n return this._data[index];\r\n }\r\n\r\n set(index: number, item: T) {\r\n let existed = this._data[index];\r\n if (existed) {\r\n if (existed == item) {\r\n return;\r\n }\r\n this.callRemove(existed);\r\n }\r\n this._data[index] = item;\r\n this.callPush(item);\r\n }\r\n\r\n indexOf(item: T): number {\r\n return this._data.indexOf(item);\r\n }\r\n\r\n has(item: T): boolean {\r\n return this._data.indexOf(item) != -1\r\n }\r\n\r\n push(item: T) {\r\n this._data.push(item);\r\n this.callPush(item);\r\n }\r\n\r\n\r\n /**\r\n * 把【other】的项合并到自身\r\n * @param other\r\n */\r\n pushList(other: List<T>): void {\r\n for (const item of other._data) {\r\n this.push(item);\r\n }\r\n }\r\n\r\n getData(): T[] {\r\n return this._data\r\n }\r\n\r\n resetData(val: T[]) {\r\n this._data = val;\r\n }\r\n\r\n /**\r\n * 随机获取【count】个项,并返回【target】对象\r\n * @param count\r\n * @param enableRepeat 允许重复\r\n * @param target\r\n */\r\n random(count: number, enableRepeat: boolean = false, target?: List<T>): List<T> {\r\n if (!target) {\r\n target = new List<T>()\r\n }\r\n const copyItems = [...this._data]; // 创建副本以避免修改原数组\r\n for (let i = 0; i < count && copyItems.length > 0; i++) {\r\n const randomIndex = Math.floor(Math.random() * copyItems.length);\r\n target.push(copyItems[randomIndex]);\r\n if (!enableRepeat) {\r\n copyItems.splice(randomIndex, 1); // 移除已选元素以防止重复选择\r\n }\r\n }\r\n return target;\r\n }\r\n\r\n protected callPush(value) {\r\n if (this._onSet !== null) {\r\n this._onSet.call(this._onSetCaller, value);\r\n }\r\n }\r\n\r\n protected callRemove(value) {\r\n if (this._onDelete !== null) {\r\n this._onDelete.call(this._onDeleteCaller, value);\r\n }\r\n }\r\n\r\n protected _data = [];\r\n private _onSet: ((value: T) => void) | null;\r\n private _onDelete: ((value: T) => void) | null;\r\n private _onSetCaller: any;\r\n private _onDeleteCaller: any;\r\n}","import { Dictionary } from \"../ds\";\nimport { IModule } from \"./Module\";\n\nexport interface IController {\n get name(): string;\n\n enable()\n\n disable()\n\n dispose()\n}\n\n\nexport class Controller {\n constructor(name: string) {\n this._name = name;\n }\n\n enable() {\n if (this._enabled) {\n return;\n }\n this._enabled = true;\n }\n\n disable() {\n if (!this._enabled) {\n return;\n }\n this._enabled = false;\n }\n\n dispose() {\n this._enabled = false;\n this._name = \"\";\n }\n\n get name(): string {\n return this._name;\n }\n\n get isEnable() {\n return this._enabled;\n }\n\n protected _name: string;\n protected _enabled: boolean = false;\n}\n\n\nexport class ControllerDict extends Dictionary<string, IController> {\n constructor() {\n super();\n }\n\n disable(name: string) {\n let ctrl = this.get(name);\n if (ctrl) {\n ctrl.disable();\n }\n }\n\n enable(name: string) {\n let ctrl = this.get(name);\n if (ctrl) {\n ctrl.enable();\n }\n }\n\n enableAll() {\n this.forEach((key, ctrl) => {\n ctrl.enable();\n })\n }\n\n disableAll() {\n this.forEach((key, ctrl) => {\n ctrl.disable();\n })\n }\n\n}\n\n\nexport class ControllerRepo extends ControllerDict {\n constructor() {\n super();\n }\n\n register(controller: IController) {\n if (this.get(controller.name)) {\n throw new Error(\"重复创建控制器: \" + name)\n }\n this.set(controller.name, controller);\n }\n\n remove(name: string) {\n let ctrl = this.get(name);\n if (ctrl) {\n ctrl.dispose();\n this.delete(name);\n }\n }\n\n dispose() {\n this.forEach((key, ctrl) => {\n ctrl.dispose();\n })\n }\n}\n\nexport const ctrlrepo = new ControllerRepo();","// 用于描述数据及之间的关系\n// 也可提供对控制器的封装\nimport {EventDispatcher} from \"../event/EventDispatcher\";\nimport {IModule} from \"../frame/Module\";\n\nexport interface IModel {\n get module(): IModule\n}\n\n\nexport class SimpleModel {\n constructor(mod: IModule) {\n this._mod = mod;\n }\n\n get core(): IModule {\n return this._mod\n }\n\n protected _mod: any;\n}\n\nexport class Model extends EventDispatcher {\n constructor(core?: IModule) {\n super();\n\n this._module = core;\n }\n\n get module(): IModule {\n return this._module\n }\n\n protected _module: any;\n}\n","import {IModule} from \"../frame/Module\";\nimport {IExtend} from \"./Extend\";\nimport { IController } from \"../frame/Controller\";\n\nexport class Factory {\n _controllers: { [key: string]: (mod: IModule) => IController } = {}\n _extends: { [key: string]: (mod: IModule, ...args: any) => IExtend } = {}\n\n registerController(name: string, creator: (mod: IModule, ...args: any) => IController) {\n this._controllers[name] = creator\n }\n\n registerExtend(name: string, creator: (mod: IModule, ...args: any) => IExtend) {\n this._extends[name] = creator\n }\n\n createController(name: string, mod: IModule): IController {\n let creator = this._controllers[name];\n if (!creator) {\n throw new Error(\"controller factory not found: \" + name)\n }\n return creator(mod)\n }\n\n createExtend(name: string, mod: IModule, ...args): IExtend {\n let creator = this._extends[name];\n if (!creator) {\n throw new Error(\"extend factory not found: \" + name)\n }\n return creator(mod, ...args)\n }\n\n}\n","import { List } from \"../ds/List\";\nimport {netutil} from \"../utils/NetUtil\";\n\n/**\n * 视图的路由值, 保存视图的信息\n * 规则: path/search\n * path = /a/b/c\n * search = ?key=val&key=val\n */\nexport class Route {\n\n constructor(route: string) {\n this._route = route;\n route = route.replace(\"#/\", \"\");\n let arr = route.split(\"?\");\n if (arr.length === 1) {\n this._path = arr[0];\n } else if (arr.length === 2) {\n this._path = arr[0];\n this._search = \"?\" + arr[1];\n }\n\n this.recycle();\n }\n\n public recycle() {\n this._params = undefined;\n this._name = \"\";\n }\n\n /**\n * 获取调用链\n * 例如 a/b/c,返回 a/b/c -> a/b -> a\n */\n public getLink(): Route[] {\n let arr = this.path.split(\"/\");\n let link = [];\n while (arr.length > 0) {\n link.push(Route.getData(arr.join(\"/\")));\n arr.pop();\n }\n return link;\n }\n\n // 打开界面缓存的route对象\n protected static data: any = {};\n\n public static getData(route: string): Route {\n let r = Route.data[route];\n if (!r) {\n r = new Route(route);\n Route.data[route] = r;\n }\n return r;\n }\n\n public toLoaction(): Location {\n let site = netutil.getLocation();\n let loc = new Location();\n loc.protocol = site.protocol;\n loc.host = site.host;\n loc.hostname = site.hostname;\n loc.port = site.port;\n loc.host = site.host;\n loc.pathname = site.pathname;\n loc.search = site.search;\n loc.hash = this.path + this.search;\n return loc;\n }\n\n\n /**\n * @constructor\n */\n public NewRoute(): Route {\n return Route.getData(this._path + this._search);\n }\n\n /**\n * @constructor\n */\n public NewRoutePath(): Route {\n return Route.getData(this._path);\n }\n\n /**\n * 新建一个带参数的路由\n * @param params\n */\n public NewRouteParam(params: any): Route {\n let search = netutil.encodeLocationSearch(params)\n return Route.getData(this._path + search);\n }\n\n public toString(): string {\n return this._route;\n }\n\n get path(): string {\n return this._path;\n }\n\n get parentPath(): string {\n if (this._parentPath == undefined) {\n let arr = this.path.split(\"/\");\n arr.pop();\n this._parentPath = arr.join(\"/\")\n }\n return this._parentPath;\n }\n\n\n get params(): any {\n if (this._params === undefined) {\n this._params = netutil.decodeLocationSearch(this._search);\n }\n return this._params;\n }\n\n get search(): string {\n return this._search;\n }\n\n set search(value: string) {\n this._search = value;\n this._params = undefined;\n }\n\n public get name(): string {\n if (!this._name) {\n let arr = this.path.split(\"/\");\n this._name = arr[arr.length - 1];\n }\n\n return this._name\n }\n\n /**\n * path/search\n */\n public get key(): string {\n return this.path + this.search;\n }\n\n private _path: string = \"\";\n private _parentPath: string = undefined;\n private _search: string = \"\";\n private _name: string = \"\";\n\n private _params: any;\n protected _route: string = \"\";\n}\n\nexport class RouteList extends List<Route>{\n \n}","import { Controller } from \"./Controller\";\nimport { IModule } from \"./Module\";\nimport { RouteView, ViewState, ViewEvent } from \"./RouteView\";\nimport { Route } from \"./Route\";\nimport { ViewList, viewrepo } from \"./ViewRepo\";\nimport { viewhistorys } from \"./ViewHistory\";\nimport { LinkError } from \"../utils\";\n\n\n\nexport class RouteController extends Controller {\n\n constructor(routePath: string) {\n super(routePath);\n\n this._route = new Route(routePath);\n }\n\n open(...args): RouteView {\n return this.openByRoute();\n }\n\n /**\n * 当视图需要通过路由打开时,需要实现此方法\n * @param route\n */\n openByRoute(route?: Route): RouteView {\n throw \"未实现 openByRoute\"\n }\n\n protected refreshView(view: RouteView) {\n }\n\n\n /**\n * 如果已经关闭了,则返回空\n * @param args \n * @returns \n */\n close(...args):RouteView {\n return this.closeByRoute();\n }\n\n /**\n * 当视图需要通过路由关闭时,需要实现此方法\n * @param route \n * @returns \n */\n closeByRoute(route?: Route): RouteView {\n throw \"未实现 closeByRoute\"\n }\n\n\n\n refresh() {\n this.refreshView(this._lastView);\n }\n\n\n hasTags(tags: string[]): boolean {\n for (let i = 0; i < tags.length; i++) {\n let tag = tags[i];\n for (const key in this._tags) {\n let thistag = this._tags[key];\n if (thistag == tag) {\n return true;\n }\n }\n }\n\n return false;\n }\n\n\n setTags(tags: string[]): this {\n this._tags = tags;\n return this;\n }\n\n get lastView(): RouteView {\n return this._lastView;\n }\n\n get route(): Route {\n return this._route;\n }\n\n protected _route: Route;\n protected _lastView: RouteView;\n protected _tags = {};\n}\n\n","import {instantiate, Node, Prefab} from \"cc\";\nimport {Dictionary} from \"../ds/Dictionary\";\nimport {List} from \"../ds/List\";\n\nexport class UIObjectRepo extends Dictionary<string, any | List> {\n\n /**\n * 获取唯一的\n * @param prefab\n */\n uniqueObject(prefab: Prefab): Node {\n if (!prefab) {\n console.warn(\"未设置prefab\");\n return;\n }\n\n let key = prefab.data.uuid;\n let object = this.get(key);\n if (!object) {\n object = instantiate(prefab);\n this.set(key, object);\n }\n return object;\n }\n\n removeObject(prefab: Prefab) {\n if (!prefab) {\n console.warn(\"未设置prefab\");\n return;\n }\n this.delete(prefab.data.uuid);\n }\n\n\n popObject(prefab: Prefab) {\n let object;\n let key = prefab.data.uuid;\n let list = this.getList(key);\n if (list.length == 0) {\n object = instantiate(prefab);\n } else {\n object = list.pop();\n }\n return object;\n }\n\n backObject(object: Node) {\n // @ts-ignore\n let key = object.prefab.asset.uuid\n let list = this.getList(key);\n list.push(object);\n }\n\n protected getList(key): List {\n let list = this.get(key);\n if (!list) {\n list = new List();\n this.set(key, list);\n }\n return list;\n }\n}\n\n/**\n * 全局的UI对象库,用于管理一些常用的ui对象,例如主界面,背包\n */\nexport var uirepo = new UIObjectRepo();","import { Route } from \"./Route\";\nimport { List } from \"../ds/List\";\nimport { RouteView } from \"./RouteView\";\nimport { UIObjectRepo } from \"./UIObjectDict\";\nimport { IModule } from \"./Module\";\nimport { RouteController } from \"./RouteController\";\nimport { ControllerDict, ctrlrepo } from \"./Controller\";\nimport { Dictionary } from \"../ds\";\n\nexport class ViewList extends List<RouteView> {\n\n}\n\n\n/**\n * 路由唯一编号->视图 \n */\nexport class ViewDict extends Dictionary<string, RouteView> {\n\n}\n\n\nexport class ViewRepo extends ViewDict {\n\n constructor() {\n super();\n }\n\n openByString(route: string): RouteView {\n return this.open(new Route(route))\n }\n\n /**\n * 打开页面\n * 一个路由代表一个页面\n * @param route\n */\n open(route: Route): RouteView {\n let controller = this.getController(route.path);\n if (!controller) {\n throw new Error(\"view controller no register: \" + route.path)\n }\n\n return controller.openByRoute(route);\n }\n\n close(route: Route) {\n let controller = this.getController(route.path);\n if (!controller) {\n throw new Error(\"view controller no register: \" + route.path)\n }\n\n controller.closeByRoute(route);\n }\n\n /**\n * 关闭相斥的视图对象\n * 1. 关闭同一层的所有视图对象\n * 2. 关闭符合相斥规则的视图对象\n * @param view \n * @param validFunc 符合条件的视图对象会被关闭\n * @returns 被关闭的视图\n */\n closeExclusion(validFunc: (existed: RouteView) => boolean = undefined): ViewList {\n if (!validFunc) {\n return;\n }\n let closedList = new ViewList();\n this.forEach((key, item, iterator) => {\n if (validFunc(item)) {\n closedList.push(item);\n }\n })\n\n closedList.forEach((index, item) => {\n let currentCtrl = item.controller;\n item.close();\n })\n return closedList;\n }\n\n\n\n /**\n * 如果页面存在,则刷新\n * @param route\n */\n refresh(route: Route) {\n let view = this.getByRoute(route);\n if (view) {\n view.controller.refresh();\n }\n }\n\n\n getByRoute(route: Route): RouteView {\n return this.get(route.key);\n }\n\n listByRoutePath(path: string): ViewList {\n let list = new ViewList();\n this.forEach((index, item) => {\n if (item.controller.route.path == path) {\n list.push(item);\n }\n })\n return list\n }\n\n\n listByTags(tags: string[]): ViewList {\n let list = new ViewList();\n this.forEach((index, item) => {\n if (item.controller.hasTags(tags)) {\n list.push(item);\n }\n })\n return list\n }\n\n\n protected getController(name: string): RouteController {\n return ctrlrepo.get(name) as RouteController;\n }\n\n\n protected _indexLayer = {};\n protected _indexRoute = {};\n\n}\n\n\nexport const viewrepo = new ViewRepo();","import { Route } from \"./Route\";\nimport { UIObjectRepo } from \"./UIObjectDict\";\nimport { LinkError } from \"../utils/ErrorUtil\";\nimport { RouteController } from \"./RouteController\";\nimport { EventDispatcher } from \"../event/EventDispatcher\";\nimport { Node } from \"cc\"\nimport { viewrepo } from \"./ViewRepo\";\nimport { MapObject } from \"../utils/MapUtil\";\n\nexport enum ViewState {\n /**\n * 关闭\n */\n Closed,\n /**\n * 正在打开\n */\n Opening,\n /**\n * 已打开\n */\n Opened,\n /**\n * 正在关闭\n */\n Closeing,\n}\n\n\nexport enum ViewEvent {\n // 正在打开\n Opening = \"opening\",\n // 已打开\n Opened = \"opened\",\n // 正在打开\n Closeing = \"closeing\",\n // 已关闭\n Closed = \"closed\",\n // 停止\n Stop = \"stop\",\n}\n\n\nexport class RouteView extends EventDispatcher {\n\n constructor(controller: RouteController, route: Route) {\n super();\n this._controller = controller;\n this._route = route;\n }\n\n open() {\n if (this.state != ViewState.Closed) {\n return;\n }\n let route = this.route;\n if (viewrepo.get(route.key)) {\n throw `视图已存在: route=${route.key}`\n }\n viewrepo.set(route.key, this);\n\n this.state = ViewState.Opening;\n this.dispatch(ViewEvent.Opening);\n //\n try {\n //\n if (this._onOpen) {\n this._onOpen(this);\n }\n // @ts-ignore\n if (!this._waitOpenComplete) {\n // 没有被打断,打开完成\n this.openComplete();\n } else {\n // 被打断了,等待完成1\n }\n } catch (e) {\n console.error(`open view ${this.route.key}`)\n console.error(e.stack);\n //\n this.close();\n }\n }\n\n close() {\n if (this.state == ViewState.Closed) {\n return;\n }\n this.state = ViewState.Closeing;\n this.dispatch(ViewEvent.Closeing);\n\n try {\n if (this._onClose) {\n this._onClose(this);\n }\n // @ts-ignore\n if (!this._waitCloseComplete) {\n // 没有被打断,关闭完成\n this.closeComplete();\n } else {\n // 被打断了,等待完成1\n }\n\n } catch (e) {\n console.error(`close view ${this.route.key}`)\n console.error(e.stack);\n }\n }\n\n refresh() {\n try {\n if (this._onRefresh) {\n this._onRefresh(this);;\n }\n } catch (e) {\n console.error(`refresh view ${this.route.key}`)\n console.error(e.stack);\n }\n }\n\n stop(reason?: LinkError) {\n try {\n if (this._onStop) {\n this._onStop(this);;\n }\n } catch (e) {\n console.error(`stop view ${this.route.key}`)\n console.error(e.stack);\n }\n\n this.dispatch(ViewEvent.Stop);\n }\n\n\n /**\n * 等待发送的结果\n * 如果返回 null,表示主动取消 [cancel]\n */\n wait(): Promise<this> {\n switch (this.state) {\n case ViewState.Opening:\n return new Promise((resolve, reject) => {\n let opened = () => {\n this.off(\"opened\", this, opened);\n this.off(\"canceled\", this, opened);\n resolve(this);\n }\n let canceled = () => {\n this.off(\"opened\", this, opened);\n this.off(\"canceled\", this, opened);\n resolve(this);\n }\n this.on(\"opened\", this, opened);\n this.on(\"canceled\", this, canceled);\n });\n case ViewState.Closeing:\n return new Promise((resolve, reject) => {\n let opened = () => {\n this.off(\"closed\", this, opened);\n resolve(this);\n }\n this.on(\"closed\", this, opened);\n });\n default:\n return new Promise((resolve, reject) => {\n resolve(this);\n });\n }\n }\n\n public toString(): string {\n return `View[${this.route.toString()}, ${this.id}]`\n }\n\n /**\n * 等待打开完成指令\n */\n waitOpenComplete() {\n this._waitOpenComplete = true;\n }\n\n openComplete() {\n if (!this._waitOpenComplete) {\n throw \"未执行 waitCloseComplete\"\n }\n this.state = ViewState.Opened;\n // @ts-ignore\n this._waitOpenComplete = false;\n if (this._onOpened) {\n this._onOpened(this);;\n }\n this.dispatch(ViewEvent.Opened);\n }\n\n waitCloseComplete() {\n // @ts-ignore\n this._waitCloseComplete = true;\n }\n\n closeComplete() {\n if (!this._waitCloseComplete) {\n throw \"未执行 waitCloseComplete\"\n }\n viewrepo.delete(this.route.key);\n this._waitCloseComplete = false;\n this.state = ViewState.Closed;\n this.dispatch(ViewEvent.Closed);\n\n if (this._onClosed) {\n this._onClosed(this);\n }\n }\n\n protected _waitOpenComplete: boolean = false;\n protected _waitCloseComplete: boolean = false;\n\n get controller(): RouteController {\n return this._controller;\n }\n\n get route(): Route {\n return this._route;\n }\n\n\n public onOpen(value: (ctx: this) => void): this {\n this._onOpen = value;\n return this;\n }\n\n public onOpened(value: (ctx: this) => void): this {\n this._onOpened = value;\n return this;\n }\n\n public onClose(value: (ctx: this) => void): this {\n this._onClose = value;\n return this;\n }\n public onClosed(value: (ctx: this) => void): this {\n this._onClosed = value;\n return this;\n }\n\n public onRefresh(value: (ctx: this) => void): this {\n this._onRefresh = value;\n return this;\n }\n\n\n /**\n * 默认执行 close();\n * @param value \n * @returns \n */\n public onStop(value: (ctx: this) => void): this {\n this._onStop = value;\n return this;\n }\n\n public get reason(): LinkError {\n return this._reason;\n }\n\n node: Node;\n datas = new MapObject({});\n tags = new MapObject({});\n enableHistory: boolean = false;\n layer: string;\n state: ViewState = 0;\n protected _controller: RouteController;\n protected _route: Route;\n protected _reason: LinkError;\n private _onOpen: (ctx: this) => void;\n private _onOpened: (ctx: this) => void;\n private _onClose: (ctx: this) => void;\n private _onClosed: (ctx: this) => void;\n private _onRefresh: (ctx: this) => void;\n private _onStop: (ctx: this) => void = (ctx) => {\n ctx.close();\n };\n}\n\n","import { Dictionary } from \"../ds/Dictionary\";\r\nimport { Route, RouteList } from \"./Route\";\r\nimport { viewrepo } from \"./ViewRepo\";\r\n\r\nexport class ViewHistory extends RouteList {\r\n\r\n back() {\r\n if (viewhistorys.length == 0) {\r\n return;\r\n }\r\n viewrepo.close(viewhistorys.shift());\r\n\r\n if (viewhistorys.length == 0) {\r\n return;\r\n }\r\n viewrepo.open(viewhistorys.last());\r\n }\r\n}\r\n\r\nexport const viewhistorys = new ViewHistory();","import {CallbackList} from \"./CallbackList\";\r\n\r\n\r\nexport class Listener<PARAMS = any> {\r\n static create(ident?: string) {\r\n return new Listener(ident);\r\n }\r\n\r\n constructor(ident?: string) {\r\n this.ident = ident\r\n }\r\n\r\n getCaller(): any {\r\n return this.caller;\r\n }\r\n\r\n setCaller(caller: any): this {\r\n this.caller = caller;\r\n return this;\r\n }\r\n\r\n setSubIdent(val: string): this {\r\n this._subIdent = val;\r\n return this;\r\n }\r\n\r\n setCondition(condition: (listener: Listener<PARAMS>) => boolean): this {\r\n this._condition = condition;\r\n return this;\r\n }\r\n\r\n setHandler(handler: (listener: Listener<PARAMS>) => void): this {\r\n this._handler = handler;\r\n return this;\r\n }\r\n\r\n setOnParams(val: any): this {\r\n this.onParams = val;\r\n return this;\r\n }\r\n\r\n getIdent(): string {\r\n return this.ident;\r\n }\r\n\r\n on():this {\r\n this._isOn = true;\r\n return this;\r\n }\r\n\r\n off() :this{\r\n this._isOn = false;\r\n return this;\r\n }\r\n\r\n isOn(): boolean {\r\n return this._isOn;\r\n }\r\n\r\n remove(){\r\n this.source.removeListener(this);\r\n }\r\n\r\n /**\r\n * 内部使用\r\n * @param params\r\n * @param subIdent 子编号\r\n */\r\n _dispatch(params: PARAMS, subIdent?: string) {\r\n this.params = params;\r\n if (this._subIdent) {\r\n if (this._subIdent != subIdent) {\r\n return;\r\n }\r\n }\r\n if (this._condition) {\r\n if (!this._condition.call(this.caller, this)) {\r\n return;\r\n }\r\n }\r\n this._handler.call(this.caller, this)\r\n }\r\n\r\n getOnParams(): any {\r\n return this.onParams;\r\n }\r\n\r\n getParams(): PARAMS {\r\n return this.params;\r\n }\r\n\r\n\r\n protected onParams: any;\r\n protected params: PARAMS;\r\n protected ident: string;\r\n protected _subIdent: string\r\n\r\n protected source: CallbackList;\r\n protected _handler: (any) => void;\r\n protected _condition: (any) => boolean;\r\n protected caller: any;\r\n protected _isOn: boolean = true;\r\n\r\n}\r\n\r\n","/**\n * 事件字符串分隔符\n */\nimport {List} from \"../ds/List\";\nimport {Listener} from \"./Listener\";\n\n\n/**\n * 回调列表\n */\nexport class CallbackList<PARAMS = any> {\n\n constructor() {\n }\n\n addListener(listener: Listener) {\n let ident = listener.getIdent();\n if (ident) {\n if (this._indexIdent[ident]) {\n throw new Error(`CallbackList.on: 回调函数已存在: ident=${ident}`)\n }\n this._indexIdent[ident] = listener;\n }\n this._data.push(listener);\n // @ts-ignore\n listener.source = this\n }\n\n removeListener(listener: Listener): void {\n let index = this._data.indexOf(listener);\n if (index != -1) {\n this._data.removeAt(index);\n let ident = listener.getIdent();\n if (ident) {\n delete this._indexIdent[ident];\n }\n }\n }\n\n /**\n */\n create(): Listener<PARAMS> {\n let listener = new Listener();\n this.addListener(listener);\n return listener;\n }\n\n\n /**\n * 如果监听器已经不存在,则创建\n * @param ident\n */\n createByIdent(ident: any): Listener<PARAMS> {\n let listener = this._indexIdent[ident];\n if (listener) {\n return listener;\n }\n listener = new Listener(ident);\n this.addListener(listener);\n return listener;\n }\n\n\n removeByIdent(ident: any) {\n let l = this._indexIdent[ident];\n if (l) {\n this.removeListener(l);\n }\n }\n\n removeByCaller(caller: any) {\n this._data.clone(new List()).forEach((index, val) => {\n if (val.getCaller() == caller) {\n this.removeListener(val);\n }\n })\n }\n\n getByIdent(ident: any): Listener {\n return this._indexIdent[ident];\n }\n\n /**\n * 派发事件\n * @param params 事件参数\n * @param subIdent\n */\n dispatch(params?: PARAMS, subIdent?: string): void {\n if (this._data.length == 0) {\n return;\n }\n let data = this._data.getData()\n for (let listener of data) {\n if (listener.isOn()) {\n listener._dispatch(params, subIdent);\n }\n }\n }\n\n\n protected _data = new List<Listener>();\n protected _indexIdent = {};\n}\n\n\n","/**\n * 事件字符串分隔符\n */\nimport {ISchedulable, Scheduler} from \"cc\";\nimport {Listener} from \"./Listener\";\nimport {CallbackList} from \"./CallbackList\";\nimport {Dictionary} from \"../ds/Dictionary\";\n\n\n/**\n * 事件派发器\n */\nexport class Dispatcher implements ISchedulable {\n\n constructor(name?: string) {\n Scheduler.enableForTarget(this);\n this.name = name;\n }\n\n dispose() {\n this.isDispose = true;\n this.typeToList = undefined;\n }\n\n create(type: string, listener: Listener) {\n this.getList(type).addListener(listener);\n }\n\n\n remove(type: string, listener: Listener): void {\n this.getList(type).removeListener(listener);\n }\n\n getByIdent(type: string, ident: string): Listener {\n return this.getList(type).getByIdent(ident)\n }\n\n /**\n * @param type\n * @param ident\n */\n createByIdent(type: string, ident: string): Listener {\n return this.getList(type).createByIdent(ident)\n }\n\n /**\n * 派发事件\n * @param eventType 事件类型\n * @param params 事件参数\n */\n dispatch(eventType: string, params?: any): void {\n this.getList(eventType).dispatch(params)\n }\n\n protected getList(type: string): CallbackList {\n let list = this.typeToList[type];\n if (!list) {\n list = new CallbackList();\n this.typeToList[type] = list;\n }\n return list;\n }\n\n\n id?: string;\n uuid?: string;\n name: string;\n protected isDispose: boolean = false;\n protected typeToList = new Dictionary<string, CallbackList>();\n\n}\n\n\n\n","class CallbackItem {\n listener: Function;\n caller: any;\n once: boolean;\n}\n\n\nexport class SampleCallbackList {\n\n constructor() {\n }\n\n dispose() {\n this._callbackItems = null;\n }\n\n has(caller: any, listener: Function): boolean {\n return !!this.getItem(caller, listener);\n }\n\n protected getItem(caller: any, listener: Function): CallbackItem {\n let items = this._callbackItems;\n for (const item of items) {\n if (item.caller == caller && item.listener == listener) {\n return item;\n }\n }\n\n return null;\n }\n\n /**\n * 监听事件,如果监听已经存在则返回\n * @param caller\n * @param listener 为了性能考虑, event使用了对象池处理。因此处理函数不应该保存event的引用。如有需要,可通过新建对象或Event.Clone()实现\n */\n on(caller: any, listener: (ctx: this, params?: any) => void): CallbackItem {\n if (!listener) {\n throw new Error(\"listerner is null\")\n }\n if (this.has(caller, listener)) {\n return;\n }\n let existed = this.getItem(caller, listener);\n if (existed) {\n return existed;\n }\n\n let item = new CallbackItem();\n item.caller = caller;\n item.listener = listener;\n let items = this._callbackItems;\n items.push(item);\n return item;\n }\n\n\n once(caller: any, listener: (ctx: this, params?: any) => void): CallbackItem {\n if (!listener) {\n throw new Error(\"listerner is null\")\n }\n if (this.has(caller, listener)) {\n return;\n }\n\n let item: CallbackItem = new CallbackItem();\n item.caller = caller;\n item.listener = listener;\n item.once = true;\n let items = this._callbackItems;\n items.push(item);\n return item;\n }\n\n protected offItem(item: CallbackItem) {\n this.off(item.caller, item.listener);\n }\n\n off(caller: any, listener: Function): void {\n let items = this._callbackItems;\n for (let i = 0; i < items.length; i++) {\n let item = items[i];\n if (item.caller !== caller) {\n continue\n }\n if (listener !== listener) {\n continue\n }\n items.splice(i, 1)\n return;\n }\n }\n\n offAll(type?: string): void {\n let items = this._callbackItems;\n if (!type) {\n items.length = 0;\n }\n }\n\n offAllCaller(caller: any) {\n let items = this._callbackItems;\n items = items.filter((value: CallbackItem, index: number, array: CallbackItem[]) => {\n return value.caller !== caller;\n })\n this._callbackItems = items;\n }\n\n\n /**\n * 派发事件\n * @param params 事件参数\n */\n dispatch(params?: any): void {\n let items = this._callbackItems;\n if (items.length == 0) {\n return;\n }\n\n for (let on of items) {\n on.listener.call(on.caller, this, params);\n }\n }\n\n protected _callbackItems: CallbackItem[] = [];\n}\n","import {path, Rect, Size, SpriteAtlas, SpriteFrame, Vec2} from \"cc\";\n\n\nexport function parseAtlas(name, plist, texture):SpriteAtlas {\n let info = plist.meta;\n let frames = plist.frames;\n\n let atlas = new SpriteAtlas();\n atlas.name = name;\n atlas._nativeAsset = plist;\n let spriteFrames = atlas.spriteFrames;\n // 1/1_1_0.png:{\n // frame: {x: 137, y: 302, w: 18, h: 24}\n // rotated: false\n // sourceSize: {w: 32, h: 32}\n // spriteSourceSize: {x: 7, y: 0, w: 18, h: 24}\n // trimmed: true\n // }\n\n let maxWidth = 0;\n let maxHeight = 0;\n for (let key in frames) {\n let frame = frames[key];\n let rotated = false, sourceSize, offset, textureRect;\n\n rotated = frame.rotated;\n {\n let size = frame.sourceSize;\n sourceSize = new Size(size.w, size.h);\n maxWidth = Math.max(maxWidth, size.w);\n maxHeight = Math.max(maxHeight, size.h);\n }\n {// 需要转化成以sourceSize的中心点为原点,cocos坐标系的偏移量\n let pos = frame.spriteSourceSize;\n offset = new Vec2(pos.x + pos.w * 0.5, pos.y + pos.h * 0.5);\n offset.x -= sourceSize.width * 0.5;\n offset.y -= sourceSize.height * 0.5;\n offset.y = -offset.y;// y轴相反\n }\n {\n let rect = frame.frame;\n textureRect = new Rect(\n rect.x,\n rect.y,\n rect.w,\n rect.h,\n )\n }\n\n var sprite = new SpriteFrame();\n sprite.name = key;\n sprite.reset({\n originalSize: sourceSize,\n rect: textureRect,\n offset: offset,\n isRotate: !!rotated,\n texture: texture\n });\n\n let name = path.mainFileName(key);\n spriteFrames[name] = sprite;\n }\n//\n plist.meta.maxSize = {w: maxWidth, h: maxHeight}\n return atlas;\n}","import { AssetManager, assetManager } from \"cc\";\n\nexport class AssetURI {\n /**\n * \n */\n constructor(public name: string) {\n let arr = name.split(\"://\");\n if (arr.length == 2) {\n let head = arr[0];\n if (head == \"uuid\") {\n this.loadType = 1;\n this.uuid = arr[1];\n } else if (head == \"http\" || head == \"https\") {\n this.loadType = 2;\n } else {\n this.bundle = head;\n this.path = arr[1];\n }\n } else {\n this.bundle = \"resources\"\n this.path = name;\n }\n }\n\n // 0-bundle+path 1-uuid 2-remote\n loadType: number = 0;\n\n uuid: string;\n path: string;\n bundle: string;\n}\n\nexport class XAssetManager {\n\n getAsset(uri: string): any {\n let obj = new AssetURI(uri);\n switch (obj.loadType) {\n case 1:\n return assetManager.assets.get(obj.uuid);\n case 2:\n return assetManager.assets.get(obj.name);\n default:\n let bundle = assetManager.getBundle(obj.bundle);\n if (!bundle) {\n return null;\n }\n return bundle.get(obj.path);\n }\n }\n\n getAssetByUUID(uuid: string): any {\n return assetManager.assets.get(uuid);\n }\n\n\n getRoot(): AssetManager {\n return assetManager;\n }\n\n}\n\nexport let assetx = new XAssetManager();","import {Asset, AssetManager, assetManager, ImageAsset, JsonAsset, path, SpriteAtlas, SpriteFrame, TextAsset, Texture2D} from \"cc\";\nimport {parseAtlas} from \"./ParseAtlas\";\nimport {AssetURI, assetx} from \"./AssetManager\";\nimport { List } from \"../ds\";\nimport { Dispatcher, Listener } from \"../event\";\n\n\nclass LoaderItem {\n\n onComplete?: (err: any, asset: any) => void\n\n callHandler(err: any, asset: any) {\n if (this.onComplete) {\n this.onComplete(err, asset)\n }\n }\n\n getBundle(): AssetManager.Bundle {\n let bundle = this.bundle\n if (!bundle) {\n bundle = assetManager.getBundle(this.uri.bundle);\n this.bundle = bundle;\n }\n\n return bundle;\n }\n\n type: string;\n bundle: AssetManager.Bundle;\n uri: AssetURI;\n\n preload: boolean = false;\n// 记录错误\n error: any;\n\n}\n\n/**\n * uri格式:path, uuid://uuid, https://url\n */\nexport class AssetLoader extends Dispatcher {\n /**\n *\n * @param bundleName\n * @param otherConfig preload:是预加载-否-加载, 包中的资源\n */\n loadBundle(bundleName: string, otherConfig?: {\n onComplete?: (err: any, asset: any) => void\n preload?: boolean,\n }) {\n let item = new LoaderItem();\n item.type = \"Bundle\";\n item.uri = new AssetURI(`${bundleName}://bundle`);\n if (otherConfig) {\n item.preload = otherConfig.preload;\n item.onComplete = otherConfig.onComplete;\n }\n this._loaderList.push(item);\n return this;\n }\n\n\n /**\n * @param uri\n * @param otherConfig\n */\n loadAtlas(uri: string, otherConfig?: {\n onComplete?: (err: any, asset: any) => void\n preload?: boolean,\n }) {\n let item = new LoaderItem();\n item.type = \"Atlas\";\n // 加载json文件\n item.uri = new AssetURI(uri);\n if (otherConfig) {\n item.onComplete = otherConfig.onComplete;\n item.preload = otherConfig.preload != undefined ? otherConfig.preload : false;\n }\n this._loaderList.push(item);\n return this;\n }\n\n loadPrefab(uri: string, otherConfig?: {\n onComplete?: (err: any, asset: any) => void\n preload?: boolean,\n }) {\n let item = new LoaderItem();\n item.type = \"Prefab\";\n // 加载json文件\n item.uri = new AssetURI(uri);\n if (otherConfig) {\n item.onComplete = otherConfig.onComplete;\n item.preload = otherConfig.preload != undefined ? otherConfig.preload : false;\n }\n this._loaderList.push(item);\n return this;\n }\n\n loadJson(uri: string, otherConfig?: {\n onComplete?: (err: any, asset: any) => void\n preload?: boolean,\n }) {\n let item = new LoaderItem();\n item.type = \"Json\";\n item.uri = new AssetURI(uri);\n if (otherConfig) {\n item.onComplete = otherConfig.onComplete;\n item.preload = otherConfig.preload != undefined ? otherConfig.preload : false;\n }\n this._loaderList.push(item);\n return this;\n }\n\n loadSpriteFrame(uri: string, otherConfig?: {\n onComplete?: (err: any, asset: any) => void\n uuid?: string,\n }) {\n let item = new LoaderItem();\n item.type = \"SpriteFrame\";\n item.uri = new AssetURI(uri);\n if (otherConfig) {\n item.onComplete = otherConfig.onComplete;\n }\n this._loaderList.push(item);\n return this;\n }\n\n loadImageAsset(uri: string, otherConfig?: {\n onHandler?: (err: any, asset: any) => void\n }) {\n let item = new LoaderItem();\n item.type = \"ImageAsset\";\n item.uri = new AssetURI(uri);\n if (otherConfig) {\n item.onComplete = otherConfig.onHandler;\n }\n this._loaderList.push(item);\n return this;\n }\n\n protected _loadSpriteFrameByBundle(uri: string, bundle: AssetManager.Bundle) {\n let item = new LoaderItem();\n item.type = \"SpriteFrame\";\n item.uri = new AssetURI(`${bundle.name}://${uri}`);\n item.bundle = bundle;\n this._loaderList.push(item);\n }\n\n\n /**\n * 等待发送的结果\n * 如果返回 null,表示主动取消 [cancel]\n */\n wait(): Promise<this> {\n return new Promise((resolve, reject) => {\n if (this.isComplete()) {\n resolve(this);\n } else {\n let listener = Listener.create()\n let succeed = () => {\n listener.off();\n resolve(this);\n }\n listener.setCaller(this).setHandler(succeed).on();\n this.create(\"complete\", listener)\n }\n });\n }\n\n start(): this {\n this._loaderList.forEach((index, item) => {\n switch (item.type) {\n case \"Bundle\": {\n assetManager.loadBundle(item.uri.bundle, (err, bundle) => {\n if (err) {\n return;\n }\n let loader = this.parseBundleToAssetsLoader(bundle, item);\n loader.onComplete(() => {\n this._loaded++;\n this.validComplete();\n })\n loader.start();\n })\n break;\n }\n case \"Json\": {\n assetManager.loadBundle(item.uri.bundle, (err, bundle) => {\n if (this._stop) {\n return;\n }\n if (err) {\n return;\n }\n this._loaded++;\n this.validComplete();\n });\n break;\n }\n case \"Atlas\": {\n let asset = assetx.getAsset(item.uri.name);\n if (asset) {\n if (asset instanceof SpriteAtlas) {\n this._loaded++;\n item.callHandler(null, asset);\n this.validComplete();\n } else {\n this.handleAtlas(item, asset);\n }\n\n } else {\n // json文件\n this._loadByItem(item, null, (err, asset) => {\n if (!err) {\n this.handleAtlas(item, asset);\n } else {\n this._loaded++;\n this.validComplete();\n }\n })\n }\n break;\n }\n case \"Prefab\": {\n let asset = assetx.getAsset(item.uri.name);\n if (asset) {\n this._loaded++;\n item.callHandler(null, asset);\n this.validComplete();\n } else {\n this._loadByItem(item, null, (err, asset) => {\n this._loaded++;\n item.callHandler(err, asset);\n this.validComplete();\n })\n }\n break;\n }\n case \"SpriteFrame\": {\n this._loadByItem(item, SpriteFrame, (err, asset) => {\n this._loaded++;\n this.validComplete();\n })\n break;\n }\n case \"ImageAsset\": {\n this._loadByItem(item, ImageAsset, (err, asset) => {\n this._loaded++\n this.validComplete();\n })\n break;\n }\n }\n\n });\n return this;\n }\n\n onComplete(val: (loader: AssetLoader) => void): this {\n this._onCompleteHandler = val;\n return this;\n }\n\n onProgress(val: (loader: AssetLoader) => void): this {\n this._onProgressHandler = val;\n return this;\n }\n\n public isComplete(): boolean {\n return this._loaded == this._loaderList.length;\n }\n\n protected validComplete() {\n if (this._stop) {\n return;\n }\n if (this._onProgressHandler) {\n this._onProgressHandler(this);\n }\n if (this._loaded == this._loaderList.length) {\n if (this._onCompleteHandler) {\n this._onCompleteHandler(this);\n }\n\n this.dispatch(\"complete\")\n }\n }\n\n protected parseBundleToAssetsLoader(bundle: AssetManager.Bundle, loaderItem: LoaderItem) {\n let loader = new AssetLoader();\n // @ts-ignore\n let map = bundle._config.assetInfos._map;\n for (const mapKey in map) {\n let assetInfo = map[mapKey];\n if (!assetInfo.ctor) {\n continue\n }\n\n switch (assetInfo.ctor.name) {\n case \"ImageAsset\":\n break;\n case \"Prefab\":\n break;\n case \"SpriteFrame\":\n loader._loadSpriteFrameByBundle(assetInfo.path, bundle);\n break;\n }\n }\n\n return loader\n\n }\n\n protected handleAtlas(item: LoaderItem, atlasAsset: Asset) {\n let content = (() => {\n if (atlasAsset instanceof JsonAsset) {\n return atlasAsset.json;\n } else if (atlasAsset instanceof TextAsset) {\n return JSON.parse(atlasAsset.text);\n } else if (atlasAsset instanceof Asset) {\n return JSON.parse(atlasAsset.nativeAsset);\n }\n })();\n\n\n let textureUrl = \"\";\n let textureItem = new LoaderItem();\n switch (item.uri.loadType) {\n case 2:\n textureItem.type = \"ImageAsset\";\n textureUrl = path.join(path.dirname(item.uri.name), content.meta.image);\n break;\n case 1:\n textureItem.type = \"ImageAsset\";\n textureUrl = atlasAsset._nativeUrl;\n break;\n case 0:\n textureItem.type = \"ImageAsset\";\n textureUrl = item.uri.name\n break;\n }\n textureItem.uri = new AssetURI(textureUrl);\n //\n this._loadByItem(textureItem, ImageAsset, (err: any, asset: any) => {\n if (!err) {\n let tex = new Texture2D();\n tex.image = asset;\n tex.setFilters(1, 1)\n let atlasSprite = parseAtlas(item.uri, content, tex);\n\n let uuid = atlasAsset.uuid;\n assetManager.assets.remove(uuid);\n assetManager.assets.add(uuid, atlasSprite);\n //\n item.callHandler(null, atlasSprite);\n }\n\n this._loaded++\n this.validComplete();\n })\n }\n\n\n protected _loadByItem(item: LoaderItem, type: any, onComplate: (err: any, asset: any) => void) {\n switch (item.uri.loadType) {\n case 0: {\n let bundle = item.getBundle();\n if (!bundle) {\n // todo: 加载 or 报错\n } else {\n if (item.preload) {\n bundle.preload(item.uri.path, type, (err, asset) => {\n if (this._stop) {\n return;\n }\n this._handleFailList(err, item);\n onComplate(err, asset)\n });\n } else {\n bundle.load(item.uri.path, type, (err, asset) => {\n if (this._stop) {\n return;\n }\n this._handleFailList(err, item);\n onComplate(err, asset)\n });\n }\n }\n\n break;\n }\n case 1: {\n if (item.preload) {\n assetManager.preloadAny({uuid: item.uri.uuid}, {type: type}, (err, asset) => {\n if (this._stop) {\n return;\n }\n this._handleFailList(err, item);\n onComplate(err, asset)\n });\n } else {\n assetManager.loadAny({uuid: item.uri.uuid}, {type: type}, (err, asset) => {\n if (this._stop) {\n return;\n }\n this._handleFailList(err, item);\n onComplate(err, asset)\n })\n }\n\n break;\n }\n case 2: {\n assetManager.loadRemote(item.uri.name, (err, asset: any) => {\n this._handleFailList(err, item);\n if (this._stop) {\n return;\n }\n onComplate(err, asset)\n });\n }\n }\n }\n\n // 获取已经加载的数量,报错加载失败的\n getLoaded(): number {\n return this._loaded;\n }\n\n getTotle(): number {\n return this._loaderList.length;\n }\n\n // 获取成功的数量\n getSucceed(): number {\n return this._loaded - this.getFail();\n }\n\n // 获取失败的数量\n getFail(): number {\n return this._failList.length;\n }\n\n getFailList(): List<LoaderItem> {\n return this._failList;\n }\n\n protected _handleFailList(err, item) {\n if (err) {\n console.error(err.toString());\n item.error = err;\n this._failList.push(item);\n }\n }\n\n stop() {\n this._stop = true;\n }\n\n protected _stop: boolean = false;\n protected _onCompleteHandler: Function;\n protected _onProgressHandler: Function;\n protected _loaded = 0;\n protected _loaderList = new List<LoaderItem>();\n protected _failList = new List<LoaderItem>();\n}\n","import {maputil} from \"./MapUtil\";\n\nexport class ArrayUtil {\n lastItem(array: any[]): any {\n return array[array.length - 1]\n }\n\n unique(array: any[]): any[] {\n const temp = [];\n const index = [];\n const l = array.length;\n for (let i = 0; i < l; i++) {\n for (let j = i + 1; j < l; j++) {\n if (array[i] === array[j]) {\n i++;\n j = i;\n }\n }\n temp.push(array[i]);\n index.push(i);\n }\n return temp;\n }\n\n removeSelf(arr: any[], item: any) {\n let idx = arr.indexOf(item);\n if (idx !== -1) {\n arr.splice(idx);\n }\n }\n\n /**\n *\n * @param arr\n * @param desc 降序\n */\n sortNumber(arr: any[], desc: boolean = false): any[] {\n return arr.sort(function (a: any, b: any): number {\n let r: number;\n if (!desc) {\n r = a > b ? 1 : -1;\n } else {\n r = a > b ? -1 : 1;\n }\n return r;\n })\n }\n\n sortString(arr: any[], desc: boolean = false): any[] {\n return arr.sort(function (a: string, b: string): number {\n let r: number;\n if (!desc) {\n r = a.localeCompare(b);\n } else {\n r = b.localeCompare(a);\n }\n return r;\n })\n }\n\n\n getByPath(target: any, key: string): any {\n let arr = key.split(\"/\");\n let last = target;\n for (let a of arr) {\n last = last[a];\n if (!last) {\n break;\n }\n }\n\n return last\n }\n\n sortObject(arr: any[], desc: boolean, ...paths: string[]): any[] {\n let self = this;\n return arr.sort(function (a: any, b: any): number {\n let r = 0;\n if (!desc) {\n for (let key of paths) {\n let va = self.getByPath(a, key);\n let vb = self.getByPath(b, key);\n if (va === vb) {\n continue;\n }\n r = va > vb ? 1 : -1;\n break;\n }\n } else {\n for (let key of paths) {\n let va = self.getByPath(a, key);\n let vb = self.getByPath(b, key);\n if (va === vb) {\n continue;\n }\n r = va > vb ? -1 : 1;\n break;\n }\n }\n return r;\n })\n }\n\n sortBySeq(arr: any[], desc: boolean, seq: { [key: string]: number }, key?: string): any[] {\n let self = this;\n return arr.sort(function (a: any, b: any): number {\n let r = 0;\n let va = a;\n if (key) {\n va = self.getByPath(a, key)\n }\n let vb = b;\n if (key) {\n vb = self.getByPath(b, key)\n }\n if (!desc) {\n if (va === vb) {\n return 0;\n }\n let sva = maputil.number(seq, va);\n let svb = maputil.number(seq, vb);\n r = sva > svb ? 1 : -1;\n } else {\n if (va === vb) {\n return 0;\n }\n let sva = maputil.number(seq, va);\n let svb = maputil.number(seq, vb);\n r = sva > svb ? -1 : 1;\n }\n return r;\n })\n }\n\n\n indexOfConf(arr: any[], caller: any, f: (item: any) => boolean): number {\n for (let i = 0; i < arr.length; i++) {\n let item = arr[i];\n if (f.call(caller, item)) {\n return i;\n }\n }\n\n return -1\n }\n}\n\n\nexport const arrayutil = new ArrayUtil();\n\n","export class BitUtil {\r\n getState(state: number, key: number): boolean {\r\n let a = state & key;\r\n return a !== 0\r\n }\r\n\r\n setState(state: number, key: number, value: boolean): number {\r\n if (value) {\r\n state |= key\r\n } else {\r\n key ^= key;\r\n state &= key;\r\n }\r\n\r\n return state;\r\n }\r\n\r\n /**\r\n * @param state\r\n * @param key\r\n */\r\n getStateBig(state: bigint, key: bigint): boolean {\r\n let a = state & key;\r\n // @ts-ignore\r\n return a !== 0n\r\n }\r\n\r\n setStateBig(state: bigint, key: bigint, value: boolean): bigint {\r\n if (value) {\r\n state |= key\r\n } else {\r\n key ^= key;\r\n state &= key;\r\n }\r\n return state;\r\n }\r\n\r\n\r\n /**\r\n * key从0开始\r\n * @param val\r\n */\r\n convertToState(val: { [key: string]: boolean }): number {\r\n let state = 0;\r\n for (const key in val) {\r\n let bit = parseInt(key) + 1;\r\n state |= 1 << bit;\r\n }\r\n return state;\r\n }\r\n\r\n /**\r\n * 判断是否匹配\r\n * @param target\r\n * @param match 0-返回true\r\n */\r\n match(target: number, match: number): boolean {\r\n if (match > 0) {\r\n if ((target & match) === 0) {\r\n return false;\r\n }\r\n }\r\n return true;\r\n }\r\n}\r\n\r\n\r\nexport const bitutil = new BitUtil();","import {Canvas, director, find, Node} from \"cc\";\n\nexport class CanvasUtil {\n getCanvas(): Canvas {\n let canvas = this._canvas;\n if (!canvas) {\n let node = find(\"Canvas\");\n canvas = node.getComponent(Canvas);\n this._canvas = canvas;\n director.getScene().on(Node.EventType.NODE_DESTROYED, this.onSceneDestroyed);\n }\n return this._canvas;\n }\n\n protected onSceneDestroyed(event) {\n director.getScene().off(Node.EventType.NODE_DESTROYED, this.onSceneDestroyed)\n this._canvas = undefined;\n }\n\n _canvas: Canvas;\n}\n\nexport let canvasutil = new CanvasUtil();","import {Camera} from \"cc\";\nimport { canvasutil } from \"./CavansUtil\";\n\nexport class CameraUtil {\n\n getUICamera(): Camera {\n return canvasutil.getCanvas().cameraComponent\n }\n\n\n}\n\nexport let camerautil = new CameraUtil();","export class DocUtil {\n copyToClip(value: string): boolean {\n var el = document.createElement(\"textarea\");\n el.value = value;\n el.setAttribute('readonly', '');\n el.style.contain = 'strict';\n el.style.position = 'absolute';\n el.style.left = '-9999px';\n el.style.fontSize = '12pt';\n document.body.appendChild(el);\n var selected;\n var selection = document.getSelection();\n if (selection.rangeCount > 0) {\n selected = selection.getRangeAt(0);\n }\n // el.select();\n this.selectText(el, 0, el.value.length);\n let succeed: boolean = false;\n try {\n succeed = document.execCommand('copy');\n } catch (err) {\n }\n document.body.removeChild(el);\n if (selected) {\n document.getSelection().removeAllRanges();\n document.getSelection().addRange(selected);\n }\n\n return succeed;\n }\n\n// ios 兼容\n selectText(textbox, startIndex, stopIndex) {\n if (textbox.createTextRange) {//ie\n var range = textbox.createTextRange();\n range.collapse(true);\n range.moveStart('character', startIndex);//起始光标\n range.moveEnd('character', stopIndex - startIndex);//结束光标\n range.select();//不兼容苹果\n } else {//firefox/chrome\n textbox.setSelectionRange(startIndex, stopIndex);\n textbox.focus();\n }\n }\n}\n\n\nexport var docutil = new DocUtil();","export class EventUtil {\r\n // nameEvent(eventType, entityId, subType: string): string {\r\n // let evt = `${eventType}${$eventSplitChar}${entityId}${$eventSplitChar}${subType}`;\r\n // return evt;\r\n // }\r\n //\r\n // /**\r\n // * @param key bucketName/entityId\r\n // * @param proplink\r\n // */\r\n // namePropChangedGlobal(key: string, proplink: string = \"\"): string {\r\n // if (proplink) {\r\n // return \"PropChanged\" + $eventSplitChar + key + $eventSplitChar + proplink;\r\n // }\r\n // return \"PropChanged\" + $eventSplitChar + key;\r\n // }\r\n //\r\n // /**\r\n // * @param propPath\r\n // */\r\n // namePropChanged(propPath: string = \"\"): string {\r\n // return \"PropChanged\" + $eventSplitChar + propPath\r\n // }\r\n //\r\n // // 网络事件\r\n // nameNet(key: NetIdent, sub: NetSub = NetSub.All): string {\r\n // let evt = `netz${$eventSplitChar}${key}`;\r\n // let substr = () => {\r\n // if (sub !== NetSub.All) {\r\n // return NetSub[sub];\r\n // }\r\n // return \"*\"\r\n // }\r\n // return evt + $eventSplitChar + substr();\r\n // }\r\n //\r\n // // 消息响应事件\r\n // nameResponse(key: string, sub: ResponseSub = ResponseSub.All): string {\r\n // let evt = `Response${$eventSplitChar}${key}`;\r\n // let substr = () => {\r\n // if (sub !== ResponseSub.All) {\r\n // return ResponseSub[sub];\r\n // }\r\n // return \"*\"\r\n // }\r\n // return evt + $eventSplitChar + substr();\r\n // }\r\n //\r\n //\r\n // namePage(key: string, sub: PageEventSub = PageEventSub.All): string {\r\n // let evt = `Page${$eventSplitChar}${key}`;\r\n // let substr = () => {\r\n // if (sub !== PageEventSub.All) {\r\n // return PageEventSub[sub];\r\n // }\r\n // return \"*\";\r\n // }\r\n // return evt + $eventSplitChar + substr();\r\n // }\r\n //\r\n //\r\n // nameFSMState(key: string, state: string): string {\r\n // let evt = `FSM${$eventSplitChar}${key}`;\r\n // return evt + $eventSplitChar + state;\r\n // }\r\n}\r\n\r\n/**\r\n * 框架的事件\r\n */\r\nexport const eventutil = new EventUtil();","export class FloatUtil {\n epsilon = 0.00001;\n\n neq(a: number, b: number, threshold = this.epsilon): boolean {\n return !this.eq(a, b, threshold)\n }\n\n eq(a: number, b: number, threshold = this.epsilon): boolean {\n return Math.abs(a - b) < threshold\n }\n\n gt(a: number, b: number, threshold = this.epsilon): boolean {\n return Math.max(a, b) === a && Math.abs(a - b) > threshold\n }\n\n lt(a: number, b: number, threshold = this.epsilon): boolean {\n return Math.max(a, b) === b && Math.abs(a - b) > threshold\n }\n\n geq(a: number, b: number, threshold = this.epsilon): boolean {\n return Math.max(a, b) === a || Math.abs(a - b) < threshold\n }\n\n leq(a: number, b: number, threshold = this.epsilon): boolean {\n return Math.max(a, b) === b || Math.abs(a - b) < threshold\n }\n\n}\n\nexport let floatutil = new FloatUtil();","import {convertutil} from \"./ConvertUtil\";\r\n\r\nexport namespace formatutil {\r\n /**\r\n * 格式化数字\r\n * @param format 第nn天\r\n * @param val\r\n */\r\n export function toChinese(formatter: string, val: number): string {\r\n let obj = {\r\n \"n+\": changeToCN(val),\r\n };\r\n for (let item in obj) {\r\n if (new RegExp(\"(\" + item + \")\").test(formatter)) {\r\n formatter = formatter.replace(RegExp.$1, obj[item])\r\n }\r\n }\r\n return formatter;\r\n }\r\n\r\n let words = [\"零\", \"一\", \"二\", \"三\", \"四\", \"五\", \"六\", \"七\", \"八\", \"九\", \"十\"];\r\n let adds = [\"\", '十', '百', '千', '万', '亿', '十', '百', '千'];\r\n\r\n /**根据数字获取汉字*/\r\n function changeToCN(num: number): string {\r\n\r\n if (words[num]) {\r\n return words[num];\r\n } else if (num > 10 && num < 20) {\r\n let numStr = num.toString();\r\n let n = numStr.substring(1, 2);\r\n let result = adds[1] + words[n];\r\n return result;\r\n } else if (num > 10) {\r\n let result = \"\";\r\n let numStr = num.toString();\r\n for (var i = 0; i < numStr.length; ++i) {\r\n let n = numStr.substring(i, i + 1);\r\n let m = numStr.length - i - 1;\r\n result += words[n] + adds[m];\r\n }\r\n return result;\r\n } else return \"零\";\r\n }\r\n\r\n /**\r\n * 转换为 x亿x万\r\n * @param val\r\n */\r\n export function format数字使用万亿(val: number | string): string {\r\n let valnum = convertutil.anyToFloat(val);\r\n if (valnum > 10000000000) {// 多加两位比较好看\r\n return Math.floor(valnum / 100000000).toString() + \"亿\";\r\n } else if (valnum > 1000000) {\r\n return Math.floor(valnum / 10000).toString() + \"万\";\r\n }\r\n return valnum.toString();\r\n }\r\n\r\n /**\r\n * 格式化货币,每N位增加一个逗号识别\r\n * @param val\r\n * @param N\r\n */\r\n export function format数字使用逗号(val: number | string, N: number = 3): string {\r\n let valstr = convertutil.anyToString(val);\r\n let count = Math.ceil(valstr.length / N);\r\n let a = [];\r\n for (let i = 0; i < count; i++) {\r\n let start = valstr.length - (i + 1) * N;\r\n let end = start + N;\r\n if (start < 0) {\r\n end = N + start;\r\n start = 0\r\n }\r\n let str = valstr.slice(start, end);\r\n a.push(str);\r\n }\r\n\r\n a = a.reverse();\r\n return a.join(\",\");\r\n }\r\n}","enum GeometryDirection {\n East,\n SouthEast,\n South,\n SouthWest,\n West,\n NorthWest,\n North,\n NorthEast\n}\n\n\n\nexport class GeometryUtil {\n /**\n * mode,8表示八方向,2表示二方向(左右),4表示4方向\n * @param dot\n * @param mode\n */\n angleToDirection(dot: number, mode: number = 8): GeometryDirection {\n if (dot > 180) {\n dot = dot - 360\n }\n var dir = -1;\n switch (mode) {\n case 2:\n //逆时针方向\n if (dot > 0) {\n if (dot < 90) {\n //0-45度\n dir = GeometryDirection.East\n } else {\n //180度\n dir = GeometryDirection.West\n }\n } else {\n dot = -dot\n //顺时针方向\n if (dot < 90) {\n dir = GeometryDirection.East\n } else {\n //180度\n dir = GeometryDirection.West\n }\n }\n break;\n case 4: // 4方向\n //逆时针方向\n if (dot > 0) {\n if (dot < 45) {\n //0-45度\n dir = GeometryDirection.East\n } else if (dot < 135) {\n //67.5度\n dir = GeometryDirection.North\n } else {\n //180度\n dir = GeometryDirection.West\n }\n } else {\n dot = -dot\n //顺时针方向\n if (dot < 45) {\n dir = GeometryDirection.East\n } else if (dot < 135) {\n dir = GeometryDirection.South\n } else {\n //180度\n dir = GeometryDirection.West\n }\n }\n break;\n default:\n //逆时针方向\n if (dot > 0) {\n if (dot < 22.5) {\n //0-22.5度\n dir = GeometryDirection.East\n } else if (dot < 67.5) {\n //67.5度\n dir = GeometryDirection.NorthEast\n } else if (dot < 112.5) {\n //112.5度\n dir = GeometryDirection.North\n } else if (dot < 157) {\n //157度\n dir = GeometryDirection.NorthWest\n } else {\n //180度\n dir = GeometryDirection.West\n }\n } else {\n dot = -dot\n //顺时针方向\n if (dot < 22.5) {\n //0-22.5度\n dir = GeometryDirection.East\n } else if (dot < 67.5) {\n //67.5度\n dir = GeometryDirection.SouthEast\n } else if (dot < 112.5) {\n //112.5度\n dir = GeometryDirection.South\n } else if (dot < 157) {\n //157度\n dir = GeometryDirection.SouthWest\n } else {\n //180度\n dir = GeometryDirection.West\n }\n }\n }\n\n return dir\n }\n\n}\n\nexport let geoutil = new GeometryUtil();","import {Vec2, Vec3, Vec4} from \"cc\";\n\nexport class MathUtil {\n version: number = 0;\n\n TempVec2 = new Vec2();\n TempVec3 = new Vec3();\n TempVec4 = new Vec4();\n\n convertVec2to3(vec2: Vec2, useTemp: boolean = false): Vec3 {\n let vec3: Vec3;\n if (useTemp) {\n vec3 = this.TempVec3;\n } else {\n vec3 = new Vec3()\n }\n vec3.x = vec2.x;\n vec3.y = vec2.y;\n return vec3;\n }\n\n convertVec3to2(vec3: Vec3, useTemp: boolean = false): Vec2 {\n let vec2: Vec2;\n if (useTemp) {\n vec2 = this.TempVec2;\n } else {\n vec2 = new Vec2()\n }\n vec2.x = vec3.x;\n vec2.y = vec3.y;\n return vec2;\n }\n\n isOdd(value:number):boolean{\n return value % 2 != 0\n }\n\n}\n\n\nexport const mathutil = new MathUtil();","export class PathUtil {\r\n\r\n getDir(path:string):string{\r\n return path.substring(0, path.lastIndexOf(\"/\"));\r\n }\r\n\r\n getRelativePath(fromPath: string, toPath: string): string {\r\n const from = fromPath.split('/');\r\n const to = toPath.split('/');\r\n\r\n // 移除共同的目录部分\r\n while (from[0] === to[0]) {\r\n from.shift();\r\n to.shift();\r\n }\r\n\r\n const relativePath = new Array(from.length).fill('..').concat(to).join('/');\r\n return relativePath;\r\n }\r\n\r\n getSamePath(fromPath: string, toPath: string): string {\r\n if (!(fromPath && toPath)) {\r\n return \"\";\r\n }\r\n this.validatePath(fromPath);\r\n this.validatePath(toPath);\r\n const from = this.splitPath(fromPath);\r\n const to = this.splitPath(toPath);\r\n\r\n let same = [];\r\n // 去掉\"/\"\r\n from.shift();\r\n to.shift();\r\n // 添加不同的目录部分\r\n while (from[0] === to[0]) {\r\n same.push(from[0]);\r\n from.shift();\r\n to.shift();\r\n }\r\n\r\n return \"/\" + same.join(\"/\");\r\n }\r\n\r\n protected validatePath(path: string) {\r\n if (!path) {\r\n throw new Error(\"path is null\");\r\n }\r\n\r\n if (path[0] != \"/\") {\r\n throw new Error(\"路径格式错误, 首字母必须为/\");\r\n }\r\n }\r\n\r\n protected splitPath(path: string): string[] {\r\n if (path == \"/\") {\r\n return [\"/\"];\r\n }\r\n let arr = path.split('/');\r\n arr[0] = \"/\";\r\n return arr;\r\n }\r\n\r\n\r\n\r\n}\r\n\r\nexport const pathutil = new PathUtil();","export class RandUtil {\r\n\r\n\r\n /**\r\n * 根据权重随机并返回其中的一个键值\r\n * // key = 键, val=权重\r\n * @param source\r\n * @return source的其中一个key\r\n */\r\n weight(source: { [key: string]: number }): string {\r\n let prev = 0;\r\n let list = [];\r\n let m = {}\r\n let max = 0\r\n let count = 0\r\n for (let k in source) {\r\n let val = source[k];\r\n let cur = prev + val;\r\n list.push(cur);\r\n m[count] = k\r\n count++\r\n\r\n prev = cur\r\n max = cur\r\n }\r\n\r\n if (max == 0) {\r\n return \"\";\r\n }\r\n let n = this.intn(max)\r\n let idx = 0\r\n for (let i = 0; i < list.length; i++) {\r\n let val = list[i];\r\n if (n <= val) {\r\n idx = i\r\n break\r\n }\r\n }\r\n\r\n return m[idx]\r\n }\r\n\r\n /**\r\n * [0, val]\r\n * @param val\r\n */\r\n intn(val: number): number {\r\n return Math.floor(Math.random() * val);\r\n }\r\n\r\n /**\r\n * [min, max)\r\n * @param min\r\n * @param max\r\n */\r\n range(min: number, max: number): number {\r\n if (max == undefined || max == 0) {\r\n return min;\r\n }\r\n let dif = max - min;\r\n // [0, 1)\r\n let r = Math.floor(Math.random() * dif);\r\n return min + r;\r\n }\r\n\r\n\r\n /**\r\n * 在arr中随机返回【count】个元素\r\n * @param arr\r\n * @param count\r\n */\r\n countOfArray(arr: any[], count: number) {\r\n let result = [];\r\n while (count > 0) {\r\n let length = arr.length;\r\n let index = this.intn(length);\r\n result.push(arr[index]);\r\n arr.splice(index, 1);\r\n count--;\r\n }\r\n return result;\r\n\r\n }\r\n\r\n}\r\n\r\nexport const randutil = new RandUtil();\r\n","import {Asset, assetManager, ImageAsset, path, Rect, Size, SpriteAtlas, SpriteFrame, Texture2D, Vec2} from \"cc\";\n\nconst BRACE_REGEX = /[\\{\\}]/g;\n\nfunction parseSize(sizeStr) {\n sizeStr = sizeStr.slice(1, -1);\n let arr = sizeStr.split(',');\n let width = parseFloat(arr[0]);\n let height = parseFloat(arr[1]);\n return new Size(width, height);\n}\n\nfunction parseVec2(vec2Str) {\n vec2Str = vec2Str.slice(1, -1);\n var arr = vec2Str.split(',');\n var x = parseFloat(arr[0]);\n var y = parseFloat(arr[1]);\n return new Vec2(x, y);\n}\n\nfunction parseTriangles(trianglesStr) {\n return trianglesStr.split(' ').map(parseFloat);\n}\n\nfunction parseVertices(verticesStr) {\n return verticesStr.split(' ').map(parseFloat);\n}\n\nfunction parseRect(rectStr) {\n rectStr = rectStr.replace(BRACE_REGEX, '');\n let arr = rectStr.split(',');\n return new Rect(\n parseFloat(arr[0] || 0),\n parseFloat(arr[1] || 0),\n parseFloat(arr[2] || 0),\n parseFloat(arr[3] || 0),\n );\n}\n\nexport function parsePlist(plist, texture) {\n let info = plist.metadata;\n let frames = plist.frames;\n\n let atlas = new SpriteAtlas();\n let spriteFrames = atlas.spriteFrames;\n\n for (let key in frames) {\n let frame = frames[key];\n let rotated = false, sourceSize, offsetStr, textureRect;\n // let trimmed = frame.trimmed;\n if (info.format === 0) {\n rotated = false;\n // trimmed = frame.trimmed;\n sourceSize = `{${frame.originalWidth},${frame.originalHeight}}`;\n offsetStr = `{${frame.offsetX},${frame.offsetY}}`;\n textureRect = `{{${frame.x},${frame.y}},{${frame.width},${frame.height}}}`;\n } else if (info.format === 1 || info.format === 2) {\n rotated = frame.rotated;\n // trimmed = frame.trimmed;\n sourceSize = frame.sourceSize;\n offsetStr = frame.offset;\n textureRect = frame.frame;\n } else if (info.format === 3) {\n rotated = frame.textureRotated;\n // trimmed = frame.trimmed;\n sourceSize = frame.spriteSourceSize;\n offsetStr = frame.spriteOffset;\n textureRect = frame.textureRect;\n }\n\n var sprite = new SpriteFrame();\n sprite.reset({\n originalSize: parseSize(sourceSize),\n rect: parseRect(textureRect),\n offset: parseVec2(offsetStr),\n isRotate: !!rotated,\n texture: texture\n });\n\n let name = path.mainFileName(key);\n spriteFrames[name] = sprite;\n }\n\n return atlas;\n}\n\n\nexport function loadAtlas(url, callback) {\n assetManager.loadRemote(url, function (err, asset: Asset) {\n if (err) {\n return callback(err);\n }\n let plist = asset._nativeAsset;\n let texture = plist.metadata.realTextureFileName || plist.metadata.textureFileName;\n texture = path.join(path.dirname(url), texture);\n assetManager.loadRemote(texture, function (err, imageAsset: ImageAsset) {\n if (err) {\n return callback(err);\n }\n let tex = new Texture2D();\n tex.image = imageAsset;\n tex.setFilters(1, 1)\n let atlasSprite = parsePlist(plist, tex);\n callback(null, atlasSprite);\n });\n });\n}\n","import {AssetManager, assetManager, resources, SpriteAtlas} from \"cc\";\r\nimport {IError, errorutil} from \"./ErrorUtil\";\r\nimport {loadAtlas} from \"./ResUtil/LoadAtlas\";\r\n\r\n\r\nclass ResUtil {\r\n loadResource(path: string): Promise<[any, IError]> {\r\n return new Promise((resolve, reject) => {\r\n resources.load(path, (err, res) => {\r\n if (!err) {\r\n resolve([res, null]);\r\n } else {\r\n resolve([null, errorutil.create(\"load resources\" + err)])\r\n }\r\n })\r\n })\r\n }\r\n\r\n preloadResource(path: string): Promise<[any, IError]> {\r\n return new Promise((resolve, reject) => {\r\n resources.preload(path, (err, res) => {\r\n if (!err) {\r\n resolve([res, null]);\r\n } else {\r\n resolve([null, errorutil.create(\"load resources\" + err)])\r\n }\r\n })\r\n })\r\n }\r\n\r\n\r\n loadBubble(bundle: string): Promise<[AssetManager.Bundle, IError]> {\r\n return new Promise((resolve, reject) => {\r\n assetManager.loadBundle(bundle, (err, res) => {\r\n if (!err) {\r\n resolve([res, null]);\r\n } else {\r\n resolve([null, errorutil.create(\"load bubble\" + err)])\r\n }\r\n })\r\n })\r\n }\r\n\r\n loadBubbleItem(bubble: AssetManager.Bundle, path: string, type: any): Promise<[any, IError]> {\r\n return new Promise((resolve, reject) => {\r\n bubble.load(path, type, (err, res) => {\r\n if (!err) {\r\n resolve([res, null]);\r\n } else {\r\n resolve([null, errorutil.create(\"load bubble item\" + err)])\r\n }\r\n })\r\n })\r\n }\r\n\r\n loadAtlas(path: string): Promise<[SpriteAtlas, IError]> {\r\n return new Promise((resolve, reject) => {\r\n loadAtlas(path, (err, res) => {\r\n if (!err) {\r\n resolve([res, null]);\r\n } else {\r\n resolve([null, errorutil.create(\"load atlas\" + err)])\r\n }\r\n })\r\n })\r\n }\r\n\r\n getByPath(path: string, type: any): any {\r\n let [bundleName, key] = path.split(\" \");\r\n if (bundleName == \"\") {\r\n bundleName = \"resource\"\r\n }\r\n let bundle = assetManager.getBundle(bundleName);\r\n if (!bundle) {\r\n return null;\r\n }\r\n let asset = bundle.get(key, type);\r\n if (!asset) {\r\n return null;\r\n }\r\n return asset;\r\n }\r\n\r\n loadByPath(path: string, type: any): Promise<[any, IError]> {\r\n let [bundleName, key] = path.split(\" \");\r\n if (bundleName == \"\") {\r\n bundleName = \"resource\"\r\n }\r\n return new Promise((resolve, reject) => {\r\n let f = resolve;\r\n let bundle = assetManager.getBundle(bundleName);\r\n if (!bundle) {\r\n assetManager.loadBundle(bundleName, type, (err, bundle) => {\r\n if (!err) {\r\n bundle.load(key, (err, res) => {\r\n if (!err) {\r\n f([res, null]);\r\n } else {\r\n f([null, errorutil.create(\"load bubble item\" + err)])\r\n }\r\n })\r\n } else {\r\n f([null, errorutil.create(\"load bubble\" + err)])\r\n }\r\n })\r\n } else {\r\n let asset = bundle.get(key, type);\r\n if (!asset) {\r\n bundle.load(key, (err, asset) => {\r\n if (!err) {\r\n f([asset, null]);\r\n } else {\r\n f([null, errorutil.create(\"load bubble item\" + err)])\r\n }\r\n })\r\n } else {\r\n f([asset, null]);\r\n }\r\n }\r\n })\r\n }\r\n\r\n loadByPathCallback(path: string, type: any, callback: (any, error) => void) {\r\n let [bundleName, key] = path.split(\" \");\r\n if (bundleName == \"\") {\r\n bundleName = \"resource\"\r\n }\r\n let bundle = assetManager.getBundle(bundleName);\r\n if (!bundle) {\r\n assetManager.loadBundle(bundleName, type, (err, bundle) => {\r\n if (!err) {\r\n bundle.load(key, (err, res) => {\r\n if (!err) {\r\n callback(res, null);\r\n } else {\r\n callback(null, errorutil.create(\"load bubble item\" + err))\r\n }\r\n })\r\n } else {\r\n callback(null, errorutil.create(\"load bubble\" + err))\r\n }\r\n })\r\n } else {\r\n let asset = bundle.get(key, type);\r\n if (!asset) {\r\n bundle.load(key, (err, asset) => {\r\n if (!err) {\r\n callback(asset, null);\r\n } else {\r\n callback(null, errorutil.create(\"load bubble item\" + err))\r\n }\r\n })\r\n } else {\r\n callback(asset, null);\r\n }\r\n }\r\n }\r\n}\r\n\r\nexport var resutil = new ResUtil();","import { maputil } from \"./MapUtil\";\nimport { arrayutil } from \"./ArrayUtil\";\n\nexport class StringUtil {\n lowerFirst(key: string): string {\n if (key.length === 0) {\n return\n }\n let first = key.charAt(0).toLowerCase();\n // @ts-ignore\n return first + key.substring(1);\n }\n\n upperFirst(key: string): string {\n if (key.length === 0) {\n return\n }\n let first = key.charAt(0).toUpperCase();\n // @ts-ignore\n return first + key.substring(1);\n }\n\n cjkEncode(text: any) {\n if (text === null) {\n return \"\";\n }\n let newText = \"\";\n for (let i = 0; i < text.length; i++) {\n let code = text.charCodeAt(i);\n if (code >= 128 || code === 91 || code === 93) {\n // 91 is \"[\", 93 is \"]\".     \n newText += \"[\" + code.toString(16) + \"]\";\n } else {\n newText += text.charAt(i);\n }\n }\n return newText;\n }\n\n replaceFormat(format: string, source: any): string {\n let reg: RegExp = /\\$\\{([\\w\\.]+)}/g;\n\n let result = format;\n while (true) {\n let arr = reg.exec(format);\n if (reg.lastIndex === 0) {\n break;\n }\n\n let all = arr[0];\n let key = arr[1];\n let val = source[key];\n result = result.replace(all, val);\n }\n return result;\n }\n\n\n\n /**\n *\n * @param format\n * @param source\n */\n evalFormat(format: string, source: any): string {\n if (!source) {\n return \"\";\n }\n if (maputil.keys(source).length === 0) {\n return \"\";\n }\n\n let result = format;\n let params = [];\n let reg: RegExp = /\\$\\{([一-龥A-Za-z0-9_]+)}/g;\n while (true) {\n let arr = reg.exec(format);\n if (reg.lastIndex === 0) {\n break;\n }\n\n let code = arr[0];\n let codereg = /([一-龥A-Za-z0-9_]+)/g;\n while (true) {\n let codeexec = codereg.exec(code);\n if (codereg.lastIndex === 0) {\n break;\n }\n let pname = codeexec[0];\n params.push(pname)\n }\n }\n params = arrayutil.unique(params)\n\n try {\n let funcstr = \"\";\n for (let pname of params) {\n if (source.hasOwnProperty(pname)) {\n funcstr += `let ${pname} = this.${pname}\\n`;\n } else {\n funcstr += `let ${pname} = \"\"\\n`;\n }\n }\n funcstr += `return \\`${format}\\``;\n result = new Function(funcstr).call(source);\n } catch (e) {\n\n }\n\n return result\n }\n\n /**\n * 使用[separator]分割字符串,并替换掉在[index]位置的字符串\n * 如果没有发生变化,返回原来的值\n * @param val \n * @param separator \n * @param index \n * @param replace \n * @returns \n */\n replaceIndex(val: string, separator: string, index: number, replace: string = \"\"): string {\n let arr = val.split(separator);\n if (arr.length > index) {\n arr[index] = replace;\n return arr.join(separator); \n }\n return val;\n }\n\n\n splitIndex(val: string, separator: string, index: number, dflt: string = \"\"): string {\n let arr = val.split(separator);\n if (arr.length > index) {\n return arr[index]\n }\n return dflt;\n }\n\n\n splitFirst(val: string, separator: string, dflt: string = \"\"): string {\n let arr = val.split(separator);\n if (arr.length > 0) {\n return arr[0]\n }\n return dflt;\n }\n\n\n splitLast(val: string, separator: string, dflt: string = \"\"): string {\n let arr = val.split(separator);\n if (arr.length > 0) {\n return arr[arr.length - 1]\n }\n return dflt;\n }\n\n /**\n * 从最后一个分隔符截断字符串,返回截断的左右字符串\n * @param val\n * @param separator\n */\n splitLastArray(val: string, separator: string): [string, string] {\n let arr = val.split(separator);\n if (arr.length > 0) {\n let pop = arr.pop();\n return [arr.join(separator), pop]\n }\n return [val, \"\"];\n }\n\n /**\n * 截断字符串\n * @param val\n * @param separator\n * @return [最终的字符串, 被截断的字符串]\n */\n truncateLast(val: string, separator: string): [string, string] {\n let arr = val.split(separator);\n if (arr.length > 0) {\n let s = arr.pop();\n let r = arr.join(separator);\n if (r == \"\") {\n r = \"/\"\n }\n return [r, s];\n }\n return [val, \"\"];\n }\n\n\n fill(str: string, char: string, length: number) {\n while (str.length < length) {\n str = char + str;\n }\n return str;\n }\n}\n\n\nexport const stringutil = new StringUtil();\n","export class TimeUtil {\n\n\n sleep(time: number): Promise<void> {\n return new Promise<void>(function (resolve, reject) {\n setTimeout(() => {\n resolve();\n }, time);\n });\n }\n //\n //\n // export async function Wait(dispatcher: Laya.EventDispatcher, evt: string, timeout: number = -1): Promise<any> {\n // let self = dispatcher;\n // let p = new Promise(\n // function (resolve, reject) {\n // let f = () => {\n // self.off(evt, self, f);\n // Laya.timer.clear(self, f);\n // resolve(\"ok\" + evt);\n // };\n // self.on(evt.toString(), self, f);\n //\n // if (timeout > 0) {\n // let t = () => {\n // self.off(evt, self, f);\n // resolve(\"timeout\" + evt);\n // };\n // Laya.timer.once(2000, self, t)\n // }\n // }\n // );\n // return p;\n // }\n\n /**\n * @param {Number} timeStamp eg:1551323702241\n * @param {String} formatter eg:yyyy-MM-dd yyyy/MM/dd yyyy-M-d yyyy/M/d yyyy-MM-dd hh:mm:ss\n * */\n format(timeStamp: number, formatter: string): string {\n let date = new Date(timeStamp);\n let obj = {\n \"y+\": date.getFullYear(),\n \"M+\": date.getMonth() + 1,\n \"d+\": date.getDate(),\n \"h+\": date.getHours(),\n \"m+\": date.getMinutes(),\n \"s+\": date.getSeconds()\n };\n for (let item in obj) {\n if (new RegExp(\"(\" + item + \")\").test(formatter)) {\n formatter = formatter.replace(RegExp.$1, (RegExp.$1.length > 1 ? this.handleDouble(obj[item]) : obj[item]))\n }\n }\n return formatter\n }\n\n /**\n * @param {Number,String} para\n * @return {String,Number}\n * */\n protected handleDouble(para) {\n return (\"\" + para).length > 1 ? \"\" + para : \"0\" + para\n }\n\n // format= \"hh:mm:ss\"\n formatLeave(time: number, formatter: string): string {\n time = time * 1000;\n let obj = {};\n if (time >= 0) {\n obj = {\n \"d+\": Math.floor(time / (1000 * 60 * 60 * 24)),\n \"H+\": Math.floor(time / (1000 * 60 * 60)),\n \"h+\": Math.floor((time % (1000 * 60 * 60 * 24)) / (1000 * 60 * 60)),\n \"m+\": Math.floor((time % (1000 * 60 * 60)) / (1000 * 60)),\n \"s+\": Math.floor((time % (1000 * 60)) / 1000)\n };\n } else {\n obj = {\n \"d+\": 0,\n \"H+\": 0,\n \"h+\": 0,\n \"m+\": 0,\n \"s+\": 0\n };\n }\n\n for (let item in obj) {\n if (new RegExp(\"(\" + item + \")\").test(formatter)) {\n formatter = formatter.replace(RegExp.$1, (RegExp.$1.length > 1 ? this.handleDouble(obj[item]) : obj[item]))\n }\n }\n\n return formatter\n }\n\n\n\n}\n\nexport const timeutil = new TimeUtil();\n\n","import { TreeRoot } from \"../ds\";\n\nexport class TreeUtil {\n /**\n * 保存指定标签[tag]的值等于[value]的节点\n * @param root\n * @param key 存储的键\n * @param tag\n * @param value\n */\n saveTagToLocalStorage(root: TreeRoot, key: string, tag: string, value: any) {\n let list = [];\n root.walk((node) => {\n let tagValue = node.getTag(tag);\n if (tagValue === value) {\n list.push(node.getPath())\n }\n return true;\n });\n localStorage.setItem(key, JSON.stringify(list))\n }\n\n /**\n * 从ls中加载指定标签[tag]的值还原到[root]。\n * 返回localStorage是否存在键值\n * @param root\n * @param key\n * @param tag\n * @param value\n */\n loadTagFromLocalStorage(root: TreeRoot, key: string, tag: string, value: any): boolean {\n let lsValue = localStorage.getItem(key);\n let expandeds = [];\n if (lsValue) {\n expandeds = JSON.parse(lsValue);\n for (const path of expandeds) {\n let node = root.getNodeByPath(path);\n if (node) {\n node.setTag(tag, value);\n }\n }\n return true;\n }\n return false;\n }\n}\n\nexport var treeutil = new TreeUtil()","import {Node, UITransform, Vec2, Vec3} from \"cc\";\r\n\r\nexport class UIUtil {\r\n /**\r\n * 格式化节点的uuid,用于树结构\r\n * 树结构的路径的反斜杠与uuid有冲突\r\n * @param uuid\r\n */\r\n formatUUIDForTree(uuid: string): string {\r\n return uuid.replace(\"\\/\", \"_\")\r\n }\r\n\r\n /**\r\n * x, y 使用 鼠标点击事件产生的 event.getLocation()坐标\r\n * @param target\r\n * @param x\r\n * @param y\r\n */\r\n hitTest(target: Node, x: number, y: number) {\r\n let node = target;\r\n let parent = node.parent;\r\n if (!parent) {\r\n return false;\r\n }\r\n let transform = node.getComponent(UITransform);\r\n if (!transform) {\r\n return false;\r\n }\r\n let rect = transform.getBoundingBox();\r\n let parentUITransform = parent.getComponent(UITransform);\r\n\r\n hitTestVec3.x = x;\r\n hitTestVec3.y = y;\r\n\r\n parentUITransform.convertToNodeSpaceAR(hitTestVec3, hitTestVec3);\r\n hitTestVec2.x = hitTestVec3.x\r\n hitTestVec2.y = hitTestVec3.y;\r\n\r\n if (rect.contains(hitTestVec2)) {\r\n return true;\r\n }\r\n }\r\n\r\n findNode(node: Node, name: string): Node {\r\n let result = null;\r\n\r\n this.walk(node, (target) => {\r\n if (target.name == name) {\r\n result = target;\r\n return false;\r\n }\r\n return true;\r\n })\r\n\r\n\r\n return result;\r\n\r\n }\r\n\r\n walk(node: Node, f: (target: Node) => boolean) {\r\n this._walk(node, f)\r\n }\r\n\r\n _walk(node: Node, f: (target: Node) => boolean): boolean {\r\n if (!f(node)) {\r\n return false\r\n }\r\n\r\n for (let i = 0; i < node.children.length; i++) {\r\n let child = node.children[i]\r\n if (!this._walk(child, f)) {\r\n return false;\r\n }\r\n }\r\n\r\n return true;\r\n }\r\n\r\n\r\n}\r\n\r\nconst hitTestVec2 = new Vec2();\r\nconst hitTestVec3 = new Vec3();\r\n\r\nexport const uiutil = new UIUtil();","import {math, Node, UITransform, Widget} from \"cc\";\nimport { camerautil } from \"./CameraUtil\";\n\nexport class WidgetAlign {\n\n protected nodeWidget: Widget;\n protected parentTransform: UITransform;\n protected targetTransform: UITransform;\n protected uipos: math.Vec3;\n\n constructor(public node: Node, public targetNode: Node) {\n this.nodeWidget = node.getComponent(Widget);\n this.parentTransform = node.parent.getComponent(UITransform);\n this.targetTransform = targetNode.getComponent(UITransform);\n this.uipos = camerautil.getUICamera().convertToUINode(targetNode.getWorldPosition(), node.parent);\n }\n\n topTop(distance: number = 0) {\n let widget = this.nodeWidget;\n let targetTransform = this.targetTransform;\n let parentTransform = this.parentTransform;\n let uipos = this.uipos;\n //\n widget.isAlignTop = true;\n widget.top = -(targetTransform.height * targetTransform.anchorY) + (parentTransform.height * parentTransform.anchorY) - uipos.y;\n widget.top -= distance;\n }\n\n topBottom(distance: number = 0) {\n let widget = this.nodeWidget;\n let targetTransform = this.targetTransform;\n let parentTransform = this.parentTransform;\n let uipos = this.uipos;\n //\n widget.isAlignTop = true;\n widget.top = (targetTransform.height * targetTransform.anchorY) + (parentTransform.height * parentTransform.anchorY) - uipos.y;\n widget.top -= distance;\n }\n\n\n leftleft(distance: number = 0) {\n let widget = this.nodeWidget;\n let targetTransform = this.targetTransform;\n let parentTransform = this.parentTransform;\n let uipos = this.uipos;\n //\n widget.isAlignLeft = true;\n widget.left = uipos.x - (targetTransform.width * targetTransform.anchorX) + (parentTransform.width * parentTransform.anchorX);\n widget.left += distance;\n }\n\n leftRight(distance: number = 0) {\n let widget = this.nodeWidget;\n let targetTransform = this.targetTransform;\n let parentTransform = this.parentTransform;\n let uipos = this.uipos;\n //\n widget.isAlignLeft = true;\n widget.left = uipos.x + (targetTransform.width * targetTransform.anchorX) + (parentTransform.width * parentTransform.anchorX);\n widget.left += distance;\n }\n}\n\nexport class WidgetUtil {\n /**\n * 与目标顶对齐\n * @param node 需要修改的节点\n * @param parent 对齐的父节点\n * @param distance\n */\n alignTop(node: Node, parent: Node, distance: number = 0) {\n let parentTransform = parent.getComponent(UITransform);\n let topNode = parentTransform.height * (1 - parentTransform.anchorY);// node原点在parent的顶点坐标\n\n let nodeTransform = node.getComponent(UITransform);\n let diffNode = Math.abs(-nodeTransform.height * (1 - nodeTransform.anchorY));// node原点与顶点的偏移量\n\n let pos = node.getPosition();\n pos.y = Math.round(topNode + distance - diffNode);\n node.setPosition(pos);\n }\n\n /**\n * 与目标顶对齐,node和target都必须在渲染树中\n * @param node 需要修改的节点\n * @param target 对齐目标\n * @param distance\n */\n alignTopWorld(node: Node, target: Node, distance: number = 0) {\n let targetTransform = target.getComponent(UITransform)\n let nodeTransform = node.getComponent(UITransform);\n\n let targetPos = target.getWorldPosition();\n let nodePos = node.getWorldPosition();\n\n let topTarget = -targetTransform.height * (1 - targetTransform.anchorY);\n let topNode = -nodeTransform.height * (1 - nodeTransform.anchorY);\n nodePos.y = targetPos.y - Math.round(topTarget - topNode + distance);\n node.setWorldPosition(nodePos);\n }\n\n /**\n * 与目标顶对齐,node和target都必须在渲染树中\n * @param node 需要修改的节点\n * @param target 对齐目标\n * @param distance\n */\n alignBottomWorld(node: Node, target: Node, distance: number = 0) {\n let targetTransform = target.getComponent(UITransform)\n let nodeTransform = node.getComponent(UITransform);\n\n let targetPos = target.getWorldPosition();\n let nodePos = node.getWorldPosition();\n\n let heifhtTarget = targetTransform.height * (1 - targetTransform.anchorY);\n let heightNode = nodeTransform.height * (1 - nodeTransform.anchorY);\n nodePos.y = targetPos.y - Math.round(heifhtTarget + heightNode + distance);\n node.setWorldPosition(nodePos);\n }\n\n /**\n * 调整【node】的widget,对齐【targetNode】\n * @param node\n * @param targetNode\n */\n align(node: Node, targetNode: Node): WidgetAlign {\n return new WidgetAlign(node, targetNode);\n }\n\n\n /**\n * 与目标右对齐\n * @param node 需要修改的节点\n * @param parent 对齐的父节点\n * @param distance\n */\n alignLeft(node: Node, parent: Node, distance: number = 0) {\n let parentTransform = parent.getComponent(UITransform);\n let leftNode = -parentTransform.width * parentTransform.anchorX;// node原点在parent的left坐标\n\n let nodeTransform = node.getComponent(UITransform);\n let diffNode = Math.abs(-nodeTransform.width * nodeTransform.anchorX);// node原点与顶点的偏移量\n\n // let xDif = nodeTransform.width * (0.5 - nodeTransform.anchorX);\n let pos = node.getPosition();\n pos.x = Math.round(leftNode + distance + diffNode);\n node.setPosition(pos);\n }\n\n\n /**\n * 与目标右对齐\n * @param node 需要修改的节点\n * @param target 对齐目标\n * @param distance\n */\n alignLeftWorld(node: Node, target: Node, distance: number = 0) {\n let targetTransform = target.getComponent(UITransform)\n let nodeTransform = node.getComponent(UITransform);\n\n let targetPos = target.getWorldPosition();\n let nodePos = node.getWorldPosition();\n\n let leftTarget = -targetTransform.width * (1 - targetTransform.anchorX);\n let leftNode = -nodeTransform.width * (1 - nodeTransform.anchorX);\n\n nodePos.x = targetPos.x + Math.round(leftTarget - leftNode + distance);\n node.setWorldPosition(nodePos);\n }\n}\n\nexport var widgetutil = new WidgetUtil();"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.esm.js","sources":["../src/libs/utils/NetUtil.ts","../src/libs/utils/ErrorUtil.ts","../src/libs/ui/uimgr.ts","../src/libs/timer/Timer.ts","../src/libs/event/EventItem.ts","../src/libs/event/XEvent.ts","../src/libs/log/Logger.ts","../src/libs/log/LogManager.ts","../src/libs/pool/PoolSet.ts","../src/libs/event/EventDispatcher.ts","../src/libs/utils/ConvertUtil.ts","../src/libs/utils/MapUtil.ts","../src/libs/utils/ScaleUtil.ts","../src/libs/utils/IdentUtil.ts","../src/libs/ds/TreeSource.ts","../src/libs/ds/ListSource.ts","../src/libs/ds/Dictionary.ts","../src/libs/ds/DictSource.ts","../src/libs/ds/List.ts","../src/libs/frame/Controller.ts","../src/libs/mvc/Model.ts","../src/libs/mvc/Factory.ts","../src/libs/frame/Route.ts","../src/libs/frame/RouteController.ts","../src/libs/frame/UIObjectDict.ts","../src/libs/frame/ViewRepo.ts","../src/libs/frame/RouteView.ts","../src/libs/frame/ViewHistory.ts","../src/libs/event/Listener.ts","../src/libs/event/CallbackList.ts","../src/libs/event/Dispatcher.ts","../src/libs/event/SampleCallbackList.ts","../src/libs/loader/ParseAtlas.ts","../src/libs/loader/AssetManager.ts","../src/libs/loader/AssetLoader.ts","../src/libs/utils/ArrayUtil.ts","../src/libs/utils/BitUtil.ts","../src/libs/utils/CavansUtil.ts","../src/libs/utils/CameraUtil.ts","../src/libs/utils/DocUtil.ts","../src/libs/utils/Eventutil.ts","../src/libs/utils/float-util.ts","../src/libs/utils/format-util.ts","../src/libs/utils/GeometryUtil.ts","../src/libs/utils/MathUtil.ts","../src/libs/utils/PathUtil.ts","../src/libs/utils/RandUtil.ts","../src/libs/utils/ResUtil/LoadAtlas.ts","../src/libs/utils/ResUtil.ts","../src/libs/utils/StringUtil.ts","../src/libs/utils/TimeUtil.ts","../src/libs/utils/TreeUtil.ts","../src/libs/utils/UIUtil.ts","../src/libs/utils/WidgetUtil.ts"],"sourcesContent":["export class NetUtil {\n // 获取URL的参数对象\n decodeLocationSearch(search: string): any {\n if (!search) {\n return {}\n }\n if (search[0] == \"/\") {\n search = search.substring(1);\n }\n //1.将?替换为空\n search = search.replace(/^\\?/, \"\");\n //2.以&符号拆分\n let params = search.split(\"&\");\n if (params.length === 1 && params[0] === \"\") {\n return \"null\"\n }\n //3.创建一个json变量\n let json: any = {};\n //4.遍历这个拆分后的数组\n for (let i = 0; i < params.length; i++) {\n //5.url[i]是当前数据,把当前数据再以=拆分的到一个数组,数组的第一个元素就是属性名,第二个就是属性值\n var cur = params[i].split(\"=\");\n //6.将数组中的第一个元素作为json的属性名,,第二个作为属性值\n json[cur[0]] = cur[1];\n }\n return json;\n }\n\n encodeLocationSearch(params: any, firstChat: \"\" | \"?\" | \"&\" = \"?\"): string {\n let arr = [];\n for (let key in params) {\n arr.push(key + \"=\" + params[key])\n }\n if (arr.length > 0) {\n return firstChat + arr.join(\"&\")\n }\n return \"\";\n }\n\n // 获取当前页面的url信息\n getLocation(): Location {\n return window.location;\n }\n\n /**\n * 获取Loation的参数\n */\n getLocationParams(): any {\n return this.decodeLocationSearch(this.getLocation().search);\n }\n\n}\n\nexport const netutil = new NetUtil()\n","import { netutil } from \"./NetUtil\";\r\n\r\nexport interface IError {\r\n isCancel(): boolean\r\n\r\n is(ident: string): boolean\r\n\r\n toString(): string\r\n\r\n has(ident: string): boolean\r\n}\r\n\r\n/**\r\n * 链式错误\r\n * err1 <argA=val&argB=val>\r\n */\r\nexport class LinkError implements IError {\r\n next: LinkError;\r\n ident: string;\r\n args: { [key: string]: any };\r\n\r\n /**\r\n * 判断当前错误是否 cancel 错误\r\n */\r\n public isCancel(): boolean {\r\n return this.is(\"cancel\")\r\n }\r\n\r\n /**\r\n * 当前的错误编号是否与指定的错误编号一致\r\n * @param ident\r\n */\r\n public is(ident: string): boolean {\r\n return this.ident === ident;\r\n }\r\n\r\n /**\r\n * 错误链中是否包含有 指定的错误编号\r\n * @param ident\r\n */\r\n public has(ident: string): boolean {\r\n if (this.ident === ident) {\r\n return true\r\n }\r\n\r\n return this.next.has(ident);\r\n }\r\n\r\n public toString(): string {\r\n let arr = [];\r\n for (let key in this.args) {\r\n arr.push(`${key}=${this.args[key] ? this.args[key] : \"null\"}`);\r\n }\r\n let msg = `${this.ident}`;\r\n if (arr.length > 0) {\r\n msg += `?${arr.join(\"&\")}`\r\n }\r\n if (this.next) {\r\n msg += \": \" + this.next.toString();\r\n }\r\n return msg;\r\n }\r\n}\r\n\r\nexport class ErrorUtil {\r\n\r\n parse(errString: string): LinkError {\r\n let errArr = errString.split(\": \");\r\n let cur: LinkError;\r\n let first: LinkError;\r\n for (let i = 0; i < errArr.length; i++) {\r\n let errStr = errArr[i];\r\n let errItems = errStr.split(\"?\");\r\n let err = new LinkError();\r\n err.ident = errItems[0];\r\n if (errItems.length > 1) {\r\n err.args = netutil.decodeLocationSearch(errItems[1])\r\n }\r\n if (cur) {\r\n cur.next = err;\r\n } else {\r\n first = err;\r\n }\r\n\r\n cur = err;\r\n }\r\n return first;\r\n }\r\n\r\n\r\n create(ident: string, args: { [key: string]: any; } = null): LinkError {\r\n let obj = new LinkError();\r\n obj.ident = ident;\r\n obj.args = args\r\n return obj;\r\n }\r\n\r\n warp(err: LinkError, ident, args: { [key: string]: any; } = null): LinkError {\r\n let obj = new LinkError();\r\n obj.next = err;\r\n obj.ident = ident;\r\n obj.args = args\r\n return obj;\r\n }\r\n\r\n to(err: IError): LinkError {\r\n if (err instanceof LinkError) {\r\n return err;\r\n }\r\n\r\n\r\n if (typeof err === \"string\") {\r\n return this.create(err);\r\n }\r\n\r\n throw \"convert to LinkError failed\"\r\n\r\n }\r\n}\r\n\r\n\r\nexport const errorutil = new ErrorUtil();","/**\n * 单例的UI对象\n */\nimport {HorizontalTextAlignment, VerticalTextAlignment} from \"cc\";\nimport {IError, errorutil} from \"../utils/ErrorUtil\";\n\n\ninterface IUIObject {\n x: number;\n y: number;\n z: number;\n width: number;\n height: number;\n}\n\nexport class UISingleConfig {\n /**\n * 创建函数\n */\n public creator: () => any;\n\n /**\n * 指定键值\n * 可通过键值获得 ui对象\n */\n public name: string;\n\n\n constructor({\n name,\n creator,\n }: { name: string, creator: () => any }) {\n this.name = name;\n this.creator = creator;\n }\n}\n\n/**\n * 单例的UI对象\n */\nexport class UIPoolConfig {\n /**\n * 创建函数\n * 对象需要实现recycle方法\n */\n public creator: () => any;\n\n /**\n * 指定键值\n * 可通过键值获得 ui对象\n */\n public name: string;\n\n /**\n * 过期帧数,默认为永不过期(0)\n */\n public expired: number = 0;\n\n\n constructor({\n name,\n creator,\n expired = 0,\n }: { name: string, expired?: number, creator: () => any }) {\n this.name = name;\n this.creator = creator;\n this.expired = expired;\n }\n}\n\n/**\n * UI对象的缓存管理器,自动管理UI对象的创建和销毁\n * 为了避免页面中的组件经常创建和销毁,可使用此对象管理\n * 例如各种面板,背包栏等,不想每次关闭页面都重新创建对象,影响操作流畅性。在内存足够的情况下,交由 UIManager 管理。\n * 另外可以使用UI管理器中的对象池\n * 对于不需要管理的对象,直接在页面中创建,释放/等待垃圾回收\n *\n * 需要注册\n */\nexport class UIManager {\n /**\n * ui单例对象缓存数量的最大值\n */\n public singleObjectMax: number = 0;\n\n protected singleObjs: any = {};\n protected singleList = [];\n protected singleCounts: any = {};\n protected singleConfigs: any = {};\n\n protected pools: any = {};\n protected poolConfig: any = {};\n\n constructor() {\n }\n\n /**\n * 注册一个ui对象配置\n * @param config\n */\n registerPool(config: UIPoolConfig) {\n this.poolConfig[config.name] = config;\n }\n\n /**\n * 获取UI对象池中的一个对象\n * @param key\n */\n getPoolObject(key: string): [any, IError] {\n let config: UIPoolConfig = this.poolConfig[key];\n let p: any[] = this.pools[key];\n if (!p) {\n p = [];\n this.pools[key] = p;\n }\n if (p.length === 0) {\n let obj: any;\n try {\n obj = config.creator();\n } catch (e) {\n if (e instanceof Error) {\n e.message = \"get single ui object: \" + e.message;\n console.error(e.stack);\n }\n\n return [null, errorutil.create(`creator error`, {key: key})]\n }\n\n return [obj, null];\n }\n return [p.pop(), null];\n }\n\n /**\n * 返回UI到对象池中\n * @param key\n * @param obj\n */\n backPoolObject(key: string, obj: any) {\n let config: UIPoolConfig = this.poolConfig[key];\n let p: any[] = this.pools[key];\n if (!p) {\n p = [];\n this.pools[key] = p;\n }\n\n if (obj[\"recycle\"]) {\n obj.recycle();\n }\n p.push(obj);\n }\n\n /**\n * 注册一个ui对象配置\n * @param config\n */\n registerSingle(config: UISingleConfig) {\n this.singleConfigs[config.name] = config;\n }\n\n /**\n * 获取单例的UI对象\n * 引用计数+1\n * @param key\n */\n getSingle(key: string): [any, IError] {\n let obj = this.singleObjs[key];\n if (!obj) {\n let config = this.singleConfigs[key]\n if (!config) {\n return [null, errorutil.create(`config not found`, {key: key})]\n }\n try {\n obj = config.creator();\n } catch (e) {\n if (e instanceof Error) {\n e.message = \"get single ui object: \" + e.message;\n console.error(e.stack);\n }\n\n return [null, errorutil.create(`creator error`, {key: key})]\n }\n\n if (!obj) {\n return [null, errorutil.create(`creator return null`, {key: key})];\n }\n\n this.singleObjs[key] = obj;\n this.addCleanList(key);\n }\n this.mark(key);\n return [obj, null];\n }\n\n /**\n * 返还UI对象\n * 引用计数-1,当引用计数等于0时,放入待清理列表\n * @param key\n */\n backSingle(key: string) {\n this.unmark(key);\n }\n\n private mark(key: string) {\n this.singleCounts[key]++;\n let idx = this.singleList.indexOf(key);\n if (idx !== -1) {\n this.singleList.splice(idx, 1);\n }\n }\n\n private unmark(key: string) {\n this.singleCounts[key]--;\n if (this.singleCounts[key] === 0) {\n this.addCleanList(key);\n }\n }\n\n private clean(key: string) {\n this.singleCounts[key] = 0;\n this.addCleanList(key);\n }\n\n protected addCleanList(key: string) {\n this.singleList.push(key);\n // 每次创建对象后,都清理一下缓存\n let self = this;\n setTimeout(() => {\n self.cleanObjects();\n })\n }\n\n protected cleanObjects() {\n if (this.singleList.length > this.singleObjectMax) {\n let count = this.singleList.length - this.singleObjectMax;\n for (let i = 0; i < count; i++) {\n let key = this.singleList.shift();\n delete this.singleObjs[key];\n delete this.singleCounts[key];\n }\n }\n }\n\n public showTips(msg: string) {\n\n }\n\n // 以b为基准,调整a的位置\n alignObject(alignment: HorizontalTextAlignment, a: IUIObject, b: IUIObject, offset: number = 0) {\n let type: number = alignment;\n switch (type) {\n case HorizontalTextAlignment.CENTER:\n a.x = b.x + (b.width - a.width) * 0.5;\n break;\n case HorizontalTextAlignment.LEFT:\n a.x = b.x;\n break;\n case HorizontalTextAlignment.RIGHT:\n a.x = b.x + (b.width - a.width);\n break;\n default:\n }\n a.x += offset;\n }\n\n // 以b为基准,调整a的位置\n alignVertObject(alignment: VerticalTextAlignment, a: IUIObject, b: IUIObject, offset: number = 0) {\n let type: number = alignment;\n switch (type) {\n case VerticalTextAlignment.TOP:\n a.y = b.y;\n break;\n case VerticalTextAlignment.CENTER:\n a.y = b.y + (b.height - a.height) * 0.5;\n break;\n case VerticalTextAlignment.BOTTOM:\n a.y = b.y + (b.height - a.height);\n break;\n default:\n }\n\n a.y += offset;\n }\n\n // /**\n // * 打开对话框\n // * @param route\n // */\n // async openDialog(route: Route) {\n // let pagekey = route.path;\n // let config = this.configs[pagekey];\n // if (!config) {\n // console.error(\"open dialog: page config not found: \" + pagekey)\n // return;\n // }\n // if (config.refClass === null) {\n // console.error(\"open dialog: ref not found: \" + pagekey)\n // return;\n // }\n //\n // let page = new config.refClass();\n // page[\"_route\"] = route;\n // page[\"_config\"] = config;\n // this.dialogs.push(page);\n // return this._open(page)\n // }\n // getDialogsByKey(route: Route): IPage[] {\n // return this.getDialogs((page: IPage) => {\n // return page.route.key === route.key;\n // })\n // }\n //\n // getDialogsByPath(route: Route): IPage[] {\n // return this.getDialogs((page: IPage) => {\n // return page.route.path === route.path;\n // })\n // }\n //\n // getDialogs(filter: (page: IPage) => boolean): IPage[] {\n // let r = [];\n // for (let val of this.dialogs) {\n // if (filter(val)) {\n // r.push(val);\n // }\n // }\n //\n // return r;\n // }\n //\n // stopDialog(page: IPage, reason: string = \"\") {\n // let idx = this.dialogs.indexOf(page);\n // if (idx === -1) {\n // console.warn(\"stop dialog: not found\")\n // return;\n // }\n // this._stop(page, reason);\n // }\n\n}\n\nexport var uimgr = new UIManager();\n","import {director, macro, Scheduler} from \"cc\";\n\nexport class Timer {\n get scheduler(): Scheduler {\n return this._scheduler;\n }\n\n private _scheduler: Scheduler;\n\n constructor() {\n this._scheduler = director.getScheduler();\n }\n\n /**\n * 定时执行一次。\n * @param delay 延迟时间(单位为毫秒)。\n * @param caller 执行域(this)。\n * @param method 定时器回调函数。\n */\n once(delay: number, caller: any, method: (dt?: number) => void): void {\n this._scheduler.schedule(method, caller, delay / 1000, 0, 0, false);\n }\n\n /**\n * 定时重复执行。\n * @param delay 间隔时间(单位毫秒)。\n * @param caller 执行域(this)。\n * @param method 定时器回调函数。\n */\n loop(delay: number, caller: any, method: (dt?: number) => void): void {\n this._scheduler.schedule(method, caller, delay / 1000, macro.REPEAT_FOREVER, 0, false);\n }\n\n /**\n * 清理定时器。\n * @param caller 执行域(this)。\n * @param method 定时器回调函数。\n */\n clear(caller: any, method: Function): void {\n this._scheduler.unschedule(method, caller);\n }\n\n\n /**\n * 清理对象身上的所有定时器。\n * @param caller 执行域(this)。\n */\n clearAll(caller: any): void {\n this._scheduler.unscheduleAllForTarget(caller);\n }\n\n\n /**\n * 延迟执行。\n * @param caller 执行域(this)。\n * @param method 定时器回调函数。\n */\n callLater(caller: any, method: (dt?: number) => void): void {\n if (!this._scheduler.isScheduled(method, caller)) {\n this._scheduler.schedule(method, caller, 0, 0, 0, false);\n }\n }\n\n /**\n * 暂停时钟\n */\n pause(caller: any): void {\n this._scheduler.pauseTarget(caller)\n }\n\n /**\n * 恢复时钟\n */\n resume(caller: any): void {\n this._scheduler.resumeTarget(caller)\n }\n\n recycle() {\n this._scheduler.unscheduleAll();\n director.getScheduler().unscheduleUpdate(this._scheduler)\n }\n\n dispose() {\n this._scheduler.unscheduleAll();\n director.getScheduler().unscheduleUpdate(this._scheduler)\n this._scheduler = null;\n }\n}\n\n\nexport const timer = new Timer();","import {XEvent} from \"./XEvent\";\r\n\r\nexport class EventItem {\r\n public recycle() {\r\n this.listener = null;\r\n this.type = \"\";\r\n this.sub = \"\";\r\n this.sub2 = \"\";\r\n this.caller = null;\r\n this.args = null;\r\n }\r\n\r\n\r\n public dispose() {\r\n this.recycle();\r\n }\r\n\r\n public dispatch(event: XEvent) {\r\n this.listener.call(this.caller, event, event.dispatchParams)\r\n }\r\n\r\n\r\n public listener: (event: XEvent) => void;\r\n public caller: any;\r\n /**\r\n * 事件类型\r\n */\r\n type: string = \"\";\r\n /**\r\n * 子事件\r\n * 如果sub == \"\" 或者 sub == \"*\", 则不需要检查sub值\r\n */\r\n sub: string = \"\";\r\n /**\r\n * 子事件2\r\n * 如果sub == \"\" 或者 sub == \"*\", 则不需要检查sub值\r\n */\r\n sub2: string = \"\";\r\n\r\n args: any;\r\n\r\n once: boolean;\r\n}\r\n\r\n","/**\r\n * 事件\r\n */\r\nexport class XEvent {\r\n /**\r\n *\r\n */\r\n dispatcher: any;\r\n /**\r\n * 子事件\r\n */\r\n sub: string;\r\n /**\r\n * 子事件\r\n */\r\n sub2: string;\r\n /**\r\n * 事件\r\n */\r\n type: string;\r\n\r\n /**\r\n * 监听时传递的参数\r\n */\r\n onParams: any;\r\n /**\r\n * 触发时传递的参数\r\n */\r\n dispatchParams: any;\r\n\r\n public toString(): string {\r\n return `Event[${this.type} + \".\" + ${this.sub}]`\r\n }\r\n\r\n public clone(): XEvent {\r\n let newevent = new XEvent();\r\n newevent.sub = this.sub;\r\n newevent.sub2 = this.sub2;\r\n newevent.type = this.type;\r\n newevent.onParams = this.onParams;\r\n newevent.dispatchParams = this.dispatchParams;\r\n newevent.dispatcher = this.dispatcher;\r\n return newevent;\r\n }\r\n\r\n public recycle() {\r\n this.type = \"\";\r\n this.sub = \"\";\r\n this.sub2 = \"\";\r\n this.dispatcher = null;\r\n this.dispatchParams = null;\r\n this.onParams = null;\r\n }\r\n\r\n public dispose() {\r\n this.recycle();\r\n }\r\n}\r\n","export enum LogLevel {\r\n DEBUG,\r\n INFO,\r\n WARNING,\r\n ERROR,\r\n}\r\n\r\n\r\nexport class Logger {\r\n name: string;\r\n level: LogLevel;\r\n ignoreRegexp = [];\r\n ignoreString = [];\r\n\r\n protected _enable: boolean = true;\r\n\r\n disable() {\r\n this._enable = false;\r\n }\r\n\r\n canLogByLevel(level: LogLevel): boolean {\r\n if (!this._enable) {\r\n return false;\r\n }\r\n return level >= this.level;\r\n }\r\n\r\n\r\n canLog(msg: string, level: LogLevel): boolean {\r\n if (!this._enable) {\r\n return false;\r\n }\r\n if (level < this.level) {\r\n return false;\r\n }\r\n\r\n for (let val of this.ignoreString) {\r\n if (msg.indexOf(val) != -1) {\r\n return false;\r\n }\r\n }\r\n\r\n for (let val of this.ignoreRegexp) {\r\n let regexp = new RegExp(val);\r\n if (regexp.test(msg)) {\r\n return false;\r\n }\r\n }\r\n\r\n return true;\r\n }\r\n\r\n debug(msg: string, ...data: any[]) {\r\n msg = `[${this.name}] ` + msg;\r\n if (!this.canLog(msg, LogLevel.DEBUG)) {\r\n return;\r\n }\r\n console.debug(msg, ...data)\r\n }\r\n\r\n\r\n info(msg: string, ...data: any[]) {\r\n msg = `[${this.name}] ` + msg;\r\n if (!this.canLog(msg, LogLevel.INFO)) {\r\n return;\r\n }\r\n console.log(msg, ...data)\r\n }\r\n\r\n infof(msgCreator: () => string) {\r\n if (!this._enable) {\r\n return;\r\n }\r\n if (LogLevel.INFO < this.level) {\r\n return;\r\n }\r\n if (!msgCreator) {\r\n return;\r\n }\r\n let msg = `[${this.name}] ` + msgCreator();\r\n console.log(msg)\r\n }\r\n\r\n\r\n warning(msg: string, ...data: any[]) {\r\n msg = `[${this.name}] ` + msg;\r\n if (!this.canLog(msg, LogLevel.WARNING)) {\r\n return;\r\n }\r\n console.warn(msg, ...data)\r\n }\r\n\r\n error(msg: string, ...data: any[]) {\r\n msg = `[${this.name}] ` + msg;\r\n if (!this.canLog(msg, LogLevel.ERROR)) {\r\n return;\r\n }\r\n console.error(msg, ...data)\r\n }\r\n}","import {Logger, LogLevel} from \"./Logger\";\r\n\r\nexport const LOGGER_EVENT = \"Event\"\r\n\r\nexport class LogManager {\r\n /**\r\n * 获取事件的日志管理\r\n * 日志的group为事件类型\r\n */\r\n getEventLogger(): Logger {\r\n return this.getLogger(LOGGER_EVENT)\r\n }\r\n\r\n /**\r\n * 获取日志管理\r\n */\r\n getLogger(name: string): Logger {\r\n let l = this._loggers[name];\r\n if (!l) {\r\n l = new Logger();\r\n l.name = name;\r\n l.level = LogLevel.INFO;\r\n this._loggers[name] = l;\r\n }\r\n return l;\r\n }\r\n\r\n protected _loggers = {};\r\n\r\n\r\n /**\r\n * 是否开启日志\r\n */\r\n enable: boolean = true;\r\n\r\n // 忽视输出的日志\r\n protected ignores: any[] = [];\r\n\r\n /**\r\n * 忽视包含指定字符串的日志\r\n * @param val\r\n */\r\n ignoreString(val: string) {\r\n this.ignores.push(val);\r\n }\r\n\r\n /**\r\n * 取消指定的日志\r\n * @param val\r\n */\r\n ignoreStringCancel(val: string) {\r\n let idx = this.ignores.indexOf(val);\r\n if (idx !== -1) {\r\n this.ignores.splice(idx, 1);\r\n }\r\n }\r\n\r\n /**\r\n * 是否可以输出日志\r\n * @param type\r\n * @private\r\n */\r\n canLog(type: string): boolean {\r\n if (type.charAt(type.length - 1) === \"*\") {\r\n return false;\r\n }\r\n for (let val of this.ignores) {\r\n if (type.indexOf(val) !== -1) {\r\n return false;\r\n }\r\n }\r\n return true\r\n }\r\n\r\n\r\n public disableSystemConsole() {\r\n console.log = function () {\r\n };\r\n console.debug = function () {\r\n };\r\n console.info = function () {\r\n };\r\n console.warn = function () {\r\n };\r\n console.error = function () {\r\n };\r\n }\r\n\r\n\r\n}\r\n\r\nexport const logmgr = new LogManager();","export type CreatorFunction = (...args: any[]) => {};\n\n/**\n * 回收的方法\n * 使用回收方法的原因是,某些对象没有recycle函数,由不方便实现recycle函数\n */\nexport type RecycleFunction = (item: any, ...args: any[]) => void;\n\n/**\n * 释放的方法\n */\nexport type DisposeFunction = (item: any, ...args: any[]) => void;\n\n\n/**\n * 对象池\n */\nexport class Pool {\n creatorFunction: CreatorFunction;\n recycleFunction: RecycleFunction;\n disposeFunction: DisposeFunction;\n name: string = \"\";\n list: any[];\n\n constructor(config: {\n creatorFunction: CreatorFunction;\n recycleFunction?: RecycleFunction;\n disposeFunction?: DisposeFunction;\n name?: string;\n }) {\n if (!config) {\n throw new Error(\"需要设置config\")\n }\n this.creatorFunction = config.creatorFunction;\n this.recycleFunction = config.recycleFunction;\n this.disposeFunction = config.disposeFunction;\n this.list = [];\n }\n\n /**\n * 获取一个对象\n */\n getObject(...args: any[]): any {\n if (this.list.length > 0) {\n return this.list.pop()\n }\n return this.creatorFunction(...args);\n }\n\n /**\n * 回收一个对象\n * @param obj\n */\n recycleObject(obj: any) {\n if (!obj) {\n return;\n }\n if (this.recycleFunction) {\n this.recycleFunction(obj)\n }\n this.list.push(obj);\n }\n\n /**\n * 释放一个对象\n * @param obj\n */\n disposeObject(obj: any) {\n if (!obj) {\n return;\n }\n if (this.disposeFunction) {\n this.disposeFunction(obj)\n }\n }\n\n /**\n * 释放对象池\n */\n dispose() {\n for (let obj of this.list) {\n obj.dispose();\n }\n this.creatorFunction = null;\n this.name = \"\";\n this.list = null;\n }\n}\n\n/**\n * 对象池\n */\nexport class SamplePool {\n list: any[];\n\n constructor() {\n this.list = [];\n }\n\n /**\n * 获取一个对象\n */\n get(): any {\n if (this.list.length > 0) {\n return this.list.pop()\n }\n return null;\n }\n\n /**\n * 回收一个对象\n * @param obj\n */\n put(obj: any) {\n if (!obj) {\n return;\n }\n this.list.push(obj);\n }\n}\n\n\n/**\n * 对象池\n */\nexport class SamplePoolSet {\n get(name: string): any {\n let pool = this.pools[name];\n if (!pool) {\n pool = new SamplePool();\n this.pools[name] = pool;\n }\n return pool.get();\n }\n\n put(name: string, item: any) {\n let pool = this.pools[name];\n if (!pool) {\n pool = new SamplePool();\n this.pools[name] = pool;\n }\n pool.put(item);\n }\n\n protected pools = {};\n}\n\n\n","/**\n * 事件字符串分隔符\n */\nimport { IEventDispatcher } from \"./iface\";\nimport { EventItem } from \"./EventItem\";\nimport { XEvent } from \"./XEvent\";\nimport { LogLevel } from \"../log/Logger\";\nimport { logmgr } from \"../log/LogManager\";\nimport { Scheduler } from \"cc\";\nimport { Pool } from \"../pool/PoolSet\";\n\n\nconst log = logmgr.getEventLogger()\n\n/**\n * 事件派发器\n */\nexport class EventDispatcher implements IEventDispatcher/*, ISchedulable */ {\n\n constructor() {\n Scheduler.enableForTarget(this);\n }\n\n dispose() {\n this.isDispose = true;\n this._onEventItems = null;\n }\n\n /**\n * 暂停监听\n */\n pause() {\n this._isPause = true;\n }\n\n resume() {\n this._isPause = false;\n }\n\n protected _isPause: boolean = false;\n\n has(type: string, caller: any, listener: Function): boolean {\n return !!this.getItem(type, caller, listener);\n }\n\n getItem(type: string, caller: any, listener: Function): EventItem {\n let eventType = \"\";\n let eventSub = \"\";\n let eventSub2 = \"\";\n if (type.indexOf(\".\") != -1) {\n [eventType, eventSub, eventSub2] = type.split(\".\");\n } else {\n eventType = type;\n }\n let items = this.getOnEventItems(eventType);\n for (const item of items) {\n if (item.type == type\n && item.sub == eventSub\n && item.sub2 == eventSub2\n && item.caller == caller\n && item.listener == listener\n ) {\n return item;\n }\n }\n\n return null;\n }\n\n /**\n * 监听事件,如果监听已经存在则返回\n * @param type\n * @param caller\n * @param listener 为了性能考虑, event使用了对象池处理。因此处理函数不应该保存event的引用。如有需要,可通过新建对象或Event.Clone()实现\n * @param args\n */\n on(type: string, caller: any, listener: (event: XEvent, dispatchParams: any) => void, args?: any): EventItem {\n if (!listener) {\n throw new Error(\"listerner is null\")\n }\n\n let existed = this.getItem(type, caller, listener);\n if (existed) {\n return existed;\n }\n\n let item = eventItemPool.getObject();\n item.caller = caller;\n item.listener = listener;\n item.args = args;\n if (type.indexOf(\".\") != -1) {\n [item.type, item.sub, item.sub2] = type.split(\".\");\n } else {\n item.type = type;\n }\n let items = this.getOnEventItems(item.type);\n items.push(item);\n if (log.canLogByLevel(LogLevel.DEBUG)) {\n log.debug(`on ${type}, caller=${caller}, args=${args}`)\n }\n return item;\n }\n\n\n once(type: string, caller: any, listener: (event: XEvent) => void, args?: any): EventItem {\n if (!listener) {\n throw new Error(\"listerner is null\")\n }\n if (this.has(type, caller, listener)) {\n return;\n }\n\n let item: EventItem = eventItemPool.getObject();\n if (type.indexOf(\".\") != -1) {\n [item.type, item.sub, item.sub2] = type.split(\".\");\n } else {\n item.type = type;\n }\n item.caller = caller;\n item.listener = listener;\n item.args = args;\n item.once = true;\n let items = this.getOnEventItems(item.type);\n items.push(item);\n\n if (log.canLogByLevel(LogLevel.DEBUG)) {\n log.debug(`once ${type}, caller=${caller}, args=`, args)\n }\n\n return item;\n }\n\n offItem(item: EventItem) {\n this.off(item.type, item.caller, item.listener);\n }\n\n off(type: string, caller: any, listener: Function): void {\n if (log.canLogByLevel(LogLevel.DEBUG)) {\n log.debug(`off ${type}, caller=${caller}`)\n }\n let items = this.getOnEventItems(type);\n for (let i = 0; i < items.length; i++) {\n let item = items[i];\n if (item.caller !== caller) {\n continue\n }\n if (listener !== listener) {\n continue\n }\n eventItemPool.recycleObject(item);\n items.splice(i, 1)\n return;\n }\n }\n\n offAll(type?: string): void {\n if (log.canLogByLevel(LogLevel.DEBUG)) {\n log.debug(`offAll ${type}`)\n }\n let items = this.getOnEventItems(type);\n if (!type) {\n items.length = 0;\n }\n }\n\n offAllCaller(caller: any) {\n if (log.canLogByLevel(LogLevel.DEBUG)) {\n log.debug(`offAllCaller start: caller=${caller}, len=${this._onEventItems.length}`)\n }\n\n let m = this._onEventItems;\n for (let type in m) {\n let items = m[type];\n if (!items) {\n continue;\n }\n items = items.filter((value: EventItem, index: number, array: EventItem[]) => {\n return value.caller !== caller;\n })\n m[type] = items;\n }\n\n if (log.canLogByLevel(LogLevel.DEBUG)) {\n log.debug(`offAllCaller end: caller=${caller}, len=${this._onEventItems.length}`)\n }\n }\n\n /**\n * 派发事件\n * @param type 事件类型\n * @param params 事件参数\n * @param disableLog\n */\n dispatch(type: string, params?: any, disableLog: boolean = false): void {\n this.dispatchSub(type, params, disableLog);\n }\n\n /**\n * 派发事件\n * @param type 事件类型.子事件.子事件2\n * @param params 事件参数\n * @param disableLog\n */\n dispatchSub(type: string, params?: any, disableLog: boolean = false): void {\n if (this._isPause) {\n return;\n }\n let eventType = \"\";\n let eventSub = \"\";\n let eventSub2 = \"\";\n if (type.indexOf(\".\") != -1) {\n [eventType, eventSub, eventSub2] = type.split(\".\");\n } else {\n eventType = type;\n }\n\n if (!this._onEventItems[eventType]) {\n return;\n }\n let items = this._onEventItems[eventType];\n if (items.length == 0) {\n return;\n }\n // 减少log代码?有没有这个必要?\n if (!disableLog) {\n if (log.canLogByLevel(LogLevel.INFO)) {\n log.info(`[DISPATCH] ${type}.${this.toString()} [PARAMS]=`, params)\n }\n }\n\n let event: XEvent = eventPool.getObject();\n event.dispatcher = this;\n event.dispatchParams = params;\n event.sub = eventSub;\n event.sub2 = eventSub2;\n event.type = eventType;\n for (let on of items) {\n if (event.sub) {\n if (on.sub != \"\" && on.sub != \"*\") {\n if (on.sub != event.sub) {\n continue;\n }\n }\n }\n\n if (event.sub2) {\n if (on.sub2 != \"\" && on.sub2 != \"*\") {\n if (on.sub2 != event.sub2) {\n continue;\n }\n }\n }\n\n event.onParams = on.args;\n on.dispatch(event);\n\n }\n\n eventPool.recycleObject(event);\n }\n\n toString() {\n return `EventDispatcher`;\n }\n\n protected getOnEventItems(type: string): EventItem[] {\n let items = this._onEventItems[type];\n if (!items) {\n items = [];\n this._onEventItems[type] = items;\n }\n return items;\n }\n\n id?: string;\n uuid?: string;\n name: string;\n private _onEventItems: { [key: string]: EventItem[] } = {};\n protected isDispose: boolean = false;\n\n}\n\n\n/**\n * 全局的事件派发器\n */\nexport const eventmgr = new EventDispatcher();\nlet eventPool = new Pool({\n creatorFunction: function () {\n return new XEvent();\n },\n recycleFunction: function (item: XEvent): void {\n item.recycle();\n },\n disposeFunction: function (item: XEvent): void {\n item.dispose();\n }\n})\n\nlet eventItemPool = new Pool({\n creatorFunction: function () {\n return new EventItem();\n },\n recycleFunction: function (item: EventItem): void {\n item.recycle();\n },\n disposeFunction: function (item: EventItem): void {\n item.dispose();\n }\n})\n","export class ConvertUtil {\n anyToBoolean(val: any, defaultValue: boolean = false): boolean {\n if (val == null) {\n return defaultValue;\n }\n switch (typeof val) {\n case \"string\":\n return val === \"true\";\n case \"number\":\n return val > 0;\n case \"boolean\":\n return val\n }\n return defaultValue\n }\n\n anyToInt(val: any, defaultValue: number = 0): number {\n if (val == null) {\n return defaultValue;\n }\n switch (typeof val) {\n case \"string\":\n if (val === \"\") {\n return 0;\n }\n return parseInt(val, 10);\n case \"number\":\n return val;\n }\n return defaultValue;\n }\n\n anyToFloat(val: any, defaultValue: number = 0): number {\n if (val == null) {\n return defaultValue;\n }\n\n switch (typeof val) {\n case \"string\":\n if (val === \"\") {\n return 0.0;\n }\n return parseFloat(val);\n case \"number\":\n return val;\n }\n return defaultValue;\n }\n\n anyToString(val: any, defaultValue: string = \"\"): string {\n if (val == null) {\n return defaultValue;\n }\n\n switch (typeof val) {\n case null:\n return defaultValue;\n case \"string\":\n return val;\n case \"number\":\n return val.toString();\n case \"boolean\":\n return val ? \"true\" : \"false\";\n case \"object\":\n return JSON.stringify(val);\n }\n return defaultValue;\n }\n\n /**\n * 未定义的值转化成零值,否则返回原值\n * @param val\n * @param type\n */\n undefinedToZero(val: any, type: string): any {\n if (val === undefined) {\n switch (type) {\n case \"string\":\n return \"\";\n case \"number\":\n return 0;\n case \"bigInt\":\n return 0;\n case \"boolean\":\n return false;\n case \"symbol\":\n return null;\n case \"object\":\n return null;\n case \"function\":\n return null;\n }\n }\n return val;\n }\n}\n\nexport const convertutil = new ConvertUtil();","import { Dictionary } from \"../ds\";\nimport { convertutil } from \"./ConvertUtil\";\n\nexport class MapObject extends Dictionary<string, MapValue> {\n constructor(public object: {}) {\n super();\n }\n\n getValue(key: string): MapValue {\n let value = this.get(key);\n if (!value) {\n value = new MapValue(this, key);\n this.set(key, value);\n }\n return value;\n }\n\n\n\n}\n\nexport class MapValue {\n constructor(public obj: {}, public key: any) {\n\n }\n set(value: any) {\n this.obj[this.key] = value;\n }\n\n isUndefined(): boolean {\n return this.obj[this.key] == undefined;\n }\n\n toNumber(): number {\n return maputil.number(this.obj, this.key);\n }\n\n toString(): string {\n return maputil.string(this.obj, this.key);\n }\n toBoolean(): boolean {\n return maputil.boolean(this.obj, this.key);\n }\n toAny(): any {\n return this.obj[this.key];\n }\n}\n\nexport class MapUtil {\n\n /**\n * 获取所欲的值\n */\n values<T = any>(m: { [key: string]: T; }): T[] {\n let r: T[] = [];\n for (let key in m) {\n r.push(m[key])\n }\n\n return r;\n }\n\n /**\n * 获取所有的键\n */\n keys(m: { [key: string]: any; }): string[] {\n let r: string[] = [];\n for (let key in m) {\n r.push(key)\n }\n return r;\n }\n\n /**\n * 以字符串数字作为键值的map,转化成数组\n */\n toList<T = any>(m: { [key: string]: T; }): T[] {\n let r: T[] = [];\n for (let key in m) {\n r[parseInt(key, 10)] = m[key]\n }\n return r;\n }\n\n /**\n * 以字符串数字作为键值的map,转化成数组\n */\n listToMap(list: any[]): any {\n let r = {}\n if (list) {\n for (let i = 0; i < list.length; i++) {\n r[i.toString()] = list[i];\n }\n }\n return r;\n }\n\n /**\n * 转换成数字, 如果原值无效, 返回0\n * @constructor\n */\n has(m: any, key: string): boolean {\n return m.hasOwnProperty(key);\n }\n\n /**\n * 转换成数字, 如果原值无效, 返回0\n * @constructor\n */\n number(m: any, key: string, dflt: number = 0): number {\n if (!m) {\n return dflt;\n }\n let data = m[key];\n if (!data) {\n return dflt\n }\n\n if (typeof data !== \"number\") {\n data = parseFloat(data)\n }\n\n return data;\n }\n\n /**\n * 转换成字符串, 如果原值无效, 返回\"\"\n * @constructor\n */\n string(m: any, key: string, dflt: string = \"\"): string {\n if (!m) {\n return dflt;\n }\n let data = m[key];\n if (!data) {\n return dflt\n }\n\n return data;\n }\n\n /**\n * 转换成布尔值, 如果原值无效, 返回false\n * @constructor\n */\n boolean(m: any, key: string, dflt: boolean = false): boolean {\n if (!m) {\n return dflt;\n }\n let data = m[key];\n if (data === undefined || data === null) {\n return dflt\n }\n\n return data;\n }\n\n /**\n * 转换成{}, 如果原值无效, 返回{}\n * @constructor\n */\n map(m: any, key: string, dflt: boolean | Object = false): any {\n if (!m) {\n return dflt;\n }\n let data = m[key];\n if (!data) {\n if (dflt instanceof Object) {\n data = dflt;\n m[key] = data;\n } else if (dflt) {\n data = {};\n m[key] = data;\n }\n }\n\n return data;\n }\n\n /**\n * 转换成[], 如果原值无效, 返回[]\n * @constructor\n */\n array(m: any, key: string, dflt: boolean | Array<any> = false): any[] {\n if (!m || !m[key]) {\n if (dflt instanceof Array) {\n m[key] = dflt;\n return m[key];\n } else if (dflt) {\n m[key] = [];\n return m[key];\n }\n return null;\n }\n let data = m[key];\n if (data instanceof Array) {\n return data;\n }\n\n let r = [];\n for (let k in data) {\n r[parseInt(k, 10)] = data[k];\n }\n\n return r;\n }\n\n /**\n * 返回第一个符合条件的key\n * @param m\n * @param conf\n */\n keyOfConf(m: any, conf: (key: string, item: any) => boolean): string {\n for (let key in m) {\n if (conf(key, m[key])) {\n return key;\n }\n }\n\n return \"\";\n }\n\n /**\n * 比较对象,并返回包含差异的对象\n * 如果返回 undefined 表示没有差异\n * @param obj\n * @param parent\n * @param removeDefault\n */\n diff(obj: any, parent: any, removeDefault: boolean = true): any {\n let result;\n switch (typeof obj) {\n case 'undefined':\n break;\n case 'string':\n if (obj !== parent) {\n if (obj !== \"\") {\n result = obj + '';\n }\n }\n break;\n case 'number':\n if (obj !== parent) {\n // if (obj !== 0) {// 这里会排除掉默认的\n // o = obj - 0;\n // }\n result = obj;\n }\n break;\n case 'boolean':\n if (obj !== parent) {\n if (obj !== false) {\n result = obj;\n }\n }\n break;\n case 'object':\n if (obj === null) {\n result = undefined;\n } else {\n if (obj instanceof Array) {\n let tempObj = [];\n for (let i = 0; i < obj.length; i++) {\n let a = obj[i];\n let b = undefined;\n if (parent) {\n b = parent[i];\n }\n let v = this.diff(a, b, removeDefault);\n if (v !== undefined) {\n tempObj.push(v);\n }\n }\n if (obj.length > 0) {\n result = tempObj;\n } else {\n if (removeDefault) {\n result = undefined;\n } else {\n result = tempObj;\n }\n }\n } else {\n let tempObj = {};\n let count = 0;\n for (let k in obj) {\n let a = obj[k];\n let b = undefined;\n if (parent) {\n b = parent[k];\n }\n let v = this.diff(a, b, removeDefault);\n if (v !== undefined) {\n tempObj[k] = v;\n count++;\n }\n }\n if (count > 0) {\n result = tempObj;\n } else {\n if (removeDefault) {\n result = undefined;\n } else {\n if (parent) {\n result = undefined;\n } else {\n result = tempObj;\n }\n }\n }\n\n }\n }\n break;\n default:\n result = obj;\n break;\n }\n return result;\n }\n\n /**\n * 克隆对象\n * @param obj\n */\n clone(obj: any): any {\n let o;\n switch (typeof obj) {\n case 'undefined':\n break;\n case 'string':\n o = obj + '';\n break;\n case 'number':\n o = obj - 0;\n break;\n case 'boolean':\n o = obj;\n break;\n case 'object':\n if (obj === null) {\n o = null;\n } else {\n if (obj instanceof Array) {\n o = [];\n for (let i = 0; i < obj.length; i++) {\n o.push(this.clone(obj[i]));\n }\n } else {\n o = {};\n for (let k in obj) {\n o[k] = this.clone(obj[k]);\n }\n }\n }\n break;\n default:\n o = obj;\n break;\n }\n return o;\n }\n\n /**\n * 通过path设置属性,创建不存在的路径对象\n * @param obj\n * @param path \"/key1/key2\"\n * @param data\n */\n setByPath(obj: any, path: string, data: any) {\n if (!obj) {\n return;\n }\n\n if (path[0] != \"/\") {\n throw new Error(\"非法路径: \" + path)\n }\n if (path == \"/\") {\n throw new Error(\"无法处理路径: \" + path)\n }\n path = path.substring(1);\n let arr = path.split(\"/\");\n let lastkey = arr.pop();\n let cur = obj;\n for (let item of arr) {\n let n = cur[item];\n if (!n) {\n n = {};\n cur[item] = n;\n }\n cur = n;\n }\n cur[lastkey] = data;\n }\n\n /**\n * 通过path删除\n * @param obj\n * @param path \"/key1/key2\"\n */\n removeByPath(obj: any, path: string) {\n if (!obj) {\n return;\n }\n let arr = path.split(\"/\");\n arr.shift();// 去掉空字符\n let lastkey = arr.pop();\n let cur = obj;\n for (let item of arr) {\n let n = cur[item];\n if (!n) {\n n = {};\n cur[item] = n;\n }\n cur = n;\n }\n\n cur[lastkey] = undefined;\n delete cur[lastkey];\n }\n\n\n /**\n * 通过path获取属性\n * @param obj\n * @param path\n */\n getByPath(obj: any, path: string): any {\n if (path === \"/\") {\n return obj;\n }\n if (path[0] !== \"/\") {\n path = \"/\" + path;\n }\n let pathARr = path.split(\"/\");\n pathARr.shift();// 去掉第一个\"/\"\n let lastkey = pathARr.pop();\n let cur = obj;\n for (let prop of pathARr) {\n cur = cur[prop];\n if (!cur) {\n return null;\n }\n }\n\n return cur[lastkey];\n }\n\n\n flat(obj: any, split = \"/\"): any {\n let result = {};\n this._flat(obj, result, \"\", split);\n return result\n }\n\n _flat(obj: any, result: any, path: string, split = \"/\"): any {\n for (let key in obj) {\n let val = obj[key];\n let type = typeof val;\n let id = path + split + key;\n switch (type) {\n case \"object\":\n this._flat(val, result, id, split)\n break;\n default:\n result[id] = val;\n }\n }\n }\n\n /**\n * 比较两个对象,包括基础类型\n * @param a\n * @param b\n */\n compare(a: any, b: any): boolean {\n\n let typea = typeof a;\n let typeb = typeof b;\n if (a == null || b == null) {\n return a == b;\n }\n\n if (typea !== typeb) {\n return false;\n }\n\n switch (typea) {\n case \"object\":\n // 获取对象的属性集合(数组)\n let aProps = Object.getOwnPropertyNames(a);\n let bProps = Object.getOwnPropertyNames(b);\n\n // 属性个数(长度)不同,对象肯定不同\n if (aProps.length !== bProps.length) {\n return false;\n }\n\n for (let i = 0; i < aProps.length; i++) {\n let propName = aProps[i];\n\n if (!this.compare(a[propName], b[propName])) {\n return false;\n }\n }\n break;\n default:\n return a === b;\n }\n\n\n return true;\n }\n\n /**\n * 从[from]对象复制到 [to]对象\n * 如果from字段为object并且等于null,则设置to字段为null\n * 如果from字段为undefined, 则不覆盖\n * @param from\n * @param to\n * @param tokey 如果[to]存在key才进行拷贝\n */\n public copy(from: any, to: any, tokey: boolean = false) {\n if (!from || !to) {\n return\n }\n for (let fromKey in from) {\n\n if (tokey) {\n if (!to.hasOwnProperty(fromKey)) {\n continue\n }\n }\n let toChild = to[fromKey];\n let fromChild = from[fromKey];\n\n let type = typeof toChild;\n if (type === \"undefined\") {\n type = typeof fromChild;\n }\n\n toChild = convertutil.undefinedToZero(toChild, type)\n fromChild = convertutil.undefinedToZero(fromChild, type)\n switch (type) {\n case \"object\":\n if (fromChild) {\n if (Array.isArray(fromChild)) {\n if (!toChild) {\n toChild = [];\n to[fromKey] = toChild;\n }\n\n if (fromChild) {\n this.copy(fromChild, toChild)\n }\n } else {\n if (!toChild) {\n toChild = {};\n to[fromKey] = toChild;\n }\n this.copy(fromChild, toChild)\n }\n } else {\n to[fromKey] = null;\n }\n break;\n case \"string\":\n if (toChild === fromChild) {\n continue;\n }\n to[fromKey] = fromChild;\n break;\n default:\n if (toChild === fromChild) {\n continue\n }\n to[fromKey] = fromChild;\n }\n }\n }\n\n /**\n * 去掉兼职\n */\n flatString(target: any): string {\n let result = \"[\";\n let arr = [];\n for (const targetKey in target) {\n let targetVal = target[targetKey];\n if (targetKey == \"_type\") {\n result += targetVal + \"#\"\n continue;\n }\n let type = typeof targetVal;\n switch (type) {\n case \"object\":\n if (targetVal) {\n arr.push(this.flatString(targetVal));\n } else {\n arr.push(\"null\")\n }\n break;\n default:\n if (targetVal) {\n arr.push(targetVal)\n } else {\n arr.push(\"null\")\n }\n\n }\n }\n result += arr.join(\", \")\n result += \"]\"\n return result;\n }\n}\n\nexport const maputil = new MapUtil();\n","import {math} from \"cc\";\n\nexport class ScaleUtil {\n tenToAny = [ // 0-75 共76个\n \"0\", \"1\", \"2\", \"3\", \"4\", \"5\", \"6\", \"7\", \"8\", \"9\", // 1-10\n \"A\", \"B\", \"C\", \"D\", \"E\", \"F\", \"G\", \"H\", \"I\", \"J\", // 11-20\n \"K\", \"L\", \"M\", \"N\", \"O\", \"P\", \"Q\", \"R\", \"S\", \"T\", // 21-30\n \"U\", \"V\", \"W\", \"X\", \"Y\", \"Z\", \"a\", \"b\", \"c\", \"d\", // 31-40\n \"e\", \"f\", \"g\", \"h\", \"i\", \"j\", \"k\", \"l\", \"m\", \"n\", // 41-50\n \"o\", \"p\", \"q\", \"r\", \"s\", \"t\", \"u\", \"v\", \"w\", \"x\", // 51-60\n \"y\", \"z\", \":\", \";\", \"<\", \"=\", \">\", \"?\", \"@\", \"{\", // 61-80\n \"]\", \"^\", \"_\", \"{\", \"|\", \"}\", // 71-75\n ]\n\n allstr = \"0123456789\" +\n \"ABCDEFGHIJ\" +\n \"KLMNOPQRST\" +\n \"UVWXYZabcd\" +\n \"efghijklmn\" +\n \"opqrstuvwx\" +\n \"yz:;<=>?@[]\" +\n \"^_{|}\"\n\n\n// RandString 生成随机字符串\n randString(size: number, n: number): string {\n var s = \"\";\n let nstr = this.allstr.substring(0, n)\n for (let i = 0; i < size; i++) {\n let c = nstr[math.randomRangeInt(0, n)]\n s += c\n }\n return s;\n }\n\n//var tenToAny map[int]string = map[int]string{0: \"0\", 1: \"1\", 2: \"2\", 3: \"3\", 4: \"4\", 5: \"5\", 6: \"6\", 7: \"7\", 8: \"8\", 9: \"9\", 10: \"a\", 11: \"b\", 12: \"c\", 13: \"d\", 14: \"e\", 15: \"f\", 16: \"g\", 17: \"h\", 18: \"i\", 19: \"j\", 20: \"k\", 21: \"l\", 22: \"m\", 23: \"n\", 24: \"o\", 25: \"p\", 26: \"q\", 27: \"r\", 28: \"s\", 29: \"t\", 30: \"u\", 31: \"v\", 32: \"w\", 33: \"x\", 34: \"y\", 35: \"z\", 36: \":\", 37: \";\", 38: \"<\", 39: \"=\", 40: \">\", 41: \"?\", 42: \"@\", 43: \"[\", 44: \"]\", 45: \"^\", 46: \"_\", 47: \"{\", 48: \"|\", 49: \"}\", 50: \"A\", 51: \"B\", 52: \"C\", 53: \"D\", 54: \"E\", 55: \"F\", 56: \"G\", 57: \"H\", 58: \"I\", 59: \"J\", 60: \"K\", 61: \"L\", 62: \"M\", 63: \"N\", 64: \"O\", 65: \"P\", 66: \"Q\", 67: \"R\", 68: \"S\", 69: \"T\", 70: \"U\", 71: \"V\", 72: \"W\", 73: \"X\", 74: \"Y\", 75: \"Z\"}\n\n// DecimalTo 10进制转任意进制 n\n decimalTo(num: number, n: number): string {\n if (num === 0) {\n return \"0\"\n }\n let newNumStr = \"\"\n\n var remainder = 0\n var remainderString = \"\"\n\n while (num !== 0) {\n remainder = num % n\n if (remainder < 0) {\n remainder = n + remainder\n }\n remainderString = this.tenToAny[remainder]\n newNumStr = remainderString + newNumStr\n num = Math.round(num / n);\n //fmt.Println(\"newNumStr>>>\", newNumStr, num)\n }\n return newNumStr\n }\n\n// Findkey map根据value找key\n findkey(instr: string): number {\n let result = -1\n for (let i = 0; i < this.tenToAny.length; i++) {\n let val = this.tenToAny[i];\n if (instr === val) {\n result = i\n }\n }\n return result\n }\n\n// ToDecimal n进制转化成10进制\n toDecimal(num: string, n: number): number {\n var newNum = 0\n let nNum = num.length - 1\n\n var pow = 1\n var cnt = 1\n for (let i = nNum; i >= 0; i--) {\n let char = num[i];\n if (cnt === 1) {\n pow = 1\n } else {\n pow = pow * n\n }\n\n let tmp = this.findkey(char)\n newNum = newNum + tmp * pow\n cnt++\n }\n return newNum\n }\n}\n\n\nexport const scaleutil = new ScaleUtil();\n","import {scaleutil} from \"./ScaleUtil\";\r\n\r\nexport class IdentUtil {\r\n\r\n /**\r\n * 设置时间的基线,通过减去已经过去的时间,可缩短id长度\r\n * 注:同一个项目必须拥有同样的基线,否则有几率出现相同的id!\r\n * 注2:基线必须与精度符合\r\n * @param time\r\n */\r\n setTimeBaseline(time: number) {\r\n this._baseline = time;\r\n }\r\n\r\n protected _baseline: number = 0;\r\n\r\n /**\r\n * 设置时间的精度\r\n * @param precision\r\n */\r\n setTimePrecision(precision: \"ms\" | \"s\") {\r\n this._precision = precision;\r\n }\r\n\r\n protected _precision: string = \"s\";\r\n\r\n /**\r\n * 设置随机数的长度\r\n * @param value\r\n */\r\n setRandLength(value: number = 3) {\r\n this._randLength = value;\r\n }\r\n\r\n protected _randLength: number = 3;\r\n\r\n\r\n genOne(): string {\r\n let time = Date.now();\r\n switch (this._precision) {\r\n case \"s\":\r\n time = Math.floor(time / 1000);\r\n break;\r\n case \"ms\":\r\n time = Date.now();\r\n break;\r\n }\r\n if (time != this._lastTime) {\r\n this._count = 0;\r\n this._lastTime = time;\r\n }\r\n this._count++\r\n let timestr = scaleutil.decimalTo(Math.floor(time - this._baseline), 62);\r\n let countstr = scaleutil.decimalTo(this._count, 62);\r\n return timestr + scaleutil.decimalTo(countstr.length, 62) + countstr;\r\n }\r\n\r\n protected _count = 0;\r\n protected _lastTime: number = 0;\r\n}\r\n\r\n\r\nexport const identutil = new IdentUtil();","import { EventDispatcher } from \"../event/EventDispatcher\";\r\nimport { maputil } from \"../utils/MapUtil\";\r\nimport { identutil } from \"../utils/IdentUtil\";\r\n\r\nexport class TreeIterator {\r\n break() {\r\n this._isBreak = true;\r\n }\r\n\r\n isBreak(): boolean {\r\n return this._isBreak;\r\n }\r\n\r\n protected _isBreak;\r\n}\r\n\r\nexport interface ITreeListItem {\r\n /**\r\n * 路径\r\n */\r\n path: string;\r\n\r\n /**\r\n * 自定义数据\r\n */\r\n data?: any;\r\n\r\n /**\r\n * 功能性标签,用于开发组件时,记录组件的状态。例如title, icon, 显示树的组件,需要 expanded,selected标签\r\n */\r\n tags?: { [key: string]: any }\r\n\r\n /**\r\n * 是否树叶\r\n */\r\n isLeaf: boolean;\r\n\r\n}\r\n\r\nfunction fixPath(path): string {\r\n if (path == 0) {\r\n return path;\r\n }\r\n if (path[0] != \"/\") {\r\n path = \"/\" + path\r\n }\r\n if (path.length > 1) {\r\n if (path[path.length - 1] == \"/\") {\r\n path = path.substring(0, path.length - 1);\r\n }\r\n }\r\n\r\n return path;\r\n\r\n}\r\n\r\nexport class TreeNode<T = any> {\r\n\r\n get root(): TreeRoot {\r\n return this._root;\r\n }\r\n\r\n /**\r\n * 根节点\r\n */\r\n protected _root: TreeRoot;\r\n /**\r\n * 编号\r\n */\r\n uuid: string;\r\n\r\n /**\r\n * 编号\r\n */\r\n id: string;\r\n\r\n /**\r\n * 自定义数据\r\n */\r\n data: T;\r\n\r\n /**\r\n * 是否树叶\r\n */\r\n isLeaf: boolean = true;\r\n\r\n /**\r\n * 功能性标签,用于开发组件时,记录组件的状态。例如title, icon, 显示树的组件,需要 expanded,selected标签\r\n */\r\n tags: { [key: string]: any }\r\n\r\n /**\r\n * 深度\r\n */\r\n get depth(): number {\r\n return this._depth;\r\n }\r\n\r\n private _depth: number = 0;\r\n\r\n /**\r\n * 父节点\r\n */\r\n parent: TreeNode;\r\n\r\n /**\r\n * 子节点\r\n */\r\n children: TreeNode[];\r\n\r\n /**\r\n * 设置根\r\n * @param val\r\n */\r\n setRoot(val: TreeRoot) {\r\n this._root = val;\r\n }\r\n\r\n getTags(): { [key: string]: any } {\r\n if (!this.tags) {\r\n this.tags = {};\r\n }\r\n return this.tags;\r\n }\r\n\r\n getTag(name: string): any {\r\n return this.getTags()[name];\r\n }\r\n\r\n removeTag(name: string) {\r\n if (this.tags) {\r\n delete this.tags[name];\r\n }\r\n }\r\n\r\n\r\n setTag(name: string, value: any) {\r\n this.getTags()[name] = value;\r\n }\r\n\r\n\r\n constructor(id: string, isLeaf?: boolean) {\r\n this.uuid = identutil.genOne()\r\n this.id = id;\r\n if (isLeaf == undefined) {\r\n isLeaf = false;\r\n } else {\r\n this.isLeaf = isLeaf;\r\n }\r\n if (!isLeaf && !this.children) {\r\n this.children = [];\r\n }\r\n }\r\n\r\n public addChild(val: TreeNode) {\r\n let node = this.getChildById(val.id);\r\n if (node) {\r\n return;\r\n }\r\n val._root = this._root;\r\n val.parent = this;\r\n if (!this.children) {\r\n this.children = [];\r\n }\r\n this.children.push(val);\r\n //\r\n val.fixDepthAndRoot(this._depth + 1, this.root)\r\n }\r\n\r\n public getChildIndex(val: TreeNode): number {\r\n for (let i = 0; i < this.children.length; i++) {\r\n let child = this.children[i];\r\n if (child == val) {\r\n return i;\r\n }\r\n }\r\n\r\n return -1;\r\n }\r\n\r\n\r\n public insertChild(val: TreeNode, index: number) {\r\n let indexVal = this.children.indexOf(val);\r\n if (indexVal != -1) {\r\n this.children.splice(indexVal, 1);\r\n }\r\n this.children.splice(index, 0, val);\r\n }\r\n\r\n public removeChild(val: TreeNode) {\r\n let index = this.children.indexOf(val);\r\n if (index != -1) {\r\n this.children.splice(index, 1);\r\n val.parent = null;\r\n }\r\n }\r\n\r\n public removeChildren() {\r\n if (this.children) {\r\n for (let child of this.children) {\r\n child.parent = null;\r\n }\r\n }\r\n\r\n this.children = [];\r\n }\r\n\r\n public get name(): string {\r\n let parent = this.parent;\r\n if (parent) {\r\n if (parent.id == \"/\") {\r\n return this.id.replace(parent.id, \"\")\r\n } else {\r\n return this.id.replace(parent.id + \"/\", \"\")\r\n }\r\n }\r\n\r\n return this.id;\r\n }\r\n\r\n public setDepth(val: number) {\r\n this._depth = val;\r\n }\r\n\r\n public containsById(id: string): boolean {\r\n return this.getChildById(id) != null;\r\n }\r\n\r\n /**\r\n * 通过编号获取子节点\r\n * @param id\r\n */\r\n public getChildById(id: string): TreeNode {\r\n if (!this.children) {\r\n return\r\n }\r\n for (let i = 0; i < this.children.length; i++) {\r\n let node = this.children[i];\r\n if (node.id == id) {\r\n return node;\r\n }\r\n }\r\n return null;\r\n }\r\n\r\n /**\r\n * 返回相邻的上一个节点\r\n */\r\n public prevNode(): TreeNode {\r\n let parent = this.parent;\r\n if (!parent) {\r\n return null;\r\n }\r\n let children = parent.children;\r\n let index = children.indexOf(this);\r\n if (index == -1) {\r\n throw \"节点数据异常\"\r\n }\r\n if (index == 0) {// 自己就是最后一个\r\n return null;\r\n }\r\n return children[index - 1];\r\n }\r\n\r\n /**\r\n * 返回相邻的下一个节点\r\n */\r\n public nextNode(): TreeNode {\r\n let parent = this.parent;\r\n if (!parent) {\r\n return null;\r\n }\r\n let children = parent.children;\r\n let index = children.indexOf(this);\r\n if (index == -1) {\r\n throw \"节点数据异常\"\r\n }\r\n if (index == children.length - 1) {// 自己就是最后一个\r\n return null;\r\n }\r\n return children[index + 1];\r\n }\r\n\r\n /**\r\n * 如果返回true则删除节点,包含当前节点\r\n * @param f\r\n */\r\n public walkRemove(f: (node: TreeNode) => boolean) {\r\n this._walkRemove(f);\r\n }\r\n\r\n private _walkRemove(f: (node: TreeNode) => boolean) {\r\n try {\r\n if (f(this)) {\r\n this.parent.removeChild(this);\r\n return;\r\n }\r\n } catch (e) {\r\n console.warn(e.stack)\r\n return false;\r\n }\r\n\r\n\r\n if (!this.isLeaf) {\r\n if (this.children && this.children.length > 0) {\r\n for (let i = this.children.length - 1; i >= 0; i--) {\r\n let val = this.children[i];\r\n val._walkRemove(f)\r\n }\r\n }\r\n }\r\n return true;\r\n }\r\n\r\n /**\r\n * 如果返回true则继续,包含当前节点\r\n * @param f\r\n * @param inChild\r\n */\r\n public walk(f: (node: TreeNode) => boolean, inChild?: (node: TreeNode) => boolean) {\r\n this._walk(f, inChild);\r\n }\r\n\r\n private _walk(f: (node: TreeNode) => boolean, inChild?: (node: TreeNode) => boolean): boolean {\r\n try {\r\n if (!f(this)) {\r\n return false;\r\n }\r\n } catch (e) {\r\n console.warn(e.stack)\r\n return false;\r\n }\r\n\r\n\r\n if (!this.isLeaf) {\r\n let checkChildren = inChild ? inChild(this) : true;\r\n if (checkChildren) {\r\n if (this.children && this.children.length > 0) {\r\n for (let val of this.children) {\r\n if (!val._walk(f)) {\r\n return false\r\n }\r\n }\r\n }\r\n }\r\n\r\n }\r\n return true;\r\n }\r\n\r\n /**\r\n * 从当前节点(包括)遍历父节点链,包含当前节点\r\n * @param f\r\n */\r\n public walkParent(f: (node: TreeNode) => boolean) {\r\n let cur: TreeNode = this;\r\n while (cur) {\r\n try {\r\n if (!f(cur)) {\r\n return false;\r\n }\r\n } catch (e) {\r\n console.warn(e.stack)\r\n return false;\r\n }\r\n\r\n\r\n cur = cur.parent\r\n }\r\n }\r\n\r\n /**\r\n * 从当前节点往前遍历(深度),包含当前节点\r\n * @param f\r\n * @param inChild\r\n */\r\n public walkPrev(f: (node: TreeNode) => boolean, inChild?: (node: TreeNode) => boolean) {\r\n try {\r\n if (!f(this)) {\r\n return false;\r\n }\r\n } catch (e) {\r\n console.warn(e.stack)\r\n return false;\r\n }\r\n\r\n let parent = this.parent;\r\n if (!parent) {\r\n return false;\r\n }\r\n\r\n if (!parent.isLeaf) {\r\n let checkChildren = inChild ? inChild(this.parent) : true;\r\n if (checkChildren) {\r\n if (parent.children && parent.children.length > 0) {\r\n let nodeIndex = parent.children.indexOf(this);\r\n for (let i = nodeIndex - 1; i >= 0; i--) {\r\n let child = parent.children[i];\r\n if (!child._walkPrev(f, inChild)) {\r\n return false\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n return parent.walkPrev(f);\r\n }\r\n\r\n private _walkPrev(f: (node: TreeNode) => boolean, inChild?: (node: TreeNode) => boolean): boolean {\r\n if (this.isLeaf) {\r\n if (!f(this)) {\r\n return false;\r\n }\r\n } else {\r\n if (!this.isLeaf) {\r\n let checkChildren = inChild ? inChild(this) : true;\r\n if (checkChildren) {\r\n if (this.children && this.children.length > 0) {\r\n for (let i = this.children.length - 1; i >= 0; i--) {\r\n let child = this.children[i];\r\n if (!child._walkPrev(f, inChild)) {\r\n return false\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n if (!f(this)) {\r\n return false;\r\n }\r\n }\r\n\r\n\r\n return true;\r\n }\r\n\r\n\r\n public dump() {\r\n this.walk((node: TreeNode): boolean => {\r\n let prefix = \"\";\r\n for (let i = 0; i < node.depth; i++) {\r\n prefix += \" \"\r\n }\r\n console.log(prefix + \"-\" + node.id)\r\n return true;\r\n });\r\n }\r\n first(): TreeNode {\r\n if (this.children.length > 0) {\r\n return this.children[0];\r\n }\r\n return null;\r\n }\r\n /**\r\n * 遍历节点,查找指定编号的节点\r\n */\r\n public findById(id: string): TreeNode {\r\n return this._findOne((node: TreeNode) => {\r\n return node.id == id;\r\n });\r\n }\r\n\r\n /**\r\n * 如果返回true则继续\r\n * @param f\r\n */\r\n public findOne(f: (node: TreeNode) => boolean): TreeNode {\r\n return this._findOne(f);\r\n }\r\n\r\n private _findOne(f: (node: TreeNode) => boolean): TreeNode {\r\n if (f(this)) {\r\n return this;\r\n }\r\n if (this.children && this.children.length > 0) {\r\n for (let val of this.children) {\r\n let r = val._findOne(f);\r\n if (r) {\r\n return r;\r\n }\r\n }\r\n }\r\n\r\n return null;\r\n }\r\n\r\n /**\r\n * 通过路径获取节点\r\n * 格式为 /path1/path2/...\r\n * 如果 path == \"/\",则返回自身\r\n * @param path\r\n */\r\n getNodeByPath(path: string): TreeNode {\r\n path = fixPath(path);\r\n if (!path) {\r\n return;\r\n }\r\n if (path == \"/\") {\r\n return this;\r\n }\r\n return this.getNodeByPathArr(path.substring(1).split(\"/\"))\r\n }\r\n\r\n protected getNodeByPathArr(pathArr: string[]): TreeNode {\r\n if (this.children) {\r\n let id = pathArr.shift();\r\n for (const child of this.children) {\r\n if (child.id == id) {\r\n if (pathArr.length == 0) {\r\n return child;\r\n }\r\n return child.getNodeByPathArr(pathArr);\r\n }\r\n }\r\n }\r\n return null;\r\n }\r\n\r\n getName(): string {\r\n if (this.tags && this.tags[\"title\"]) {\r\n return this.tags[\"title\"];\r\n }\r\n return this.id;\r\n }\r\n\r\n getPath(): string {\r\n let result = this.id;\r\n let cur: TreeNode = this.parent;\r\n while (cur) {\r\n if (cur.id == \"/\") { // 根节点\r\n result = \"/\" + result;\r\n } else {\r\n result = cur.id + \"/\" + result;\r\n }\r\n\r\n\r\n cur = cur.parent\r\n }\r\n return result;\r\n }\r\n\r\n\r\n /**\r\n * 如果返回true则继续\r\n * @param f\r\n */\r\n public find(f: (node: TreeNode) => boolean): TreeNode[] {\r\n return this._find(f);\r\n }\r\n\r\n private _find(f: (node: TreeNode) => boolean): TreeNode[] {\r\n let r = [];\r\n if (f(this)) {\r\n r.push(this);\r\n }\r\n if (this.children && this.children.length > 0) {\r\n for (let val of this.children) {\r\n r = r.concat(val._find(f))\r\n }\r\n }\r\n\r\n return r;\r\n }\r\n\r\n\r\n public toRoot(): TreeRoot {\r\n let root = TreeRoot.create();\r\n root.origin = this.clone();\r\n root.origin.id = \"/\"\r\n root.origin.fixDepthAndRoot(0, root);\r\n return root;\r\n }\r\n\r\n public clone(): TreeNode {\r\n let node = new TreeNode(this.id, this.isLeaf);\r\n node.tags = maputil.clone(this.tags);\r\n node.data = this.data;\r\n node._depth = this.depth;\r\n if (this.isLeaf) {\r\n return node;\r\n }\r\n this.cloneChildrenTo(node);\r\n return node;\r\n }\r\n\r\n protected cloneChildrenTo(node: TreeNode) {\r\n for (let i = 0; i < this.children.length; i++) {\r\n let child = this.children[i];\r\n let newChild = child.clone();\r\n newChild.parent = node;\r\n //\r\n node.children[i] = newChild;\r\n }\r\n }\r\n\r\n\r\n public fixDepthAndRoot(depth: number, root: TreeRoot) {\r\n this._depth = depth;\r\n this._root = root;\r\n if (this.isLeaf) {\r\n return\r\n }\r\n if (this.children) {\r\n for (const child of this.children) {\r\n child.fixDepthAndRoot(depth + 1, root)\r\n }\r\n }\r\n }\r\n\r\n public toString() {\r\n return `TreeNode[${this.id}]`\r\n }\r\n}\r\n\r\n\r\nexport class TreeRoot<NODE = any> extends EventDispatcher {\r\n /**\r\n * 添加数据节点\r\n * dispatchParams = {node:TreeNode, parent:TreeNode|TreeRoot}\r\n */\r\n static EVENT_ADD = \"add\";\r\n\r\n /**\r\n * 移除数据节点\r\n * dispatchParams = {node:TreeNode, parent:TreeNode|TreeRoot}\r\n */\r\n static EVENT_REMOVE = \"remove\";\r\n\r\n /**\r\n * 插入数据节点\r\n * dispatchParams = {node:TreeNode, before:TreeNode}\r\n */\r\n static EVENT_INSERT = \"insert\";\r\n\r\n /**\r\n * 刷新数据节点\r\n * dispatchParams = {node:TreeNode}\r\n */\r\n static EVENT_REFRESH = \"refresh\";\r\n\r\n /**\r\n * 设置数据时触发\r\n * dispatchParams = {node:TreeNode}\r\n */\r\n static EVENT_DATA_SET = \"data_set\";\r\n\r\n /**\r\n * 设置数据时触发\r\n * dispatchParams = {node:TreeNode, tag:string, value:any}\r\n */\r\n static EVENT_TAGS_SET = \"tags_set\";\r\n\r\n static create() {\r\n return new TreeRoot()\r\n }\r\n\r\n /**\r\n * 通过列表生成一个树结构\r\n * @param items\r\n * @param existed 列表将添加的已经存在的树结构\r\n */\r\n static createByList(items: ITreeListItem[], existed?: TreeRoot): TreeRoot {\r\n let root: TreeRoot = existed;\r\n if (!root) {\r\n root = TreeRoot.create();\r\n }\r\n\r\n for (let val of items) {\r\n let node: any;\r\n if (val.path == \"\") {\r\n continue;\r\n }\r\n if (val.path == \"/\") {\r\n node = root.origin;\r\n } else {\r\n let arr = val.path.substring(1).split(\"/\");\r\n node = root.createNode(arr.pop(), val.isLeaf);\r\n root.addNode(node, arr.join(\"/\"), true)\r\n }\r\n node.data = val.data;\r\n node.tags = val.tags;\r\n }\r\n\r\n return root;\r\n }\r\n\r\n\r\n static sortChildrenByName(node: TreeNode, des: boolean = false) {\r\n node.walk((node) => {\r\n if (!node.isLeaf) {\r\n node.children.sort((a, b) => {\r\n if (des) {\r\n return b.getName().localeCompare(a.getName())\r\n } else {\r\n return a.getName().localeCompare(b.getName())\r\n }\r\n })\r\n }\r\n return true;\r\n });\r\n }\r\n\r\n\r\n constructor() {\r\n super();\r\n\r\n this.origin = this.createNode(\"/\", false);\r\n this.origin.setRoot(this);\r\n this.origin.setTag(\"title\", true)\r\n this.name = this.uuid;\r\n }\r\n\r\n setNodeData(node: TreeNode, data: any) {\r\n if (node.data == data) {\r\n return\r\n }\r\n node.data = data\r\n this.dispatch(TreeRoot.EVENT_DATA_SET, { node: node })\r\n }\r\n\r\n setNodeTags(node: TreeNode, tag: string, value: any, force: boolean = false) {\r\n let tags = node.getTags();\r\n if (!force) {\r\n if (tags[tag] === value) {\r\n return;\r\n }\r\n }\r\n tags[tag] = value;\r\n this.dispatch(TreeRoot.EVENT_TAGS_SET, { node: node, tag: tag, value: value })\r\n }\r\n\r\n getNodeByPath(path: string): TreeNode {\r\n return this.origin.getNodeByPath(path) as TreeNode;\r\n }\r\n\r\n makeNodeByPath(path: string): TreeNode {\r\n if (path == \"\" || path == \"/\") {\r\n return;\r\n }\r\n if (path[0] == \"/\") {\r\n path = path.substring(1);\r\n }\r\n let arr = path.split(\"/\");\r\n let curPath = \"/\";\r\n let lastNode;\r\n for (const string of arr) {\r\n let node = this.createNode(string, false);\r\n this.addNode(node, curPath);\r\n\r\n lastNode = node;\r\n curPath += string + \"/\";\r\n }\r\n\r\n return lastNode;\r\n }\r\n\r\n /**\r\n * 添加节点,按照 node.path 添加到正确的位置\r\n * @param node\r\n * @param parentPath 如果父节点路径为 \"\", 则添加到起源节点\r\n * @param autoCreateParent 如果父节点不存在,自动创建\r\n */\r\n addNode(node: TreeNode, parentPath: string = \"\", autoCreateParent: boolean = false) {\r\n if (parentPath == \"\") {\r\n parentPath = \"/\"\r\n }\r\n let parent = this.origin.getNodeByPath(parentPath)\r\n if (!parent) {\r\n if (autoCreateParent) {\r\n parent = this.makeNodeByPath(parentPath);\r\n } else {\r\n console.warn(`TreeRoot.addNode: parent not found: parentPath=${parentPath}, node.id=${node.id}`)\r\n return\r\n }\r\n }\r\n parent.addChild(node);\r\n this.dispatch(TreeRoot.EVENT_ADD, { node: node, parent: parent });\r\n }\r\n\r\n\r\n removeNode(node: TreeNode) {\r\n let parent = node.parent;\r\n if (!parent) {\r\n return;\r\n }\r\n let index = parent.children.indexOf(node);\r\n if (index != -1) {\r\n parent.children.splice(index, 1);\r\n }\r\n this.dispatch(TreeRoot.EVENT_REMOVE, { node: node, parent: parent });\r\n node.parent = null;\r\n }\r\n\r\n removeChildren(node: TreeNode) {\r\n let children = node.children.concat();\r\n for (let item of children) {\r\n this.removeNode(item)\r\n }\r\n }\r\n\r\n insertNode(node: TreeNode, before: TreeNode, resetId: boolean = true) {\r\n let parent = before.parent;\r\n let index = parent.getChildIndex(before);\r\n if (index == -1) {\r\n throw new Error(\"getChildIndex: 数据异常\")\r\n }\r\n let children = before.parent.children;\r\n let indexLast = parent.getChildIndex(node);\r\n if (indexLast == -1) {\r\n indexLast = children.length;\r\n }\r\n\r\n before.parent.insertChild(node, index);\r\n if (resetId) {\r\n let indexMin = Math.min(index, indexLast);\r\n let indexMax = Math.max(index, indexLast);\r\n for (let i = indexMin; i < indexMax + 1; i++) {\r\n let child = children[i];\r\n child.id = i.toString();\r\n child.setTag(\"title\", i.toString())\r\n this.refresh(child);\r\n }\r\n }\r\n this.dispatch(TreeRoot.EVENT_INSERT, { node: node, before: before });\r\n }\r\n\r\n walk(f: (node: TreeNode) => boolean, inChild?: (node: TreeNode) => boolean) {\r\n this.origin.walk(f, inChild)\r\n }\r\n\r\n walkPrev(f: (node: TreeNode) => boolean, inChild?: (node: TreeNode) => boolean) {\r\n this.origin.walkPrev(f, inChild)\r\n }\r\n\r\n /**\r\n * 派发 refresh 消息\r\n * @param node\r\n */\r\n refresh(node: TreeNode) {\r\n this.dispatch(TreeRoot.EVENT_REFRESH, { node: node });\r\n }\r\n\r\n /**\r\n * 克隆当前的树结\r\n * * 新的tags克隆旧的data\r\n * * 新的data指向旧的data\r\n */\r\n clone(): TreeRoot {\r\n let root = TreeRoot.create();\r\n root.origin = this.origin.clone();\r\n root.origin.fixDepthAndRoot(0, root);\r\n return root;\r\n }\r\n\r\n public toString() {\r\n return `TreeRoot`\r\n }\r\n\r\n createNode(id: string, isLeaf?: boolean): TreeNode {\r\n let node = new TreeNode(id, isLeaf);\r\n node.setRoot(this);\r\n return node;\r\n }\r\n\r\n\r\n /**\r\n * origin的第一个child\r\n */\r\n get firstNode(): TreeNode {\r\n if (!this.origin) {\r\n return null;\r\n }\r\n if (!this.origin.children) {\r\n return null;\r\n }\r\n return this.origin.children[0]\r\n }\r\n\r\n origin: TreeNode\r\n\r\n}\r\n\r\n\r\n///////////////////////////\r\n\r\nexport class TreeRootPlugin {\r\n root: TreeRoot\r\n}\r\n\r\n\r\nexport class TreeNodePlugin {\r\n node: TreeNode\r\n}\r\n","import { EventDispatcher } from \"../event/EventDispatcher\";\r\nimport {identutil} from \"../utils/IdentUtil\";\r\n\r\nexport interface IListItem {\r\n /**\r\n * 编号\r\n */\r\n id: string;\r\n\r\n /**\r\n * 自定义数据\r\n */\r\n data?: any;\r\n\r\n /**\r\n * 功能性标签,用于开发组件时,记录组件的状态。例如title, icon, 显示树的组件,需要 expanded,selected标签\r\n */\r\n tags?: { [key: string]: any }\r\n}\r\n\r\nexport class ListNode {\r\n static create(id: string, data?: any) {\r\n let node = new ListNode();\r\n node.id = id;\r\n node.data = data;\r\n return node;\r\n }\r\n\r\n constructor() {\r\n this.uuid = identutil.genOne()\r\n }\r\n\r\n root: ListSource;\r\n\r\n uuid: string;\r\n id: string;\r\n data: any;\r\n tags = {};\r\n\r\n getTags(): { [key: string]: any } {\r\n if (!this.tags) {\r\n this.tags = {};\r\n }\r\n return this.tags;\r\n }\r\n\r\n setTags(tags: { [key: string]: any }){\r\n let obj = this.getTags();\r\n for (const key in tags) {\r\n obj[key] = tags[key];\r\n }\r\n }\r\n\r\n getTag(name: string): any {\r\n return this.getTags()[name];\r\n }\r\n\r\n setTag(name: string, value: any) {\r\n this.getTags()[name] = value;\r\n }\r\n}\r\n\r\nexport class ListSource extends EventDispatcher {\r\n /**\r\n * 通过数组创建 ListSource。ListSource的id自动生成。如果需要指定编号,可设置 idCreator\r\n * @param arr\r\n * @param idCreator\r\n */\r\n static createByArray(arr: any[], idCreator?: (item: any) => string) {\r\n let root = new ListSource();\r\n for (let i = 0; i < arr.length; i++) {\r\n let item = arr[i];\r\n let id = \"\";\r\n if (idCreator) {\r\n id = idCreator(item);\r\n } else {\r\n id = identutil.genOne();\r\n }\r\n let node = ListNode.create(id, item);\r\n root.add(node, false);\r\n }\r\n return root;\r\n }\r\n\r\n static createByListItem(arr: IListItem[], target?: ListSource): any {\r\n if(!target){\r\n target = new ListSource()\r\n }\r\n for (let i = 0; i < arr.length; i++) {\r\n let item = arr[i];\r\n let id = \"\";\r\n let node = ListNode.create(id);\r\n node.id = item.id;\r\n node.tags = item.tags;\r\n node.data = item.data;\r\n target.add(node, false);\r\n }\r\n return target;\r\n }\r\n\r\n /**\r\n * 设置数据时触发\r\n * dispatchParams = {node:ListNode}\r\n */\r\n static EVENT_ADD = \"add\";\r\n /**\r\n * 设置数据时触发\r\n * dispatchParams = {node:ListNode, index:number}\r\n */\r\n static EVENT_REMOVE = \"remove\";\r\n\r\n /**\r\n * 设置数据时触发\r\n */\r\n static EVENT_REMOVE_ALL = \"remove_all\";\r\n\r\n /**\r\n * 刷新数据节点\r\n * dispatchParams = {node:ListNode}\r\n */\r\n static EVENT_REFRESH = \"refresh\";\r\n\r\n /**\r\n * 设置数据时触发\r\n * dispatchParams = nodes: [ListNode], indexs: [number]\r\n */\r\n static EVENT_SWAP = \"swap\";\r\n /**\r\n * 设置数据时触发\r\n * dispatchParams = {node:ListNode, data:any}\r\n */\r\n static EVENT_DATA_SET = \"data_set\";\r\n /**\r\n * 设置数据时触发\r\n * dispatchParams = {node:ListNode, tag:string, value:any}\r\n */\r\n static EVENT_TAGS_SET = \"tags_set\";\r\n\r\n protected _identFunc: (node: ListNode) => boolean;\r\n\r\n public at(index: number): ListNode {\r\n return this._data[index];\r\n }\r\n\r\n public first(): ListNode {\r\n return this._data[0]\r\n }\r\n\r\n public last(): ListNode {\r\n return this._data[this._data.length - 1]\r\n }\r\n\r\n public length(): number {\r\n return this._data.length;\r\n }\r\n\r\n /**\r\n * 添加项,无法添加相同的项\r\n * @param node\r\n * @param enableDispatch 默认为true\r\n */\r\n public add(node: ListNode, enableDispatch: boolean = true) {\r\n if (this.contains(node)) {\r\n return;\r\n }\r\n this._data.push(node);\r\n node.root = this;\r\n if (enableDispatch) {\r\n this.dispatch(ListSource.EVENT_ADD, {node: node})\r\n }\r\n }\r\n\r\n public getById(id: string): ListNode {\r\n for (let i = 0; i < this._data.length; i++) {\r\n let node = this._data[i];\r\n if (node.id == id) {\r\n return node;\r\n }\r\n }\r\n return null;\r\n }\r\n\r\n public remove(node: ListNode) {\r\n let index = this._data.indexOf(node);\r\n if (index == -1) {\r\n return;\r\n }\r\n\r\n node.root = null;\r\n this._data.splice(index, 1);\r\n this.dispatch(ListSource.EVENT_REMOVE, {node: node, index: index})\r\n }\r\n\r\n public removeAll() {\r\n this._data.length = 0;\r\n this.dispatch(ListSource.EVENT_REMOVE_ALL)\r\n }\r\n\r\n public swap(a: ListNode, b: ListNode) {\r\n let aidx = this.indexOf(a);\r\n let bidx = this.indexOf(b);\r\n let d = this._data;\r\n [d[aidx], d[bidx]] = [d[bidx], a[aidx]];\r\n this.dispatch(ListSource.EVENT_SWAP, {nodes: [a, b], indexs: [aidx, bidx]})\r\n }\r\n\r\n public contains(node: ListNode): boolean {\r\n return this.indexOf(node) != -1\r\n }\r\n\r\n\r\n public containsById(id: string): boolean {\r\n return this.indexOfById(id) != -1\r\n }\r\n\r\n\r\n public indexOf(node: ListNode): number {\r\n for (let i = 0; i < this._data.length; i++) {\r\n let item = this._data[i];\r\n if (item.id == node.id) {\r\n return i;\r\n }\r\n }\r\n\r\n return -1\r\n }\r\n\r\n public indexOfById(id: string): number {\r\n for (let i = 0; i < this._data.length; i++) {\r\n let item = this._data[i];\r\n\r\n if (item.id == id) {\r\n return i;\r\n }\r\n }\r\n\r\n return -1\r\n }\r\n\r\n setData(node: ListNode, data: any) {\r\n if (!node) {\r\n return;\r\n }\r\n node.data = data\r\n this.dispatch(ListSource.EVENT_DATA_SET, {node: node, data: data})\r\n }\r\n\r\n\r\n setNodeTags(node: ListNode, tag: string, value: any) {\r\n let tags = node.getTags();\r\n if (tags[tag] === value) {\r\n return;\r\n }\r\n tags[tag] = value;\r\n this.dispatch(ListSource.EVENT_TAGS_SET, {node: node, tag: tag, value: value})\r\n }\r\n\r\n /**\r\n * 派发 refresh 消息\r\n * @param node\r\n */\r\n refresh(node: ListNode) {\r\n this.dispatch(ListSource.EVENT_REFRESH, {node: node});\r\n }\r\n\r\n walk(f: (node: ListNode) => boolean) {\r\n for (let i = 0; i < this.length(); i++) {\r\n let item = this._data[i];\r\n if (!f(item)) {\r\n return false;\r\n }\r\n }\r\n }\r\n\r\n walkPrev(node: ListNode, f: (node: ListNode) => boolean) {\r\n let index = this.indexOf(node);\r\n if (index == -1) {\r\n return;\r\n }\r\n for (let i = index; i >= 0; i--) {\r\n let item = this._data[i];\r\n if (!f(item)) {\r\n return false;\r\n }\r\n }\r\n }\r\n\r\n get data(): any[] {\r\n return this._data;\r\n }\r\n\r\n private _data = [];\r\n}","export class DictIterator {\n break() {\n this._isBreak = true;\n }\n\n isBreak(): boolean {\n return this._isBreak;\n }\n\n protected _isBreak;\n}\n\nexport class Dictionary<K = string, V = any> {\n constructor(data?: any) {\n if (data) {\n this._data = data;\n } else {\n this._data = {};\n }\n this._onSet = null;\n this._onDelete = null;\n }\n\n public reset(data: any): void {\n this._reset(data);\n }\n\n protected _reset(data: any, size?: number): void {\n this._data = data;\n if (size == undefined) {\n for (let _ in data) {\n size++;\n }\n }\n this.size = size;\n }\n\n public getData(): any {\n return this._data;\n }\n\n /**\n * 如果使用了 onSet or onDelete,需要注意清理\n */\n public clear(): void {\n this._data = {};\n this.size = 0;\n }\n\n /**\n * 克隆自身所有项到【target】对象,并返回【target】对象\n * @param target\n */\n public clone(target: this): this {\n for (const key in this._data) {\n let item = this._data[key];\n // @ts-ignore\n target.setData(key, item);\n }\n return target as this;\n }\n\n public resetByDict(dict: Dictionary): void {\n this._data = dict._data;\n this.size = dict.size;\n }\n\n public onSet(caller: any, handler: (key: K, value: V) => void): void {\n this._onSetCaller = caller;\n this._onSet = handler;\n }\n\n public onDelete(caller: any, handler: (key: K, value: V) => void): void {\n this._onDelete = handler;\n this._onDeleteCaller = caller;\n }\n\n\n /**\n * 设置键值对,如果没有发生变化,不会触发onSet函数\n * @param key\n * @param value\n */\n public set(key: K, value: V): void {\n this.setData(key, value);\n }\n\n private setData(key: K, value: V): void {\n if (this._data.hasOwnProperty(key)) {// 已经存在,数量不变化\n } else {\n this.size++;\n }\n let existed = this._data[key];\n if (existed == value) {\n return;\n }\n this._data[key] = value;\n if (this._onSet !== null) {\n this._onSet.call(this._onSetCaller, key, value);\n }\n }\n\n\n public setByMap(m: any): void {\n for (const key in m) {\n let item = m[key];\n // @ts-ignore\n this.setData(key, item);\n }\n }\n\n public addDictionary(other: Dictionary<K, V>): void {\n if (other.length() == 0) {\n return;\n }\n for (const key in other._data) {\n let item = other._data[key];\n // @ts-ignore\n this.setData(key, item);\n }\n }\n\n public deleteDictionary(other: Dictionary<K, V>): void {\n if (other.length() == 0) {\n return;\n }\n for (const key in other._data) {\n // @ts-ignore\n this.delete(key);\n }\n }\n\n /**\n * 如果不存在,返回 undefined\n * @param key\n */\n public get(key: K): V {\n return this._data[key];\n }\n\n public exist(key: K): boolean {\n return !!this._data[key];\n }\n\n public delete(key: K): void {\n this.deleteData(key);\n }\n\n private deleteData(key: K): void {\n const value = this._data[key];\n if (value === undefined) {\n return;\n }\n if (this._onDelete !== null) {\n this._onDelete.call(this._onDeleteCaller, key, value);\n }\n this._data[key] = null;\n delete this._data[key];\n this.size--;\n }\n\n public exists(key: K): boolean {\n return !!this._data[key];\n }\n\n public length(): number {\n return this.size;\n }\n\n public pop(key: K): [V, boolean] {\n const value = this._data[key];\n this.deleteData(key);\n return [value, value !== undefined];\n }\n\n public isEmpty(): boolean {\n return this.length() === 0;\n }\n\n\n public items(): V[] {\n const items: V[] = [];\n for (const key in this._data) {\n let item = this._data[key];\n items.push(item);\n }\n return items;\n }\n\n public keys(): K[] {\n const keys: K[] = [];\n for (const key in this._data) {\n keys.push(key as K);\n }\n return keys;\n }\n\n /**\n *\n * @param handler 可以使用【iterator】中断遍历\n * @return iterator 获取是否中断了\n */\n public forEach(handler: (key: K, val: V, iterator: DictIterator) => void): DictIterator {\n let iterator = new DictIterator();\n for (const key in this._data) {\n let val = this._data[key]\n // @ts-ignore\n handler(key, val, iterator)\n if (iterator.isBreak()) {\n return iterator;\n }\n }\n return iterator;\n }\n\n\n /**\n */\n public first(): V | undefined {\n for (const key in this._data) {\n return this._data[key]\n }\n return undefined\n }\n\n /**\n * @param handler 返回true结束迭代\n */\n public firstByCondition(handler: (key: K, val: V) => boolean): V | undefined {\n for (const key in this._data) {\n let val = this._data[key]\n // @ts-ignore\n if (handler(key, val)) {\n return val;\n }\n }\n }\n\n\n /**\n * 移除符合条件的项\n * @param cond 可以使用【iterator】中断遍历\n */\n public removeByCondition(cond: (key: K, val: V, iterator: DictIterator) => boolean) {\n let newdata = this._data;\n let newsize = this.size;\n let iterator = new DictIterator();\n for (const key in this._data) {\n let val = this._data[key]\n // @ts-ignore\n if (cond(key, val, iterator)) {\n newsize--;\n delete newdata[key];\n }\n if (iterator.isBreak()) {\n break;\n }\n }\n this.size = newsize;\n }\n\n /**\n * 查找符合条件的项保存到【target】对象中,并返回【target】对象\n * @param cond 可以使用【iterator】中断遍历\n * @param target 存到目标对象中\n */\n public findByCondition(cond: (key: K, val: V, iterator: DictIterator) => boolean, target: Dictionary): this {\n if (!target) {\n throw new Error(\"需要设置目标对象\")\n }\n let iterator = new DictIterator();\n let newdata = {}\n let newsize = 0;\n for (const key in this._data) {\n let val = this._data[key]\n // @ts-ignore\n if (cond(key, val, iterator)) {\n newsize++;\n newdata[key] = val;\n }\n if (iterator.isBreak()) {\n break;\n }\n }\n target._reset(newdata, newsize);\n return target as this;\n }\n\n\n public groupByCondition(createKey: (key: K, val: V) => string, ITEM_CLASS?: any): { [key: string]: any } {\n let newdata = {}\n for (const key in this._data) {\n let val = this._data[key]\n // @ts-ignore\n let newkey = createKey(key, val);\n let dict: Dictionary = newdata[newkey];\n if (!dict) {\n if (ITEM_CLASS) {\n dict = new ITEM_CLASS();\n } else {\n dict = new Dictionary();\n }\n newdata[newkey] = dict;\n }\n dict.set(key, val);\n }\n return newdata;\n }\n\n\n protected size: number = 0;\n private _data: any;\n private _onSet: ((key: K, value: V) => void) | null;\n private _onDelete: ((key: K, value: V) => void) | null;\n private _onSetCaller: any;\n private _onDeleteCaller: any;\n\n}","import {Dictionary} from \"./Dictionary\";\nimport {identutil} from \"../utils/IdentUtil\";\nimport {ListSource} from \"./ListSource\";\nimport {EventDispatcher} from \"../event/EventDispatcher\";\n\n\nexport class DictNode {\n\n static create(id: string, data?: any) {\n let node = new DictNode();\n node.id = id;\n node.data = data;\n return node;\n }\n\n constructor() {\n this.uuid = identutil.genOne()\n }\n\n uuid: string;\n id: string;\n data: any;\n tags = {};\n\n getTags(): { [key: string]: any } {\n if (!this.tags) {\n this.tags = {};\n }\n return this.tags;\n }\n\n getTag(name: string): any {\n return this.getTags()[name];\n }\n\n setTag(name: string, value: any) {\n this.getTags()[name] = value;\n }\n\n /**\n * 清理【data】和【tags】\n */\n clean() {\n this.data = null;\n this.tags = {};\n }\n}\n\nexport class DictSource extends Dictionary<string, DictNode> {\n /**\n * 刷新数据节点\n * dispatchParams = {node:ListNode}\n */\n static EVENT_REFRESH = \"refresh\";\n\n /**\n * 设置数据时触发\n * dispatchParams = {node:ListNode, tag:string, value:any}\n */\n static EVENT_TAGS_SET = \"tags_set\";\n\n setNodeTags(node: DictNode, tag: string, value: any) {\n let tags = node.getTags();\n if (tags[tag] === value) {\n return;\n }\n tags[tag] = value;\n this._dispatcher.dispatch(ListSource.EVENT_TAGS_SET, {node: node, tag: tag, value: value})\n }\n\n refreshNode(node: DictNode) {\n this._dispatcher.dispatch(ListSource.EVENT_REFRESH, {node: node})\n }\n\n get dispatcher(): EventDispatcher {\n return this._dispatcher;\n }\n\n protected _dispatcher = new EventDispatcher();\n}","export class ListIterator {\r\n break() {\r\n this._isBreak = true;\r\n }\r\n\r\n isBreak(): boolean {\r\n return this._isBreak;\r\n }\r\n\r\n protected _isBreak;\r\n}\r\n\r\nexport class List<T = any> {\r\n constructor() {\r\n this._onSet = null;\r\n this._onDelete = null;\r\n }\r\n\r\n public onSet(caller: any, handler: (value: T) => void): void {\r\n this._onSetCaller = caller;\r\n this._onSet = handler;\r\n }\r\n\r\n public onDelete(caller: any, handler: (value: T) => void): void {\r\n this._onDelete = handler;\r\n this._onDeleteCaller = caller;\r\n }\r\n\r\n\r\n firstByCondition(conf: (index: number, item: T) => boolean): [number, T] {\r\n let data = this._data;\r\n for (let i = 0; i < data.length; i++) {\r\n let item = data[i];\r\n if (conf(i, item)) {\r\n return [i, item]\r\n }\r\n }\r\n\r\n return [-1, null];\r\n }\r\n\r\n lastByCondition(conf: (index: number, item: T) => boolean): [number, T] {\r\n let data = this._data;\r\n for (let i = data.length - 1; i >= 0; i--) {\r\n let item = data[i];\r\n if (conf(i, item)) {\r\n return [i, item]\r\n }\r\n }\r\n return [-1, null];\r\n }\r\n\r\n forEach(handler: (index: number, item: T, iterator: ListIterator) => void) {\r\n let iterator = new ListIterator();\r\n let data = this._data;\r\n for (let i = 0; i < data.length; i++) {\r\n let item = data[i];\r\n handler(i, item, iterator);\r\n if (iterator.isBreak()) {\r\n return iterator;\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * 移除符合条件的项, 从后往前遍历\r\n * @param cond 可以使用【iterator】中断遍历\r\n * @param removedList 设置后,可获得被移除的项\r\n */\r\n public removeByCondition(cond: (index: number, val: T, iterator: ListIterator) => boolean, removedList?: List): this {\r\n let iterator = new ListIterator();\r\n let data = this._data;\r\n for (let i = data.length - 1; i >= 0; i--) {\r\n let item = data[i];\r\n if (cond(i, item, iterator)) {\r\n if (removedList) {\r\n removedList.push(item)\r\n }\r\n this.remove(item);\r\n }\r\n if (iterator.isBreak()) {\r\n break;\r\n }\r\n }\r\n\r\n return removedList as this;\r\n }\r\n\r\n /**\r\n * 查找符合条件的项保存到【target】对象中,并返回【target】对象\r\n * @param cond 可以使用【iterator】中断遍历\r\n * @param target 存到目标对象中\r\n */\r\n public findByCondition(cond: (index: number, val: T, iterator: ListIterator) => boolean, target: List): this {\r\n if (!target) {\r\n throw new Error(\"需要设置目标对象\")\r\n }\r\n let iterator = new ListIterator();\r\n let data = this._data;\r\n for (let i = 0; i < data.length; i++) {\r\n let item = data[i];\r\n if (cond(i, item, iterator)) {\r\n\r\n }\r\n if (iterator.isBreak()) {\r\n break;\r\n }\r\n }\r\n return target as this;\r\n }\r\n\r\n\r\n pop(): T {\r\n let item = this._data.pop();\r\n this.callRemove(item)\r\n return item;\r\n }\r\n\r\n shift(): T {\r\n let item = this._data.shift();\r\n this.callRemove(item);\r\n return item;\r\n }\r\n\r\n\r\n first(): T {\r\n return this._data[0];\r\n }\r\n\r\n last(): T {\r\n return this._data[this._data.length - 1];\r\n }\r\n\r\n removeAt(index: number) {\r\n if (index >= 0) {\r\n let removed = this._data.splice(index, 1);\r\n this.callRemove(removed[0])\r\n }\r\n }\r\n\r\n remove(item: T) {\r\n let data = this._data;\r\n let index = data.indexOf(item);\r\n if (index != -1) {\r\n data.splice(index, 1);\r\n this.callRemove(item);\r\n }\r\n }\r\n\r\n /**\r\n * 把【other】的项合并到自身\r\n * @param other\r\n */\r\n removeList(other: List<T>): void {\r\n for (const item of other._data) {\r\n this.remove(item);\r\n }\r\n }\r\n\r\n sort(compareFn?: (a: T, b: T) => number) {\r\n this._data.sort(compareFn)\r\n }\r\n\r\n reverse() {\r\n this._data.reverse();\r\n }\r\n\r\n clear() {\r\n this._data.length = 0;\r\n }\r\n\r\n /**\r\n * 克隆自身所有项到【target】对象,并返回【target】对象\r\n * @param target\r\n */\r\n clone(target: this): this {\r\n let newdata = target.getData().concat(this._data);\r\n target.resetData(newdata);\r\n return target as this;\r\n }\r\n\r\n get length(): number {\r\n return this._data.length;\r\n }\r\n\r\n insertAt(index: number, ...item: T[]) {\r\n this._data.splice(index, 0, ...item);\r\n this.callPush(item);\r\n }\r\n\r\n /**\r\n * @param beforeItem\r\n * @param item\r\n */\r\n insertBefore(beforeItem: T, ...item: T[]) {\r\n let data = this._data;\r\n let index = data.indexOf(beforeItem);\r\n if (index == -1) {\r\n data.push(item);\r\n } else {\r\n data.splice(index - 1, 0, ...item);\r\n }\r\n this.callPush(item);\r\n }\r\n\r\n /**\r\n * @param afterItem\r\n * @param item\r\n */\r\n insertAfter(afterItem: T, ...item: T[]) {\r\n let data = this._data;\r\n let index = data.indexOf(afterItem);\r\n if (index == -1) {\r\n data.push(item);\r\n } else {\r\n data.splice(index, 0, ...item);\r\n }\r\n\r\n this.callPush(item);\r\n }\r\n\r\n at(index: number): T {\r\n return this._data[index];\r\n }\r\n\r\n set(index: number, item: T) {\r\n let existed = this._data[index];\r\n if (existed) {\r\n if (existed == item) {\r\n return;\r\n }\r\n this.callRemove(existed);\r\n }\r\n this._data[index] = item;\r\n this.callPush(item);\r\n }\r\n\r\n indexOf(item: T): number {\r\n return this._data.indexOf(item);\r\n }\r\n\r\n has(item: T): boolean {\r\n return this._data.indexOf(item) != -1\r\n }\r\n\r\n push(item: T) {\r\n this._data.push(item);\r\n this.callPush(item);\r\n }\r\n\r\n\r\n /**\r\n * 把【other】的项合并到自身\r\n * @param other\r\n */\r\n pushList(other: List<T>): void {\r\n for (const item of other._data) {\r\n this.push(item);\r\n }\r\n }\r\n\r\n getData(): T[] {\r\n return this._data\r\n }\r\n\r\n resetData(val: T[]) {\r\n this._data = val;\r\n }\r\n\r\n /**\r\n * 随机获取【count】个项,并返回【target】对象\r\n * @param count\r\n * @param enableRepeat 允许重复\r\n * @param target\r\n */\r\n random(count: number, enableRepeat: boolean = false, target?: List<T>): List<T> {\r\n if (!target) {\r\n target = new List<T>()\r\n }\r\n const copyItems = [...this._data]; // 创建副本以避免修改原数组\r\n for (let i = 0; i < count && copyItems.length > 0; i++) {\r\n const randomIndex = Math.floor(Math.random() * copyItems.length);\r\n target.push(copyItems[randomIndex]);\r\n if (!enableRepeat) {\r\n copyItems.splice(randomIndex, 1); // 移除已选元素以防止重复选择\r\n }\r\n }\r\n return target;\r\n }\r\n\r\n protected callPush(value) {\r\n if (this._onSet !== null) {\r\n this._onSet.call(this._onSetCaller, value);\r\n }\r\n }\r\n\r\n protected callRemove(value) {\r\n if (this._onDelete !== null) {\r\n this._onDelete.call(this._onDeleteCaller, value);\r\n }\r\n }\r\n\r\n protected _data = [];\r\n private _onSet: ((value: T) => void) | null;\r\n private _onDelete: ((value: T) => void) | null;\r\n private _onSetCaller: any;\r\n private _onDeleteCaller: any;\r\n}","import { Dictionary } from \"../ds\";\nimport { IModule } from \"./Module\";\n\nexport interface IController {\n get name(): string;\n\n enable()\n\n disable()\n\n dispose()\n}\n\n\nexport class Controller {\n constructor(name: string) {\n this._name = name;\n }\n\n enable() {\n if (this._enabled) {\n return;\n }\n this._enabled = true;\n }\n\n disable() {\n if (!this._enabled) {\n return;\n }\n this._enabled = false;\n }\n\n dispose() {\n this._enabled = false;\n this._name = \"\";\n }\n\n get name(): string {\n return this._name;\n }\n\n get isEnable() {\n return this._enabled;\n }\n\n protected _name: string;\n protected _enabled: boolean = false;\n}\n\n\nexport class ControllerDict extends Dictionary<string, IController> {\n constructor() {\n super();\n }\n\n disable(name: string) {\n let ctrl = this.get(name);\n if (ctrl) {\n ctrl.disable();\n }\n }\n\n enable(name: string) {\n let ctrl = this.get(name);\n if (ctrl) {\n ctrl.enable();\n }\n }\n\n enableAll() {\n this.forEach((key, ctrl) => {\n ctrl.enable();\n })\n }\n\n disableAll() {\n this.forEach((key, ctrl) => {\n ctrl.disable();\n })\n }\n\n}\n\n\nexport class ControllerRepo extends ControllerDict {\n constructor() {\n super();\n }\n\n register(controller: IController) {\n if (this.get(controller.name)) {\n throw new Error(\"重复创建控制器: \" + name)\n }\n this.set(controller.name, controller);\n }\n\n remove(name: string) {\n let ctrl = this.get(name);\n if (ctrl) {\n ctrl.dispose();\n this.delete(name);\n }\n }\n\n dispose() {\n this.forEach((key, ctrl) => {\n ctrl.dispose();\n })\n }\n}\n\nexport const ctrlrepo = new ControllerRepo();","// 用于描述数据及之间的关系\n// 也可提供对控制器的封装\nimport {EventDispatcher} from \"../event/EventDispatcher\";\nimport {IModule} from \"../frame/Module\";\n\nexport interface IModel {\n get module(): IModule\n}\n\n\nexport class SimpleModel {\n constructor(mod: IModule) {\n this._mod = mod;\n }\n\n get core(): IModule {\n return this._mod\n }\n\n protected _mod: any;\n}\n\nexport class Model extends EventDispatcher {\n constructor(core?: IModule) {\n super();\n\n this._module = core;\n }\n\n get module(): IModule {\n return this._module\n }\n\n protected _module: any;\n}\n","import {IModule} from \"../frame/Module\";\nimport {IExtend} from \"./Extend\";\nimport { IController } from \"../frame/Controller\";\n\nexport class Factory {\n _controllers: { [key: string]: (mod: IModule) => IController } = {}\n _extends: { [key: string]: (mod: IModule, ...args: any) => IExtend } = {}\n\n registerController(name: string, creator: (mod: IModule, ...args: any) => IController) {\n this._controllers[name] = creator\n }\n\n registerExtend(name: string, creator: (mod: IModule, ...args: any) => IExtend) {\n this._extends[name] = creator\n }\n\n createController(name: string, mod: IModule): IController {\n let creator = this._controllers[name];\n if (!creator) {\n throw new Error(\"controller factory not found: \" + name)\n }\n return creator(mod)\n }\n\n createExtend(name: string, mod: IModule, ...args): IExtend {\n let creator = this._extends[name];\n if (!creator) {\n throw new Error(\"extend factory not found: \" + name)\n }\n return creator(mod, ...args)\n }\n\n}\n","import { List } from \"../ds/List\";\nimport {netutil} from \"../utils/NetUtil\";\n\n/**\n * 视图的路由值, 保存视图的信息\n * 规则: path/search\n * path = /a/b/c\n * search = ?key=val&key=val\n */\nexport class Route {\n\n constructor(route: string) {\n this._route = route;\n route = route.replace(\"#/\", \"\");\n let arr = route.split(\"?\");\n if (arr.length === 1) {\n this._path = arr[0];\n } else if (arr.length === 2) {\n this._path = arr[0];\n this._search = \"?\" + arr[1];\n }\n\n this.recycle();\n }\n\n public recycle() {\n this._params = undefined;\n this._name = \"\";\n }\n\n /**\n * 获取调用链\n * 例如 a/b/c,返回 a/b/c -> a/b -> a\n */\n public getLink(): Route[] {\n let arr = this.path.split(\"/\");\n let link = [];\n while (arr.length > 0) {\n link.push(Route.getData(arr.join(\"/\")));\n arr.pop();\n }\n return link;\n }\n\n // 打开界面缓存的route对象\n protected static data: any = {};\n\n public static getData(route: string): Route {\n let r = Route.data[route];\n if (!r) {\n r = new Route(route);\n Route.data[route] = r;\n }\n return r;\n }\n\n public toLoaction(): Location {\n let site = netutil.getLocation();\n let loc = new Location();\n loc.protocol = site.protocol;\n loc.host = site.host;\n loc.hostname = site.hostname;\n loc.port = site.port;\n loc.host = site.host;\n loc.pathname = site.pathname;\n loc.search = site.search;\n loc.hash = this.path + this.search;\n return loc;\n }\n\n\n /**\n * @constructor\n */\n public NewRoute(): Route {\n return Route.getData(this._path + this._search);\n }\n\n /**\n * @constructor\n */\n public NewRoutePath(): Route {\n return Route.getData(this._path);\n }\n\n /**\n * 新建一个带参数的路由\n * @param params\n */\n public NewRouteParam(params: any): Route {\n let search = netutil.encodeLocationSearch(params)\n return Route.getData(this._path + search);\n }\n\n public toString(): string {\n return this._route;\n }\n\n get path(): string {\n return this._path;\n }\n\n get parentPath(): string {\n if (this._parentPath == undefined) {\n let arr = this.path.split(\"/\");\n arr.pop();\n this._parentPath = arr.join(\"/\")\n }\n return this._parentPath;\n }\n\n\n get params(): any {\n if (this._params === undefined) {\n this._params = netutil.decodeLocationSearch(this._search);\n }\n return this._params;\n }\n\n get search(): string {\n return this._search;\n }\n\n set search(value: string) {\n this._search = value;\n this._params = undefined;\n }\n\n public get name(): string {\n if (!this._name) {\n let arr = this.path.split(\"/\");\n this._name = arr[arr.length - 1];\n }\n\n return this._name\n }\n\n /**\n * path/search\n */\n public get key(): string {\n return this.path + this.search;\n }\n\n private _path: string = \"\";\n private _parentPath: string = undefined;\n private _search: string = \"\";\n private _name: string = \"\";\n\n private _params: any;\n protected _route: string = \"\";\n}\n\nexport class RouteList extends List<Route>{\n \n}","import { Controller } from \"./Controller\";\nimport { IModule } from \"./Module\";\nimport { RouteView, ViewState, ViewEvent } from \"./RouteView\";\nimport { Route } from \"./Route\";\nimport { ViewList, viewrepo } from \"./ViewRepo\";\nimport { viewhistorys } from \"./ViewHistory\";\nimport { LinkError } from \"../utils\";\n\n\n\nexport class RouteController extends Controller {\n\n constructor(routePath: string) {\n super(routePath);\n\n this._route = new Route(routePath);\n }\n\n open(...args): RouteView {\n return this.openByRoute();\n }\n\n /**\n * 当视图需要通过路由打开时,需要实现此方法\n * @param route\n */\n openByRoute(route?: Route): RouteView {\n throw \"未实现 openByRoute\"\n }\n\n protected refreshView(view: RouteView) {\n }\n\n\n /**\n * 如果已经关闭了,则返回空\n * @param args \n * @returns \n */\n close(...args):RouteView {\n return this.closeByRoute();\n }\n\n /**\n * 当视图需要通过路由关闭时,需要实现此方法\n * @param route \n * @returns \n */\n closeByRoute(route?: Route): RouteView {\n throw \"未实现 closeByRoute\"\n }\n\n\n\n refresh() {\n this.refreshView(this._lastView);\n }\n\n\n hasTags(tags: string[]): boolean {\n for (let i = 0; i < tags.length; i++) {\n let tag = tags[i];\n for (const key in this._tags) {\n let thistag = this._tags[key];\n if (thistag == tag) {\n return true;\n }\n }\n }\n\n return false;\n }\n\n\n setTags(tags: string[]): this {\n this._tags = tags;\n return this;\n }\n\n get lastView(): RouteView {\n return this._lastView;\n }\n\n get route(): Route {\n return this._route;\n }\n\n protected _route: Route;\n protected _lastView: RouteView;\n protected _tags = {};\n}\n\n","import {instantiate, Node, Prefab} from \"cc\";\nimport {Dictionary} from \"../ds/Dictionary\";\nimport {List} from \"../ds/List\";\n\nexport class UIObjectRepo extends Dictionary<string, any | List> {\n\n /**\n * 获取唯一的\n * @param prefab\n */\n uniqueObject(prefab: Prefab): Node {\n if (!prefab) {\n console.warn(\"未设置prefab\");\n return;\n }\n\n let key = prefab.data.uuid;\n let object = this.get(key);\n if (!object) {\n object = instantiate(prefab);\n this.set(key, object);\n }\n return object;\n }\n\n removeObject(prefab: Prefab) {\n if (!prefab) {\n console.warn(\"未设置prefab\");\n return;\n }\n this.delete(prefab.data.uuid);\n }\n\n\n popObject(prefab: Prefab) {\n let object;\n let key = prefab.data.uuid;\n let list = this.getList(key);\n if (list.length == 0) {\n object = instantiate(prefab);\n } else {\n object = list.pop();\n }\n return object;\n }\n\n backObject(object: Node) {\n // @ts-ignore\n let key = object.prefab.asset.uuid\n let list = this.getList(key);\n list.push(object);\n }\n\n protected getList(key): List {\n let list = this.get(key);\n if (!list) {\n list = new List();\n this.set(key, list);\n }\n return list;\n }\n}\n\n/**\n * 全局的UI对象库,用于管理一些常用的ui对象,例如主界面,背包\n */\nexport var uirepo = new UIObjectRepo();","import { Route } from \"./Route\";\nimport { List } from \"../ds/List\";\nimport { RouteView } from \"./RouteView\";\nimport { UIObjectRepo } from \"./UIObjectDict\";\nimport { IModule } from \"./Module\";\nimport { RouteController } from \"./RouteController\";\nimport { ControllerDict, ctrlrepo } from \"./Controller\";\nimport { Dictionary } from \"../ds\";\n\nexport class ViewList extends List<RouteView> {\n\n}\n\n\n/**\n * 路由唯一编号->视图 \n */\nexport class ViewDict extends Dictionary<string, RouteView> {\n\n}\n\n\nexport class ViewRepo extends ViewDict {\n\n constructor() {\n super();\n }\n\n openByString(route: string): RouteView {\n return this.open(new Route(route))\n }\n\n /**\n * 打开页面\n * 一个路由代表一个页面\n * @param route\n */\n open(route: Route): RouteView {\n let controller = this.getController(route.path);\n if (!controller) {\n throw new Error(\"view controller no register: \" + route.path)\n }\n\n return controller.openByRoute(route);\n }\n\n close(route: Route) {\n let controller = this.getController(route.path);\n if (!controller) {\n throw new Error(\"view controller no register: \" + route.path)\n }\n\n controller.closeByRoute(route);\n }\n\n /**\n * 关闭相斥的视图对象\n * 1. 关闭同一层的所有视图对象\n * 2. 关闭符合相斥规则的视图对象\n * @param view \n * @param validFunc 符合条件的视图对象会被关闭\n * @returns 被关闭的视图\n */\n closeExclusion(validFunc: (existed: RouteView) => boolean = undefined): ViewList {\n if (!validFunc) {\n return;\n }\n let closedList = new ViewList();\n this.forEach((key, item, iterator) => {\n if (validFunc(item)) {\n closedList.push(item);\n }\n })\n\n closedList.forEach((index, item) => {\n let currentCtrl = item.controller;\n item.close();\n })\n return closedList;\n }\n\n\n\n /**\n * 如果页面存在,则刷新\n * @param route\n */\n refresh(route: Route) {\n let view = this.getByRoute(route);\n if (view) {\n view.controller.refresh();\n }\n }\n\n\n getByRoute(route: Route): RouteView {\n return this.get(route.key);\n }\n\n listByRoutePath(path: string): ViewList {\n let list = new ViewList();\n this.forEach((index, item) => {\n if (item.controller.route.path == path) {\n list.push(item);\n }\n })\n return list\n }\n\n\n listByTags(tags: string[]): ViewList {\n let list = new ViewList();\n this.forEach((index, item) => {\n if (item.controller.hasTags(tags)) {\n list.push(item);\n }\n })\n return list\n }\n\n\n protected getController(name: string): RouteController {\n return ctrlrepo.get(name) as RouteController;\n }\n\n\n protected _indexLayer = {};\n protected _indexRoute = {};\n\n}\n\n\nexport const viewrepo = new ViewRepo();","import { Route } from \"./Route\";\nimport { UIObjectRepo } from \"./UIObjectDict\";\nimport { LinkError } from \"../utils/ErrorUtil\";\nimport { RouteController } from \"./RouteController\";\nimport { EventDispatcher } from \"../event/EventDispatcher\";\nimport { Node } from \"cc\"\nimport { viewrepo } from \"./ViewRepo\";\nimport { MapObject } from \"../utils/MapUtil\";\n\nexport enum ViewState {\n /**\n * 关闭\n */\n Closed,\n /**\n * 正在打开\n */\n Opening,\n /**\n * 已打开\n */\n Opened,\n /**\n * 正在关闭\n */\n Closeing,\n}\n\n\nexport enum ViewEvent {\n // 正在打开\n Opening = \"opening\",\n // 已打开\n Opened = \"opened\",\n // 正在打开\n Closeing = \"closeing\",\n // 已关闭\n Closed = \"closed\",\n // 停止\n Stop = \"stop\",\n}\n\n\nexport class RouteView extends EventDispatcher {\n\n constructor(controller: RouteController, route: Route) {\n super();\n this._controller = controller;\n this._route = route;\n }\n\n open() {\n if (this.state != ViewState.Closed) {\n return;\n }\n let route = this.route;\n if (viewrepo.get(route.key)) {\n throw `视图已存在: route=${route.key}`\n }\n viewrepo.set(route.key, this);\n\n this.state = ViewState.Opening;\n this.dispatch(ViewEvent.Opening);\n //\n try {\n //\n if (this._onOpen) {\n this._onOpen(this);\n }\n // @ts-ignore\n if (!this._waitOpenComplete) {\n // 没有被打断,打开完成\n this.openComplete();\n } else {\n // 被打断了,等待完成1\n }\n } catch (e) {\n console.error(`open view ${this.route.key}`)\n console.error(e.stack);\n //\n this.close();\n }\n }\n\n close() {\n if (this.state == ViewState.Closed) {\n return;\n }\n this.state = ViewState.Closeing;\n this.dispatch(ViewEvent.Closeing);\n\n try {\n if (this._onClose) {\n this._onClose(this);\n }\n // @ts-ignore\n if (!this._waitCloseComplete) {\n // 没有被打断,关闭完成\n this.closeComplete();\n } else {\n // 被打断了,等待完成1\n }\n\n } catch (e) {\n console.error(`close view ${this.route.key}`)\n console.error(e.stack);\n }\n }\n\n refresh() {\n try {\n if (this._onRefresh) {\n this._onRefresh(this);;\n }\n } catch (e) {\n console.error(`refresh view ${this.route.key}`)\n console.error(e.stack);\n }\n }\n\n stop(reason?: LinkError) {\n try {\n if (this._onStop) {\n this._onStop(this);;\n }\n } catch (e) {\n console.error(`stop view ${this.route.key}`)\n console.error(e.stack);\n }\n\n this.dispatch(ViewEvent.Stop);\n }\n\n\n /**\n * 等待发送的结果\n * 如果返回 null,表示主动取消 [cancel]\n */\n wait(): Promise<this> {\n switch (this.state) {\n case ViewState.Opening:\n return new Promise((resolve, reject) => {\n let opened = () => {\n this.off(\"opened\", this, opened);\n this.off(\"canceled\", this, opened);\n resolve(this);\n }\n let canceled = () => {\n this.off(\"opened\", this, opened);\n this.off(\"canceled\", this, opened);\n resolve(this);\n }\n this.on(\"opened\", this, opened);\n this.on(\"canceled\", this, canceled);\n });\n case ViewState.Closeing:\n return new Promise((resolve, reject) => {\n let opened = () => {\n this.off(\"closed\", this, opened);\n resolve(this);\n }\n this.on(\"closed\", this, opened);\n });\n default:\n return new Promise((resolve, reject) => {\n resolve(this);\n });\n }\n }\n\n public toString(): string {\n return `View[${this.route.toString()}, ${this.id}]`\n }\n\n /**\n * 等待打开完成指令\n */\n waitOpenComplete() {\n this._waitOpenComplete = true;\n }\n\n openComplete() {\n if (!this._waitOpenComplete) {\n throw \"未执行 waitCloseComplete\"\n }\n this.state = ViewState.Opened;\n // @ts-ignore\n this._waitOpenComplete = false;\n if (this._onOpened) {\n this._onOpened(this);;\n }\n this.dispatch(ViewEvent.Opened);\n }\n\n waitCloseComplete() {\n // @ts-ignore\n this._waitCloseComplete = true;\n }\n\n closeComplete() {\n if (!this._waitCloseComplete) {\n throw \"未执行 waitCloseComplete\"\n }\n viewrepo.delete(this.route.key);\n this._waitCloseComplete = false;\n this.state = ViewState.Closed;\n this.dispatch(ViewEvent.Closed);\n\n if (this._onClosed) {\n this._onClosed(this);\n }\n }\n\n protected _waitOpenComplete: boolean = false;\n protected _waitCloseComplete: boolean = false;\n\n get controller(): RouteController {\n return this._controller;\n }\n\n get route(): Route {\n return this._route;\n }\n\n\n public onOpen(value: (ctx: this) => void): this {\n this._onOpen = value;\n return this;\n }\n\n public onOpened(value: (ctx: this) => void): this {\n this._onOpened = value;\n return this;\n }\n\n public onClose(value: (ctx: this) => void): this {\n this._onClose = value;\n return this;\n }\n public onClosed(value: (ctx: this) => void): this {\n this._onClosed = value;\n return this;\n }\n\n public onRefresh(value: (ctx: this) => void): this {\n this._onRefresh = value;\n return this;\n }\n\n\n /**\n * 默认执行 close();\n * @param value \n * @returns \n */\n public onStop(value: (ctx: this) => void): this {\n this._onStop = value;\n return this;\n }\n\n public get reason(): LinkError {\n return this._reason;\n }\n\n node: Node;\n datas = new MapObject({});\n tags = new MapObject({});\n enableHistory: boolean = false;\n layer: string;\n state: ViewState = 0;\n protected _controller: RouteController;\n protected _route: Route;\n protected _reason: LinkError;\n private _onOpen: (ctx: this) => void;\n private _onOpened: (ctx: this) => void;\n private _onClose: (ctx: this) => void;\n private _onClosed: (ctx: this) => void;\n private _onRefresh: (ctx: this) => void;\n private _onStop: (ctx: this) => void = (ctx) => {\n ctx.close();\n };\n}\n\n","import { Dictionary } from \"../ds/Dictionary\";\r\nimport { Route, RouteList } from \"./Route\";\r\nimport { viewrepo } from \"./ViewRepo\";\r\n\r\nexport class ViewHistory extends RouteList {\r\n\r\n back() {\r\n if (viewhistorys.length == 0) {\r\n return;\r\n }\r\n viewrepo.close(viewhistorys.shift());\r\n\r\n if (viewhistorys.length == 0) {\r\n return;\r\n }\r\n viewrepo.open(viewhistorys.last());\r\n }\r\n}\r\n\r\nexport const viewhistorys = new ViewHistory();","import {CallbackList} from \"./CallbackList\";\r\n\r\n\r\nexport class Listener<PARAMS = any> {\r\n static create(ident?: string) {\r\n return new Listener(ident);\r\n }\r\n\r\n constructor(ident?: string) {\r\n this.ident = ident\r\n }\r\n\r\n getCaller(): any {\r\n return this.caller;\r\n }\r\n\r\n setCaller(caller: any): this {\r\n this.caller = caller;\r\n return this;\r\n }\r\n\r\n setSubIdent(val: string): this {\r\n this._subIdent = val;\r\n return this;\r\n }\r\n\r\n setCondition(condition: (listener: Listener<PARAMS>) => boolean): this {\r\n this._condition = condition;\r\n return this;\r\n }\r\n\r\n setHandler(handler: (listener: Listener<PARAMS>) => void): this {\r\n this._handler = handler;\r\n return this;\r\n }\r\n\r\n setOnParams(val: any): this {\r\n this.onParams = val;\r\n return this;\r\n }\r\n\r\n getIdent(): string {\r\n return this.ident;\r\n }\r\n\r\n on():this {\r\n this._isOn = true;\r\n return this;\r\n }\r\n\r\n off() :this{\r\n this._isOn = false;\r\n return this;\r\n }\r\n\r\n isOn(): boolean {\r\n return this._isOn;\r\n }\r\n\r\n remove(){\r\n this.source.removeListener(this);\r\n }\r\n\r\n /**\r\n * 内部使用\r\n * @param params\r\n * @param subIdent 子编号\r\n */\r\n _dispatch(params: PARAMS, subIdent?: string) {\r\n this.params = params;\r\n if (this._subIdent) {\r\n if (this._subIdent != subIdent) {\r\n return;\r\n }\r\n }\r\n if (this._condition) {\r\n if (!this._condition.call(this.caller, this)) {\r\n return;\r\n }\r\n }\r\n this._handler.call(this.caller, this)\r\n }\r\n\r\n getOnParams(): any {\r\n return this.onParams;\r\n }\r\n\r\n getParams(): PARAMS {\r\n return this.params;\r\n }\r\n\r\n\r\n protected onParams: any;\r\n protected params: PARAMS;\r\n protected ident: string;\r\n protected _subIdent: string\r\n\r\n protected source: CallbackList;\r\n protected _handler: (any) => void;\r\n protected _condition: (any) => boolean;\r\n protected caller: any;\r\n protected _isOn: boolean = true;\r\n\r\n}\r\n\r\n","/**\n * 事件字符串分隔符\n */\nimport {List} from \"../ds/List\";\nimport {Listener} from \"./Listener\";\n\n\n/**\n * 回调列表\n */\nexport class CallbackList<PARAMS = any> {\n\n constructor() {\n }\n\n addListener(listener: Listener) {\n let ident = listener.getIdent();\n if (ident) {\n if (this._indexIdent[ident]) {\n throw new Error(`CallbackList.on: 回调函数已存在: ident=${ident}`)\n }\n this._indexIdent[ident] = listener;\n }\n this._data.push(listener);\n // @ts-ignore\n listener.source = this\n }\n\n removeListener(listener: Listener): void {\n let index = this._data.indexOf(listener);\n if (index != -1) {\n this._data.removeAt(index);\n let ident = listener.getIdent();\n if (ident) {\n delete this._indexIdent[ident];\n }\n }\n }\n\n /**\n */\n create(): Listener<PARAMS> {\n let listener = new Listener();\n this.addListener(listener);\n return listener;\n }\n\n\n /**\n * 如果监听器已经不存在,则创建\n * @param ident\n */\n createByIdent(ident: any): Listener<PARAMS> {\n let listener = this._indexIdent[ident];\n if (listener) {\n return listener;\n }\n listener = new Listener(ident);\n this.addListener(listener);\n return listener;\n }\n\n\n removeByIdent(ident: any) {\n let l = this._indexIdent[ident];\n if (l) {\n this.removeListener(l);\n }\n }\n\n removeByCaller(caller: any) {\n this._data.clone(new List()).forEach((index, val) => {\n if (val.getCaller() == caller) {\n this.removeListener(val);\n }\n })\n }\n\n getByIdent(ident: any): Listener {\n return this._indexIdent[ident];\n }\n\n /**\n * 派发事件\n * @param params 事件参数\n * @param subIdent\n */\n dispatch(params?: PARAMS, subIdent?: string): void {\n if (this._data.length == 0) {\n return;\n }\n let data = this._data.getData()\n for (let listener of data) {\n if (listener.isOn()) {\n listener._dispatch(params, subIdent);\n }\n }\n }\n\n\n protected _data = new List<Listener>();\n protected _indexIdent = {};\n}\n\n\n","/**\n * 事件字符串分隔符\n */\nimport {ISchedulable, Scheduler} from \"cc\";\nimport {Listener} from \"./Listener\";\nimport {CallbackList} from \"./CallbackList\";\nimport {Dictionary} from \"../ds/Dictionary\";\n\n\n/**\n * 事件派发器\n */\nexport class Dispatcher implements ISchedulable {\n\n constructor(name?: string) {\n Scheduler.enableForTarget(this);\n this.name = name;\n }\n\n dispose() {\n this.isDispose = true;\n this.typeToList = undefined;\n }\n\n create(type: string, listener: Listener) {\n this.getList(type).addListener(listener);\n }\n\n\n remove(type: string, listener: Listener): void {\n this.getList(type).removeListener(listener);\n }\n\n getByIdent(type: string, ident: string): Listener {\n return this.getList(type).getByIdent(ident)\n }\n\n /**\n * @param type\n * @param ident\n */\n createByIdent(type: string, ident: string): Listener {\n return this.getList(type).createByIdent(ident)\n }\n\n /**\n * 派发事件\n * @param eventType 事件类型\n * @param params 事件参数\n */\n dispatch(eventType: string, params?: any): void {\n this.getList(eventType).dispatch(params)\n }\n\n protected getList(type: string): CallbackList {\n let list = this.typeToList[type];\n if (!list) {\n list = new CallbackList();\n this.typeToList[type] = list;\n }\n return list;\n }\n\n\n id?: string;\n uuid?: string;\n name: string;\n protected isDispose: boolean = false;\n protected typeToList = new Dictionary<string, CallbackList>();\n\n}\n\n\n\n","class CallbackItem {\n listener: Function;\n caller: any;\n once: boolean;\n}\n\n\nexport class SampleCallbackList {\n\n constructor() {\n }\n\n dispose() {\n this._callbackItems = null;\n }\n\n has(caller: any, listener: Function): boolean {\n return !!this.getItem(caller, listener);\n }\n\n protected getItem(caller: any, listener: Function): CallbackItem {\n let items = this._callbackItems;\n for (const item of items) {\n if (item.caller == caller && item.listener == listener) {\n return item;\n }\n }\n\n return null;\n }\n\n /**\n * 监听事件,如果监听已经存在则返回\n * @param caller\n * @param listener 为了性能考虑, event使用了对象池处理。因此处理函数不应该保存event的引用。如有需要,可通过新建对象或Event.Clone()实现\n */\n on(caller: any, listener: (ctx: this, params?: any) => void): CallbackItem {\n if (!listener) {\n throw new Error(\"listerner is null\")\n }\n if (this.has(caller, listener)) {\n return;\n }\n let existed = this.getItem(caller, listener);\n if (existed) {\n return existed;\n }\n\n let item = new CallbackItem();\n item.caller = caller;\n item.listener = listener;\n let items = this._callbackItems;\n items.push(item);\n return item;\n }\n\n\n once(caller: any, listener: (ctx: this, params?: any) => void): CallbackItem {\n if (!listener) {\n throw new Error(\"listerner is null\")\n }\n if (this.has(caller, listener)) {\n return;\n }\n\n let item: CallbackItem = new CallbackItem();\n item.caller = caller;\n item.listener = listener;\n item.once = true;\n let items = this._callbackItems;\n items.push(item);\n return item;\n }\n\n protected offItem(item: CallbackItem) {\n this.off(item.caller, item.listener);\n }\n\n off(caller: any, listener: Function): void {\n let items = this._callbackItems;\n for (let i = 0; i < items.length; i++) {\n let item = items[i];\n if (item.caller !== caller) {\n continue\n }\n if (listener !== listener) {\n continue\n }\n items.splice(i, 1)\n return;\n }\n }\n\n offAll(type?: string): void {\n let items = this._callbackItems;\n if (!type) {\n items.length = 0;\n }\n }\n\n offAllCaller(caller: any) {\n let items = this._callbackItems;\n items = items.filter((value: CallbackItem, index: number, array: CallbackItem[]) => {\n return value.caller !== caller;\n })\n this._callbackItems = items;\n }\n\n\n /**\n * 派发事件\n * @param params 事件参数\n */\n dispatch(params?: any): void {\n let items = this._callbackItems;\n if (items.length == 0) {\n return;\n }\n\n for (let on of items) {\n on.listener.call(on.caller, this, params);\n }\n }\n\n protected _callbackItems: CallbackItem[] = [];\n}\n","import {path, Rect, Size, SpriteAtlas, SpriteFrame, Vec2} from \"cc\";\n\n\nexport function parseAtlas(name, plist, texture):SpriteAtlas {\n let info = plist.meta;\n let frames = plist.frames;\n\n let atlas = new SpriteAtlas();\n atlas.name = name;\n atlas._nativeAsset = plist;\n let spriteFrames = atlas.spriteFrames;\n // 1/1_1_0.png:{\n // frame: {x: 137, y: 302, w: 18, h: 24}\n // rotated: false\n // sourceSize: {w: 32, h: 32}\n // spriteSourceSize: {x: 7, y: 0, w: 18, h: 24}\n // trimmed: true\n // }\n\n let maxWidth = 0;\n let maxHeight = 0;\n for (let key in frames) {\n let frame = frames[key];\n let rotated = false, sourceSize, offset, textureRect;\n\n rotated = frame.rotated;\n {\n let size = frame.sourceSize;\n sourceSize = new Size(size.w, size.h);\n maxWidth = Math.max(maxWidth, size.w);\n maxHeight = Math.max(maxHeight, size.h);\n }\n {// 需要转化成以sourceSize的中心点为原点,cocos坐标系的偏移量\n let pos = frame.spriteSourceSize;\n offset = new Vec2(pos.x + pos.w * 0.5, pos.y + pos.h * 0.5);\n offset.x -= sourceSize.width * 0.5;\n offset.y -= sourceSize.height * 0.5;\n offset.y = -offset.y;// y轴相反\n }\n {\n let rect = frame.frame;\n textureRect = new Rect(\n rect.x,\n rect.y,\n rect.w,\n rect.h,\n )\n }\n\n var sprite = new SpriteFrame();\n sprite.name = key;\n sprite.reset({\n originalSize: sourceSize,\n rect: textureRect,\n offset: offset,\n isRotate: !!rotated,\n texture: texture\n });\n\n let name = path.mainFileName(key);\n spriteFrames[name] = sprite;\n }\n//\n plist.meta.maxSize = {w: maxWidth, h: maxHeight}\n return atlas;\n}","import { AssetManager, assetManager } from \"cc\";\n\nexport class AssetURI {\n /**\n * \n */\n constructor(public name: string) {\n let arr = name.split(\"://\");\n if (arr.length == 2) {\n let head = arr[0];\n if (head == \"uuid\") {\n this.loadType = 1;\n this.uuid = arr[1];\n } else if (head == \"http\" || head == \"https\") {\n this.loadType = 2;\n } else {\n this.bundle = head;\n this.path = arr[1];\n }\n } else {\n this.bundle = \"resources\"\n this.path = name;\n }\n }\n\n // 0-bundle+path 1-uuid 2-remote\n loadType: number = 0;\n\n uuid: string;\n path: string;\n bundle: string;\n}\n\nexport class XAssetManager {\n\n getAsset(uri: string): any {\n let obj = new AssetURI(uri);\n switch (obj.loadType) {\n case 1:\n return assetManager.assets.get(obj.uuid);\n case 2:\n return assetManager.assets.get(obj.name);\n default:\n let bundle = assetManager.getBundle(obj.bundle);\n if (!bundle) {\n return null;\n }\n return bundle.get(obj.path);\n }\n }\n\n getAssetByUUID(uuid: string): any {\n return assetManager.assets.get(uuid);\n }\n\n\n getRoot(): AssetManager {\n return assetManager;\n }\n\n}\n\nexport let assetx = new XAssetManager();","import {Asset, AssetManager, assetManager, ImageAsset, JsonAsset, path, SpriteAtlas, SpriteFrame, TextAsset, Texture2D} from \"cc\";\nimport {parseAtlas} from \"./ParseAtlas\";\nimport {AssetURI, assetx} from \"./AssetManager\";\nimport { List } from \"../ds\";\nimport { Dispatcher, Listener } from \"../event\";\n\n\nclass LoaderItem {\n\n onComplete?: (err: any, asset: any) => void\n\n callHandler(err: any, asset: any) {\n if (this.onComplete) {\n this.onComplete(err, asset)\n }\n }\n\n getBundle(): AssetManager.Bundle {\n let bundle = this.bundle\n if (!bundle) {\n bundle = assetManager.getBundle(this.uri.bundle);\n this.bundle = bundle;\n }\n\n return bundle;\n }\n\n type: string;\n bundle: AssetManager.Bundle;\n uri: AssetURI;\n\n preload: boolean = false;\n// 记录错误\n error: any;\n\n}\n\n/**\n * uri格式:path, uuid://uuid, https://url\n */\nexport class AssetLoader extends Dispatcher {\n /**\n *\n * @param bundleName\n * @param otherConfig preload:是预加载-否-加载, 包中的资源\n */\n loadBundle(bundleName: string, otherConfig?: {\n onComplete?: (err: any, asset: any) => void\n preload?: boolean,\n }) {\n let item = new LoaderItem();\n item.type = \"Bundle\";\n item.uri = new AssetURI(`${bundleName}://bundle`);\n if (otherConfig) {\n item.preload = otherConfig.preload;\n item.onComplete = otherConfig.onComplete;\n }\n this._loaderList.push(item);\n return this;\n }\n\n\n /**\n * @param uri\n * @param otherConfig\n */\n loadAtlas(uri: string, otherConfig?: {\n onComplete?: (err: any, asset: any) => void\n preload?: boolean,\n }) {\n let item = new LoaderItem();\n item.type = \"Atlas\";\n // 加载json文件\n item.uri = new AssetURI(uri);\n if (otherConfig) {\n item.onComplete = otherConfig.onComplete;\n item.preload = otherConfig.preload != undefined ? otherConfig.preload : false;\n }\n this._loaderList.push(item);\n return this;\n }\n\n loadPrefab(uri: string, otherConfig?: {\n onComplete?: (err: any, asset: any) => void\n preload?: boolean,\n }) {\n let item = new LoaderItem();\n item.type = \"Prefab\";\n // 加载json文件\n item.uri = new AssetURI(uri);\n if (otherConfig) {\n item.onComplete = otherConfig.onComplete;\n item.preload = otherConfig.preload != undefined ? otherConfig.preload : false;\n }\n this._loaderList.push(item);\n return this;\n }\n\n loadJson(uri: string, otherConfig?: {\n onComplete?: (err: any, asset: any) => void\n preload?: boolean,\n }) {\n let item = new LoaderItem();\n item.type = \"Json\";\n item.uri = new AssetURI(uri);\n if (otherConfig) {\n item.onComplete = otherConfig.onComplete;\n item.preload = otherConfig.preload != undefined ? otherConfig.preload : false;\n }\n this._loaderList.push(item);\n return this;\n }\n\n loadSpriteFrame(uri: string, otherConfig?: {\n onComplete?: (err: any, asset: any) => void\n uuid?: string,\n }) {\n let item = new LoaderItem();\n item.type = \"SpriteFrame\";\n item.uri = new AssetURI(uri);\n if (otherConfig) {\n item.onComplete = otherConfig.onComplete;\n }\n this._loaderList.push(item);\n return this;\n }\n\n loadImageAsset(uri: string, otherConfig?: {\n onHandler?: (err: any, asset: any) => void\n }) {\n let item = new LoaderItem();\n item.type = \"ImageAsset\";\n item.uri = new AssetURI(uri);\n if (otherConfig) {\n item.onComplete = otherConfig.onHandler;\n }\n this._loaderList.push(item);\n return this;\n }\n\n protected _loadSpriteFrameByBundle(uri: string, bundle: AssetManager.Bundle) {\n let item = new LoaderItem();\n item.type = \"SpriteFrame\";\n item.uri = new AssetURI(`${bundle.name}://${uri}`);\n item.bundle = bundle;\n this._loaderList.push(item);\n }\n\n\n /**\n * 等待发送的结果\n * 如果返回 null,表示主动取消 [cancel]\n */\n wait(): Promise<this> {\n return new Promise((resolve, reject) => {\n if (this.isComplete()) {\n resolve(this);\n } else {\n let listener = Listener.create()\n let succeed = () => {\n listener.off();\n resolve(this);\n }\n listener.setCaller(this).setHandler(succeed).on();\n this.create(\"complete\", listener)\n }\n });\n }\n\n start(): this {\n this._loaderList.forEach((index, item) => {\n switch (item.type) {\n case \"Bundle\": {\n assetManager.loadBundle(item.uri.bundle, (err, bundle) => {\n if (err) {\n return;\n }\n let loader = this.parseBundleToAssetsLoader(bundle, item);\n loader.onComplete(() => {\n this._loaded++;\n this.validComplete();\n })\n loader.start();\n })\n break;\n }\n case \"Json\": {\n assetManager.loadBundle(item.uri.bundle, (err, bundle) => {\n if (this._stop) {\n return;\n }\n if (err) {\n return;\n }\n this._loaded++;\n this.validComplete();\n });\n break;\n }\n case \"Atlas\": {\n let asset = assetx.getAsset(item.uri.name);\n if (asset) {\n if (asset instanceof SpriteAtlas) {\n this._loaded++;\n item.callHandler(null, asset);\n this.validComplete();\n } else {\n this.handleAtlas(item, asset);\n }\n\n } else {\n // json文件\n this._loadByItem(item, null, (err, asset) => {\n if (!err) {\n this.handleAtlas(item, asset);\n } else {\n this._loaded++;\n this.validComplete();\n }\n })\n }\n break;\n }\n case \"Prefab\": {\n let asset = assetx.getAsset(item.uri.name);\n if (asset) {\n this._loaded++;\n item.callHandler(null, asset);\n this.validComplete();\n } else {\n this._loadByItem(item, null, (err, asset) => {\n this._loaded++;\n item.callHandler(err, asset);\n this.validComplete();\n })\n }\n break;\n }\n case \"SpriteFrame\": {\n this._loadByItem(item, SpriteFrame, (err, asset) => {\n this._loaded++;\n this.validComplete();\n })\n break;\n }\n case \"ImageAsset\": {\n this._loadByItem(item, ImageAsset, (err, asset) => {\n this._loaded++\n this.validComplete();\n })\n break;\n }\n }\n\n });\n return this;\n }\n\n onComplete(val: (loader: AssetLoader) => void): this {\n this._onCompleteHandler = val;\n return this;\n }\n\n onProgress(val: (loader: AssetLoader) => void): this {\n this._onProgressHandler = val;\n return this;\n }\n\n public isComplete(): boolean {\n return this._loaded == this._loaderList.length;\n }\n\n protected validComplete() {\n if (this._stop) {\n return;\n }\n if (this._onProgressHandler) {\n this._onProgressHandler(this);\n }\n if (this._loaded == this._loaderList.length) {\n if (this._onCompleteHandler) {\n this._onCompleteHandler(this);\n }\n\n this.dispatch(\"complete\")\n }\n }\n\n protected parseBundleToAssetsLoader(bundle: AssetManager.Bundle, loaderItem: LoaderItem) {\n let loader = new AssetLoader();\n // @ts-ignore\n let map = bundle._config.assetInfos._map;\n for (const mapKey in map) {\n let assetInfo = map[mapKey];\n if (!assetInfo.ctor) {\n continue\n }\n\n switch (assetInfo.ctor.name) {\n case \"ImageAsset\":\n break;\n case \"Prefab\":\n break;\n case \"SpriteFrame\":\n loader._loadSpriteFrameByBundle(assetInfo.path, bundle);\n break;\n }\n }\n\n return loader\n\n }\n\n protected handleAtlas(item: LoaderItem, atlasAsset: Asset) {\n let content = (() => {\n if (atlasAsset instanceof JsonAsset) {\n return atlasAsset.json;\n } else if (atlasAsset instanceof TextAsset) {\n return JSON.parse(atlasAsset.text);\n } else if (atlasAsset instanceof Asset) {\n return JSON.parse(atlasAsset.nativeAsset);\n }\n })();\n\n\n let textureUrl = \"\";\n let textureItem = new LoaderItem();\n switch (item.uri.loadType) {\n case 2:\n textureItem.type = \"ImageAsset\";\n textureUrl = path.join(path.dirname(item.uri.name), content.meta.image);\n break;\n case 1:\n textureItem.type = \"ImageAsset\";\n textureUrl = atlasAsset._nativeUrl;\n break;\n case 0:\n textureItem.type = \"ImageAsset\";\n textureUrl = item.uri.name\n break;\n }\n textureItem.uri = new AssetURI(textureUrl);\n //\n this._loadByItem(textureItem, ImageAsset, (err: any, asset: any) => {\n if (!err) {\n let tex = new Texture2D();\n tex.image = asset;\n tex.setFilters(1, 1)\n let atlasSprite = parseAtlas(item.uri, content, tex);\n\n let uuid = atlasAsset.uuid;\n assetManager.assets.remove(uuid);\n assetManager.assets.add(uuid, atlasSprite);\n //\n item.callHandler(null, atlasSprite);\n }\n\n this._loaded++\n this.validComplete();\n })\n }\n\n\n protected _loadByItem(item: LoaderItem, type: any, onComplate: (err: any, asset: any) => void) {\n switch (item.uri.loadType) {\n case 0: {\n let bundle = item.getBundle();\n if (!bundle) {\n // todo: 加载 or 报错\n } else {\n if (item.preload) {\n bundle.preload(item.uri.path, type, (err, asset) => {\n if (this._stop) {\n return;\n }\n this._handleFailList(err, item);\n onComplate(err, asset)\n });\n } else {\n bundle.load(item.uri.path, type, (err, asset) => {\n if (this._stop) {\n return;\n }\n this._handleFailList(err, item);\n onComplate(err, asset)\n });\n }\n }\n\n break;\n }\n case 1: {\n if (item.preload) {\n assetManager.preloadAny({uuid: item.uri.uuid}, {type: type}, (err, asset) => {\n if (this._stop) {\n return;\n }\n this._handleFailList(err, item);\n onComplate(err, asset)\n });\n } else {\n assetManager.loadAny({uuid: item.uri.uuid}, {type: type}, (err, asset) => {\n if (this._stop) {\n return;\n }\n this._handleFailList(err, item);\n onComplate(err, asset)\n })\n }\n\n break;\n }\n case 2: {\n assetManager.loadRemote(item.uri.name, (err, asset: any) => {\n this._handleFailList(err, item);\n if (this._stop) {\n return;\n }\n onComplate(err, asset)\n });\n }\n }\n }\n\n // 获取已经加载的数量,报错加载失败的\n getLoaded(): number {\n return this._loaded;\n }\n\n getTotle(): number {\n return this._loaderList.length;\n }\n\n // 获取成功的数量\n getSucceed(): number {\n return this._loaded - this.getFail();\n }\n\n // 获取失败的数量\n getFail(): number {\n return this._failList.length;\n }\n\n getFailList(): List<LoaderItem> {\n return this._failList;\n }\n\n protected _handleFailList(err, item) {\n if (err) {\n console.error(err.toString());\n item.error = err;\n this._failList.push(item);\n }\n }\n\n stop() {\n this._stop = true;\n }\n\n protected _stop: boolean = false;\n protected _onCompleteHandler: Function;\n protected _onProgressHandler: Function;\n protected _loaded = 0;\n protected _loaderList = new List<LoaderItem>();\n protected _failList = new List<LoaderItem>();\n}\n","import {maputil} from \"./MapUtil\";\n\nexport class ArrayUtil {\n lastItem(array: any[]): any {\n return array[array.length - 1]\n }\n\n unique(array: any[]): any[] {\n const temp = [];\n const index = [];\n const l = array.length;\n for (let i = 0; i < l; i++) {\n for (let j = i + 1; j < l; j++) {\n if (array[i] === array[j]) {\n i++;\n j = i;\n }\n }\n temp.push(array[i]);\n index.push(i);\n }\n return temp;\n }\n\n removeSelf(arr: any[], item: any) {\n let idx = arr.indexOf(item);\n if (idx !== -1) {\n arr.splice(idx);\n }\n }\n\n /**\n *\n * @param arr\n * @param desc 降序\n */\n sortNumber(arr: any[], desc: boolean = false): any[] {\n return arr.sort(function (a: any, b: any): number {\n let r: number;\n if (!desc) {\n r = a > b ? 1 : -1;\n } else {\n r = a > b ? -1 : 1;\n }\n return r;\n })\n }\n\n sortString(arr: any[], desc: boolean = false): any[] {\n return arr.sort(function (a: string, b: string): number {\n let r: number;\n if (!desc) {\n r = a.localeCompare(b);\n } else {\n r = b.localeCompare(a);\n }\n return r;\n })\n }\n\n\n getByPath(target: any, key: string): any {\n let arr = key.split(\"/\");\n let last = target;\n for (let a of arr) {\n last = last[a];\n if (!last) {\n break;\n }\n }\n\n return last\n }\n\n sortObject(arr: any[], desc: boolean, ...paths: string[]): any[] {\n let self = this;\n return arr.sort(function (a: any, b: any): number {\n let r = 0;\n if (!desc) {\n for (let key of paths) {\n let va = self.getByPath(a, key);\n let vb = self.getByPath(b, key);\n if (va === vb) {\n continue;\n }\n r = va > vb ? 1 : -1;\n break;\n }\n } else {\n for (let key of paths) {\n let va = self.getByPath(a, key);\n let vb = self.getByPath(b, key);\n if (va === vb) {\n continue;\n }\n r = va > vb ? -1 : 1;\n break;\n }\n }\n return r;\n })\n }\n\n sortBySeq(arr: any[], desc: boolean, seq: { [key: string]: number }, key?: string): any[] {\n let self = this;\n return arr.sort(function (a: any, b: any): number {\n let r = 0;\n let va = a;\n if (key) {\n va = self.getByPath(a, key)\n }\n let vb = b;\n if (key) {\n vb = self.getByPath(b, key)\n }\n if (!desc) {\n if (va === vb) {\n return 0;\n }\n let sva = maputil.number(seq, va);\n let svb = maputil.number(seq, vb);\n r = sva > svb ? 1 : -1;\n } else {\n if (va === vb) {\n return 0;\n }\n let sva = maputil.number(seq, va);\n let svb = maputil.number(seq, vb);\n r = sva > svb ? -1 : 1;\n }\n return r;\n })\n }\n\n\n indexOfConf(arr: any[], caller: any, f: (item: any) => boolean): number {\n for (let i = 0; i < arr.length; i++) {\n let item = arr[i];\n if (f.call(caller, item)) {\n return i;\n }\n }\n\n return -1\n }\n}\n\n\nexport const arrayutil = new ArrayUtil();\n\n","export class BitUtil {\r\n getState(state: number, key: number): boolean {\r\n let a = state & key;\r\n return a !== 0\r\n }\r\n\r\n setState(state: number, key: number, value: boolean): number {\r\n if (value) {\r\n state |= key\r\n } else {\r\n key ^= key;\r\n state &= key;\r\n }\r\n\r\n return state;\r\n }\r\n\r\n /**\r\n * @param state\r\n * @param key\r\n */\r\n getStateBig(state: bigint, key: bigint): boolean {\r\n let a = state & key;\r\n // @ts-ignore\r\n return a !== 0n\r\n }\r\n\r\n setStateBig(state: bigint, key: bigint, value: boolean): bigint {\r\n if (value) {\r\n state |= key\r\n } else {\r\n key ^= key;\r\n state &= key;\r\n }\r\n return state;\r\n }\r\n\r\n\r\n /**\r\n * key从0开始\r\n * @param val\r\n */\r\n convertToState(val: { [key: string]: boolean }): number {\r\n let state = 0;\r\n for (const key in val) {\r\n let bit = parseInt(key) + 1;\r\n state |= 1 << bit;\r\n }\r\n return state;\r\n }\r\n\r\n /**\r\n * 判断是否匹配\r\n * @param target\r\n * @param match 0-返回true\r\n */\r\n match(target: number, match: number): boolean {\r\n if (match > 0) {\r\n if ((target & match) === 0) {\r\n return false;\r\n }\r\n }\r\n return true;\r\n }\r\n}\r\n\r\n\r\nexport const bitutil = new BitUtil();","import {Canvas, director, find, Node} from \"cc\";\n\nexport class CanvasUtil {\n getCanvas(): Canvas {\n let canvas = this._canvas;\n if (!canvas) {\n let node = find(\"Canvas\");\n canvas = node.getComponent(Canvas);\n this._canvas = canvas;\n director.getScene().on(Node.EventType.NODE_DESTROYED, this.onSceneDestroyed);\n }\n return this._canvas;\n }\n\n protected onSceneDestroyed(event) {\n director.getScene().off(Node.EventType.NODE_DESTROYED, this.onSceneDestroyed)\n this._canvas = undefined;\n }\n\n _canvas: Canvas;\n}\n\nexport let canvasutil = new CanvasUtil();","import {Camera} from \"cc\";\nimport { canvasutil } from \"./CavansUtil\";\n\nexport class CameraUtil {\n\n getUICamera(): Camera {\n return canvasutil.getCanvas().cameraComponent\n }\n\n\n}\n\nexport let camerautil = new CameraUtil();","export class DocUtil {\n copyToClip(value: string): boolean {\n var el = document.createElement(\"textarea\");\n el.value = value;\n el.setAttribute('readonly', '');\n el.style.contain = 'strict';\n el.style.position = 'absolute';\n el.style.left = '-9999px';\n el.style.fontSize = '12pt';\n document.body.appendChild(el);\n var selected;\n var selection = document.getSelection();\n if (selection.rangeCount > 0) {\n selected = selection.getRangeAt(0);\n }\n // el.select();\n this.selectText(el, 0, el.value.length);\n let succeed: boolean = false;\n try {\n succeed = document.execCommand('copy');\n } catch (err) {\n }\n document.body.removeChild(el);\n if (selected) {\n document.getSelection().removeAllRanges();\n document.getSelection().addRange(selected);\n }\n\n return succeed;\n }\n\n// ios 兼容\n selectText(textbox, startIndex, stopIndex) {\n if (textbox.createTextRange) {//ie\n var range = textbox.createTextRange();\n range.collapse(true);\n range.moveStart('character', startIndex);//起始光标\n range.moveEnd('character', stopIndex - startIndex);//结束光标\n range.select();//不兼容苹果\n } else {//firefox/chrome\n textbox.setSelectionRange(startIndex, stopIndex);\n textbox.focus();\n }\n }\n}\n\n\nexport var docutil = new DocUtil();","export class EventUtil {\r\n // nameEvent(eventType, entityId, subType: string): string {\r\n // let evt = `${eventType}${$eventSplitChar}${entityId}${$eventSplitChar}${subType}`;\r\n // return evt;\r\n // }\r\n //\r\n // /**\r\n // * @param key bucketName/entityId\r\n // * @param proplink\r\n // */\r\n // namePropChangedGlobal(key: string, proplink: string = \"\"): string {\r\n // if (proplink) {\r\n // return \"PropChanged\" + $eventSplitChar + key + $eventSplitChar + proplink;\r\n // }\r\n // return \"PropChanged\" + $eventSplitChar + key;\r\n // }\r\n //\r\n // /**\r\n // * @param propPath\r\n // */\r\n // namePropChanged(propPath: string = \"\"): string {\r\n // return \"PropChanged\" + $eventSplitChar + propPath\r\n // }\r\n //\r\n // // 网络事件\r\n // nameNet(key: NetIdent, sub: NetSub = NetSub.All): string {\r\n // let evt = `netz${$eventSplitChar}${key}`;\r\n // let substr = () => {\r\n // if (sub !== NetSub.All) {\r\n // return NetSub[sub];\r\n // }\r\n // return \"*\"\r\n // }\r\n // return evt + $eventSplitChar + substr();\r\n // }\r\n //\r\n // // 消息响应事件\r\n // nameResponse(key: string, sub: ResponseSub = ResponseSub.All): string {\r\n // let evt = `Response${$eventSplitChar}${key}`;\r\n // let substr = () => {\r\n // if (sub !== ResponseSub.All) {\r\n // return ResponseSub[sub];\r\n // }\r\n // return \"*\"\r\n // }\r\n // return evt + $eventSplitChar + substr();\r\n // }\r\n //\r\n //\r\n // namePage(key: string, sub: PageEventSub = PageEventSub.All): string {\r\n // let evt = `Page${$eventSplitChar}${key}`;\r\n // let substr = () => {\r\n // if (sub !== PageEventSub.All) {\r\n // return PageEventSub[sub];\r\n // }\r\n // return \"*\";\r\n // }\r\n // return evt + $eventSplitChar + substr();\r\n // }\r\n //\r\n //\r\n // nameFSMState(key: string, state: string): string {\r\n // let evt = `FSM${$eventSplitChar}${key}`;\r\n // return evt + $eventSplitChar + state;\r\n // }\r\n}\r\n\r\n/**\r\n * 框架的事件\r\n */\r\nexport const eventutil = new EventUtil();","export class FloatUtil {\n epsilon = 0.00001;\n\n neq(a: number, b: number, threshold = this.epsilon): boolean {\n return !this.eq(a, b, threshold)\n }\n\n eq(a: number, b: number, threshold = this.epsilon): boolean {\n return Math.abs(a - b) < threshold\n }\n\n gt(a: number, b: number, threshold = this.epsilon): boolean {\n return Math.max(a, b) === a && Math.abs(a - b) > threshold\n }\n\n lt(a: number, b: number, threshold = this.epsilon): boolean {\n return Math.max(a, b) === b && Math.abs(a - b) > threshold\n }\n\n geq(a: number, b: number, threshold = this.epsilon): boolean {\n return Math.max(a, b) === a || Math.abs(a - b) < threshold\n }\n\n leq(a: number, b: number, threshold = this.epsilon): boolean {\n return Math.max(a, b) === b || Math.abs(a - b) < threshold\n }\n\n}\n\nexport let floatutil = new FloatUtil();","import {convertutil} from \"./ConvertUtil\";\r\n\r\nexport namespace formatutil {\r\n /**\r\n * 格式化数字\r\n * @param format 第nn天\r\n * @param val\r\n */\r\n export function toChinese(formatter: string, val: number): string {\r\n let obj = {\r\n \"n+\": changeToCN(val),\r\n };\r\n for (let item in obj) {\r\n if (new RegExp(\"(\" + item + \")\").test(formatter)) {\r\n formatter = formatter.replace(RegExp.$1, obj[item])\r\n }\r\n }\r\n return formatter;\r\n }\r\n\r\n let words = [\"零\", \"一\", \"二\", \"三\", \"四\", \"五\", \"六\", \"七\", \"八\", \"九\", \"十\"];\r\n let adds = [\"\", '十', '百', '千', '万', '亿', '十', '百', '千'];\r\n\r\n /**根据数字获取汉字*/\r\n function changeToCN(num: number): string {\r\n\r\n if (words[num]) {\r\n return words[num];\r\n } else if (num > 10 && num < 20) {\r\n let numStr = num.toString();\r\n let n = numStr.substring(1, 2);\r\n let result = adds[1] + words[n];\r\n return result;\r\n } else if (num > 10) {\r\n let result = \"\";\r\n let numStr = num.toString();\r\n for (var i = 0; i < numStr.length; ++i) {\r\n let n = numStr.substring(i, i + 1);\r\n let m = numStr.length - i - 1;\r\n result += words[n] + adds[m];\r\n }\r\n return result;\r\n } else return \"零\";\r\n }\r\n\r\n /**\r\n * 转换为 x亿x万\r\n * @param val\r\n */\r\n export function format数字使用万亿(val: number | string): string {\r\n let valnum = convertutil.anyToFloat(val);\r\n if (valnum > 10000000000) {// 多加两位比较好看\r\n return Math.floor(valnum / 100000000).toString() + \"亿\";\r\n } else if (valnum > 1000000) {\r\n return Math.floor(valnum / 10000).toString() + \"万\";\r\n }\r\n return valnum.toString();\r\n }\r\n\r\n /**\r\n * 格式化货币,每N位增加一个逗号识别\r\n * @param val\r\n * @param N\r\n */\r\n export function format数字使用逗号(val: number | string, N: number = 3): string {\r\n let valstr = convertutil.anyToString(val);\r\n let count = Math.ceil(valstr.length / N);\r\n let a = [];\r\n for (let i = 0; i < count; i++) {\r\n let start = valstr.length - (i + 1) * N;\r\n let end = start + N;\r\n if (start < 0) {\r\n end = N + start;\r\n start = 0\r\n }\r\n let str = valstr.slice(start, end);\r\n a.push(str);\r\n }\r\n\r\n a = a.reverse();\r\n return a.join(\",\");\r\n }\r\n}","enum GeometryDirection {\n East,\n SouthEast,\n South,\n SouthWest,\n West,\n NorthWest,\n North,\n NorthEast\n}\n\n\n\nexport class GeometryUtil {\n /**\n * mode,8表示八方向,2表示二方向(左右),4表示4方向\n * @param dot\n * @param mode\n */\n angleToDirection(dot: number, mode: number = 8): GeometryDirection {\n if (dot > 180) {\n dot = dot - 360\n }\n var dir = -1;\n switch (mode) {\n case 2:\n //逆时针方向\n if (dot > 0) {\n if (dot < 90) {\n //0-45度\n dir = GeometryDirection.East\n } else {\n //180度\n dir = GeometryDirection.West\n }\n } else {\n dot = -dot\n //顺时针方向\n if (dot < 90) {\n dir = GeometryDirection.East\n } else {\n //180度\n dir = GeometryDirection.West\n }\n }\n break;\n case 4: // 4方向\n //逆时针方向\n if (dot > 0) {\n if (dot < 45) {\n //0-45度\n dir = GeometryDirection.East\n } else if (dot < 135) {\n //67.5度\n dir = GeometryDirection.North\n } else {\n //180度\n dir = GeometryDirection.West\n }\n } else {\n dot = -dot\n //顺时针方向\n if (dot < 45) {\n dir = GeometryDirection.East\n } else if (dot < 135) {\n dir = GeometryDirection.South\n } else {\n //180度\n dir = GeometryDirection.West\n }\n }\n break;\n default:\n //逆时针方向\n if (dot > 0) {\n if (dot < 22.5) {\n //0-22.5度\n dir = GeometryDirection.East\n } else if (dot < 67.5) {\n //67.5度\n dir = GeometryDirection.NorthEast\n } else if (dot < 112.5) {\n //112.5度\n dir = GeometryDirection.North\n } else if (dot < 157) {\n //157度\n dir = GeometryDirection.NorthWest\n } else {\n //180度\n dir = GeometryDirection.West\n }\n } else {\n dot = -dot\n //顺时针方向\n if (dot < 22.5) {\n //0-22.5度\n dir = GeometryDirection.East\n } else if (dot < 67.5) {\n //67.5度\n dir = GeometryDirection.SouthEast\n } else if (dot < 112.5) {\n //112.5度\n dir = GeometryDirection.South\n } else if (dot < 157) {\n //157度\n dir = GeometryDirection.SouthWest\n } else {\n //180度\n dir = GeometryDirection.West\n }\n }\n }\n\n return dir\n }\n\n}\n\nexport let geoutil = new GeometryUtil();","import {Vec2, Vec3, Vec4} from \"cc\";\n\nexport class MathUtil {\n version: number = 0;\n\n TempVec2 = new Vec2();\n TempVec3 = new Vec3();\n TempVec4 = new Vec4();\n\n convertVec2to3(vec2: Vec2, useTemp: boolean = false): Vec3 {\n let vec3: Vec3;\n if (useTemp) {\n vec3 = this.TempVec3;\n } else {\n vec3 = new Vec3()\n }\n vec3.x = vec2.x;\n vec3.y = vec2.y;\n return vec3;\n }\n\n convertVec3to2(vec3: Vec3, useTemp: boolean = false): Vec2 {\n let vec2: Vec2;\n if (useTemp) {\n vec2 = this.TempVec2;\n } else {\n vec2 = new Vec2()\n }\n vec2.x = vec3.x;\n vec2.y = vec3.y;\n return vec2;\n }\n\n isOdd(value:number):boolean{\n return value % 2 != 0\n }\n\n}\n\n\nexport const mathutil = new MathUtil();","export class PathUtil {\r\n\r\n getDir(path:string):string{\r\n return path.substring(0, path.lastIndexOf(\"/\"));\r\n }\r\n\r\n getRelativePath(fromPath: string, toPath: string): string {\r\n const from = fromPath.split('/');\r\n const to = toPath.split('/');\r\n\r\n // 移除共同的目录部分\r\n while (from[0] === to[0]) {\r\n from.shift();\r\n to.shift();\r\n }\r\n\r\n const relativePath = new Array(from.length).fill('..').concat(to).join('/');\r\n return relativePath;\r\n }\r\n\r\n getSamePath(fromPath: string, toPath: string): string {\r\n if (!(fromPath && toPath)) {\r\n return \"\";\r\n }\r\n this.validatePath(fromPath);\r\n this.validatePath(toPath);\r\n const from = this.splitPath(fromPath);\r\n const to = this.splitPath(toPath);\r\n\r\n let same = [];\r\n // 去掉\"/\"\r\n from.shift();\r\n to.shift();\r\n // 添加不同的目录部分\r\n while (from[0] === to[0]) {\r\n same.push(from[0]);\r\n from.shift();\r\n to.shift();\r\n }\r\n\r\n return \"/\" + same.join(\"/\");\r\n }\r\n\r\n protected validatePath(path: string) {\r\n if (!path) {\r\n throw new Error(\"path is null\");\r\n }\r\n\r\n if (path[0] != \"/\") {\r\n throw new Error(\"路径格式错误, 首字母必须为/\");\r\n }\r\n }\r\n\r\n protected splitPath(path: string): string[] {\r\n if (path == \"/\") {\r\n return [\"/\"];\r\n }\r\n let arr = path.split('/');\r\n arr[0] = \"/\";\r\n return arr;\r\n }\r\n\r\n\r\n\r\n}\r\n\r\nexport const pathutil = new PathUtil();","export class RandUtil {\r\n\r\n\r\n /**\r\n * 根据权重随机并返回其中的一个键值\r\n * // key = 键, val=权重\r\n * @param source\r\n * @return source的其中一个key\r\n */\r\n weight(source: { [key: string]: number }): string {\r\n let prev = 0;\r\n let list = [];\r\n let m = {}\r\n let max = 0\r\n let count = 0\r\n for (let k in source) {\r\n let val = source[k];\r\n let cur = prev + val;\r\n list.push(cur);\r\n m[count] = k\r\n count++\r\n\r\n prev = cur\r\n max = cur\r\n }\r\n\r\n if (max == 0) {\r\n return \"\";\r\n }\r\n let n = this.intn(max)\r\n let idx = 0\r\n for (let i = 0; i < list.length; i++) {\r\n let val = list[i];\r\n if (n <= val) {\r\n idx = i\r\n break\r\n }\r\n }\r\n\r\n return m[idx]\r\n }\r\n\r\n /**\r\n * [0, val]\r\n * @param val\r\n */\r\n intn(val: number): number {\r\n return Math.floor(Math.random() * val);\r\n }\r\n\r\n /**\r\n * [min, max)\r\n * @param min\r\n * @param max\r\n */\r\n range(min: number, max: number): number {\r\n if (max == undefined || max == 0) {\r\n return min;\r\n }\r\n let dif = max - min;\r\n // [0, 1)\r\n let r = Math.floor(Math.random() * dif);\r\n return min + r;\r\n }\r\n\r\n\r\n /**\r\n * 在arr中随机返回【count】个元素\r\n * @param arr\r\n * @param count\r\n */\r\n countOfArray(arr: any[], count: number) {\r\n let result = [];\r\n while (count > 0) {\r\n let length = arr.length;\r\n let index = this.intn(length);\r\n result.push(arr[index]);\r\n arr.splice(index, 1);\r\n count--;\r\n }\r\n return result;\r\n\r\n }\r\n\r\n}\r\n\r\nexport const randutil = new RandUtil();\r\n","import {Asset, assetManager, ImageAsset, path, Rect, Size, SpriteAtlas, SpriteFrame, Texture2D, Vec2} from \"cc\";\n\nconst BRACE_REGEX = /[\\{\\}]/g;\n\nfunction parseSize(sizeStr) {\n sizeStr = sizeStr.slice(1, -1);\n let arr = sizeStr.split(',');\n let width = parseFloat(arr[0]);\n let height = parseFloat(arr[1]);\n return new Size(width, height);\n}\n\nfunction parseVec2(vec2Str) {\n vec2Str = vec2Str.slice(1, -1);\n var arr = vec2Str.split(',');\n var x = parseFloat(arr[0]);\n var y = parseFloat(arr[1]);\n return new Vec2(x, y);\n}\n\nfunction parseTriangles(trianglesStr) {\n return trianglesStr.split(' ').map(parseFloat);\n}\n\nfunction parseVertices(verticesStr) {\n return verticesStr.split(' ').map(parseFloat);\n}\n\nfunction parseRect(rectStr) {\n rectStr = rectStr.replace(BRACE_REGEX, '');\n let arr = rectStr.split(',');\n return new Rect(\n parseFloat(arr[0] || 0),\n parseFloat(arr[1] || 0),\n parseFloat(arr[2] || 0),\n parseFloat(arr[3] || 0),\n );\n}\n\nexport function parsePlist(plist, texture) {\n let info = plist.metadata;\n let frames = plist.frames;\n\n let atlas = new SpriteAtlas();\n let spriteFrames = atlas.spriteFrames;\n\n for (let key in frames) {\n let frame = frames[key];\n let rotated = false, sourceSize, offsetStr, textureRect;\n // let trimmed = frame.trimmed;\n if (info.format === 0) {\n rotated = false;\n // trimmed = frame.trimmed;\n sourceSize = `{${frame.originalWidth},${frame.originalHeight}}`;\n offsetStr = `{${frame.offsetX},${frame.offsetY}}`;\n textureRect = `{{${frame.x},${frame.y}},{${frame.width},${frame.height}}}`;\n } else if (info.format === 1 || info.format === 2) {\n rotated = frame.rotated;\n // trimmed = frame.trimmed;\n sourceSize = frame.sourceSize;\n offsetStr = frame.offset;\n textureRect = frame.frame;\n } else if (info.format === 3) {\n rotated = frame.textureRotated;\n // trimmed = frame.trimmed;\n sourceSize = frame.spriteSourceSize;\n offsetStr = frame.spriteOffset;\n textureRect = frame.textureRect;\n }\n\n var sprite = new SpriteFrame();\n sprite.reset({\n originalSize: parseSize(sourceSize),\n rect: parseRect(textureRect),\n offset: parseVec2(offsetStr),\n isRotate: !!rotated,\n texture: texture\n });\n\n let name = path.mainFileName(key);\n spriteFrames[name] = sprite;\n }\n\n return atlas;\n}\n\n\nexport function loadAtlas(url, callback) {\n assetManager.loadRemote(url, function (err, asset: Asset) {\n if (err) {\n return callback(err);\n }\n let plist = asset._nativeAsset;\n let texture = plist.metadata.realTextureFileName || plist.metadata.textureFileName;\n texture = path.join(path.dirname(url), texture);\n assetManager.loadRemote(texture, function (err, imageAsset: ImageAsset) {\n if (err) {\n return callback(err);\n }\n let tex = new Texture2D();\n tex.image = imageAsset;\n tex.setFilters(1, 1)\n let atlasSprite = parsePlist(plist, tex);\n callback(null, atlasSprite);\n });\n });\n}\n","import {AssetManager, assetManager, resources, SpriteAtlas} from \"cc\";\r\nimport {IError, errorutil} from \"./ErrorUtil\";\r\nimport {loadAtlas} from \"./ResUtil/LoadAtlas\";\r\n\r\n\r\nclass ResUtil {\r\n loadResource(path: string): Promise<[any, IError]> {\r\n return new Promise((resolve, reject) => {\r\n resources.load(path, (err, res) => {\r\n if (!err) {\r\n resolve([res, null]);\r\n } else {\r\n resolve([null, errorutil.create(\"load resources\" + err)])\r\n }\r\n })\r\n })\r\n }\r\n\r\n preloadResource(path: string): Promise<[any, IError]> {\r\n return new Promise((resolve, reject) => {\r\n resources.preload(path, (err, res) => {\r\n if (!err) {\r\n resolve([res, null]);\r\n } else {\r\n resolve([null, errorutil.create(\"load resources\" + err)])\r\n }\r\n })\r\n })\r\n }\r\n\r\n\r\n loadBubble(bundle: string): Promise<[AssetManager.Bundle, IError]> {\r\n return new Promise((resolve, reject) => {\r\n assetManager.loadBundle(bundle, (err, res) => {\r\n if (!err) {\r\n resolve([res, null]);\r\n } else {\r\n resolve([null, errorutil.create(\"load bubble\" + err)])\r\n }\r\n })\r\n })\r\n }\r\n\r\n loadBubbleItem(bubble: AssetManager.Bundle, path: string, type: any): Promise<[any, IError]> {\r\n return new Promise((resolve, reject) => {\r\n bubble.load(path, type, (err, res) => {\r\n if (!err) {\r\n resolve([res, null]);\r\n } else {\r\n resolve([null, errorutil.create(\"load bubble item\" + err)])\r\n }\r\n })\r\n })\r\n }\r\n\r\n loadAtlas(path: string): Promise<[SpriteAtlas, IError]> {\r\n return new Promise((resolve, reject) => {\r\n loadAtlas(path, (err, res) => {\r\n if (!err) {\r\n resolve([res, null]);\r\n } else {\r\n resolve([null, errorutil.create(\"load atlas\" + err)])\r\n }\r\n })\r\n })\r\n }\r\n\r\n getByPath(path: string, type: any): any {\r\n let [bundleName, key] = path.split(\" \");\r\n if (bundleName == \"\") {\r\n bundleName = \"resource\"\r\n }\r\n let bundle = assetManager.getBundle(bundleName);\r\n if (!bundle) {\r\n return null;\r\n }\r\n let asset = bundle.get(key, type);\r\n if (!asset) {\r\n return null;\r\n }\r\n return asset;\r\n }\r\n\r\n loadByPath(path: string, type: any): Promise<[any, IError]> {\r\n let [bundleName, key] = path.split(\" \");\r\n if (bundleName == \"\") {\r\n bundleName = \"resource\"\r\n }\r\n return new Promise((resolve, reject) => {\r\n let f = resolve;\r\n let bundle = assetManager.getBundle(bundleName);\r\n if (!bundle) {\r\n assetManager.loadBundle(bundleName, type, (err, bundle) => {\r\n if (!err) {\r\n bundle.load(key, (err, res) => {\r\n if (!err) {\r\n f([res, null]);\r\n } else {\r\n f([null, errorutil.create(\"load bubble item\" + err)])\r\n }\r\n })\r\n } else {\r\n f([null, errorutil.create(\"load bubble\" + err)])\r\n }\r\n })\r\n } else {\r\n let asset = bundle.get(key, type);\r\n if (!asset) {\r\n bundle.load(key, (err, asset) => {\r\n if (!err) {\r\n f([asset, null]);\r\n } else {\r\n f([null, errorutil.create(\"load bubble item\" + err)])\r\n }\r\n })\r\n } else {\r\n f([asset, null]);\r\n }\r\n }\r\n })\r\n }\r\n\r\n loadByPathCallback(path: string, type: any, callback: (any, error) => void) {\r\n let [bundleName, key] = path.split(\" \");\r\n if (bundleName == \"\") {\r\n bundleName = \"resource\"\r\n }\r\n let bundle = assetManager.getBundle(bundleName);\r\n if (!bundle) {\r\n assetManager.loadBundle(bundleName, type, (err, bundle) => {\r\n if (!err) {\r\n bundle.load(key, (err, res) => {\r\n if (!err) {\r\n callback(res, null);\r\n } else {\r\n callback(null, errorutil.create(\"load bubble item\" + err))\r\n }\r\n })\r\n } else {\r\n callback(null, errorutil.create(\"load bubble\" + err))\r\n }\r\n })\r\n } else {\r\n let asset = bundle.get(key, type);\r\n if (!asset) {\r\n bundle.load(key, (err, asset) => {\r\n if (!err) {\r\n callback(asset, null);\r\n } else {\r\n callback(null, errorutil.create(\"load bubble item\" + err))\r\n }\r\n })\r\n } else {\r\n callback(asset, null);\r\n }\r\n }\r\n }\r\n}\r\n\r\nexport var resutil = new ResUtil();","import { maputil } from \"./MapUtil\";\nimport { arrayutil } from \"./ArrayUtil\";\n\nexport class StringUtil {\n lowerFirst(key: string): string {\n if (key.length === 0) {\n return\n }\n let first = key.charAt(0).toLowerCase();\n // @ts-ignore\n return first + key.substring(1);\n }\n\n upperFirst(key: string): string {\n if (key.length === 0) {\n return\n }\n let first = key.charAt(0).toUpperCase();\n // @ts-ignore\n return first + key.substring(1);\n }\n\n cjkEncode(text: any) {\n if (text === null) {\n return \"\";\n }\n let newText = \"\";\n for (let i = 0; i < text.length; i++) {\n let code = text.charCodeAt(i);\n if (code >= 128 || code === 91 || code === 93) {\n // 91 is \"[\", 93 is \"]\".     \n newText += \"[\" + code.toString(16) + \"]\";\n } else {\n newText += text.charAt(i);\n }\n }\n return newText;\n }\n\n replaceFormat(format: string, source: any): string {\n let reg: RegExp = /\\$\\{([\\w\\.]+)}/g;\n\n let result = format;\n while (true) {\n let arr = reg.exec(format);\n if (reg.lastIndex === 0) {\n break;\n }\n\n let all = arr[0];\n let key = arr[1];\n let val = source[key];\n result = result.replace(all, val);\n }\n return result;\n }\n\n\n\n /**\n *\n * @param format\n * @param source\n */\n evalFormat(format: string, source: any): string {\n if (!source) {\n return \"\";\n }\n if (maputil.keys(source).length === 0) {\n return \"\";\n }\n\n let result = format;\n let params = [];\n let reg: RegExp = /\\$\\{([一-龥A-Za-z0-9_]+)}/g;\n while (true) {\n let arr = reg.exec(format);\n if (reg.lastIndex === 0) {\n break;\n }\n\n let code = arr[0];\n let codereg = /([一-龥A-Za-z0-9_]+)/g;\n while (true) {\n let codeexec = codereg.exec(code);\n if (codereg.lastIndex === 0) {\n break;\n }\n let pname = codeexec[0];\n params.push(pname)\n }\n }\n params = arrayutil.unique(params)\n\n try {\n let funcstr = \"\";\n for (let pname of params) {\n if (source.hasOwnProperty(pname)) {\n funcstr += `let ${pname} = this.${pname}\\n`;\n } else {\n funcstr += `let ${pname} = \"\"\\n`;\n }\n }\n funcstr += `return \\`${format}\\``;\n result = new Function(funcstr).call(source);\n } catch (e) {\n\n }\n\n return result\n }\n\n /**\n * 使用[separator]分割字符串,并替换掉在[index]位置的字符串\n * 如果没有发生变化,返回原来的值\n * @param val \n * @param separator \n * @param index \n * @param replace \n * @returns \n */\n replaceIndex(val: string, separator: string, index: number, replace: string = \"\"): string {\n let arr = val.split(separator);\n if (arr.length > index) {\n arr[index] = replace;\n return arr.join(separator); \n }\n return val;\n }\n\n\n splitIndex(val: string, separator: string, index: number, dflt: string = \"\"): string {\n let arr = val.split(separator);\n if (arr.length > index) {\n return arr[index]\n }\n return dflt;\n }\n\n\n splitFirst(val: string, separator: string, dflt: string = \"\"): string {\n let arr = val.split(separator);\n if (arr.length > 0) {\n return arr[0]\n }\n return dflt;\n }\n\n\n splitLast(val: string, separator: string, dflt: string = \"\"): string {\n let arr = val.split(separator);\n if (arr.length > 0) {\n return arr[arr.length - 1]\n }\n return dflt;\n }\n\n /**\n * 从最后一个分隔符截断字符串,返回截断的左右字符串\n * @param val\n * @param separator\n */\n splitLastArray(val: string, separator: string): [string, string] {\n let arr = val.split(separator);\n if (arr.length > 0) {\n let pop = arr.pop();\n return [arr.join(separator), pop]\n }\n return [val, \"\"];\n }\n\n /**\n * 截断字符串\n * @param val\n * @param separator\n * @return [最终的字符串, 被截断的字符串]\n */\n truncateLast(val: string, separator: string): [string, string] {\n let arr = val.split(separator);\n if (arr.length > 0) {\n let s = arr.pop();\n let r = arr.join(separator);\n if (r == \"\") {\n r = \"/\"\n }\n return [r, s];\n }\n return [val, \"\"];\n }\n\n\n fill(str: string, char: string, length: number) {\n while (str.length < length) {\n str = char + str;\n }\n return str;\n }\n}\n\n\nexport const stringutil = new StringUtil();\n","export class TimeUtil {\n\n\n sleep(time: number): Promise<void> {\n return new Promise<void>(function (resolve, reject) {\n setTimeout(() => {\n resolve();\n }, time);\n });\n }\n //\n //\n // export async function Wait(dispatcher: Laya.EventDispatcher, evt: string, timeout: number = -1): Promise<any> {\n // let self = dispatcher;\n // let p = new Promise(\n // function (resolve, reject) {\n // let f = () => {\n // self.off(evt, self, f);\n // Laya.timer.clear(self, f);\n // resolve(\"ok\" + evt);\n // };\n // self.on(evt.toString(), self, f);\n //\n // if (timeout > 0) {\n // let t = () => {\n // self.off(evt, self, f);\n // resolve(\"timeout\" + evt);\n // };\n // Laya.timer.once(2000, self, t)\n // }\n // }\n // );\n // return p;\n // }\n\n /**\n * @param {Number} timeStamp eg:1551323702241\n * @param {String} formatter eg:yyyy-MM-dd yyyy/MM/dd yyyy-M-d yyyy/M/d yyyy-MM-dd hh:mm:ss\n * */\n format(timeStamp: number, formatter: string): string {\n let date = new Date(timeStamp);\n let obj = {\n \"y+\": date.getFullYear(),\n \"M+\": date.getMonth() + 1,\n \"d+\": date.getDate(),\n \"h+\": date.getHours(),\n \"m+\": date.getMinutes(),\n \"s+\": date.getSeconds()\n };\n for (let item in obj) {\n if (new RegExp(\"(\" + item + \")\").test(formatter)) {\n formatter = formatter.replace(RegExp.$1, (RegExp.$1.length > 1 ? this.handleDouble(obj[item]) : obj[item]))\n }\n }\n return formatter\n }\n\n /**\n * @param {Number,String} para\n * @return {String,Number}\n * */\n protected handleDouble(para) {\n return (\"\" + para).length > 1 ? \"\" + para : \"0\" + para\n }\n\n // format= \"hh:mm:ss\"\n formatLeave(time: number, formatter: string): string {\n time = time * 1000;\n let obj = {};\n if (time >= 0) {\n obj = {\n \"d+\": Math.floor(time / (1000 * 60 * 60 * 24)),\n \"H+\": Math.floor(time / (1000 * 60 * 60)),\n \"h+\": Math.floor((time % (1000 * 60 * 60 * 24)) / (1000 * 60 * 60)),\n \"m+\": Math.floor((time % (1000 * 60 * 60)) / (1000 * 60)),\n \"s+\": Math.floor((time % (1000 * 60)) / 1000)\n };\n } else {\n obj = {\n \"d+\": 0,\n \"H+\": 0,\n \"h+\": 0,\n \"m+\": 0,\n \"s+\": 0\n };\n }\n\n for (let item in obj) {\n if (new RegExp(\"(\" + item + \")\").test(formatter)) {\n formatter = formatter.replace(RegExp.$1, (RegExp.$1.length > 1 ? this.handleDouble(obj[item]) : obj[item]))\n }\n }\n\n return formatter\n }\n\n\n\n}\n\nexport const timeutil = new TimeUtil();\n\n","import { TreeRoot } from \"../ds\";\n\nexport class TreeUtil {\n /**\n * 保存指定标签[tag]的值等于[value]的节点\n * @param root\n * @param key 存储的键\n * @param tag\n * @param value\n */\n saveTagToLocalStorage(root: TreeRoot, key: string, tag: string, value: any) {\n let list = [];\n root.walk((node) => {\n let tagValue = node.getTag(tag);\n if (tagValue === value) {\n list.push(node.getPath())\n }\n return true;\n });\n localStorage.setItem(key, JSON.stringify(list))\n }\n\n /**\n * 从ls中加载指定标签[tag]的值还原到[root]。\n * 返回localStorage是否存在键值\n * @param root\n * @param key\n * @param tag\n * @param value\n */\n loadTagFromLocalStorage(root: TreeRoot, key: string, tag: string, value: any): boolean {\n let lsValue = localStorage.getItem(key);\n let expandeds = [];\n if (lsValue) {\n expandeds = JSON.parse(lsValue);\n for (const path of expandeds) {\n let node = root.getNodeByPath(path);\n if (node) {\n node.setTag(tag, value);\n }\n }\n return true;\n }\n return false;\n }\n}\n\nexport var treeutil = new TreeUtil()","import {Node, UITransform, Vec2, Vec3} from \"cc\";\r\n\r\nexport class UIUtil {\r\n /**\r\n * 格式化节点的uuid,用于树结构\r\n * 树结构的路径的反斜杠与uuid有冲突\r\n * @param uuid\r\n */\r\n formatUUIDForTree(uuid: string): string {\r\n return uuid.replace(\"\\/\", \"_\")\r\n }\r\n\r\n /**\r\n * x, y 使用 鼠标点击事件产生的 event.getLocation()坐标\r\n * @param target\r\n * @param x\r\n * @param y\r\n */\r\n hitTest(target: Node, x: number, y: number) {\r\n let node = target;\r\n let parent = node.parent;\r\n if (!parent) {\r\n return false;\r\n }\r\n let transform = node.getComponent(UITransform);\r\n if (!transform) {\r\n return false;\r\n }\r\n let rect = transform.getBoundingBox();\r\n let parentUITransform = parent.getComponent(UITransform);\r\n\r\n hitTestVec3.x = x;\r\n hitTestVec3.y = y;\r\n\r\n parentUITransform.convertToNodeSpaceAR(hitTestVec3, hitTestVec3);\r\n hitTestVec2.x = hitTestVec3.x\r\n hitTestVec2.y = hitTestVec3.y;\r\n\r\n if (rect.contains(hitTestVec2)) {\r\n return true;\r\n }\r\n }\r\n\r\n findNode(node: Node, name: string): Node {\r\n let result = null;\r\n\r\n this.walk(node, (target) => {\r\n if (target.name == name) {\r\n result = target;\r\n return false;\r\n }\r\n return true;\r\n })\r\n\r\n\r\n return result;\r\n\r\n }\r\n\r\n walk(node: Node, f: (target: Node) => boolean) {\r\n this._walk(node, f)\r\n }\r\n\r\n _walk(node: Node, f: (target: Node) => boolean): boolean {\r\n if (!f(node)) {\r\n return false\r\n }\r\n\r\n for (let i = 0; i < node.children.length; i++) {\r\n let child = node.children[i]\r\n if (!this._walk(child, f)) {\r\n return false;\r\n }\r\n }\r\n\r\n return true;\r\n }\r\n\r\n\r\n}\r\n\r\nconst hitTestVec2 = new Vec2();\r\nconst hitTestVec3 = new Vec3();\r\n\r\nexport const uiutil = new UIUtil();","import {math, Node, UITransform, Widget} from \"cc\";\nimport { camerautil } from \"./CameraUtil\";\n\nexport class WidgetAlign {\n\n protected nodeWidget: Widget;\n protected parentTransform: UITransform;\n protected targetTransform: UITransform;\n protected uipos: math.Vec3;\n\n constructor(public node: Node, public targetNode: Node) {\n this.nodeWidget = node.getComponent(Widget);\n this.parentTransform = node.parent.getComponent(UITransform);\n this.targetTransform = targetNode.getComponent(UITransform);\n this.uipos = camerautil.getUICamera().convertToUINode(targetNode.getWorldPosition(), node.parent);\n }\n\n topTop(distance: number = 0) {\n let widget = this.nodeWidget;\n let targetTransform = this.targetTransform;\n let parentTransform = this.parentTransform;\n let uipos = this.uipos;\n //\n widget.isAlignTop = true;\n widget.top = -(targetTransform.height * targetTransform.anchorY) + (parentTransform.height * parentTransform.anchorY) - uipos.y;\n widget.top -= distance;\n }\n\n topBottom(distance: number = 0) {\n let widget = this.nodeWidget;\n let targetTransform = this.targetTransform;\n let parentTransform = this.parentTransform;\n let uipos = this.uipos;\n //\n widget.isAlignTop = true;\n widget.top = (targetTransform.height * targetTransform.anchorY) + (parentTransform.height * parentTransform.anchorY) - uipos.y;\n widget.top -= distance;\n }\n\n\n leftleft(distance: number = 0) {\n let widget = this.nodeWidget;\n let targetTransform = this.targetTransform;\n let parentTransform = this.parentTransform;\n let uipos = this.uipos;\n //\n widget.isAlignLeft = true;\n widget.left = uipos.x - (targetTransform.width * targetTransform.anchorX) + (parentTransform.width * parentTransform.anchorX);\n widget.left += distance;\n }\n\n leftRight(distance: number = 0) {\n let widget = this.nodeWidget;\n let targetTransform = this.targetTransform;\n let parentTransform = this.parentTransform;\n let uipos = this.uipos;\n //\n widget.isAlignLeft = true;\n widget.left = uipos.x + (targetTransform.width * targetTransform.anchorX) + (parentTransform.width * parentTransform.anchorX);\n widget.left += distance;\n }\n}\n\nexport class WidgetUtil {\n /**\n * 与目标顶对齐\n * @param node 需要修改的节点\n * @param parent 对齐的父节点\n * @param distance\n */\n alignTop(node: Node, parent: Node, distance: number = 0) {\n let parentTransform = parent.getComponent(UITransform);\n let topNode = parentTransform.height * (1 - parentTransform.anchorY);// node原点在parent的顶点坐标\n\n let nodeTransform = node.getComponent(UITransform);\n let diffNode = Math.abs(-nodeTransform.height * (1 - nodeTransform.anchorY));// node原点与顶点的偏移量\n\n let pos = node.getPosition();\n pos.y = Math.round(topNode + distance - diffNode);\n node.setPosition(pos);\n }\n\n /**\n * 与目标顶对齐,node和target都必须在渲染树中\n * @param node 需要修改的节点\n * @param target 对齐目标\n * @param distance\n */\n alignTopWorld(node: Node, target: Node, distance: number = 0) {\n let targetTransform = target.getComponent(UITransform)\n let nodeTransform = node.getComponent(UITransform);\n\n let targetPos = target.getWorldPosition();\n let nodePos = node.getWorldPosition();\n\n let topTarget = -targetTransform.height * (1 - targetTransform.anchorY);\n let topNode = -nodeTransform.height * (1 - nodeTransform.anchorY);\n nodePos.y = targetPos.y - Math.round(topTarget - topNode + distance);\n node.setWorldPosition(nodePos);\n }\n\n /**\n * 与目标顶对齐,node和target都必须在渲染树中\n * @param node 需要修改的节点\n * @param target 对齐目标\n * @param distance\n */\n alignBottomWorld(node: Node, target: Node, distance: number = 0) {\n let targetTransform = target.getComponent(UITransform)\n let nodeTransform = node.getComponent(UITransform);\n\n let targetPos = target.getWorldPosition();\n let nodePos = node.getWorldPosition();\n\n let heifhtTarget = targetTransform.height * (1 - targetTransform.anchorY);\n let heightNode = nodeTransform.height * (1 - nodeTransform.anchorY);\n nodePos.y = targetPos.y - Math.round(heifhtTarget + heightNode + distance);\n node.setWorldPosition(nodePos);\n }\n\n /**\n * 调整【node】的widget,对齐【targetNode】\n * @param node\n * @param targetNode\n */\n align(node: Node, targetNode: Node): WidgetAlign {\n return new WidgetAlign(node, targetNode);\n }\n\n\n /**\n * 与目标右对齐\n * @param node 需要修改的节点\n * @param parent 对齐的父节点\n * @param distance\n */\n alignLeft(node: Node, parent: Node, distance: number = 0) {\n let parentTransform = parent.getComponent(UITransform);\n let leftNode = -parentTransform.width * parentTransform.anchorX;// node原点在parent的left坐标\n\n let nodeTransform = node.getComponent(UITransform);\n let diffNode = Math.abs(-nodeTransform.width * nodeTransform.anchorX);// node原点与顶点的偏移量\n\n // let xDif = nodeTransform.width * (0.5 - nodeTransform.anchorX);\n let pos = node.getPosition();\n pos.x = Math.round(leftNode + distance + diffNode);\n node.setPosition(pos);\n }\n\n\n /**\n * 与目标右对齐\n * @param node 需要修改的节点\n * @param target 对齐目标\n * @param distance\n */\n alignLeftWorld(node: Node, target: Node, distance: number = 0) {\n let targetTransform = target.getComponent(UITransform)\n let nodeTransform = node.getComponent(UITransform);\n\n let targetPos = target.getWorldPosition();\n let nodePos = node.getWorldPosition();\n\n let leftTarget = -targetTransform.width * (1 - targetTransform.anchorX);\n let leftNode = -nodeTransform.width * (1 - nodeTransform.anchorX);\n\n nodePos.x = targetPos.x + Math.round(leftTarget - leftNode + distance);\n node.setWorldPosition(nodePos);\n }\n}\n\nexport var widgetutil = new WidgetUtil();"],"names":[],"mappings":"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"}