@zhongguo168a/yxeditor-common 0.0.141 → 0.0.143

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/RouteView.ts","../src/libs/frame/ViewRepo.ts","../src/libs/frame/ViewHistory.ts","../node_modules/tslib/tslib.es6.js","../src/libs/frame/ViewModelComponent.ts","../src/libs/frame/ViewModel.ts","../src/libs/event/Listener.ts","../src/libs/event/CallbackList.ts","../src/libs/event/Dispatcher.ts","../src/libs/event/SampleCallbackList.ts","../src/libs/loader/AssetManager.ts","../src/libs/loader/ParseAtlas.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/Dictionary\";\nimport { convertutil } from \"./ConvertUtil\";\n\nexport class MapObject extends Object {\n set(key: string, val: any) {\n this[key] = val;\n }\n\n delete(key: string) {\n delete this[key];\n }\n\n\n isUndefined(key: string): boolean {\n return this[key] == undefined;\n }\n\n getNumber(key: string): number {\n return maputil.number(this, key);\n }\n\n getString(key: string): string {\n return maputil.string(this, key);\n }\n getBoolean(key: string): boolean {\n return maputil.boolean(this, key);\n }\n get(key: string): any {\n return this[key];\n }\n\n}\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 convertutil.anyToBoolean(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 public flat(): TreeNode[] {\r\n let result = [];\r\n this.walkBFS((node)=>{\r\n result.push(node);\r\n return true;\r\n })\r\n return result;\r\n }\r\n\r\n /**\r\n * 广度优先遍历(BFS):从当前节点开始,逐层遍历子树\r\n * @param f - 节点处理函数,返回 false 表示停止遍历\r\n * @param inChild - 决定是否将子节点加入队列:若提供,调用 inChild(node),返回 true 才加入其子节点\r\n */\r\n public walkBFS(f: (node: TreeNode) => boolean, inChild?: (node: TreeNode) => boolean): boolean {\r\n const queue: TreeNode[] = [this]; // 初始化队列\r\n\r\n while (queue.length > 0) {\r\n const node = queue.shift()!; // 取出队首节点\r\n\r\n try {\r\n // 1. 处理当前节点\r\n if (!f(node)) {\r\n return false; // 停止遍历\r\n }\r\n } catch (e) {\r\n console.warn('walkBFS error:', e);\r\n return false;\r\n }\r\n\r\n // 2. 决定是否展开子节点\r\n const shouldEnqueueChildren = inChild ? inChild(node) : true;\r\n if (!shouldEnqueueChildren || node.isLeaf) {\r\n continue;\r\n }\r\n\r\n // 3. 将子节点加入队列(从左到右)\r\n if (node.children?.length) {\r\n for (const child of node.children) {\r\n queue.push(child);\r\n }\r\n }\r\n }\r\n\r\n return true; // 遍历完成\r\n }\r\n\r\n /**\r\n * 如果返回true则继续,包含当前节点\r\n * 深度优先遍历(DFS)\r\n * @param f\r\n * @param inChild 如果返回true,则继续遍历, 否则不进入节点的子节点\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 if(!node.children || node.children.length == 0){\r\n return;\r\n }\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 get 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 resetData(data:any[]){\r\n this._data = data;\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(reason?: any) {\n this._isBreak = true;\n this._reason = reason;\n }\n\n isBreak(): boolean {\n return this._isBreak;\n }\n\n getReason(): any {\n return this._reason;\n }\n protected _reason: any;\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(useIter: boolean = true): void {\n let data = this._data;\n if (useIter) {\n let keys = this.keys();\n for (const key of keys) {\n this.delete(key);\n }\n } else {\n this._data = {};\n this.size = 0;\n }\n }\n\n /**\n * 克隆自身所有项到【target】对象,并返回【target】对象\n * @param target\n */\n public clone(target: Dictionary<K, V>): Dictionary<K, V> {\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 Dictionary<K, V>;\n }\n\n public resetByDict(dict: Dictionary<K, V>): 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(keys: K[]): boolean {\n for (let i = 0; i < keys.length; i++) {\n let key = keys[i];\n if (!this.exist(key)) {\n return false;\n }\n }\n return true;\n }\n\n public get 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 groupByKey(keyCreator: (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 = keyCreator(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 countByKeyList(keyCreator: (key: K, val: V) => string[]): { [key: string]: number } {\n let newdata = {}\n for (const key in this._data) {\n let val = this._data[key]\n // @ts-ignore\n let newkeyList = keyCreator(key, val);\n for (const newkey of newkeyList) {\n let count = newdata[newkey];\n if (count == undefined) {\n count = 0;\n }\n count++;\n newdata[newkey] = count;\n }\n }\n return newdata;\n }\n\n\n\n countByKey(keyCreator: (key: K, val: V) => string): { [key: string]: number } {\n let newdata = {}\n for (const key in this._data) {\n let val = this._data[key]\n // @ts-ignore\n let newkey = keyCreator(key, val);\n let count = newdata[newkey];\n if (count == undefined) {\n count = 0;\n }\n count++;\n newdata[newkey] = count;\n }\n return newdata;\n }\n\n protected size: number = 0;\n protected _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(reason?: any) {\r\n this._isBreak = true;\r\n this._reason = reason;\r\n }\r\n\r\n isBreak(): boolean {\r\n return this._isBreak;\r\n }\r\n\r\n getReason(): any {\r\n return this._reason;\r\n }\r\n protected _reason: any;\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): ListIterator {\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 return iterator;\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<T>): ListIterator {\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 iterator;\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 /**\r\n * useIter默认为true,因为如果是false的话,没有触发onSet,导致数据污染\r\n * @param useIter 使用遍历的方式可以触发onSet\r\n */\r\n clear(useIter: boolean = true) {\r\n let data = this._data;\r\n if (useIter) {\r\n for (let i = 0; i < data.length; i++) {\r\n const item = data[i];\r\n this.remove(item);\r\n }\r\n } else {\r\n this._data.length = 0;\r\n }\r\n }\r\n\r\n /**\r\n * 克隆自身所有项到【target】对象,并返回【target】对象\r\n * @param target\r\n * @param useIter 使用遍历的方式可以触发onSet\r\n */\r\n clone(target: this, useIter: boolean = true): this {\r\n let data = this._data;\r\n if (useIter) {\r\n for (let i = 0; i < data.length; i++) {\r\n const item = data[i];\r\n target.push(item);\r\n }\r\n } else {\r\n let newdata = target.getData().concat(data);\r\n target.resetData(newdata);\r\n }\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 let data = this._data;\r\n if (data.length <= 0) {\r\n return target;\r\n }\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 /**\r\n * 随机获取【count】个项,并返回【target】对象\r\n * @param count\r\n * @param enableRepeat 允许重复\r\n * @param target\r\n */\r\n randomOne(): T {\r\n let data = this._data;\r\n if (data.length <= 0) {\r\n return null;\r\n }\r\n\r\n const randomIndex = Math.floor(Math.random() * data.length);\r\n return data[randomIndex];\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\";\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\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 { UIObjectRepo } from \"./UIObjectDict\";\nimport { LinkError } from \"../utils/ErrorUtil\";\nimport { RouteController } from \"./RouteController\";\nimport { EventDispatcher } from \"../event/EventDispatcher\";\nimport { instantiate, Node, Prefab } from \"cc\"\nimport { MapObject } from \"../utils/MapUtil\";\nimport { ViewModel } from \"./ViewModel\";\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\n this.state = ViewState.Opening;\n this.dispatch(ViewEvent.Opening);\n //\n try {\n //\n if (this._onOpen) {\n this._onOpen(this);\n }\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 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\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.state == ViewState.Opened) {\n return;\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.state == ViewState.Closed) {\n return;\n }\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 /**\n * \n * @param asset 通过此方法创建的节点,自动添加 RouteComponent 到节点上\n */\n createNode(asset: Prefab) {\n let node = instantiate(asset);\n this.node = node;\n // let com = node.addComponent(RouteComponent);\n // com.viewModel = this;\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 { 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\";\nimport { ViewModelComponent } from \"./ViewModelComponent\";\nimport { Node } from \"cc\";\nimport { ViewModel } from \"./ViewModel\";\n\nexport class ViewList extends List<ViewModel> {\n\n}\n\n\n/**\n * 路由唯一编号->视图 \n */\nexport class ViewDict extends Dictionary<string, ViewModel> {\n /**\n * 关闭相斥的视图对象\n * 1. 关闭同一层的所有视图对象\n * 2. 关闭符合相斥规则的视图对象\n * @param view \n * @param validFunc 符合条件的视图对象会被关闭\n * @returns 被关闭的视图\n */\n closeExclusion(validFunc: (existed: ViewModel) => 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 item.close();\n })\n return closedList;\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\n}\n\n\nexport class RouteViewDict 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 /**\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): ViewModel {\n return this.get(route.key);\n }\n\n\n\n protected getController(name: string): RouteController {\n return ctrlrepo.get(name) as RouteController;\n }\n\n}\n\n\nexport const routeViews = new RouteViewDict();","import { Dictionary } from \"../ds/Dictionary\";\r\nimport { Route, RouteList } from \"./Route\";\r\nimport { routeViews } 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 routeViews.close(viewhistorys.shift());\r\n\r\n if (viewhistorys.length == 0) {\r\n return;\r\n }\r\n routeViews.open(viewhistorys.last());\r\n }\r\n}\r\n\r\nexport const viewhistorys = new ViewHistory();","/******************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise, SuppressedError, Symbol, Iterator */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n if (typeof b !== \"function\" && b !== null)\r\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __esDecorate(ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {\r\n function accept(f) { if (f !== void 0 && typeof f !== \"function\") throw new TypeError(\"Function expected\"); return f; }\r\n var kind = contextIn.kind, key = kind === \"getter\" ? \"get\" : kind === \"setter\" ? \"set\" : \"value\";\r\n var target = !descriptorIn && ctor ? contextIn[\"static\"] ? ctor : ctor.prototype : null;\r\n var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});\r\n var _, done = false;\r\n for (var i = decorators.length - 1; i >= 0; i--) {\r\n var context = {};\r\n for (var p in contextIn) context[p] = p === \"access\" ? {} : contextIn[p];\r\n for (var p in contextIn.access) context.access[p] = contextIn.access[p];\r\n context.addInitializer = function (f) { if (done) throw new TypeError(\"Cannot add initializers after decoration has completed\"); extraInitializers.push(accept(f || null)); };\r\n var result = (0, decorators[i])(kind === \"accessor\" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);\r\n if (kind === \"accessor\") {\r\n if (result === void 0) continue;\r\n if (result === null || typeof result !== \"object\") throw new TypeError(\"Object expected\");\r\n if (_ = accept(result.get)) descriptor.get = _;\r\n if (_ = accept(result.set)) descriptor.set = _;\r\n if (_ = accept(result.init)) initializers.unshift(_);\r\n }\r\n else if (_ = accept(result)) {\r\n if (kind === \"field\") initializers.unshift(_);\r\n else descriptor[key] = _;\r\n }\r\n }\r\n if (target) Object.defineProperty(target, contextIn.name, descriptor);\r\n done = true;\r\n};\r\n\r\nexport function __runInitializers(thisArg, initializers, value) {\r\n var useValue = arguments.length > 2;\r\n for (var i = 0; i < initializers.length; i++) {\r\n value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);\r\n }\r\n return useValue ? value : void 0;\r\n};\r\n\r\nexport function __propKey(x) {\r\n return typeof x === \"symbol\" ? x : \"\".concat(x);\r\n};\r\n\r\nexport function __setFunctionName(f, name, prefix) {\r\n if (typeof name === \"symbol\") name = name.description ? \"[\".concat(name.description, \"]\") : \"\";\r\n return Object.defineProperty(f, \"name\", { configurable: true, value: prefix ? \"\".concat(prefix, \" \", name) : name });\r\n};\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === \"function\" ? Iterator : Object).prototype);\r\n return g.next = verb(0), g[\"throw\"] = verb(1), g[\"return\"] = verb(2), typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (g && (g = 0, op[0] && (_ = 0)), _) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n var desc = Object.getOwnPropertyDescriptor(m, k);\r\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\r\n desc = { enumerable: true, get: function() { return m[k]; } };\r\n }\r\n Object.defineProperty(o, k2, desc);\r\n}) : (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n});\r\n\r\nexport function __exportStar(m, o) {\r\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\r\n}\r\n\r\nexport function __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n}\r\n\r\nexport function __spreadArray(to, from, pack) {\r\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\r\n if (ar || !(i in from)) {\r\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\r\n ar[i] = from[i];\r\n }\r\n }\r\n return to.concat(ar || Array.prototype.slice.call(from));\r\n}\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = Object.create((typeof AsyncIterator === \"function\" ? AsyncIterator : Object).prototype), verb(\"next\"), verb(\"throw\"), verb(\"return\", awaitReturn), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function awaitReturn(f) { return function (v) { return Promise.resolve(v).then(f, reject); }; }\r\n function verb(n, f) { if (g[n]) { i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; if (f) i[n] = f(i[n]); } }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: false } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nvar __setModuleDefault = Object.create ? (function(o, v) {\r\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\r\n}) : function(o, v) {\r\n o[\"default\"] = v;\r\n};\r\n\r\nvar ownKeys = function(o) {\r\n ownKeys = Object.getOwnPropertyNames || function (o) {\r\n var ar = [];\r\n for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;\r\n return ar;\r\n };\r\n return ownKeys(o);\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== \"default\") __createBinding(result, mod, k[i]);\r\n __setModuleDefault(result, mod);\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\r\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\r\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\r\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\r\n}\r\n\r\nexport function __classPrivateFieldIn(state, receiver) {\r\n if (receiver === null || (typeof receiver !== \"object\" && typeof receiver !== \"function\")) throw new TypeError(\"Cannot use 'in' operator on non-object\");\r\n return typeof state === \"function\" ? receiver === state : state.has(receiver);\r\n}\r\n\r\nexport function __addDisposableResource(env, value, async) {\r\n if (value !== null && value !== void 0) {\r\n if (typeof value !== \"object\" && typeof value !== \"function\") throw new TypeError(\"Object expected.\");\r\n var dispose, inner;\r\n if (async) {\r\n if (!Symbol.asyncDispose) throw new TypeError(\"Symbol.asyncDispose is not defined.\");\r\n dispose = value[Symbol.asyncDispose];\r\n }\r\n if (dispose === void 0) {\r\n if (!Symbol.dispose) throw new TypeError(\"Symbol.dispose is not defined.\");\r\n dispose = value[Symbol.dispose];\r\n if (async) inner = dispose;\r\n }\r\n if (typeof dispose !== \"function\") throw new TypeError(\"Object not disposable.\");\r\n if (inner) dispose = function() { try { inner.call(this); } catch (e) { return Promise.reject(e); } };\r\n env.stack.push({ value: value, dispose: dispose, async: async });\r\n }\r\n else if (async) {\r\n env.stack.push({ async: true });\r\n }\r\n return value;\r\n\r\n}\r\n\r\nvar _SuppressedError = typeof SuppressedError === \"function\" ? SuppressedError : function (error, suppressed, message) {\r\n var e = new Error(message);\r\n return e.name = \"SuppressedError\", e.error = error, e.suppressed = suppressed, e;\r\n};\r\n\r\nexport function __disposeResources(env) {\r\n function fail(e) {\r\n env.error = env.hasError ? new _SuppressedError(e, env.error, \"An error was suppressed during disposal.\") : e;\r\n env.hasError = true;\r\n }\r\n var r, s = 0;\r\n function next() {\r\n while (r = env.stack.pop()) {\r\n try {\r\n if (!r.async && s === 1) return s = 0, env.stack.push(r), Promise.resolve().then(next);\r\n if (r.dispose) {\r\n var result = r.dispose.call(r.value);\r\n if (r.async) return s |= 2, Promise.resolve(result).then(next, function(e) { fail(e); return next(); });\r\n }\r\n else s |= 1;\r\n }\r\n catch (e) {\r\n fail(e);\r\n }\r\n }\r\n if (s === 1) return env.hasError ? Promise.reject(env.error) : Promise.resolve();\r\n if (env.hasError) throw env.error;\r\n }\r\n return next();\r\n}\r\n\r\nexport function __rewriteRelativeImportExtension(path, preserveJsx) {\r\n if (typeof path === \"string\" && /^\\.\\.?\\//.test(path)) {\r\n return path.replace(/\\.(tsx)$|((?:\\.d)?)((?:\\.[^./]+?)?)\\.([cm]?)ts$/i, function (m, tsx, d, ext, cm) {\r\n return tsx ? preserveJsx ? \".jsx\" : \".js\" : d && (!ext || !cm) ? m : (d + ext + \".\" + cm.toLowerCase() + \"js\");\r\n });\r\n }\r\n return path;\r\n}\r\n\r\nexport default {\r\n __extends: __extends,\r\n __assign: __assign,\r\n __rest: __rest,\r\n __decorate: __decorate,\r\n __param: __param,\r\n __esDecorate: __esDecorate,\r\n __runInitializers: __runInitializers,\r\n __propKey: __propKey,\r\n __setFunctionName: __setFunctionName,\r\n __metadata: __metadata,\r\n __awaiter: __awaiter,\r\n __generator: __generator,\r\n __createBinding: __createBinding,\r\n __exportStar: __exportStar,\r\n __values: __values,\r\n __read: __read,\r\n __spread: __spread,\r\n __spreadArrays: __spreadArrays,\r\n __spreadArray: __spreadArray,\r\n __await: __await,\r\n __asyncGenerator: __asyncGenerator,\r\n __asyncDelegator: __asyncDelegator,\r\n __asyncValues: __asyncValues,\r\n __makeTemplateObject: __makeTemplateObject,\r\n __importStar: __importStar,\r\n __importDefault: __importDefault,\r\n __classPrivateFieldGet: __classPrivateFieldGet,\r\n __classPrivateFieldSet: __classPrivateFieldSet,\r\n __classPrivateFieldIn: __classPrivateFieldIn,\r\n __addDisposableResource: __addDisposableResource,\r\n __disposeResources: __disposeResources,\r\n __rewriteRelativeImportExtension: __rewriteRelativeImportExtension,\r\n};\r\n","import { _decorator, Component, Node } from \"cc\";\nimport { RouteView } from \"./RouteView\";\nimport { ViewModel } from \"./ViewModel\";\n\nconst { ccclass, property, menu } = _decorator;\n\n@ccclass('ViewModelComponent')\nexport class ViewModelComponent extends Component {\n /**\n * 往上追踪,返回第一个包含 RouteComponent 的节点, 返回节点中的 RouteView\n * @param node\n */\n static tailNode(node: Node): ViewModel {\n let current = node;\n while (current != null) {\n let com = current.getComponent(ViewModelComponent);\n if (com) {\n return com.viewModel\n }\n current = current.parent;\n }\n return null;\n }\n\n protected onEnable(): void {\n if(this._onEnable){\n this._onEnable.call(this.viewModel);\n }\n }\n\n protected onDisable(): void {\n if(this._onDisable){\n this._onDisable.call(this.viewModel);\n }\n }\n\n public setEnableHandler(value: () => void): this {\n this._onEnable = value;\n return this;\n }\n\n\n public setDisableHandler(value: () => void): this {\n this._onDisable = value;\n return this;\n }\n\n\n\n viewModel: ViewModel;\n private _onEnable: () => void;\n private _onDisable: () => void;\n}","import { Route } from \"./Route\";\r\nimport { UIObjectRepo } from \"./UIObjectDict\";\r\nimport { LinkError } from \"../utils/ErrorUtil\";\r\nimport { RouteController } from \"./RouteController\";\r\nimport { EventDispatcher } from \"../event/EventDispatcher\";\r\nimport { instantiate, Node, Prefab } from \"cc\"\r\nimport { routeViews } from \"./ViewRepo\";\r\nimport { MapObject } from \"../utils/MapUtil\";\r\nimport { ViewModelComponent } from \"./ViewModelComponent\";\r\nimport { CommandManager } from \"../command/CommandManager\";\r\nimport { ViewEvent, ViewState } from \"./RouteView\";\r\n\r\n\r\nexport class ViewModel extends EventDispatcher {\r\n\r\n /**\r\n * 视图模型的名称\r\n * @param name \r\n */\r\n constructor(name: string) {\r\n super();\r\n\r\n this.name = name;\r\n }\r\n\r\n\r\n /**\r\n * 视图模型的编号\r\n * 默认为视图模型的类型,表示该模型在应用中唯一\r\n * 如果应用中,存在多个\r\n * @returns \r\n */\r\n getIdent(): string {\r\n return this.name;\r\n }\r\n\r\n /**\r\n * \r\n * @param asset 通过此方法创建的节点,自动添加 RouteComponent 到节点上\r\n */\r\n createNode(asset: Prefab) {\r\n let node = instantiate(asset);\r\n this.node = node;\r\n let com = node.addComponent(ViewModelComponent);\r\n com.viewModel = this;\r\n this._viewModelComponent = com;\r\n }\r\n\r\n /**\r\n * 使用route的视图模型,可以实现通过路由,操作视图\r\n * @param route \r\n * @param controller \r\n */\r\n useRoute(route: Route, controller: RouteController) {\r\n this._route = route;\r\n this._controller = controller;\r\n }\r\n\r\n\r\n open(): this {\r\n if (this.state != ViewState.Closed) {\r\n return;\r\n }\r\n let route = this._route;\r\n if (route) {\r\n if (routeViews.get(route.key)) {\r\n throw `视图已存在: route=${route.key}`\r\n }\r\n routeViews.set(route.key, this);\r\n }\r\n\r\n this.state = ViewState.Opening;\r\n this.dispatch(ViewEvent.Opening);\r\n //\r\n try {\r\n //\r\n this.onOpen();\r\n if (!this._waitOpenComplete) {\r\n // 没有被打断,打开完成\r\n this.openComplete();\r\n } else {\r\n // 被打断了,等待完成1\r\n }\r\n } catch (e) {\r\n console.error(`open view ${this.toString()}`)\r\n console.error(e.stack);\r\n //\r\n this.close();\r\n }\r\n return this;\r\n }\r\n\r\n close(): this {\r\n if (this.state == ViewState.Closed) {\r\n return;\r\n }\r\n let route = this._route;\r\n if (route) {\r\n routeViews.delete(this._route.key);\r\n }\r\n\r\n this.state = ViewState.Closeing;\r\n this.dispatch(ViewEvent.Closeing);\r\n\r\n try {\r\n this.onClose();\r\n if (!this._waitCloseComplete) {\r\n // 没有被打断,关闭完成\r\n this.closeComplete();\r\n } else {\r\n // 被打断了,等待完成1\r\n }\r\n\r\n } catch (e) {\r\n console.error(`close view ${this.toString()}`)\r\n console.error(e.stack);\r\n }\r\n return this;\r\n }\r\n\r\n refresh() {\r\n try {\r\n this.onRefresh();\r\n } catch (e) {\r\n console.error(`refresh view ${this.toString()}`)\r\n console.error(e.stack);\r\n }\r\n }\r\n\r\n stop(reason?: LinkError) {\r\n try {\r\n this.onStop();\r\n } catch (e) {\r\n console.error(`stop view ${this.toString()}`)\r\n console.error(e.stack);\r\n }\r\n\r\n this.dispatch(ViewEvent.Stop);\r\n }\r\n\r\n\r\n /**\r\n * 等待发送的结果\r\n * 如果返回 null,表示主动取消 [cancel]\r\n */\r\n wait(): Promise<this> {\r\n switch (this.state) {\r\n case ViewState.Opening:\r\n return new Promise((resolve, reject) => {\r\n let opened = () => {\r\n this.off(\"opened\", this, opened);\r\n this.off(\"canceled\", this, opened);\r\n resolve(this);\r\n }\r\n let canceled = () => {\r\n this.off(\"opened\", this, opened);\r\n this.off(\"canceled\", this, opened);\r\n resolve(this);\r\n }\r\n this.on(\"opened\", this, opened);\r\n this.on(\"canceled\", this, canceled);\r\n });\r\n case ViewState.Closeing:\r\n return new Promise((resolve, reject) => {\r\n let opened = () => {\r\n this.off(\"closed\", this, opened);\r\n resolve(this);\r\n }\r\n this.on(\"closed\", this, opened);\r\n });\r\n default:\r\n return new Promise((resolve, reject) => {\r\n resolve(this);\r\n });\r\n }\r\n }\r\n\r\n public toString(): string {\r\n return `View[${this.getIdent}, ${this.id}]`\r\n }\r\n\r\n /**\r\n * 等待打开完成指令\r\n */\r\n async waitOpenComplete(...params: any) {\r\n this._waitOpenComplete = true;\r\n for (const element of params) {\r\n await element()\r\n if (this.state == ViewState.Closed || this.state == ViewState.Closeing) {\r\n return;\r\n }\r\n }\r\n\r\n if (params.length > 0) {\r\n this.openComplete();\r\n }\r\n\r\n }\r\n\r\n protected openComplete() {\r\n if (this.state == ViewState.Opened) {\r\n return;\r\n }\r\n this.state = ViewState.Opened;\r\n // @ts-ignore\r\n this._waitOpenComplete = false;\r\n this.onOpened();;\r\n this.dispatch(ViewEvent.Opened);\r\n }\r\n\r\n waitCloseComplete() {\r\n // @ts-ignore\r\n this._waitCloseComplete = true;\r\n }\r\n\r\n closeComplete() {\r\n if (this.state == ViewState.Closed) {\r\n return;\r\n }\r\n routeViews.delete(this.getIdent());\r\n this._waitCloseComplete = false;\r\n this.state = ViewState.Closed;\r\n this.dispatch(ViewEvent.Closed);\r\n\r\n this.onClosed();\r\n }\r\n\r\n\r\n\r\n protected _waitOpenComplete: boolean = false;\r\n protected _waitCloseComplete: boolean = false;\r\n\r\n get controller(): RouteController {\r\n return this._controller;\r\n }\r\n\r\n get route(): Route {\r\n return this._route;\r\n }\r\n\r\n\r\n public get reason(): LinkError {\r\n return this._reason;\r\n }\r\n\r\n node: Node;\r\n datas = new MapObject({});\r\n tags = new MapObject({});\r\n enableHistory: boolean = false;\r\n layer: string;\r\n state: ViewState = 0;\r\n protected _controller: RouteController;\r\n protected _route: Route;\r\n protected _reason: LinkError;\r\n protected _viewModelComponent: ViewModelComponent;\r\n\r\n protected onOpen() {\r\n\r\n }\r\n protected onOpened() {\r\n\r\n }\r\n protected onClose() {\r\n\r\n }\r\n protected onClosed() {\r\n\r\n }\r\n protected onRefresh() {\r\n\r\n }\r\n\r\n /**\r\n * 默认执行 close();\r\n */\r\n protected onStop() {\r\n this.close()\r\n };\r\n}\r\n\r\n","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 { 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 removeAsset(uri:string){\n let obj = new AssetURI(uri);\n switch (obj.loadType) {\n case 1:\n return assetManager.assets.remove(obj.uuid);\n case 2:\n return assetManager.assets.remove(obj.name);\n default:\n let bundle = assetManager.getBundle(obj.bundle);\n if (!bundle) {\n return null;\n }\n return bundle.release(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 { path, Rect, Size, SpriteAtlas, SpriteFrame, Texture2D, Vec2 } from \"cc\";\n\n\n\n/**\n * 自动生成等距图集的frame描述表。\n * 用于减少创建atlas文件的过程。\n *\n * @param atlasSize 图集的像素尺寸\n * @param gridSize 每格的像素尺寸\n * @param keyFormat 名称格式化字符串,例如 \"%d.png\" 或 \"tile_%d.png\"\n * @param maxCount 可选,限制生成数量\n * @returns atlas数据对象\n */\nexport function create等距图集(atlasSize: Vec2, gridSize: Vec2, keyFormat: string = \"%d.png\", maxCount?: number) {\n const cols = Math.floor(atlasSize.x / gridSize.x);\n const rows = Math.floor(atlasSize.y / gridSize.y);\n const total = maxCount ?? cols * rows;\n\n const frames: Record<string, any> = {};\n\n let index = 0;\n for (let y = 0; y < rows; y++) {\n for (let x = 0; x < cols; x++) {\n if (index >= total) break;\n\n const key = keyFormat.replace(\"%d\", (index + 1).toString());\n\n const frame = {\n frame: {\n x: x * gridSize.x,\n y: y * gridSize.y,\n w: gridSize.x,\n h: gridSize.y\n },\n rotated: false,\n trimmed: false,\n sourceSize: { w: gridSize.x, h: gridSize.y },\n spriteSourceSize: { x: 0, y: 0, w: gridSize.x, h: gridSize.y }\n };\n\n frames[key] = frame;\n index++;\n }\n }\n\n return frames;\n}\n/**\n * \n * @param name 图集的名称\n * @param plist plist格式的json文件内容\n * @param texture\n * @returns \n */\nexport function parseAtlas(plist: any, texture: Texture2D): SpriteAtlas {\n let info = plist.meta;\n let frames = plist.frames;\n\n let atlas = new SpriteAtlas();\n atlas.name = texture.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 { Asset, AssetManager, assetManager, ImageAsset, JsonAsset, path, SpriteAtlas, SpriteFrame, TextAsset, Texture2D } from \"cc\";\nimport { AssetURI, assetx } from \"./AssetManager\";\nimport { List } from \"../ds\";\nimport { Dispatcher, Listener } from \"../event\";\nimport { parseAtlas } from \"./ParseAtlas\";\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 loadText(uri: string, otherConfig?: {\n onComplete?: (err: any, asset: any) => void\n preload?: boolean,\n }) {\n let item = new LoaderItem();\n item.type = \"Text\";\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 loadTexture2D(uri: string, otherConfig?: {\n onComplete?: (err: any, asset: any) => void\n }) {\n let item = new LoaderItem();\n item.type = \"Texture2D\";\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 onComplete?: (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.onComplete;\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 \"Text\": {\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 \"Json\": {\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 \"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 item.callHandler(null, asset);\n this.validComplete();\n })\n break;\n }\n case \"ImageAsset\": {\n this._loadByItem(item, ImageAsset, (err, asset) => {\n this._loaded++\n item.callHandler(null, asset);\n this.validComplete();\n })\n break;\n }\n case \"Texture2D\": {\n this._loadByItem(item, Texture2D, (err, asset) => {\n this._loaded++\n item.callHandler(null, asset);\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(content, tex);\n atlasSprite.name = item.uri.name;\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 let suffix = \"\";\n if (item.type == \"Texture2D\") {\n suffix = \"@6c48a\";\n }\n if (item.preload) {\n assetManager.preloadAny({ uuid: item.uri.uuid + suffix }, { 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 + suffix }, { 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\n let lastAsset;\n switch (item.type) {\n case \"Texture2D\": {\n const texture = new Texture2D();\n texture.image = asset;\n lastAsset = texture;\n break;\n }\n\n case \"SpriteFrame\": {\n const texture = new Texture2D();\n texture.image = asset;\n\n const spriteFrame = new SpriteFrame();\n spriteFrame.texture = texture;\n\n lastAsset = spriteFrame;\n break;\n }\n default:\n lastAsset = asset;\n }\n\n onComplate(err, lastAsset)\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}","export const enum GeometryDirection {\n East,\n SouthEast,\n South,\n SouthWest,\n West,\n NorthWest,\n North,\n NorthEast,\n Any = 255\n}\n\nexport const enum DirectionMode {\n 无方向,\n 二方向,\n 四方向,\n 斜四方向,\n 八方向,\n 全方位\n}\n\n\n\nexport class GeometryUtil {\n\n\n getDirection(mode: DirectionMode, 角度: number): GeometryDirection {\n let direction: number = 0;\n switch (mode) {\n case DirectionMode.无方向:\n direction = GeometryDirection.South;\n break;\n case DirectionMode.全方位:\n direction = GeometryDirection.Any;\n break;\n case DirectionMode.二方向:\n direction = geoutil.angleToDirection(角度, 2);\n break;\n case DirectionMode.四方向:\n direction = geoutil.angleToDirection(角度, 4);\n break;\n case DirectionMode.斜四方向:\n break;\n }\n return direction;\n }\n\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 * @param val\n * @param separator\n */\n splitFirstArray(val: string, separator: string): [string, string] {\n let arr = val.split(separator);\n if (arr.length > 0) {\n let shift = arr.shift();\n return [shift, arr.join(separator)];\n }\n return [val, \"\"];\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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","x_google_ignoreList":[28]}
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/RouteView.ts","../src/libs/frame/ViewRepo.ts","../src/libs/frame/ViewHistory.ts","../node_modules/tslib/tslib.es6.js","../src/libs/frame/ViewModelComponent.ts","../src/libs/frame/ViewModel.ts","../src/libs/event/Listener.ts","../src/libs/event/CallbackList.ts","../src/libs/event/Dispatcher.ts","../src/libs/event/SampleCallbackList.ts","../src/libs/loader/AssetManager.ts","../src/libs/loader/ParseAtlas.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/Dictionary\";\nimport { convertutil } from \"./ConvertUtil\";\n\nexport class MapObject extends Object {\n set(key: string, val: any) {\n this[key] = val;\n }\n\n delete(key: string) {\n delete this[key];\n }\n\n\n isUndefined(key: string): boolean {\n return this[key] == undefined;\n }\n\n getNumber(key: string): number {\n return maputil.number(this, key);\n }\n\n getString(key: string): string {\n return maputil.string(this, key);\n }\n getBoolean(key: string): boolean {\n return maputil.boolean(this, key);\n }\n get(key: string): any {\n return this[key];\n }\n\n}\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 convertutil.anyToBoolean(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 public flat(): TreeNode[] {\r\n let result = [];\r\n this.walkBFS((node)=>{\r\n result.push(node);\r\n return true;\r\n })\r\n return result;\r\n }\r\n\r\n /**\r\n * 广度优先遍历(BFS):从当前节点开始,逐层遍历子树\r\n * @param f - 节点处理函数,返回 false 表示停止遍历\r\n * @param inChild - 决定是否将子节点加入队列:若提供,调用 inChild(node),返回 true 才加入其子节点\r\n */\r\n public walkBFS(f: (node: TreeNode) => boolean, inChild?: (node: TreeNode) => boolean): boolean {\r\n const queue: TreeNode[] = [this]; // 初始化队列\r\n\r\n while (queue.length > 0) {\r\n const node = queue.shift()!; // 取出队首节点\r\n\r\n try {\r\n // 1. 处理当前节点\r\n if (!f(node)) {\r\n return false; // 停止遍历\r\n }\r\n } catch (e) {\r\n console.warn('walkBFS error:', e);\r\n return false;\r\n }\r\n\r\n // 2. 决定是否展开子节点\r\n const shouldEnqueueChildren = inChild ? inChild(node) : true;\r\n if (!shouldEnqueueChildren || node.isLeaf) {\r\n continue;\r\n }\r\n\r\n // 3. 将子节点加入队列(从左到右)\r\n if (node.children?.length) {\r\n for (const child of node.children) {\r\n queue.push(child);\r\n }\r\n }\r\n }\r\n\r\n return true; // 遍历完成\r\n }\r\n\r\n /**\r\n * 如果返回true则继续,包含当前节点\r\n * 深度优先遍历(DFS)\r\n * @param f\r\n * @param inChild 如果返回true,则继续遍历, 否则不进入节点的子节点\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 if(!node.children || node.children.length == 0){\r\n return;\r\n }\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 get 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 resetData(data:any[]){\r\n this._data = data;\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(reason?: any) {\n this._isBreak = true;\n this._reason = reason;\n }\n\n isBreak(): boolean {\n return this._isBreak;\n }\n\n getReason(): any {\n return this._reason;\n }\n protected _reason: any;\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(useIter: boolean = true): void {\n let data = this._data;\n if (useIter) {\n let keys = this.keys();\n for (const key of keys) {\n this.delete(key);\n }\n } else {\n this._data = {};\n this.size = 0;\n }\n }\n\n /**\n * 克隆自身所有项到【target】对象,并返回【target】对象\n * @param target\n */\n public clone(target: Dictionary<K, V>): Dictionary<K, V> {\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 Dictionary<K, V>;\n }\n\n public resetByDict(dict: Dictionary<K, V>): 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(keys: K[]): boolean {\n for (let i = 0; i < keys.length; i++) {\n let key = keys[i];\n if (!this.exist(key)) {\n return false;\n }\n }\n return true;\n }\n\n public get 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 groupByKey(keyCreator: (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 = keyCreator(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 countByKeyList(keyCreator: (key: K, val: V) => string[]): { [key: string]: number } {\n let newdata = {}\n for (const key in this._data) {\n let val = this._data[key]\n // @ts-ignore\n let newkeyList = keyCreator(key, val);\n for (const newkey of newkeyList) {\n let count = newdata[newkey];\n if (count == undefined) {\n count = 0;\n }\n count++;\n newdata[newkey] = count;\n }\n }\n return newdata;\n }\n\n\n\n countByKey(keyCreator: (key: K, val: V) => string): { [key: string]: number } {\n let newdata = {}\n for (const key in this._data) {\n let val = this._data[key]\n // @ts-ignore\n let newkey = keyCreator(key, val);\n let count = newdata[newkey];\n if (count == undefined) {\n count = 0;\n }\n count++;\n newdata[newkey] = count;\n }\n return newdata;\n }\n\n protected size: number = 0;\n protected _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(reason?: any) {\r\n this._isBreak = true;\r\n this._reason = reason;\r\n }\r\n\r\n isBreak(): boolean {\r\n return this._isBreak;\r\n }\r\n\r\n getReason(): any {\r\n return this._reason;\r\n }\r\n protected _reason: any;\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): ListIterator {\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 return iterator;\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<T>): ListIterator {\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 iterator;\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 /**\r\n * useIter默认为true,因为如果是false的话,没有触发onSet,导致数据污染\r\n * @param useIter 使用遍历的方式可以触发onSet\r\n */\r\n clear(useIter: boolean = true) {\r\n let data = this._data;\r\n if (useIter) {\r\n for (let i = 0; i < data.length; i++) {\r\n const item = data[i];\r\n this.remove(item);\r\n }\r\n } else {\r\n this._data.length = 0;\r\n }\r\n }\r\n\r\n /**\r\n * 克隆自身所有项到【target】对象,并返回【target】对象\r\n * @param target\r\n * @param useIter 使用遍历的方式可以触发onSet\r\n */\r\n clone(target: this, useIter: boolean = true): this {\r\n let data = this._data;\r\n if (useIter) {\r\n for (let i = 0; i < data.length; i++) {\r\n const item = data[i];\r\n target.push(item);\r\n }\r\n } else {\r\n let newdata = target.getData().concat(data);\r\n target.resetData(newdata);\r\n }\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 let data = this._data;\r\n if (data.length <= 0) {\r\n return target;\r\n }\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 /**\r\n * 随机获取【count】个项,并返回【target】对象\r\n * @param count\r\n * @param enableRepeat 允许重复\r\n * @param target\r\n */\r\n randomOne(): T {\r\n let data = this._data;\r\n if (data.length <= 0) {\r\n return null;\r\n }\r\n\r\n const randomIndex = Math.floor(Math.random() * data.length);\r\n return data[randomIndex];\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\";\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\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 { UIObjectRepo } from \"./UIObjectDict\";\nimport { LinkError } from \"../utils/ErrorUtil\";\nimport { RouteController } from \"./RouteController\";\nimport { EventDispatcher } from \"../event/EventDispatcher\";\nimport { instantiate, Node, Prefab } from \"cc\"\nimport { MapObject } from \"../utils/MapUtil\";\nimport { ViewModel } from \"./ViewModel\";\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\n this.state = ViewState.Opening;\n this.dispatch(ViewEvent.Opening);\n //\n try {\n //\n if (this._onOpen) {\n this._onOpen(this);\n }\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 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\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.state == ViewState.Opened) {\n return;\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.state == ViewState.Closed) {\n return;\n }\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 /**\n * \n * @param asset 通过此方法创建的节点,自动添加 RouteComponent 到节点上\n */\n createNode(asset: Prefab) {\n let node = instantiate(asset);\n this.node = node;\n // let com = node.addComponent(RouteComponent);\n // com.viewModel = this;\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 { 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\";\nimport { ViewModelComponent } from \"./ViewModelComponent\";\nimport { Node } from \"cc\";\nimport { ViewModel } from \"./ViewModel\";\n\nexport class ViewList extends List<ViewModel> {\n\n}\n\n\n/**\n * 路由唯一编号->视图 \n */\nexport class ViewDict extends Dictionary<string, ViewModel> {\n /**\n * 关闭相斥的视图对象\n * 1. 关闭同一层的所有视图对象\n * 2. 关闭符合相斥规则的视图对象\n * @param view \n * @param validFunc 符合条件的视图对象会被关闭\n * @returns 被关闭的视图\n */\n closeExclusion(validFunc: (existed: ViewModel) => 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 item.close();\n })\n return closedList;\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\n}\n\n\nexport class RouteViewDict 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 /**\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): ViewModel {\n return this.get(route.key);\n }\n\n\n\n protected getController(name: string): RouteController {\n return ctrlrepo.get(name) as RouteController;\n }\n\n}\n\n\nexport const routeViews = new RouteViewDict();","import { Dictionary } from \"../ds/Dictionary\";\r\nimport { Route, RouteList } from \"./Route\";\r\nimport { routeViews } 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 routeViews.close(viewhistorys.shift());\r\n\r\n if (viewhistorys.length == 0) {\r\n return;\r\n }\r\n routeViews.open(viewhistorys.last());\r\n }\r\n}\r\n\r\nexport const viewhistorys = new ViewHistory();","/******************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise, SuppressedError, Symbol, Iterator */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n if (typeof b !== \"function\" && b !== null)\r\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __esDecorate(ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {\r\n function accept(f) { if (f !== void 0 && typeof f !== \"function\") throw new TypeError(\"Function expected\"); return f; }\r\n var kind = contextIn.kind, key = kind === \"getter\" ? \"get\" : kind === \"setter\" ? \"set\" : \"value\";\r\n var target = !descriptorIn && ctor ? contextIn[\"static\"] ? ctor : ctor.prototype : null;\r\n var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});\r\n var _, done = false;\r\n for (var i = decorators.length - 1; i >= 0; i--) {\r\n var context = {};\r\n for (var p in contextIn) context[p] = p === \"access\" ? {} : contextIn[p];\r\n for (var p in contextIn.access) context.access[p] = contextIn.access[p];\r\n context.addInitializer = function (f) { if (done) throw new TypeError(\"Cannot add initializers after decoration has completed\"); extraInitializers.push(accept(f || null)); };\r\n var result = (0, decorators[i])(kind === \"accessor\" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);\r\n if (kind === \"accessor\") {\r\n if (result === void 0) continue;\r\n if (result === null || typeof result !== \"object\") throw new TypeError(\"Object expected\");\r\n if (_ = accept(result.get)) descriptor.get = _;\r\n if (_ = accept(result.set)) descriptor.set = _;\r\n if (_ = accept(result.init)) initializers.unshift(_);\r\n }\r\n else if (_ = accept(result)) {\r\n if (kind === \"field\") initializers.unshift(_);\r\n else descriptor[key] = _;\r\n }\r\n }\r\n if (target) Object.defineProperty(target, contextIn.name, descriptor);\r\n done = true;\r\n};\r\n\r\nexport function __runInitializers(thisArg, initializers, value) {\r\n var useValue = arguments.length > 2;\r\n for (var i = 0; i < initializers.length; i++) {\r\n value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);\r\n }\r\n return useValue ? value : void 0;\r\n};\r\n\r\nexport function __propKey(x) {\r\n return typeof x === \"symbol\" ? x : \"\".concat(x);\r\n};\r\n\r\nexport function __setFunctionName(f, name, prefix) {\r\n if (typeof name === \"symbol\") name = name.description ? \"[\".concat(name.description, \"]\") : \"\";\r\n return Object.defineProperty(f, \"name\", { configurable: true, value: prefix ? \"\".concat(prefix, \" \", name) : name });\r\n};\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === \"function\" ? Iterator : Object).prototype);\r\n return g.next = verb(0), g[\"throw\"] = verb(1), g[\"return\"] = verb(2), typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (g && (g = 0, op[0] && (_ = 0)), _) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n var desc = Object.getOwnPropertyDescriptor(m, k);\r\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\r\n desc = { enumerable: true, get: function() { return m[k]; } };\r\n }\r\n Object.defineProperty(o, k2, desc);\r\n}) : (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n});\r\n\r\nexport function __exportStar(m, o) {\r\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\r\n}\r\n\r\nexport function __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n}\r\n\r\nexport function __spreadArray(to, from, pack) {\r\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\r\n if (ar || !(i in from)) {\r\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\r\n ar[i] = from[i];\r\n }\r\n }\r\n return to.concat(ar || Array.prototype.slice.call(from));\r\n}\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = Object.create((typeof AsyncIterator === \"function\" ? AsyncIterator : Object).prototype), verb(\"next\"), verb(\"throw\"), verb(\"return\", awaitReturn), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function awaitReturn(f) { return function (v) { return Promise.resolve(v).then(f, reject); }; }\r\n function verb(n, f) { if (g[n]) { i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; if (f) i[n] = f(i[n]); } }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: false } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nvar __setModuleDefault = Object.create ? (function(o, v) {\r\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\r\n}) : function(o, v) {\r\n o[\"default\"] = v;\r\n};\r\n\r\nvar ownKeys = function(o) {\r\n ownKeys = Object.getOwnPropertyNames || function (o) {\r\n var ar = [];\r\n for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;\r\n return ar;\r\n };\r\n return ownKeys(o);\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== \"default\") __createBinding(result, mod, k[i]);\r\n __setModuleDefault(result, mod);\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\r\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\r\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\r\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\r\n}\r\n\r\nexport function __classPrivateFieldIn(state, receiver) {\r\n if (receiver === null || (typeof receiver !== \"object\" && typeof receiver !== \"function\")) throw new TypeError(\"Cannot use 'in' operator on non-object\");\r\n return typeof state === \"function\" ? receiver === state : state.has(receiver);\r\n}\r\n\r\nexport function __addDisposableResource(env, value, async) {\r\n if (value !== null && value !== void 0) {\r\n if (typeof value !== \"object\" && typeof value !== \"function\") throw new TypeError(\"Object expected.\");\r\n var dispose, inner;\r\n if (async) {\r\n if (!Symbol.asyncDispose) throw new TypeError(\"Symbol.asyncDispose is not defined.\");\r\n dispose = value[Symbol.asyncDispose];\r\n }\r\n if (dispose === void 0) {\r\n if (!Symbol.dispose) throw new TypeError(\"Symbol.dispose is not defined.\");\r\n dispose = value[Symbol.dispose];\r\n if (async) inner = dispose;\r\n }\r\n if (typeof dispose !== \"function\") throw new TypeError(\"Object not disposable.\");\r\n if (inner) dispose = function() { try { inner.call(this); } catch (e) { return Promise.reject(e); } };\r\n env.stack.push({ value: value, dispose: dispose, async: async });\r\n }\r\n else if (async) {\r\n env.stack.push({ async: true });\r\n }\r\n return value;\r\n\r\n}\r\n\r\nvar _SuppressedError = typeof SuppressedError === \"function\" ? SuppressedError : function (error, suppressed, message) {\r\n var e = new Error(message);\r\n return e.name = \"SuppressedError\", e.error = error, e.suppressed = suppressed, e;\r\n};\r\n\r\nexport function __disposeResources(env) {\r\n function fail(e) {\r\n env.error = env.hasError ? new _SuppressedError(e, env.error, \"An error was suppressed during disposal.\") : e;\r\n env.hasError = true;\r\n }\r\n var r, s = 0;\r\n function next() {\r\n while (r = env.stack.pop()) {\r\n try {\r\n if (!r.async && s === 1) return s = 0, env.stack.push(r), Promise.resolve().then(next);\r\n if (r.dispose) {\r\n var result = r.dispose.call(r.value);\r\n if (r.async) return s |= 2, Promise.resolve(result).then(next, function(e) { fail(e); return next(); });\r\n }\r\n else s |= 1;\r\n }\r\n catch (e) {\r\n fail(e);\r\n }\r\n }\r\n if (s === 1) return env.hasError ? Promise.reject(env.error) : Promise.resolve();\r\n if (env.hasError) throw env.error;\r\n }\r\n return next();\r\n}\r\n\r\nexport function __rewriteRelativeImportExtension(path, preserveJsx) {\r\n if (typeof path === \"string\" && /^\\.\\.?\\//.test(path)) {\r\n return path.replace(/\\.(tsx)$|((?:\\.d)?)((?:\\.[^./]+?)?)\\.([cm]?)ts$/i, function (m, tsx, d, ext, cm) {\r\n return tsx ? preserveJsx ? \".jsx\" : \".js\" : d && (!ext || !cm) ? m : (d + ext + \".\" + cm.toLowerCase() + \"js\");\r\n });\r\n }\r\n return path;\r\n}\r\n\r\nexport default {\r\n __extends: __extends,\r\n __assign: __assign,\r\n __rest: __rest,\r\n __decorate: __decorate,\r\n __param: __param,\r\n __esDecorate: __esDecorate,\r\n __runInitializers: __runInitializers,\r\n __propKey: __propKey,\r\n __setFunctionName: __setFunctionName,\r\n __metadata: __metadata,\r\n __awaiter: __awaiter,\r\n __generator: __generator,\r\n __createBinding: __createBinding,\r\n __exportStar: __exportStar,\r\n __values: __values,\r\n __read: __read,\r\n __spread: __spread,\r\n __spreadArrays: __spreadArrays,\r\n __spreadArray: __spreadArray,\r\n __await: __await,\r\n __asyncGenerator: __asyncGenerator,\r\n __asyncDelegator: __asyncDelegator,\r\n __asyncValues: __asyncValues,\r\n __makeTemplateObject: __makeTemplateObject,\r\n __importStar: __importStar,\r\n __importDefault: __importDefault,\r\n __classPrivateFieldGet: __classPrivateFieldGet,\r\n __classPrivateFieldSet: __classPrivateFieldSet,\r\n __classPrivateFieldIn: __classPrivateFieldIn,\r\n __addDisposableResource: __addDisposableResource,\r\n __disposeResources: __disposeResources,\r\n __rewriteRelativeImportExtension: __rewriteRelativeImportExtension,\r\n};\r\n","import { _decorator, Component, Node } from \"cc\";\nimport { RouteView } from \"./RouteView\";\nimport { ViewModel } from \"./ViewModel\";\n\nconst { ccclass, property, menu } = _decorator;\n\n@ccclass('ViewModelComponent')\nexport class ViewModelComponent extends Component {\n /**\n * 往上追踪,返回第一个包含 RouteComponent 的节点, 返回节点中的 RouteView\n * @param node\n */\n static tailNode(node: Node): ViewModel {\n let current = node;\n while (current != null) {\n let com = current.getComponent(ViewModelComponent);\n if (com) {\n return com.viewModel\n }\n current = current.parent;\n }\n return null;\n }\n\n protected onEnable(): void {\n if(this._onEnable){\n this._onEnable.call(this.viewModel);\n }\n }\n\n protected onDisable(): void {\n if(this._onDisable){\n this._onDisable.call(this.viewModel);\n }\n }\n\n public setEnableHandler(value: () => void): this {\n this._onEnable = value;\n return this;\n }\n\n\n public setDisableHandler(value: () => void): this {\n this._onDisable = value;\n return this;\n }\n\n\n\n viewModel: ViewModel;\n private _onEnable: () => void;\n private _onDisable: () => void;\n}","import { Route } from \"./Route\";\r\nimport { UIObjectRepo } from \"./UIObjectDict\";\r\nimport { LinkError } from \"../utils/ErrorUtil\";\r\nimport { RouteController } from \"./RouteController\";\r\nimport { EventDispatcher } from \"../event/EventDispatcher\";\r\nimport { instantiate, Node, Prefab } from \"cc\"\r\nimport { routeViews } from \"./ViewRepo\";\r\nimport { MapObject } from \"../utils/MapUtil\";\r\nimport { ViewModelComponent } from \"./ViewModelComponent\";\r\nimport { CommandManager } from \"../command/CommandManager\";\r\nimport { ViewEvent, ViewState } from \"./RouteView\";\r\n\r\n\r\nexport class ViewModel extends EventDispatcher {\r\n\r\n /**\r\n * 视图模型的名称\r\n * @param name \r\n */\r\n constructor(name: string) {\r\n super();\r\n\r\n this.name = name;\r\n }\r\n\r\n\r\n /**\r\n * 视图模型的编号\r\n * 默认为视图模型的类型,表示该模型在应用中唯一\r\n * 如果应用中,存在多个\r\n * @returns \r\n */\r\n getIdent(): string {\r\n return this.name;\r\n }\r\n\r\n /**\r\n * \r\n * @param asset 通过此方法创建的节点,自动添加 RouteComponent 到节点上\r\n */\r\n createNode(asset: Prefab) {\r\n let node = instantiate(asset);\r\n this.node = node;\r\n let com = node.addComponent(ViewModelComponent);\r\n com.viewModel = this;\r\n this._viewModelComponent = com;\r\n }\r\n\r\n /**\r\n * 使用route的视图模型,可以实现通过路由,操作视图\r\n * @param route \r\n * @param controller \r\n */\r\n useRoute(route: Route, controller: RouteController) {\r\n this._route = route;\r\n this._controller = controller;\r\n }\r\n\r\n\r\n open(): this {\r\n if (this.state != ViewState.Closed) {\r\n return;\r\n }\r\n let route = this._route;\r\n if (route) {\r\n if (routeViews.get(route.key)) {\r\n throw `视图已存在: route=${route.key}`\r\n }\r\n routeViews.set(route.key, this);\r\n }\r\n\r\n this.state = ViewState.Opening;\r\n this.dispatch(ViewEvent.Opening);\r\n //\r\n try {\r\n //\r\n this.onOpen();\r\n if (!this._waitOpenComplete) {\r\n // 没有被打断,打开完成\r\n this.openComplete();\r\n } else {\r\n // 被打断了,等待完成1\r\n }\r\n } catch (e) {\r\n console.error(`open view ${this.toString()}`)\r\n console.error(e.stack);\r\n //\r\n this.close();\r\n }\r\n return this;\r\n }\r\n\r\n close(): this {\r\n if (this.state == ViewState.Closed) {\r\n return;\r\n }\r\n let route = this._route;\r\n if (route) {\r\n routeViews.delete(this._route.key);\r\n }\r\n\r\n this.state = ViewState.Closeing;\r\n this.dispatch(ViewEvent.Closeing);\r\n\r\n try {\r\n this.onClose();\r\n if (!this._waitCloseComplete) {\r\n // 没有被打断,关闭完成\r\n this.closeComplete();\r\n } else {\r\n // 被打断了,等待完成1\r\n }\r\n\r\n } catch (e) {\r\n console.error(`close view ${this.toString()}`)\r\n console.error(e.stack);\r\n }\r\n return this;\r\n }\r\n\r\n refresh() {\r\n try {\r\n this.onRefresh();\r\n } catch (e) {\r\n console.error(`refresh view ${this.toString()}`)\r\n console.error(e.stack);\r\n }\r\n }\r\n\r\n stop(reason?: LinkError) {\r\n try {\r\n this.onStop();\r\n } catch (e) {\r\n console.error(`stop view ${this.toString()}`)\r\n console.error(e.stack);\r\n }\r\n\r\n this.dispatch(ViewEvent.Stop);\r\n }\r\n\r\n\r\n /**\r\n * 等待发送的结果\r\n * 如果返回 null,表示主动取消 [cancel]\r\n */\r\n wait(): Promise<this> {\r\n switch (this.state) {\r\n case ViewState.Opening:\r\n return new Promise((resolve, reject) => {\r\n let opened = () => {\r\n this.off(\"opened\", this, opened);\r\n this.off(\"canceled\", this, opened);\r\n resolve(this);\r\n }\r\n let canceled = () => {\r\n this.off(\"opened\", this, opened);\r\n this.off(\"canceled\", this, opened);\r\n resolve(this);\r\n }\r\n this.on(\"opened\", this, opened);\r\n this.on(\"canceled\", this, canceled);\r\n });\r\n case ViewState.Closeing:\r\n return new Promise((resolve, reject) => {\r\n let opened = () => {\r\n this.off(\"closed\", this, opened);\r\n resolve(this);\r\n }\r\n this.on(\"closed\", this, opened);\r\n });\r\n default:\r\n return new Promise((resolve, reject) => {\r\n resolve(this);\r\n });\r\n }\r\n }\r\n\r\n public toString(): string {\r\n return `View[${this.getIdent}, ${this.id}]`\r\n }\r\n\r\n /**\r\n * 等待打开完成指令\r\n */\r\n async waitOpenComplete(...params: any):Promise<any> {\r\n this._waitOpenComplete = true;\r\n for (const element of params) {\r\n let err = await element()\r\n if(err){\r\n return err;\r\n }\r\n if (this.state == ViewState.Closed || this.state == ViewState.Closeing) {\r\n return;\r\n }\r\n }\r\n\r\n if (params.length > 0) {\r\n this.openComplete();\r\n }\r\n\r\n }\r\n\r\n protected openComplete() {\r\n if (this.state == ViewState.Opened) {\r\n return;\r\n }\r\n this.state = ViewState.Opened;\r\n // @ts-ignore\r\n this._waitOpenComplete = false;\r\n this.onOpened();;\r\n this.dispatch(ViewEvent.Opened);\r\n }\r\n\r\n waitCloseComplete() {\r\n // @ts-ignore\r\n this._waitCloseComplete = true;\r\n }\r\n\r\n closeComplete() {\r\n if (this.state == ViewState.Closed) {\r\n return;\r\n }\r\n routeViews.delete(this.getIdent());\r\n this._waitCloseComplete = false;\r\n this.state = ViewState.Closed;\r\n this.dispatch(ViewEvent.Closed);\r\n\r\n this.onClosed();\r\n }\r\n\r\n\r\n\r\n protected _waitOpenComplete: boolean = false;\r\n protected _waitCloseComplete: boolean = false;\r\n\r\n get controller(): RouteController {\r\n return this._controller;\r\n }\r\n\r\n get route(): Route {\r\n return this._route;\r\n }\r\n\r\n\r\n public get reason(): LinkError {\r\n return this._reason;\r\n }\r\n\r\n node: Node;\r\n datas = new MapObject({});\r\n tags = new MapObject({});\r\n enableHistory: boolean = false;\r\n layer: string;\r\n state: ViewState = 0;\r\n protected _controller: RouteController;\r\n protected _route: Route;\r\n protected _reason: LinkError;\r\n protected _viewModelComponent: ViewModelComponent;\r\n\r\n protected onOpen() {\r\n\r\n }\r\n protected onOpened() {\r\n\r\n }\r\n protected onClose() {\r\n\r\n }\r\n protected onClosed() {\r\n\r\n }\r\n protected onRefresh() {\r\n\r\n }\r\n\r\n /**\r\n * 默认执行 close();\r\n */\r\n protected onStop() {\r\n this.close()\r\n };\r\n}\r\n\r\n","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 { 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 removeAsset(uri:string){\n let obj = new AssetURI(uri);\n switch (obj.loadType) {\n case 1:\n return assetManager.assets.remove(obj.uuid);\n case 2:\n return assetManager.assets.remove(obj.name);\n default:\n let bundle = assetManager.getBundle(obj.bundle);\n if (!bundle) {\n return null;\n }\n return bundle.release(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 { path, Rect, Size, SpriteAtlas, SpriteFrame, Texture2D, Vec2 } from \"cc\";\n\n\n\n/**\n * 自动生成等距图集的frame描述表。\n * 用于减少创建atlas文件的过程。\n *\n * @param atlasSize 图集的像素尺寸\n * @param gridSize 每格的像素尺寸\n * @param keyFormat 名称格式化字符串,例如 \"%d.png\" 或 \"tile_%d.png\"\n * @param maxCount 可选,限制生成数量\n * @returns atlas数据对象\n */\nexport function create等距图集(atlasSize: Vec2, gridSize: Vec2, keyFormat: string = \"%d.png\", maxCount?: number) {\n const cols = Math.floor(atlasSize.x / gridSize.x);\n const rows = Math.floor(atlasSize.y / gridSize.y);\n const total = maxCount ?? cols * rows;\n\n const frames: Record<string, any> = {};\n\n let index = 0;\n for (let y = 0; y < rows; y++) {\n for (let x = 0; x < cols; x++) {\n if (index >= total) break;\n\n const key = keyFormat.replace(\"%d\", (index + 1).toString());\n\n const frame = {\n frame: {\n x: x * gridSize.x,\n y: y * gridSize.y,\n w: gridSize.x,\n h: gridSize.y\n },\n rotated: false,\n trimmed: false,\n sourceSize: { w: gridSize.x, h: gridSize.y },\n spriteSourceSize: { x: 0, y: 0, w: gridSize.x, h: gridSize.y }\n };\n\n frames[key] = frame;\n index++;\n }\n }\n\n return frames;\n}\n/**\n * \n * @param name 图集的名称\n * @param plist plist格式的json文件内容\n * @param texture\n * @returns \n */\nexport function parseAtlas(plist: any, texture: Texture2D): SpriteAtlas {\n let info = plist.meta;\n let frames = plist.frames;\n\n let atlas = new SpriteAtlas();\n atlas.name = texture.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 { Asset, AssetManager, assetManager, ImageAsset, JsonAsset, path, SpriteAtlas, SpriteFrame, TextAsset, Texture2D } from \"cc\";\nimport { AssetURI, assetx } from \"./AssetManager\";\nimport { List } from \"../ds\";\nimport { Dispatcher, Listener } from \"../event\";\nimport { parseAtlas } from \"./ParseAtlas\";\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 loadText(uri: string, otherConfig?: {\n onComplete?: (err: any, asset: any) => void\n preload?: boolean,\n }) {\n let item = new LoaderItem();\n item.type = \"Text\";\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 loadTexture2D(uri: string, otherConfig?: {\n onComplete?: (err: any, asset: any) => void\n }) {\n let item = new LoaderItem();\n item.type = \"Texture2D\";\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 onComplete?: (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.onComplete;\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 \"Text\": {\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 \"Json\": {\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 \"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 item.callHandler(null, asset);\n this.validComplete();\n })\n break;\n }\n case \"ImageAsset\": {\n this._loadByItem(item, ImageAsset, (err, asset) => {\n this._loaded++\n item.callHandler(null, asset);\n this.validComplete();\n })\n break;\n }\n case \"Texture2D\": {\n this._loadByItem(item, Texture2D, (err, asset) => {\n this._loaded++\n item.callHandler(null, asset);\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(content, tex);\n atlasSprite.name = item.uri.name;\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 let suffix = \"\";\n if (item.type == \"Texture2D\") {\n suffix = \"@6c48a\";\n }\n if (item.preload) {\n assetManager.preloadAny({ uuid: item.uri.uuid + suffix }, { 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 + suffix }, { 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\n let lastAsset;\n switch (item.type) {\n case \"Texture2D\": {\n const texture = new Texture2D();\n texture.image = asset;\n lastAsset = texture;\n break;\n }\n\n case \"SpriteFrame\": {\n const texture = new Texture2D();\n texture.image = asset;\n\n const spriteFrame = new SpriteFrame();\n spriteFrame.texture = texture;\n\n lastAsset = spriteFrame;\n break;\n }\n default:\n lastAsset = asset;\n }\n\n onComplate(err, lastAsset)\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}","export const enum GeometryDirection {\n East,\n SouthEast,\n South,\n SouthWest,\n West,\n NorthWest,\n North,\n NorthEast,\n Any = 255\n}\n\nexport const enum DirectionMode {\n 无方向,\n 二方向,\n 四方向,\n 斜四方向,\n 八方向,\n 全方位\n}\n\n\n\nexport class GeometryUtil {\n\n\n getDirection(mode: DirectionMode, 角度: number): GeometryDirection {\n let direction: number = 0;\n switch (mode) {\n case DirectionMode.无方向:\n direction = GeometryDirection.South;\n break;\n case DirectionMode.全方位:\n direction = GeometryDirection.Any;\n break;\n case DirectionMode.二方向:\n direction = geoutil.angleToDirection(角度, 2);\n break;\n case DirectionMode.四方向:\n direction = geoutil.angleToDirection(角度, 4);\n break;\n case DirectionMode.斜四方向:\n break;\n }\n return direction;\n }\n\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 * @param val\n * @param separator\n */\n splitFirstArray(val: string, separator: string): [string, string] {\n let arr = val.split(separator);\n if (arr.length > 0) {\n let shift = arr.shift();\n return [shift, arr.join(separator)];\n }\n return [val, \"\"];\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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","x_google_ignoreList":[28]}