@zhongguo168a/yxeditor-common 0.0.2 → 0.0.8

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/pool/PoolSet.ts","../src/libs/timer/Timer.ts","../src/libs/event/XEvent.ts","../src/libs/event/EventItem.ts","../src/libs/pool/frame_pool.ts","../src/libs/timer/frame_timer.ts","../src/libs/net/ByteArray.ts","../src/libs/net/net-enum.ts","../src/libs/net/net-protocol.ts","../src/libs/database/iface.ts","../src/libs/utils/ConvertUtil.ts","../src/libs/ds/List.ts","../src/libs/log/Logger.ts","../src/libs/log/LogManager.ts","../src/libs/event/EventManager.ts","../src/libs/utils/MapUtil.ts","../src/libs/utils/UIUtil.ts","../src/libs/utils/Eventutil.ts","../src/libs/utils/ArrayUtil.ts","../src/libs/utils/ScaleUtil.ts","../src/libs/utils/BitUtil.ts","../src/libs/utils/StringUtil.ts","../src/libs/utils/IdentUtil.ts","../src/libs/utils/RandUtil.ts","../src/libs/utils/MathUtil.ts","../src/libs/utils/ResUtil/LoadAtlas.ts","../src/libs/utils/ResUtil.ts","../src/libs/utils/TimeUtil.ts","../src/libs/utils/GeometryUtil.ts","../src/libs/utils/format-util.ts","../src/libs/utils/float-util.ts","../src/libs/utils/PathUtil.ts","../src/libs/database/DataManager.ts","../src/libs/database/frame_data.ts","../src/libs/ds/TreeSource.ts","../src/libs/ds/ListSource.ts","../src/libs/ds/Dictionary.ts","../src/libs/ds/DictSource.ts","../src/libs/serial/schema/schema-type.ts","../src/libs/serial/schema/schema-field.ts","../src/libs/serial/schema/schema-visitor.ts","../src/libs/serial/mapcoder/decoder.ts","../src/libs/serial/schema/schema-decl.ts","../src/libs/serial/bytecoder/decoder.ts","../src/libs/net/net-receive.ts","../src/libs/net/Caller.ts","../src/libs/net/net-socket.ts","../src/libs/net/net-http.ts","../src/libs/net/net-manager.ts","../src/libs/event/Listener.ts","../src/libs/event/CallbackList.ts","../src/libs/event/Dispatcher.ts","../src/libs/trigger/TriggerManager.ts","../src/libs/trigger/TriggerEvent.ts","../src/libs/trigger/event/FrameEvent.ts","../src/libs/trigger/Trigger.ts","../src/libs/utils/game-util.ts","../src/libs/trigger/event/TimerEvent.ts","../src/libs/trigger/event/ClickEvent.ts","../src/libs/trigger/event/NodeEvent.ts","../src/libs/trigger/event/DataObjectEvent.ts","../src/libs/trigger/event/ResponseEvent.ts","../src/libs/trigger/event/WaitEvent.ts","../src/libs/trigger/event/DBEvent.ts","../src/libs/mvc/ControllerSet.ts","../src/libs/mvc/Controller.ts","../src/libs/mvc/Module.ts","../src/libs/mvc/Model.ts","../src/libs/mvc/Factory.ts","../src/libs/page/PageLayer.ts","../src/libs/page/UIObjectDict.ts","../src/libs/page/Page.ts","../src/libs/page/Route.ts","../src/libs/page/ViewController.ts","../src/libs/page/PageRepo.ts","../src/libs/page/PageController.ts","../src/libs/serial/schema/SchemaTreeRootCreator.ts","../src/libs/serial/schema/SchemaValueToJson.ts","../src/libs/serial/schema/SchemaManager.ts","../src/libs/serial/schema/SchemaNodeToValue.ts","../src/libs/modify/SimpleModify.ts","../src/libs/database/DataTableConfig.ts","../src/libs/config/Config.ts","../src/libs/config/ConfigSet.ts","../src/libs/config/ConfigManager.ts","../src/libs/config/ConfigDict.ts","../src/libs/config/ConfigEvent.ts","../src/libs/config/ConfigRepo.ts","../src/libs/debug/DebugManager.ts","../src/libs/command/CommandManager.ts","../src/libs/cachex/CacheObject.ts","../src/libs/cachex/cache-modify.ts","../src/libs/datex/Date.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 error {\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 {\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: error): 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 {error, 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, error] {\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, error] {\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","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() {\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\nexport class PoolSet {\n pools: { [key: string]: Pool };\n\n constructor() {\n this.pools = {};\n }\n\n\n register(poolName: string, creator: CreatorFunction, recycle: RecycleFunction = null, dispose: DisposeFunction = null): Pool {\n let pool = this.getPool(poolName);\n if (pool) {\n return pool;\n }\n pool = new Pool();\n pool.name = poolName;\n pool.creatorFunction = creator;\n pool.recycleFunction = recycle;\n pool.disposeFunction = dispose;\n\n this.pools[poolName] = pool;\n return pool;\n }\n\n getOrCreatePool(poolName): Pool {\n let pool = this.pools[poolName];\n if (!pool) {\n pool = new Pool();\n this.pools[poolName] = pool;\n }\n return pool;\n }\n\n getPool(poolName): Pool {\n return this.pools[poolName];\n }\n\n disposePool(poolName: string) {\n let pool = this.pools[poolName];\n if (pool) {\n pool.dispose();\n }\n }\n\n dispose() {\n for (let key in this.pools) {\n let pool = this.pools[key];\n if (pool) {\n pool.dispose();\n }\n }\n this.pools = null;\n }\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","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 = new Scheduler()\n Scheduler.enableForTarget(this._scheduler);\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\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","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","import {PoolSet} from \"./PoolSet\";\nimport {Timer} from \"../timer/Timer\";\nimport {director} from \"cc\";\nimport {XEvent} from \"../event/XEvent\";\nimport {EventItem} from \"../event/EventItem\";\n\n\nexport var pools = new PoolSet();\npools.register(\"Array\",\n function () {\n return [];\n },\n function (item: []): void {\n item.length = 0;\n },\n function (item: []): void {\n item.length = 0;\n }\n)\n\npools.register(\"Event\",\n function () {\n return new XEvent();\n },\n function (item: XEvent): void {\n item.recycle();\n },\n function (item: XEvent): void {\n item.dispose();\n }\n)\n\npools.register(\"EventItem\",\n function () {\n return new EventItem();\n },\n function (item: EventItem): void {\n item.recycle();\n },\n function (item: EventItem): void {\n item.dispose();\n }\n)\npools.register(\"Timer\",\n function () {\n let timer = new Timer()\n director.getScheduler().scheduleUpdate(timer.scheduler, 0, false);\n return timer;\n },\n function (item: Timer): void {\n item.recycle();\n },\n function (item: Timer): void {\n item.dispose();\n }\n)\n\nexport var poolsTimer = pools.getPool(\"Timer\");\nexport var poolsArray = pools.getPool(\"Array\");\nexport var poolsEvent = pools.getPool(\"Event\");\nexport var poolsEventItem = pools.getPool(\"EventItem\");","import {Timer} from \"./Timer\";\r\nimport {poolsTimer} from \"../pool/frame_pool\";\r\n\r\n\r\nexport const timer: Timer = poolsTimer.getObject();\r\n","/**\n * Endian 类中包含一些值,它们表示用于表示多字节数字的字节顺序。\n * 字节顺序为 bigEndian(最高有效字节位于最前)或 littleEndian(最低有效字节位于最前)。\n */\nexport class Endian {\n /**\n * 表示多字节数字的最低有效字节位于字节序列的最前面。\n * 十六进制数字 0x12345678 包含 4 个字节(每个字节包含 2 个十六进制数字)。最高有效字节为 0x12。最低有效字节为 0x78。(对于等效的十进制数字 305419896,最高有效数字是 3,最低有效数字是 6)。\n */\n public static LITTLE_ENDIAN: string = \"littleEndian\";\n\n /**\n * 表示多字节数字的最高有效字节位于字节序列的最前面。\n * 十六进制数字 0x12345678 包含 4 个字节(每个字节包含 2 个十六进制数字)。最高有效字节为 0x12。最低有效字节为 0x78。(对于等效的十进制数字 305419896,最高有效数字是 3,最低有效数字是 6)。\n */\n public static BIG_ENDIAN: string = \"bigEndian\";\n\n}\n\nexport const enum EndianConst {\n LITTLE_ENDIAN = 0,\n BIG_ENDIAN = 1\n}\n\nconst enum ByteArraySize {\n\n SIZE_OF_BOOLEAN = 1,\n\n SIZE_OF_INT8 = 1,\n\n SIZE_OF_INT16 = 2,\n\n SIZE_OF_INT32 = 4,\n\n SIZE_OF_UINT8 = 1,\n\n SIZE_OF_UINT16 = 2,\n\n SIZE_OF_UINT32 = 4,\n\n SIZE_OF_FLOAT32 = 4,\n\n SIZE_OF_FLOAT64 = 8\n}\n\n/**\n * ByteArray 类提供用于优化读取、写入以及处理二进制数据的方法和属性。\n * 注意:ByteArray 类适用于需要在字节层访问数据的高级开发人员。\n */\nexport class ByteArray {\n\n /**\n * @private\n */\n protected bufferExtSize = 0;//Buffer expansion size\n\n protected data: DataView;\n\n protected _bytes: Uint8Array;\n /**\n * @private\n */\n protected _position: number;\n\n /**\n *\n * 已经使用的字节偏移量\n */\n protected write_position: number;\n\n /**\n * 更改或读取数据的字节顺序;egret.EndianConst.BIG_ENDIAN 或 egret.EndianConst.LITTLE_ENDIAN。\n */\n public get endian() {\n return this.$endian === EndianConst.LITTLE_ENDIAN ? Endian.LITTLE_ENDIAN : Endian.BIG_ENDIAN;\n }\n\n public set endian(value: string) {\n this.$endian = value === Endian.LITTLE_ENDIAN ? EndianConst.LITTLE_ENDIAN : EndianConst.BIG_ENDIAN;\n }\n\n protected $endian: EndianConst;\n\n constructor(buffer?: ArrayBuffer | Uint8Array, bufferExtSize = 0) {\n if (bufferExtSize < 0) {\n bufferExtSize = 0;\n }\n this.bufferExtSize = bufferExtSize;\n let bytes: Uint8Array, wpos = 0;\n if (buffer) {//有数据,则可写字节数从字节尾开始\n let uint8: Uint8Array;\n if (buffer instanceof Uint8Array) {\n uint8 = buffer;\n wpos = buffer.length;\n } else {\n wpos = buffer.byteLength;\n uint8 = new Uint8Array(buffer);\n }\n if (bufferExtSize === 0) {\n bytes = new Uint8Array(wpos);\n } else {\n let multi = (wpos / bufferExtSize | 0) + 1;\n bytes = new Uint8Array(multi * bufferExtSize);\n }\n bytes.set(uint8);\n } else {\n bytes = new Uint8Array(bufferExtSize);\n }\n this.write_position = wpos;\n this._position = 0;\n this._bytes = bytes;\n this.data = new DataView(bytes.buffer);\n this.endian = Endian.LITTLE_ENDIAN;\n }\n\n\n /**\n * @deprecated\n * @version Egret 2.4\n * @platform Web,Native\n */\n public setArrayBuffer(buffer: ArrayBuffer): void {\n\n }\n\n /**\n * 可读的剩余字节数\n * @returns\n */\n public get readAvailable() {\n return this.write_position - this._position;\n }\n\n public get buffer(): ArrayBuffer {\n return this.data.buffer.slice(0, this.write_position) as unknown as any;;\n }\n\n public get rawBuffer(): ArrayBuffer {\n return this.data.buffer as unknown as any;;\n }\n\n /**\n * @private\n */\n public set buffer(value: ArrayBuffer) {\n let wpos = value.byteLength;\n let uint8 = new Uint8Array(value);\n let bufferExtSize = this.bufferExtSize;\n let bytes: Uint8Array;\n if (bufferExtSize === 0) {\n bytes = new Uint8Array(wpos);\n } else {\n let multi = (wpos / bufferExtSize | 0) + 1;\n bytes = new Uint8Array(multi * bufferExtSize);\n }\n bytes.set(uint8);\n this.write_position = wpos;\n this._bytes = bytes;\n this.data = new DataView(bytes.buffer);\n }\n\n public get bytes(): Uint8Array {\n return this._bytes;\n }\n\n /**\n * @private\n */\n public get dataPage(): DataView {\n return this.data;\n }\n\n /**\n * @private\n */\n public set dataPage(value: DataView) {\n this.buffer = value.buffer as unknown as any;\n }\n\n /**\n * @private\n */\n public get bufferOffset(): number {\n return this.data.byteOffset;\n }\n\n /**\n * 将文件指针的当前位置(以字节为单位)移动或返回到 ByteArray 对象中。下一次调用读取方法时将在此位置开始读取,或者下一次调用写入方法时将在此位置开始写入。\n */\n public get position(): number {\n return this._position;\n }\n\n public set position(value: number) {\n this._position = value;\n if (value > this.write_position) {\n this.write_position = value;\n }\n }\n\n\n /**\n * ByteArray 对象的长度(以字节为单位)。\n * 如果将长度设置为大于当前长度的值,则用零填充字节数组的右侧。\n * 如果将长度设置为小于当前长度的值,将会截断该字节数组。\n */\n public get length(): number {\n return this.write_position;\n }\n\n public set length(value: number) {\n this.write_position = value;\n if (this.data.byteLength > value) {\n this._position = value;\n }\n this._validateBuffer(value);\n }\n\n protected _validateBuffer(value: number) {\n if (this.data.byteLength < value) {\n let be = this.bufferExtSize;\n let tmp: Uint8Array;\n if (be === 0) {\n tmp = new Uint8Array(value);\n } else {\n let nLen = ((value / be >> 0) + 1) * be;\n tmp = new Uint8Array(nLen);\n }\n tmp.set(this._bytes);\n this._bytes = tmp;\n this.data = new DataView(tmp.buffer);\n }\n }\n\n /**\n * 可从字节数组的当前位置到数组末尾读取的数据的字节数。\n * 每次访问 ByteArray 对象时,将 bytesAvailable 属性与读取方法结合使用,以确保读取有效的数据。\n */\n public get bytesAvailable(): number {\n return this.data.byteLength - this._position;\n }\n\n\n /**\n * 清除字节数组的内容,并将 length 和 position 属性重置为 0。\n */\n public clear(): void {\n let buffer = new ArrayBuffer(this.bufferExtSize);\n this.data = new DataView(buffer);\n this._bytes = new Uint8Array(buffer);\n this._position = 0;\n this.write_position = 0;\n }\n\n\n /**\n * 从字节流中读取布尔值。读取单个字节,如果字节非零,则返回 true,否则返回 false\n * @return 如果字节不为零,则返回 true,否则返回 false\n */\n public readBool(): boolean {\n if (this.validate(ByteArraySize.SIZE_OF_BOOLEAN)) return !!this._bytes[this.position++];\n }\n\n\n /**\n * 从字节流中读取带符号的字节\n * @return 介于 -128 和 127 之间的整数\n */\n public readByte(): number {\n if (this.validate(ByteArraySize.SIZE_OF_INT8)) return this.data.getInt8(this.position++);\n }\n\n\n /**\n * 从字节流中读取 length 参数指定的数据字节数。从 offset 指定的位置开始,将字节读入 bytes 参数指定的 ByteArray 对象中,并将字节写入目标 ByteArray 中\n * @param bytes 要将数据读入的 ByteArray 对象\n * @param offset bytes 中的偏移(位置),应从该位置写入读取的数据\n * @param length 要读取的字节数。默认值 0 导致读取所有可用的数据\n */\n public readBytes(bytes: ByteArray, offset: number = 0, length: number = 0): void {\n if (!bytes) {//由于bytes不返回,所以new新的无意义\n return;\n }\n let pos = this._position;\n let available = this.write_position - pos;\n if (available < 0) {\n console.log(\"ByteArray.readBytes: available < 0\")\n return;\n }\n if (length === 0) {\n length = available;\n } else if (length > available) {\n console.log(`ByteArray.readBytes: available < length(${length})`)\n return;\n }\n const position = bytes._position;\n bytes._position = 0;\n bytes.validateBuffer(offset + length);\n bytes._position = position;\n bytes._bytes.set(this._bytes.subarray(pos, pos + length), offset);\n this.position += length;\n }\n\n\n /**\n * 从字节流中读取一个 IEEE 754 双精度(64 位)浮点数\n * @return 双精度(64 位)浮点数\n */\n public readFloat64(): number {\n if (this.validate(ByteArraySize.SIZE_OF_FLOAT64)) {\n let value = this.data.getFloat64(this._position, this.$endian === EndianConst.LITTLE_ENDIAN);\n this.position += ByteArraySize.SIZE_OF_FLOAT64;\n return value;\n }\n }\n\n\n /**\n * 从字节流中读取一个 IEEE 754 单精度(32 位)浮点数\n * @return 单精度(32 位)浮点数\n */\n public readFloat32(): number {\n if (this.validate(ByteArraySize.SIZE_OF_FLOAT32)) {\n let value = this.data.getFloat32(this._position, this.$endian ===EndianConst.LITTLE_ENDIAN);\n this.position += ByteArraySize.SIZE_OF_FLOAT32;\n return value;\n }\n }\n\n\n /**\n * 从字节流中读取一个带符号的 32 位整数\n * @return 介于 -2147483648 和 2147483647 之间的 32 位带符号整数\n */\n public readInt32(): number {\n if (this.validate(ByteArraySize.SIZE_OF_INT32)) {\n let value = this.data.getInt32(this._position, this.$endian ===EndianConst.LITTLE_ENDIAN);\n this.position += ByteArraySize.SIZE_OF_INT32;\n return value;\n }\n }\n\n /**\n * 从字节流中读取一个带符号的 32 位整数数组\n */\n public readInt32Array(): number[] {\n let length = this.readInt16();\n let arr = [];\n for(let i = 0; i < length; i++){\n arr.push(this.readInt32())\n }\n\n return arr;\n }\n\n\n\n /**\n * 从字节流中读取一个带符号的 16 位整数\n * @return 介于 -32768 和 32767 之间的 16 位带符号整数\n */\n public readInt16(): number {\n if (this.validate(ByteArraySize.SIZE_OF_INT16)) {\n let value = this.data.getInt16(this._position, this.$endian ===EndianConst.LITTLE_ENDIAN);\n this.position += ByteArraySize.SIZE_OF_INT16;\n return value;\n }\n }\n\n\n /**\n * 从字节流中读取无符号的字节\n * @return 介于 0 和 255 之间的无符号整数\n */\n public readInt8(): number {\n if (this.validate(ByteArraySize.SIZE_OF_UINT8)) return this._bytes[this.position++];\n }\n\n /**\n * 从字节流中读取无符号的字节\n * @return 介于 0 和 255 之间的无符号整数\n */\n public readUint8(): number {\n if (this.validate(ByteArraySize.SIZE_OF_UINT8)) return this._bytes[this.position++];\n }\n\n\n /**\n * 从字节流中读取一个无符号的 32 位整数\n * @return 介于 0 和 4294967295 之间的 32 位无符号整数\n */\n public readUint32(): number {\n if (this.validate(ByteArraySize.SIZE_OF_UINT32)) {\n let value = this.data.getUint32(this._position, this.$endian ===EndianConst.LITTLE_ENDIAN);\n this.position += ByteArraySize.SIZE_OF_UINT32;\n return value;\n }\n }\n\n\n /**\n * 从字节流中读取一个无符号的 16 位整数\n * @return 介于 0 和 65535 之间的 16 位无符号整数\n */\n public readUint16(): number {\n if (this.validate(ByteArraySize.SIZE_OF_UINT16)) {\n let value = this.data.getUint16(this._position, this.$endian ===EndianConst.LITTLE_ENDIAN);\n this.position += ByteArraySize.SIZE_OF_UINT16;\n return value;\n }\n }\n\n\n /**\n * 从字节流中读取一个 UTF-8 字符串。假定字符串的前缀是无符号的短整型(以字节表示长度)\n * @return UTF-8 编码的字符串\n */\n public readUTF(): string {\n let length = this.readInt16();\n if (length > 0) {\n return this.readUTFBytes(length);\n } else {\n return \"\";\n }\n }\n\n\n\n /**\n * 从字节流中读取一个由 length 参数指定的 UTF-8 字节序列,并返回一个字符串\n * @param length 指明 UTF-8 字节长度的无符号短整型数\n * @return 由指定长度的 UTF-8 字节组成的字符串\n */\n public readUTFBytes(length: number): string {\n if (!this.validate(length)) {\n return;\n }\n let data = this.data;\n let bytes = new Uint8Array(data.buffer, data.byteOffset + this._position, length);\n this.position += length;\n return this.decodeUTF8(bytes);\n }\n\n\n /**\n * 写入布尔值。根据 value 参数写入单个字节。如果为 true,则写入 1,如果为 false,则写入 0\n * @param value 确定写入哪个字节的布尔值。如果该参数为 true,则该方法写入 1;如果该参数为 false,则该方法写入 0\n */\n public writeBool(value: boolean): void {\n this.validateBuffer(ByteArraySize.SIZE_OF_BOOLEAN);\n this._bytes[this.position++] = +value;\n }\n\n\n /**\n * 在字节流中写入一个字节\n * 使用参数的低 8 位。忽略高 24 位\n * @param value 一个 32 位整数。低 8 位将被写入字节流\n */\n public writeByte(value: number): void {\n this.validateBuffer(ByteArraySize.SIZE_OF_INT8);\n this._bytes[this.position++] = value & 0xff;\n }\n\n /**\n * 将指定字节数组 bytes(起始偏移量为 offset,从零开始的索引)中包含 length 个字节的字节序列写入字节流\n * 如果省略 length 参数,则使用默认长度 0;该方法将从 offset 开始写入整个缓冲区。如果还省略了 offset 参数,则写入整个缓冲区\n * 如果 offset 或 length 超出范围,它们将被锁定到 bytes 数组的开头和结尾\n * @param bytes ByteArray 对象\n * @param offset 从 0 开始的索引,表示在数组中开始写入的位置\n * @param length 一个无符号整数,表示在缓冲区中的写入范围\n */\n public writeBytes(bytes: ByteArray, offset: number = 0, length: number = 0): void {\n let writeLength: number;\n if (offset < 0) {\n return;\n }\n if (length < 0) {\n return;\n } else if (length ===0) {\n writeLength = bytes.length - offset;\n } else {\n writeLength = Math.min(bytes.length - offset, length);\n }\n if (writeLength > 0) {\n this.validateBuffer(writeLength);\n this._bytes.set(bytes._bytes.subarray(offset, offset + writeLength), this._position);\n this.position = this._position + writeLength;\n }\n }\n\n\n /**\n * 在字节流中写入一个 IEEE 754 双精度(64 位)浮点数\n * @param value 双精度(64 位)浮点数\n */\n public writeDouble(value: number): void {\n this.validateBuffer(ByteArraySize.SIZE_OF_FLOAT64);\n this.data.setFloat64(this._position, value, this.$endian ===EndianConst.LITTLE_ENDIAN);\n this.position += ByteArraySize.SIZE_OF_FLOAT64;\n }\n\n\n /**\n * 在字节流中写入一个 IEEE 754 单精度(32 位)浮点数\n * @param value 单精度(32 位)浮点数\n */\n public writeFloat(value: number): void {\n this.validateBuffer(ByteArraySize.SIZE_OF_FLOAT32);\n this.data.setFloat32(this._position, value, this.$endian ===EndianConst.LITTLE_ENDIAN);\n this.position += ByteArraySize.SIZE_OF_FLOAT32;\n }\n\n\n /**\n * 在字节流中写入一个带符号的 32 位整数\n * @param value 要写入字节流的整数\n */\n public writeInt(value: number): void {\n this.validateBuffer(ByteArraySize.SIZE_OF_INT32);\n this.data.setInt32(this._position, value, this.$endian ===EndianConst.LITTLE_ENDIAN);\n this.position += ByteArraySize.SIZE_OF_INT32;\n }\n\n\n /**\n * 在字节流中写入一个 16 位整数。使用参数的低 16 位。忽略高 16 位\n * @param value 32 位整数,该整数的低 16 位将被写入字节流\n */\n public writeShort(value: number): void {\n this.validateBuffer(ByteArraySize.SIZE_OF_INT16);\n this.data.setInt16(this._position, value, this.$endian ===EndianConst.LITTLE_ENDIAN);\n this.position += ByteArraySize.SIZE_OF_INT16;\n }\n\n\n /**\n * 在字节流中写入一个无符号的 32 位整数\n * @param value 要写入字节流的无符号整数\n */\n public writeUnsignedInt(value: number): void {\n this.validateBuffer(ByteArraySize.SIZE_OF_UINT32);\n this.data.setUint32(this._position, value, this.$endian ===EndianConst.LITTLE_ENDIAN);\n this.position += ByteArraySize.SIZE_OF_UINT32;\n }\n\n /**\n * 在字节流中写入一个无符号的 16 位整数\n * @param value 要写入字节流的无符号整数\n */\n public writeUnsignedShort(value: number): void {\n this.validateBuffer(ByteArraySize.SIZE_OF_UINT16);\n this.data.setUint16(this._position, value, this.$endian ===EndianConst.LITTLE_ENDIAN);\n this.position += ByteArraySize.SIZE_OF_UINT16;\n }\n\n /**\n * 将 UTF-8 字符串写入字节流。先写入以字节表示的 UTF-8 字符串长度(作为 16 位整数),然后写入表示字符串字符的字节\n * @param value 要写入的字符串值\n */\n public writeUTF(value: string): void {\n let utf8bytes: ArrayLike<number> = this.encodeUTF8(value);\n let length: number = utf8bytes.length;\n this.validateBuffer(ByteArraySize.SIZE_OF_UINT16 + length);\n this.data.setUint16(this._position, length, this.$endian ===EndianConst.LITTLE_ENDIAN);\n this.position += ByteArraySize.SIZE_OF_UINT16;\n this._writeUint8Array(utf8bytes, false);\n }\n\n /**\n * 将 UTF-8 字符串写入字节流。类似于 writeUTF() 方法,但 writeUTFBytes() 不使用 16 位长度的词为字符串添加前缀\n * @param value 要写入的字符串值\n */\n public writeUTFBytes(value: string): void {\n this._writeUint8Array(this.encodeUTF8(value));\n }\n\n\n /**\n * @returns\n */\n public toString(): string {\n return \"[ByteArray] length:\" + this.length + \", bytesAvailable:\" + this.bytesAvailable;\n }\n\n /**\n * @private\n * 将 Uint8Array 写入字节流\n * @param bytes 要写入的Uint8Array\n * @param validateBuffer\n */\n public _writeUint8Array(bytes: Uint8Array | ArrayLike<number>, validateBuffer: boolean = true): void {\n let pos = this._position;\n let npos = pos + bytes.length;\n if (validateBuffer) {\n this.validateBuffer(npos);\n }\n this.bytes.set(bytes, pos);\n this.position = npos;\n }\n\n /**\n * @param len\n * @returns\n */\n public validate(len: number): boolean {\n let bl = this._bytes.length;\n if (bl > 0 && this._position + len <= bl) {\n return true;\n } else {\n console.log(`ByteArray.validate len=${len}`)\n }\n }\n\n /**********************/\n /* PRIVATE METHODS */\n\n /**********************/\n /**\n * @private\n * @param len\n * @param needReplace\n */\n protected validateBuffer(len: number): void {\n this.write_position = len > this.write_position ? len : this.write_position;\n len += this._position;\n this._validateBuffer(len);\n }\n\n /**\n * @private\n * UTF-8 Encoding/Decoding\n */\n private encodeUTF8(str: string): Uint8Array {\n let pos: number = 0;\n let codePoints = this.stringToCodePoints(str);\n let outputBytes = [];\n\n while (codePoints.length > pos) {\n let code_point: number = codePoints[pos++];\n\n if (this.inRange(code_point, 0xD800, 0xDFFF)) {\n this.encoderError(code_point);\n } else if (this.inRange(code_point, 0x0000, 0x007f)) {\n outputBytes.push(code_point);\n } else {\n let count, offset;\n if (this.inRange(code_point, 0x0080, 0x07FF)) {\n count = 1;\n offset = 0xC0;\n } else if (this.inRange(code_point, 0x0800, 0xFFFF)) {\n count = 2;\n offset = 0xE0;\n } else if (this.inRange(code_point, 0x10000, 0x10FFFF)) {\n count = 3;\n offset = 0xF0;\n }\n\n outputBytes.push(this.div(code_point, Math.pow(64, count)) + offset);\n\n while (count > 0) {\n let temp = this.div(code_point, Math.pow(64, count - 1));\n outputBytes.push(0x80 + (temp % 64));\n count -= 1;\n }\n }\n }\n return new Uint8Array(outputBytes);\n }\n\n /**\n * @private\n *\n * @param data\n * @returns\n */\n private decodeUTF8(data: Uint8Array): string {\n let fatal: boolean = false;\n let pos: number = 0;\n let result: string = \"\";\n let code_point: number;\n let utf8_code_point = 0;\n let utf8_bytes_needed = 0;\n let utf8_bytes_seen = 0;\n let utf8_lower_boundary = 0;\n\n while (data.length > pos) {\n\n let _byte = data[pos++];\n\n if (_byte ===this.EOF_byte) {\n if (utf8_bytes_needed !== 0) {\n code_point = this.decoderError(fatal);\n } else {\n code_point = this.EOF_code_point;\n }\n } else {\n\n if (utf8_bytes_needed ===0) {\n if (this.inRange(_byte, 0x00, 0x7F)) {\n code_point = _byte;\n } else {\n if (this.inRange(_byte, 0xC2, 0xDF)) {\n utf8_bytes_needed = 1;\n utf8_lower_boundary = 0x80;\n utf8_code_point = _byte - 0xC0;\n } else if (this.inRange(_byte, 0xE0, 0xEF)) {\n utf8_bytes_needed = 2;\n utf8_lower_boundary = 0x800;\n utf8_code_point = _byte - 0xE0;\n } else if (this.inRange(_byte, 0xF0, 0xF4)) {\n utf8_bytes_needed = 3;\n utf8_lower_boundary = 0x10000;\n utf8_code_point = _byte - 0xF0;\n } else {\n this.decoderError(fatal);\n }\n utf8_code_point = utf8_code_point * Math.pow(64, utf8_bytes_needed);\n code_point = null;\n }\n } else if (!this.inRange(_byte, 0x80, 0xBF)) {\n utf8_code_point = 0;\n utf8_bytes_needed = 0;\n utf8_bytes_seen = 0;\n utf8_lower_boundary = 0;\n pos--;\n code_point = this.decoderError(fatal, _byte);\n } else {\n\n utf8_bytes_seen += 1;\n utf8_code_point = utf8_code_point + (_byte - 0x80) * Math.pow(64, utf8_bytes_needed - utf8_bytes_seen);\n\n if (utf8_bytes_seen !== utf8_bytes_needed) {\n code_point = null;\n } else {\n\n let cp = utf8_code_point;\n let lower_boundary = utf8_lower_boundary;\n utf8_code_point = 0;\n utf8_bytes_needed = 0;\n utf8_bytes_seen = 0;\n utf8_lower_boundary = 0;\n if (this.inRange(cp, lower_boundary, 0x10FFFF) && !this.inRange(cp, 0xD800, 0xDFFF)) {\n code_point = cp;\n } else {\n code_point = this.decoderError(fatal, _byte);\n }\n }\n\n }\n }\n //Decode string\n if (code_point !== null && code_point !== this.EOF_code_point) {\n if (code_point <= 0xFFFF) {\n if (code_point > 0) result += String.fromCharCode(code_point);\n } else {\n code_point -= 0x10000;\n result += String.fromCharCode(0xD800 + ((code_point >> 10) & 0x3ff));\n result += String.fromCharCode(0xDC00 + (code_point & 0x3ff));\n }\n }\n }\n return result;\n }\n\n /**\n * @private\n *\n * @param code_point\n */\n private encoderError(code_point) {\n console.log(`ByteArray.encoderError: code_point=${code_point}`)\n }\n\n /**\n * @private\n *\n * @param fatal\n * @param opt_code_point\n * @returns\n */\n private decoderError(fatal, opt_code_point?): number {\n if (fatal) {\n console.log(`ByteArray.decoderError: opt_code_point=${opt_code_point}`)\n }\n return opt_code_point || 0xFFFD;\n }\n\n /**\n * @private\n */\n private EOF_byte: number = -1;\n /**\n * @private\n */\n private EOF_code_point: number = -1;\n\n /**\n * @private\n *\n * @param a\n * @param min\n * @param max\n */\n private inRange(a, min, max) {\n return min <= a && a <= max;\n }\n\n /**\n * @private\n *\n * @param n\n * @param d\n */\n private div(n, d) {\n return Math.floor(n / d);\n }\n\n /**\n * @private\n *\n * @param string\n */\n private stringToCodePoints(string) {\n /** @type {Array.<number>} */\n let cps = [];\n // Based on http://www.w3.org/TR/WebIDL/#idl-DOMString\n let i = 0, n = string.length;\n while (i < string.length) {\n let c = string.charCodeAt(i);\n if (!this.inRange(c, 0xD800, 0xDFFF)) {\n cps.push(c);\n } else if (this.inRange(c, 0xDC00, 0xDFFF)) {\n cps.push(0xFFFD);\n } else { // (inRange(c, 0xD800, 0xDBFF))\n if (i ===n - 1) {\n cps.push(0xFFFD);\n } else {\n let d = string.charCodeAt(i + 1);\n if (this.inRange(d, 0xDC00, 0xDFFF)) {\n let a = c & 0x3FF;\n let b = d & 0x3FF;\n i += 1;\n cps.push(0x10000 + (a << 10) + b);\n } else {\n cps.push(0xFFFD);\n }\n }\n }\n i += 1;\n }\n return cps;\n }\n}\n","export enum ConnectState {\n // 等待\n Wait,\n // 已关闭\n Closed,\n // 正在连接\n Connecting,\n // 已连接,\n Connected,\n}\n\nexport enum ValidState {\n // 未知\n Unknown,\n // 正在,\n Validing,\n // 已连接,\n Valid,\n}\n\nexport enum NetIdent {\n // 发送\n Send = \"Send\",\n}\n\n\nexport enum NetSub {\n // 所有\n All,\n // 发送协议的时候, 没有连接\n NotConnected,\n // 发送的协议数据无效\n Invalid\n}\n\n\n// 消息响应的子类型\nexport enum ResponseSub {\n // 所有\n All,\n // 返回成功\n Succeed,\n // 返回失败\n Failed,\n // 超时\n Timeout,\n}\n\n// 消息响应的子类型\nexport enum SerializeMode {\n // json\n JSON,\n // 使用了反射的JSON\n JSON_REF,\n // 字符串\n BYTE,\n}\n\nexport enum PushTag {\n Unknown,\n Response,\n Push,\n Event,\n Command,\n SyncCreate,\n SyncUpdate,\n SyncDelete,\n\n}\n\n\nexport enum HttpResponseType {\n /**\n * 返回字符串。HttpRequest.responseType属性的默认值。\n */\n TEXT = \"text\",\n /**\n * 返回二进制的ArrayBuffer对象。\n */\n ARRAY_BUFFER = \"arraybuffer\",\n BLOB = \"blob\",\n DOCUMENT = \"document\",\n JSON = \"json\",\n}\n\nexport enum HttpMethod {\n GET = \"GET\",\n POST = \"POST\",\n}\n\n\nexport enum WebSocketType {\n /**\n * 以字符串格式发送和接收数据\n */\n STRING = \"webSocketTypeString\",\n /**\n * 以二进制格式发送和接收数据\n */\n BINARY = \"webSocketTypeBinary\",\n\n}\n","import {ByteArray} from \"./ByteArray\";\n\nexport class RequestProtocol {\n id: string;\n seq: number;\n serialMode: number;\n token: string;\n data: any;\n\n public pack(writer: ByteArray) {\n writer.writeUnsignedInt(this.seq);\n writer.writeByte(this.serialMode);\n writer.writeUTF(this.token);//token\n writer.writeUTF(this.id);\n switch (this.serialMode) {\n case 0:\n let datastr = \"\"\n if(this.data){\n datastr = JSON.stringify(this.data);\n }\n writer.writeUTF(datastr);\n break;\n case 1:\n break;\n }\n }\n}\n\nexport class ResponseProtocol {\n seq: number;\n serialMode: number\n error: string;\n data: ByteArray;\n\n public unpack(reader: ByteArray, endian: string) {\n this.seq = reader.readUint32();\n this.serialMode = reader.readByte();\n this.error = reader.readUTF();\n\n this.data = new ByteArray();\n this.data.endian = endian;\n reader.readBytes(this.data);\n }\n}\n\nexport class PushProtocol {\n serialMode: number\n data: any;\n\n public unpack(reader: ByteArray) {\n this.serialMode = reader.readByte();\n this.data = new ByteArray();\n reader.readBytes(this.data);\n }\n}\n\nexport class CreateProtocol {\n key: string;\n serialMode: number;\n data: any;\n\n public unpack(reader: ByteArray) {\n this.key = reader.readUTF();\n this.serialMode = reader.readByte();\n this.data = new ByteArray();\n reader.readBytes(this.data);\n }\n}\n\nexport class UpdateProtocol {\n key: string;\n serialMode: number;\n data: any;\n\n public unpack(reader: ByteArray) {\n this.key = reader.readUTF();\n this.serialMode = reader.readByte();\n this.data = new ByteArray();\n reader.readBytes(this.data);\n }\n}\n\nexport class DeleteProtocol {\n key: string;\n\n public unpack(reader: ByteArray) {\n this.key = reader.readUTF();\n }\n}\n\nexport class EventProtocol {\n key: string;\n serialMode: number;\n data: any;\n\n public unpack(reader: ByteArray) {\n this.key = reader.readUTF();\n this.serialMode = reader.readByte();\n this.data = new ByteArray();\n reader.readBytes(this.data);\n }\n}\n\nexport class CommandProtocol {\n key: string;\n serialMode: number;\n data: any;\n\n public unpack(reader: ByteArray) {\n this.key = reader.readUTF();\n this.serialMode = reader.readByte();\n this.data = new ByteArray();\n reader.readBytes(this.data);\n }\n}\n\n","import {ICacheObject} from \"../cachex\";\n\nexport interface IDatabase {\n // createObject(key: string, data: any);\n}\n\nexport interface IDBObject {\n /**\n * 返回模型的数据库对象\n * @constructor\n */\n DBObject(): ICacheObject;\n\n DBPath():string;\n\n}\n\nexport interface IDBOnCreate {\n /**\n * 当创建完成后\n */\n DBOnCreate();\n\n}\n\nexport interface IDBOnUpdate {\n /**\n * 当创建完成后\n */\n DBOnUpdate();\n\n}\n\nexport interface IDBOnRemove {\n /**\n * 当创建完成后\n */\n DBOnRemove();\n\n}\n\nexport interface IDBTable {\n DBCreate(ident: any, data: any): IDBObject\n\n DBGet(key: string): IDBObject\n\n DBSet(key: string, val: IDBObject)\n\n DBDelete(key: string)\n}\n\n/**\n * event.OnParams的类型\n */\nexport interface IDBEventDispatchParams {\n action: DBAction;\n object: IDBObject;\n table: IDBTable;\n /**\n * 输入的数据\n */\n data: any\n}\n\nexport enum DBAction {\n Create,\n Update,\n Remove,\n /**\n * 主动触发刷新的时间\n */\n Refresh\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();","export class ListIterator {\r\n break() {\r\n this._isBreak = true;\r\n }\r\n\r\n isBreak(): boolean {\r\n return this._isBreak;\r\n }\r\n\r\n protected _isBreak;\r\n}\r\n\r\nexport class List<T = any> {\r\n constructor() {\r\n this._onSet = null;\r\n this._onDelete = null;\r\n }\r\n\r\n public onSet(caller: any, handler: (value: T) => void): void {\r\n this._onSetCaller = caller;\r\n this._onSet = handler;\r\n }\r\n\r\n public onDelete(caller: any, handler: (value: T) => void): void {\r\n this._onDelete = handler;\r\n this._onDeleteCaller = caller;\r\n }\r\n\r\n\r\n firstByCondition(conf: (index: number, item: T) => boolean): [number, T] {\r\n let data = this._data;\r\n for (let i = 0; i < data.length; i++) {\r\n let item = data[i];\r\n if (conf(i, item)) {\r\n return [i, item]\r\n }\r\n }\r\n\r\n return [-1, null];\r\n }\r\n\r\n lastByCondition(conf: (index: number, item: T) => boolean): [number, T] {\r\n let data = this._data;\r\n for (let i = data.length - 1; i >= 0; i--) {\r\n let item = data[i];\r\n if (conf(i, item)) {\r\n return [i, item]\r\n }\r\n }\r\n return [-1, null];\r\n }\r\n\r\n forEach(handler: (index: number, item: T, iterator: ListIterator) => void) {\r\n let iterator = new ListIterator();\r\n let data = this._data;\r\n for (let i = 0; i < data.length; i++) {\r\n let item = data[i];\r\n handler(i, item, iterator);\r\n if (iterator.isBreak()) {\r\n return iterator;\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * 移除符合条件的项, 从后往前遍历\r\n * @param cond 可以使用【iterator】中断遍历\r\n * @param removedList 设置后,可获得被移除的项\r\n */\r\n public removeByCondition(cond: (index: number, val: T, iterator: ListIterator) => boolean, removedList?: List): this {\r\n let iterator = new ListIterator();\r\n let data = this._data;\r\n for (let i = data.length - 1; i >= 0; i--) {\r\n let item = data[i];\r\n if (cond(i, item, iterator)) {\r\n if (removedList) {\r\n removedList.push(item)\r\n }\r\n this.remove(item);\r\n }\r\n if (iterator.isBreak()) {\r\n break;\r\n }\r\n }\r\n\r\n return removedList as this;\r\n }\r\n\r\n /**\r\n * 查找符合条件的项保存到【target】对象中,并返回【target】对象\r\n * @param cond 可以使用【iterator】中断遍历\r\n * @param target 存到目标对象中\r\n */\r\n public findByCondition(cond: (index: number, val: T, iterator: ListIterator) => boolean, target: List): this {\r\n if (!target) {\r\n throw new Error(\"需要设置目标对象\")\r\n }\r\n let iterator = new ListIterator();\r\n let data = this._data;\r\n for (let i = 0; i < data.length; i++) {\r\n let item = data[i];\r\n if (cond(i, item, iterator)) {\r\n\r\n }\r\n if (iterator.isBreak()) {\r\n break;\r\n }\r\n }\r\n return target as this;\r\n }\r\n\r\n\r\n pop(): T {\r\n let item = this._data.pop();\r\n this.callRemove(item)\r\n return item;\r\n }\r\n\r\n shift(): T {\r\n let item = this._data.shift();\r\n this.callRemove(item);\r\n return item;\r\n }\r\n\r\n\r\n first(): T {\r\n return this._data[0];\r\n }\r\n\r\n last(): T {\r\n return this._data[this._data.length - 1];\r\n }\r\n\r\n removeAt(index: number) {\r\n if (index >= 0) {\r\n let removed = this._data.splice(index, 1);\r\n this.callRemove(removed[0])\r\n }\r\n }\r\n\r\n remove(item: T) {\r\n let data = this._data;\r\n let index = data.indexOf(item);\r\n if (index != -1) {\r\n data.splice(index, 1);\r\n this.callRemove(item);\r\n }\r\n }\r\n\r\n /**\r\n * 把【other】的项合并到自身\r\n * @param other\r\n */\r\n removeList(other: List<T>): void {\r\n for (const item of other._data) {\r\n this.remove(item);\r\n }\r\n }\r\n\r\n sort(compareFn?: (a: T, b: T) => number) {\r\n this._data.sort(compareFn)\r\n }\r\n\r\n reverse() {\r\n this._data.reverse();\r\n }\r\n\r\n clear() {\r\n this._data.length = 0;\r\n }\r\n\r\n /**\r\n * 克隆自身所有项到【target】对象,并返回【target】对象\r\n * @param target\r\n */\r\n clone(target: this): this {\r\n let newdata = target.getData().concat(this._data);\r\n target.resetData(newdata);\r\n return target as this;\r\n }\r\n\r\n get length(): number {\r\n return this._data.length;\r\n }\r\n\r\n insertAt(index: number, ...item: T[]) {\r\n this._data.splice(index, 0, ...item);\r\n this.callPush(item);\r\n }\r\n\r\n /**\r\n * @param beforeItem\r\n * @param item\r\n */\r\n insertBefore(beforeItem: T, ...item: T[]) {\r\n let data = this._data;\r\n let index = data.indexOf(beforeItem);\r\n if (index == -1) {\r\n data.push(item);\r\n } else {\r\n data.splice(index - 1, 0, ...item);\r\n }\r\n this.callPush(item);\r\n }\r\n\r\n /**\r\n * @param afterItem\r\n * @param item\r\n */\r\n insertAfter(afterItem: T, ...item: T[]) {\r\n let data = this._data;\r\n let index = data.indexOf(afterItem);\r\n if (index == -1) {\r\n data.push(item);\r\n } else {\r\n data.splice(index, 0, ...item);\r\n }\r\n\r\n this.callPush(item);\r\n }\r\n\r\n at(index: number): T {\r\n return this._data[index];\r\n }\r\n\r\n set(index: number, item: T) {\r\n let existed = this._data[index];\r\n if (existed) {\r\n if (existed == item) {\r\n return;\r\n }\r\n this.callRemove(existed);\r\n }\r\n this._data[index] = item;\r\n this.callPush(item);\r\n }\r\n\r\n indexOf(item: T): number {\r\n return this._data.indexOf(item);\r\n }\r\n\r\n has(item: T): boolean {\r\n return this._data.indexOf(item) != -1\r\n }\r\n\r\n push(item: T) {\r\n this._data.push(item);\r\n this.callPush(item);\r\n }\r\n\r\n\r\n /**\r\n * 把【other】的项合并到自身\r\n * @param other\r\n */\r\n pushList(other: List<T>): void {\r\n for (const item of other._data) {\r\n this.push(item);\r\n }\r\n }\r\n\r\n getData(): T[] {\r\n return this._data\r\n }\r\n\r\n resetData(val: T[]) {\r\n this._data = val;\r\n }\r\n\r\n /**\r\n * 随机获取【count】个项,并返回【target】对象\r\n * @param count\r\n * @param enableRepeat 允许重复\r\n * @param target\r\n */\r\n random(count: number, enableRepeat: boolean = false, target?: List<T>): List<T> {\r\n if (!target) {\r\n target = new List<T>()\r\n }\r\n const copyItems = [...this._data]; // 创建副本以避免修改原数组\r\n for (let i = 0; i < count && copyItems.length > 0; i++) {\r\n const randomIndex = Math.floor(Math.random() * copyItems.length);\r\n target.push(copyItems[randomIndex]);\r\n if (!enableRepeat) {\r\n copyItems.splice(randomIndex, 1); // 移除已选元素以防止重复选择\r\n }\r\n }\r\n return target;\r\n }\r\n\r\n protected callPush(value) {\r\n if (this._onSet !== null) {\r\n this._onSet.call(this._onSetCaller, value);\r\n }\r\n }\r\n\r\n protected callRemove(value) {\r\n if (this._onDelete !== null) {\r\n this._onDelete.call(this._onDeleteCaller, value);\r\n }\r\n }\r\n\r\n protected _data = [];\r\n private _onSet: ((value: T) => void) | null;\r\n private _onDelete: ((value: T) => void) | null;\r\n private _onSetCaller: any;\r\n private _onDeleteCaller: any;\r\n}","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();","/**\n * 事件字符串分隔符\n */\nimport {IEventManager} from \"./iface\";\nimport {poolsEvent, poolsEventItem} from \"../pool/frame_pool\";\nimport {EventItem} from \"./EventItem\";\nimport {XEvent} from \"./XEvent\";\nimport {LogLevel} from \"../log/Logger\";\nimport {logmgr} from \"../log/LogManager\";\nimport {Scheduler} from \"cc\";\n\n\nconst log = logmgr.getEventLogger()\n\n/**\n * 事件派发器\n */\nexport class EventManager implements IEventManager/*, 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 = poolsEventItem.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 = poolsEventItem.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 poolsEventItem.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 = poolsEvent.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 poolsEvent.recycleObject(event);\n }\n\n toString() {\n return `EventManager`;\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 EventManager();","import {convertutil} from \"./ConvertUtil\";\n\nexport class MapUtil {\n\n /**\n * 获取所欲的值\n */\n values<T = any>(m: { [key: string]: T; }): T[] {\n let r: T[] = [];\n for (let key in m) {\n r.push(m[key])\n }\n\n return r;\n }\n\n /**\n * 获取所有的键\n */\n keys(m: { [key: string]: any; }): string[] {\n let r: string[] = [];\n for (let key in m) {\n r.push(key)\n }\n return r;\n }\n\n /**\n * 以字符串数字作为键值的map,转化成数组\n */\n toList<T = any>(m: { [key: string]: T; }): T[] {\n let r: T[] = [];\n for (let key in m) {\n r[parseInt(key, 10)] = m[key]\n }\n return r;\n }\n\n /**\n * 以字符串数字作为键值的map,转化成数组\n */\n listToMap(list: any[]): any {\n let r = {}\n if (list) {\n for (let i = 0; i < list.length; i++) {\n r[i.toString()] = list[i];\n }\n }\n return r;\n }\n\n /**\n * 转换成数字, 如果原值无效, 返回0\n * @constructor\n */\n has(m: any, key: string): boolean {\n return m.hasOwnProperty(key);\n }\n\n /**\n * 转换成数字, 如果原值无效, 返回0\n * @constructor\n */\n number(m: any, key: string, dflt: number = 0): number {\n if (!m) {\n return dflt;\n }\n let data = m[key];\n if (!data) {\n return dflt\n }\n\n if (typeof data !== \"number\") {\n data = parseFloat(data)\n }\n\n return data;\n }\n\n /**\n * 转换成字符串, 如果原值无效, 返回\"\"\n * @constructor\n */\n string(m: any, key: string, dflt: string = \"\"): string {\n if (!m) {\n return dflt;\n }\n let data = m[key];\n if (!data) {\n return dflt\n }\n\n return data;\n }\n\n /**\n * 转换成布尔值, 如果原值无效, 返回false\n * @constructor\n */\n boolean(m: any, key: string, dflt: boolean = false): boolean {\n if (!m) {\n return dflt;\n }\n let data = m[key];\n if (data === undefined || data === null) {\n return dflt\n }\n\n return data;\n }\n\n /**\n * 转换成{}, 如果原值无效, 返回{}\n * @constructor\n */\n map(m: any, key: string, dflt: boolean | Object = false): any {\n if (!m) {\n return dflt;\n }\n let data = m[key];\n if (!data) {\n if (dflt instanceof Object) {\n data = dflt;\n m[key] = data;\n } else if (dflt) {\n data = {};\n m[key] = data;\n }\n }\n\n return data;\n }\n\n /**\n * 转换成[], 如果原值无效, 返回[]\n * @constructor\n */\n array(m: any, key: string, dflt: boolean | Array<any> = false): any[] {\n if (!m || !m[key]) {\n if (dflt instanceof Array) {\n m[key] = dflt;\n return m[key];\n } else if (dflt) {\n m[key] = [];\n return m[key];\n }\n return null;\n }\n let data = m[key];\n if (data instanceof Array) {\n return data;\n }\n\n let r = [];\n for (let k in data) {\n r[parseInt(k, 10)] = data[k];\n }\n\n return r;\n }\n\n /**\n * 返回第一个符合条件的key\n * @param m\n * @param conf\n */\n keyOfConf(m: any, conf: (key: string, item: any) => boolean): string {\n for (let key in m) {\n if (conf(key, m[key])) {\n return key;\n }\n }\n\n return \"\";\n }\n\n /**\n * 比较对象,并返回包含差异的对象\n * 如果返回 undefined 表示没有差异\n * @param obj\n * @param parent\n * @param removeDefault\n */\n diff(obj: any, parent: any, removeDefault: boolean = true): any {\n let result;\n switch (typeof obj) {\n case 'undefined':\n break;\n case 'string' :\n if (obj !== parent) {\n if (obj !== \"\") {\n result = obj + '';\n }\n }\n break;\n case 'number' :\n if (obj !== parent) {\n // if (obj !== 0) {// 这里会排除掉默认的\n // o = obj - 0;\n // }\n result = obj;\n }\n break;\n case 'boolean' :\n if (obj !== parent) {\n if (obj !== false) {\n result = obj;\n }\n }\n break;\n case 'object' :\n if (obj === null) {\n result = undefined;\n } else {\n if (obj instanceof Array) {\n let tempObj = [];\n for (let i = 0; i < obj.length; i++) {\n let a = obj[i];\n let b = undefined;\n if (parent) {\n b = parent[i];\n }\n let v = this.diff(a, b, removeDefault);\n if (v !== undefined) {\n tempObj.push(v);\n }\n }\n if (obj.length > 0) {\n result = tempObj;\n } else {\n if (removeDefault) {\n result = undefined;\n } else {\n result = tempObj;\n }\n }\n } else {\n let tempObj = {};\n let count = 0;\n for (let k in obj) {\n let a = obj[k];\n let b = undefined;\n if (parent) {\n b = parent[k];\n }\n let v = this.diff(a, b, removeDefault);\n if (v !== undefined) {\n tempObj[k] = v;\n count++;\n }\n }\n if (count > 0) {\n result = tempObj;\n } else {\n if (removeDefault) {\n result = undefined;\n } else {\n if (parent) {\n result = undefined;\n } else {\n result = tempObj;\n }\n }\n }\n\n }\n }\n break;\n default:\n result = obj;\n break;\n }\n return result;\n }\n\n /**\n * 克隆对象\n * @param obj\n */\n clone(obj: any): any {\n let o;\n switch (typeof obj) {\n case 'undefined':\n break;\n case 'string' :\n o = obj + '';\n break;\n case 'number' :\n o = obj - 0;\n break;\n case 'boolean' :\n o = obj;\n break;\n case 'object' :\n if (obj === null) {\n o = null;\n } else {\n if (obj instanceof Array) {\n o = [];\n for (let i = 0; i < obj.length; i++) {\n o.push(this.clone(obj[i]));\n }\n } else {\n o = {};\n for (let k in obj) {\n o[k] = this.clone(obj[k]);\n }\n }\n }\n break;\n default:\n o = obj;\n break;\n }\n return o;\n }\n\n /**\n * 通过path设置属性,创建不存在的路径对象\n * @param obj\n * @param path \"/key1/key2\"\n * @param data\n */\n setByPath(obj: any, path: string, data: any) {\n if (!obj) {\n return;\n }\n\n if (path[0] != \"/\") {\n throw new Error(\"非法路径: \" + path)\n }\n if (path == \"/\") {\n throw new Error(\"无法处理路径: \" + path)\n }\n path = path.substring(1);\n let arr = path.split(\"/\");\n let lastkey = arr.pop();\n let cur = obj;\n for (let item of arr) {\n let n = cur[item];\n if (!n) {\n n = {};\n cur[item] = n;\n }\n cur = n;\n }\n cur[lastkey] = data;\n }\n\n /**\n * 通过path删除\n * @param obj\n * @param path \"/key1/key2\"\n */\n removeByPath(obj: any, path: string) {\n if (!obj) {\n return;\n }\n let arr = path.split(\"/\");\n arr.shift();// 去掉空字符\n let lastkey = arr.pop();\n let cur = obj;\n for (let item of arr) {\n let n = cur[item];\n if (!n) {\n n = {};\n cur[item] = n;\n }\n cur = n;\n }\n\n cur[lastkey] = undefined;\n delete cur[lastkey];\n }\n\n\n /**\n * 通过path获取属性\n * @param obj\n * @param path\n */\n getByPath(obj: any, path: string): any {\n if (path === \"/\") {\n return obj;\n }\n if (path[0] !== \"/\") {\n path = \"/\" + path;\n }\n let pathARr = path.split(\"/\");\n pathARr.shift();// 去掉第一个\"/\"\n let lastkey = pathARr.pop();\n let cur = obj;\n for (let prop of pathARr) {\n cur = cur[prop];\n if (!cur) {\n return null;\n }\n }\n\n return cur[lastkey];\n }\n\n\n flat(obj: any, split = \"/\"): any {\n let result = {};\n this._flat(obj, result, \"\", split);\n return result\n }\n\n _flat(obj: any, result: any, path: string, split = \"/\"): any {\n for (let key in obj) {\n let val = obj[key];\n let type = typeof val;\n let id = path + split + key;\n switch (type) {\n case \"object\":\n this._flat(val, result, id, split)\n break;\n default:\n result[id] = val;\n }\n }\n }\n\n /**\n * 比较两个对象,包括基础类型\n * @param a\n * @param b\n */\n compare(a: any, b: any): boolean {\n\n let typea = typeof a;\n let typeb = typeof b;\n if (a == null || b == null) {\n return a == b;\n }\n\n if (typea !== typeb) {\n return false;\n }\n\n switch (typea) {\n case \"object\":\n // 获取对象的属性集合(数组)\n let aProps = Object.getOwnPropertyNames(a);\n let bProps = Object.getOwnPropertyNames(b);\n\n // 属性个数(长度)不同,对象肯定不同\n if (aProps.length !== bProps.length) {\n return false;\n }\n\n for (let i = 0; i < aProps.length; i++) {\n let propName = aProps[i];\n\n if (!this.compare(a[propName], b[propName])) {\n return false;\n }\n }\n break;\n default:\n return a === b;\n }\n\n\n return true;\n }\n\n /**\n * 从[from]对象复制到 [to]对象\n * 如果from字段为object并且等于null,则设置to字段为null\n * 如果from字段为undefined, 则不覆盖\n * @param from\n * @param to\n * @param tokey 如果[to]存在key才进行拷贝\n */\n public copy(from: any, to: any, tokey: boolean = false) {\n if (!from || !to) {\n return\n }\n for (let fromKey in from) {\n\n if (tokey) {\n if (!to.hasOwnProperty(fromKey)) {\n continue\n }\n }\n let toChild = to[fromKey];\n let fromChild = from[fromKey];\n\n let type = typeof toChild;\n if (type === \"undefined\") {\n type = typeof fromChild;\n }\n\n toChild = convertutil.undefinedToZero(toChild, type)\n fromChild = convertutil.undefinedToZero(fromChild, type)\n switch (type) {\n case \"object\":\n if (fromChild) {\n if (Array.isArray(fromChild)) {\n if (!toChild) {\n toChild = [];\n to[fromKey] = toChild;\n }\n\n if (fromChild) {\n this.copy(fromChild, toChild)\n }\n } else {\n if (!toChild) {\n toChild = {};\n to[fromKey] = toChild;\n }\n this.copy(fromChild, toChild)\n }\n } else {\n to[fromKey] = null;\n }\n break;\n case \"string\":\n if (toChild === fromChild) {\n continue;\n }\n to[fromKey] = fromChild;\n break;\n default:\n if (toChild === fromChild) {\n continue\n }\n to[fromKey] = fromChild;\n }\n }\n }\n\n /**\n * 去掉兼职\n */\n flatString(target: any): string {\n let result = \"[\";\n let arr = [];\n for (const targetKey in target) {\n let targetVal = target[targetKey];\n if (targetKey == \"_type\") {\n result += targetVal + \"#\"\n continue;\n }\n let type = typeof targetVal;\n switch (type) {\n case \"object\":\n if (targetVal) {\n arr.push(this.flatString(targetVal));\n } else {\n arr.push(\"null\")\n }\n break;\n default:\n if (targetVal) {\n arr.push(targetVal)\n } else {\n arr.push(\"null\")\n }\n\n }\n }\n result += arr.join(\", \")\n result += \"]\"\n return result;\n }\n}\n\nexport const maputil = new MapUtil();\n","import {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();","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();","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","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","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 {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 * @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 splitLast(val: string, separator: string): string {\n let arr = val.split(separator);\n if (arr.length > 0) {\n return arr[arr.length - 1]\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","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();","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 {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();","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 {error, errorutil} from \"./ErrorUtil\";\r\nimport {loadAtlas} from \"./ResUtil/LoadAtlas\";\r\n\r\n\r\nclass ResUtil {\r\n loadResource(path: string): Promise<[any, error]> {\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, error]> {\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, error]> {\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, error]> {\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, error]> {\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, error]> {\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();","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","enum GeometryDirection {\n East,\n SouthEast,\n South,\n SouthWest,\n West,\n NorthWest,\n North,\n NorthEast\n}\n\n\n\nexport class GeometryUtil {\n /**\n * mode,8表示八方向,2表示二方向(左右),4表示4方向\n * @param dot\n * @param mode\n */\n angleToDirection(dot: number, mode: number = 8): GeometryDirection {\n if (dot > 180) {\n dot = dot - 360\n }\n var dir = -1;\n switch (mode) {\n case 2:\n //逆时针方向\n if (dot > 0) {\n if (dot < 90) {\n //0-45度\n dir = GeometryDirection.East\n } else {\n //180度\n dir = GeometryDirection.West\n }\n } else {\n dot = -dot\n //顺时针方向\n if (dot < 90) {\n dir = GeometryDirection.East\n } else {\n //180度\n dir = GeometryDirection.West\n }\n }\n break;\n case 4: // 4方向\n //逆时针方向\n if (dot > 0) {\n if (dot < 45) {\n //0-45度\n dir = GeometryDirection.East\n } else if (dot < 135) {\n //67.5度\n dir = GeometryDirection.North\n } else {\n //180度\n dir = GeometryDirection.West\n }\n } else {\n dot = -dot\n //顺时针方向\n if (dot < 45) {\n dir = GeometryDirection.East\n } else if (dot < 135) {\n dir = GeometryDirection.South\n } else {\n //180度\n dir = GeometryDirection.West\n }\n }\n break;\n default:\n //逆时针方向\n if (dot > 0) {\n if (dot < 22.5) {\n //0-22.5度\n dir = GeometryDirection.East\n } else if (dot < 67.5) {\n //67.5度\n dir = GeometryDirection.NorthEast\n } else if (dot < 112.5) {\n //112.5度\n dir = GeometryDirection.North\n } else if (dot < 157) {\n //157度\n dir = GeometryDirection.NorthWest\n } else {\n //180度\n dir = GeometryDirection.West\n }\n } else {\n dot = -dot\n //顺时针方向\n if (dot < 22.5) {\n //0-22.5度\n dir = GeometryDirection.East\n } else if (dot < 67.5) {\n //67.5度\n dir = GeometryDirection.SouthEast\n } else if (dot < 112.5) {\n //112.5度\n dir = GeometryDirection.South\n } else if (dot < 157) {\n //157度\n dir = GeometryDirection.SouthWest\n } else {\n //180度\n dir = GeometryDirection.West\n }\n }\n }\n\n return dir\n }\n\n}\n\nexport let geoutil = new GeometryUtil();","import {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 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();","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();","import { DBAction, IDatabase, IDBObject, IDBTable } from \"./iface\";\nimport { convertutil } from \"../utils/ConvertUtil\";\nimport { List } from \"../ds/List\";\nimport { EventManager } from \"../event/EventManager\";\nimport { DataValue } from \"./DataValue\";\nimport { maputil } from \"../utils\";\nimport {EDITOR} from \"cc/env\";\n\nexport class DataDispatchParams {\n action: DBAction;\n object: {};\n table: IDBTable\n /**\n * DBAction.Update时为变化的数据\n * DBAction.Create时为创建的数据\n */\n data: any;\n}\n\n/**\n * tablePath 对象id@表id, 如果未设置表id,则默认为 \"@alone\"\n * propPath /prop1/prop2...\n */\nexport class DataManager extends EventManager implements IDatabase {\n\n /**\n * 输入 [表id][对象id] 返回 [表id, 对象id]\n * @param tablePath\n * @private\n */\n static $parseKey(tablePath: string): [string, string] {\n let tableId: string = tablePath[0];\n return [tableId, tablePath];\n }\n\n constructor() {\n super();\n }\n\n\n init() {\n\n return;\n }\n\n registerTable(name: string, table: IDBTable): IDBTable {\n this.tables[name] = table;\n return table;\n }\n\n /**\n * 可通过 Laya.ClassUtils.regClass(\"database.table.tableId\") 替换默认的 DataBucket\n * @param name\n */\n getTable(name: string): IDBTable {\n return this.tables[name];\n }\n\n /**\n * 创建表对象\n * 需要设置表\n * @param tablePath\n * @param data\n */\n createObject<T = IDBObject>(tablePath: string, data: any): T {\n let [tableId, objectId] = DataManager.$parseKey(tablePath);\n let obj: IDBObject;\n let table: IDBTable;\n table = this.getTable(tableId);\n if (!table) {\n console.warn(\"create object: table not found: \" + tableId);\n return;\n }\n try {\n obj = table.DBCreate(objectId, data);\n } catch (e) {\n console.error(\"create object: table create object: \" + e.message);\n console.error(e.stack)\n return;\n }\n obj.DBObject().refUpdate(data);\n table.DBSet(objectId, obj);\n\n let params = new DataDispatchParams();\n params.action = DBAction.Create;\n params.object = obj;\n params.table = table;\n params.data = data;\n\n {\n let f: Function = obj[\"DBOnCreate\"];\n if (f) {\n f.call(obj);\n }\n }\n this.dispatch(obj.DBPath(), params);\n return obj as T;\n }\n\n\n updateObject(obj: IDBObject, data: { [key: string]: any }) {\n obj.DBObject().refUpdate(data);\n let params = new DataDispatchParams();\n params.action = DBAction.Update;\n params.object = obj;\n params.data = data;\n {\n let f: Function = obj[\"DBOnUpdate\"];\n if (f) {\n f.call(obj);\n }\n }\n this.dispatch(obj.DBPath(), params);\n }\n\n\n /**\n * 更新对象\n * @param tablePath\n * @param data 发生变化的数据\n */\n updateByPath(tablePath: string, data: any) {\n let [tableId, objectId] = DataManager.$parseKey(tablePath);\n let obj: IDBObject;\n let table: IDBTable;\n table = this.getTable(tableId);\n if (!table) {\n console.warn(\"update object: table not found: \" + tableId);\n return;\n }\n obj = table.DBGet(objectId);\n if (obj) {\n this.updateObject(obj, data);\n }\n }\n\n\n /**\n * 移除对象\n * @param tablePath\n */\n removeObject(tablePath: string) {\n let [tableId, objectId] = DataManager.$parseKey(tablePath);\n let obj: IDBObject;\n let table: IDBTable;\n table = this.getTable(tableId);\n if (!table) {\n console.warn(\"remove database object: table not found: \" + tableId);\n return;\n }\n obj = table.DBGet(objectId);\n if (obj) {\n table.DBDelete(objectId);\n }\n\n let params = new DataDispatchParams();\n params.action = DBAction.Remove;\n params.object = obj;\n params.table = table;\n\n {\n let f: Function = obj[\"DBOnRemove\"];\n if (f) {\n f.call(obj);\n }\n }\n this.dispatch(obj.DBPath(), params);\n }\n\n /**\n * 获取对象\n * 如果设置了tableId,会保存包对应的表中\n * @param tablePath =“tableId/objectId” or objectId\n */\n getObject(tablePath: string): IDBObject {\n let [tableId, objectId] = DataManager.$parseKey(tablePath);\n let table = this.getTable(tableId);\n if (!table) {\n console.warn(\"get object: table not found: \" + tableId);\n return;\n }\n return table.DBGet(objectId);\n }\n\n\n getOrCreateObject(tablePath: string): IDBObject {\n let [tableId, objectId] = DataManager.$parseKey(tablePath);\n let obj: IDBObject;\n let table = this.getTable(tableId);\n if (!table) {\n console.warn(\"get object: table not found: \" + tableId);\n return;\n }\n obj = table.DBGet(objectId);\n if (!obj) {\n obj = table.DBCreate(objectId, {});\n }\n return obj;\n }\n\n /**\n * 获取属性的值\n * @param tablePath\n * @param propPath\n */\n getObjectProp(tablePath: string, propPath: string = \"/\"): any {\n let [tableId, objectId] = DataManager.$parseKey(tablePath);\n let table = this.getTable(tableId);\n if (!table) {\n console.warn(\"getProp: table not found: \" + tableId);\n return;\n }\n return table.DBGet(objectId).DBObject().refGet(propPath);\n }\n\n setObjectProp(tablePath: string, propPath: string = \"/\", data: any = null, enableDispatch: boolean = false) {\n if (propPath[0] !== \"/\") {\n throw new Error(\"propPath must format: /prop1/prop2/propN\")\n }\n\n let [tableId, objectId] = DataManager.$parseKey(tablePath);\n let table = this.getTable(tableId);\n if (!table) {\n console.warn(\"getProp: table not found: \" + tableId);\n return;\n }\n\n table.DBGet(objectId).DBObject().refSet(propPath, data);\n }\n\n\n LSKeys(): LSKeys {\n let keys = new LSKeys();\n for (let i = 0; i < localStorage.length; i++) {\n let tablePath = localStorage.key(i);\n keys.add(tablePath);\n }\n return keys;\n }\n\n // 加载对象,如果不存在则使用data初始化并保存\n LSLoadOrSaveObject(tablePath: string, data: any) {\n let obj = this.getOrCreateObject(tablePath);\n let item = localStorage.getItem(tablePath);\n if (item) {\n data = JSON.parse(item)\n obj.DBObject().refUpdate(data);\n } else {\n obj.DBObject().refUpdate(data);\n window.localStorage.setItem(tablePath, convertutil.anyToString(obj.DBObject().toMap()))\n }\n }\n\n /**\n * 从localStorage中加载数据并初始化,如果是table,则添加到table中\n * @param objectPath\n * @return 路径指向的对象,如果不存在则创建。如果未注册,抛出异常\n * @return localStorage是否存在数目\n */\n LSLoadObject<T = IDBObject>(objectPath: string): T {\n let item = localStorage.getItem(objectPath);\n if (!item) {\n return null;\n }\n let data = JSON.parse(item);\n\n return this.createObject(objectPath, data);\n\n // let [tableId, objectId] = DataManager.$parseKey(objectPath);\n // let obj: IDBObject;\n // if (tableId == \"\") {\n // let obj = this.objects[objectId];\n // if (obj) {\n // obj.DBObject().refUpdate(data);\n // }\n // } else {\n // let table = this.getTable(tableId);\n // if (!table) {\n // console.warn(\"create object: table not found: \" + tableId);\n // return;\n // }\n // obj = table.DBCreate(objectId, data);\n // obj.DBObject().refUpdate(data);\n // obj.DBOnCreate();\n //\n // table.DBSet(objectId, obj);\n // }\n //\n // return obj as T;\n }\n\n LSRemoveObject(tablePath: string) {\n window.localStorage.removeItem(tablePath);\n }\n\n LSSaveObject(tablePath: string) {\n let obj = this.getObject(tablePath);\n if (obj === null || obj === undefined) {\n console.warn(\"LSSaveObject: object is null: tablePath=\" + tablePath);\n return\n }\n let m = obj.DBObject().toMap();\n window.localStorage.setItem(tablePath, convertutil.anyToString(m));\n }\n\n LSLoadProp(tablePath: string, propPath: string, handler?: (data: any) => any) {\n let obj = this.getObject(tablePath);\n if (obj === null || obj === undefined) {\n console.warn(\"LSSaveObject: object is null: tablePath=\" + tablePath);\n return\n }\n if (!EDITOR) {\n let item = window.localStorage.getItem(tablePath + propPath);\n if (handler) {\n item = handler(item);\n }\n\n obj.DBObject().refSet(propPath, item);\n }\n }\n\n LSSaveProp(tablePath: string, propPath: string) {\n let obj = this.getObject(tablePath);\n if (obj === null || obj === undefined) {\n console.warn(\"LSSaveObject: object is null: tablePath=\" + tablePath);\n return\n }\n if (!EDITOR) {\n let prop = obj.DBObject().refGet(propPath);\n localStorage.setItem(tablePath + propPath, convertutil.anyToString(prop));\n }\n }\n\n\n getDataValue(path: string): DataValue {\n return this.object[path];\n }\n\n existDataValue(path: string, creator: (path: string) => DataValue): DataValue {\n let obj = this.object[path];\n if (!obj) {\n obj = creator(path);\n this.object[path] = obj;\n }\n return obj;\n }\n\n setDataValue(dataObject: DataValue) {\n this.object[dataObject.path] = dataObject;\n }\n\n saveObject(path: string, object: any) {\n localStorage.setItem(path, JSON.stringify(object))\n }\n\n\n loadObject(path: string, target: any): any {\n let objectString = localStorage.getItem(path);\n let object = JSON.parse(objectString)\n maputil.copy(object, target);\n\n return target;\n }\n\n\n saveAny(key: string, val) {\n localStorage.setItem(key, val)\n\n }\n\n loadAny(key: string): any {\n return localStorage.getItem(key);\n }\n\n\n protected object = {};\n private tables: { [key: string]: IDBTable; } = {};\n}\n\n\nexport class LSKeys extends List<string> {\n add(key: string) {\n this.push(key);\n\n let [tableId, objectId] = DataManager.$parseKey(key);\n if (tableId != \"\") {\n let table = this.dictByTable(tableId);\n table.push(objectId);\n }\n }\n\n dictByTable(tableName: string): List<string> {\n let table = this.indexTable[tableName];\n if (!table) {\n table = new List<string>();\n }\n return table;\n }\n\n protected indexTable: { [key: string]: List<string> } = {};\n}","import {DataManager} from \"./DataManager\";\r\n\r\nexport var datamgr = new DataManager();\r\n// globalThis.datamgr = datamgr;","import {EventManager} from \"../event/EventManager\";\r\nimport {maputil} from \"../utils/MapUtil\";\r\nimport {identutil} from \"../utils/IdentUtil\";\r\n\r\nexport class TreeIterator {\r\n break() {\r\n this._isBreak = true;\r\n }\r\n\r\n isBreak(): boolean {\r\n return this._isBreak;\r\n }\r\n\r\n protected _isBreak;\r\n}\r\n\r\nexport interface ITreeListItem {\r\n /**\r\n * 路径\r\n */\r\n path: string;\r\n\r\n /**\r\n * 自定义数据\r\n */\r\n data?: any;\r\n\r\n /**\r\n * 功能性标签,用于开发组件时,记录组件的状态。例如title, icon, 显示树的组件,需要 expanded,selected标签\r\n */\r\n tags?: { [key: string]: any }\r\n\r\n /**\r\n * 是否树叶\r\n */\r\n isLeaf: boolean;\r\n\r\n}\r\n\r\nfunction fixPath(path): string {\r\n if (path == 0) {\r\n return path;\r\n }\r\n if (path[0] != \"/\") {\r\n path = \"/\" + path\r\n }\r\n if (path.length > 1) {\r\n if (path[path.length - 1] == \"/\") {\r\n path = path.substring(0, path.length - 1);\r\n }\r\n }\r\n\r\n return path;\r\n\r\n}\r\n\r\nexport class TreeNode<T = any> {\r\n\r\n get root(): TreeRoot {\r\n return this._root;\r\n }\r\n\r\n /**\r\n * 根节点\r\n */\r\n protected _root: TreeRoot;\r\n /**\r\n * 编号\r\n */\r\n uuid: string;\r\n\r\n /**\r\n * 编号\r\n */\r\n id: string;\r\n\r\n /**\r\n * 自定义数据\r\n */\r\n data: T;\r\n\r\n /**\r\n * 是否树叶\r\n */\r\n isLeaf: boolean = true;\r\n\r\n /**\r\n * 功能性标签,用于开发组件时,记录组件的状态。例如title, icon, 显示树的组件,需要 expanded,selected标签\r\n */\r\n tags: { [key: string]: any }\r\n\r\n /**\r\n * 深度\r\n */\r\n get depth(): number {\r\n return this._depth;\r\n }\r\n\r\n private _depth: number = 0;\r\n\r\n /**\r\n * 父节点\r\n */\r\n parent: TreeNode;\r\n\r\n /**\r\n * 子节点\r\n */\r\n children: TreeNode[];\r\n\r\n /**\r\n * 设置根\r\n * @param val\r\n */\r\n setRoot(val: TreeRoot) {\r\n this._root = val;\r\n }\r\n\r\n getTags(): { [key: string]: any } {\r\n if (!this.tags) {\r\n this.tags = {};\r\n }\r\n return this.tags;\r\n }\r\n\r\n getTag(name: string): any {\r\n return this.getTags()[name];\r\n }\r\n\r\n removeTag(name: string) {\r\n if (this.tags) {\r\n delete this.tags[name];\r\n }\r\n }\r\n\r\n\r\n setTag(name: string, value: any) {\r\n this.getTags()[name] = value;\r\n }\r\n\r\n\r\n constructor(id: string, isLeaf?: boolean) {\r\n this.uuid = identutil.genOne()\r\n this.id = id;\r\n if (isLeaf == undefined) {\r\n isLeaf = false;\r\n } else {\r\n this.isLeaf = isLeaf;\r\n }\r\n if (!isLeaf && !this.children) {\r\n this.children = [];\r\n }\r\n }\r\n\r\n public addChild(val: TreeNode) {\r\n let node = this.getChildById(val.id);\r\n if (node) {\r\n return;\r\n }\r\n val._root = this._root;\r\n val.parent = this;\r\n if (!this.children) {\r\n this.children = [];\r\n }\r\n this.children.push(val);\r\n //\r\n val.fixDepthAndRoot(this._depth + 1, this.root)\r\n }\r\n\r\n public getChildIndex(val: TreeNode): number {\r\n for (let i = 0; i < this.children.length; i++) {\r\n let child = this.children[i];\r\n if (child == val) {\r\n return i;\r\n }\r\n }\r\n\r\n return -1;\r\n }\r\n\r\n\r\n public insertChild(val: TreeNode, index: number) {\r\n let indexVal = this.children.indexOf(val);\r\n if (indexVal != -1) {\r\n this.children.splice(indexVal, 1);\r\n }\r\n this.children.splice(index, 0, val);\r\n }\r\n\r\n public removeChild(val: TreeNode) {\r\n let index = this.children.indexOf(val);\r\n if (index != -1) {\r\n this.children.splice(index, 1);\r\n val.parent = null;\r\n }\r\n }\r\n\r\n public removeChildren() {\r\n if (this.children) {\r\n for (let child of this.children) {\r\n child.parent = null;\r\n }\r\n }\r\n\r\n this.children = [];\r\n }\r\n\r\n public get name(): string {\r\n let parent = this.parent;\r\n if (parent) {\r\n if (parent.id == \"/\") {\r\n return this.id.replace(parent.id, \"\")\r\n } else {\r\n return this.id.replace(parent.id + \"/\", \"\")\r\n }\r\n }\r\n\r\n return this.id;\r\n }\r\n\r\n public setDepth(val: number) {\r\n this._depth = val;\r\n }\r\n\r\n public containsById(id: string): boolean {\r\n return this.getChildById(id) != null;\r\n }\r\n\r\n /**\r\n * 通过编号获取子节点\r\n * @param id\r\n */\r\n public getChildById(id: string): TreeNode {\r\n if (!this.children) {\r\n return\r\n }\r\n for (let i = 0; i < this.children.length; i++) {\r\n let node = this.children[i];\r\n if (node.id == id) {\r\n return node;\r\n }\r\n }\r\n return null;\r\n }\r\n\r\n /**\r\n * 返回相邻的上一个节点\r\n */\r\n public prevNode(): TreeNode {\r\n let parent = this.parent;\r\n if (!parent) {\r\n return null;\r\n }\r\n let children = parent.children;\r\n let index = children.indexOf(this);\r\n if (index == -1) {\r\n throw \"节点数据异常\"\r\n }\r\n if (index == 0) {// 自己就是最后一个\r\n return null;\r\n }\r\n return children[index - 1];\r\n }\r\n\r\n /**\r\n * 返回相邻的下一个节点\r\n */\r\n public nextNode(): TreeNode {\r\n let parent = this.parent;\r\n if (!parent) {\r\n return null;\r\n }\r\n let children = parent.children;\r\n let index = children.indexOf(this);\r\n if (index == -1) {\r\n throw \"节点数据异常\"\r\n }\r\n if (index == children.length - 1) {// 自己就是最后一个\r\n return null;\r\n }\r\n return children[index + 1];\r\n }\r\n\r\n /**\r\n * 如果返回true则删除节点,包含当前节点\r\n * @param f\r\n */\r\n public walkRemove(f: (node: TreeNode) => boolean) {\r\n this._walkRemove(f);\r\n }\r\n\r\n private _walkRemove(f: (node: TreeNode) => boolean) {\r\n try {\r\n if (f(this)) {\r\n this.parent.removeChild(this);\r\n return;\r\n }\r\n } catch (e) {\r\n console.warn(e.stack)\r\n return false;\r\n }\r\n\r\n\r\n if (!this.isLeaf) {\r\n if (this.children && this.children.length > 0) {\r\n for (let i = this.children.length - 1; i >= 0; i--) {\r\n let val = this.children[i];\r\n val._walkRemove(f)\r\n }\r\n }\r\n }\r\n return true;\r\n }\r\n\r\n /**\r\n * 如果返回true则继续,包含当前节点\r\n * @param f\r\n * @param inChild\r\n */\r\n public walk(f: (node: TreeNode) => boolean, inChild?: (node: TreeNode) => boolean) {\r\n this._walk(f, inChild);\r\n }\r\n\r\n private _walk(f: (node: TreeNode) => boolean, inChild?: (node: TreeNode) => boolean): boolean {\r\n try {\r\n if (!f(this)) {\r\n return false;\r\n }\r\n } catch (e) {\r\n console.warn(e.stack)\r\n return false;\r\n }\r\n\r\n\r\n if (!this.isLeaf) {\r\n let checkChildren = inChild ? inChild(this) : true;\r\n if (checkChildren) {\r\n if (this.children && this.children.length > 0) {\r\n for (let val of this.children) {\r\n if (!val._walk(f)) {\r\n return false\r\n }\r\n }\r\n }\r\n }\r\n\r\n }\r\n return true;\r\n }\r\n\r\n /**\r\n * 从当前节点(包括)遍历父节点链,包含当前节点\r\n * @param f\r\n */\r\n public walkParent(f: (node: TreeNode) => boolean) {\r\n let cur: TreeNode = this;\r\n while (cur) {\r\n try {\r\n if (!f(cur)) {\r\n return false;\r\n }\r\n } catch (e) {\r\n console.warn(e.stack)\r\n return false;\r\n }\r\n\r\n\r\n cur = cur.parent\r\n }\r\n }\r\n\r\n /**\r\n * 从当前节点往前遍历(深度),包含当前节点\r\n * @param f\r\n * @param inChild\r\n */\r\n public walkPrev(f: (node: TreeNode) => boolean, inChild?: (node: TreeNode) => boolean) {\r\n try {\r\n if (!f(this)) {\r\n return false;\r\n }\r\n } catch (e) {\r\n console.warn(e.stack)\r\n return false;\r\n }\r\n\r\n let parent = this.parent;\r\n if (!parent) {\r\n return false;\r\n }\r\n\r\n if (!parent.isLeaf) {\r\n let checkChildren = inChild ? inChild(this.parent) : true;\r\n if (checkChildren) {\r\n if (parent.children && parent.children.length > 0) {\r\n let nodeIndex = parent.children.indexOf(this);\r\n for (let i = nodeIndex - 1; i >= 0; i--) {\r\n let child = parent.children[i];\r\n if (!child._walkPrev(f, inChild)) {\r\n return false\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n return parent.walkPrev(f);\r\n }\r\n\r\n private _walkPrev(f: (node: TreeNode) => boolean, inChild?: (node: TreeNode) => boolean): boolean {\r\n if (this.isLeaf) {\r\n if (!f(this)) {\r\n return false;\r\n }\r\n } else {\r\n if (!this.isLeaf) {\r\n let checkChildren = inChild ? inChild(this) : true;\r\n if (checkChildren) {\r\n if (this.children && this.children.length > 0) {\r\n for (let i = this.children.length - 1; i >= 0; i--) {\r\n let child = this.children[i];\r\n if (!child._walkPrev(f, inChild)) {\r\n return false\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n if (!f(this)) {\r\n return false;\r\n }\r\n }\r\n\r\n\r\n return true;\r\n }\r\n\r\n\r\n public dump() {\r\n this.walk((node: TreeNode): boolean => {\r\n let prefix = \"\";\r\n for (let i = 0; i < node.depth; i++) {\r\n prefix += \" \"\r\n }\r\n console.log(prefix + \"-\" + node.id)\r\n return true;\r\n });\r\n }\r\n\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 EventManager {\r\n /**\r\n * 添加数据节点\r\n * dispatchParams = {node:TreeNode, parent:TreeNode|TreeRoot}\r\n */\r\n static EVENT_ADD = \"add\";\r\n\r\n /**\r\n * 移除数据节点\r\n * dispatchParams = {node:TreeNode, parent:TreeNode|TreeRoot}\r\n */\r\n static EVENT_REMOVE = \"remove\";\r\n\r\n /**\r\n * 插入数据节点\r\n * dispatchParams = {node:TreeNode, before:TreeNode}\r\n */\r\n static EVENT_INSERT = \"insert\";\r\n\r\n /**\r\n * 刷新数据节点\r\n * dispatchParams = {node:TreeNode}\r\n */\r\n static EVENT_REFRESH = \"refresh\";\r\n\r\n /**\r\n * 设置数据时触发\r\n * dispatchParams = {node:TreeNode}\r\n */\r\n static EVENT_DATA_SET = \"data_set\";\r\n\r\n /**\r\n * 设置数据时触发\r\n * dispatchParams = {node:TreeNode, tag:string, value:any}\r\n */\r\n static EVENT_TAGS_SET = \"tags_set\";\r\n\r\n static create() {\r\n return new TreeRoot()\r\n }\r\n\r\n /**\r\n * 通过列表生成一个树结构\r\n * @param items\r\n * @param existed 列表将添加的已经存在的树结构\r\n */\r\n static createByList(items: ITreeListItem[], existed?: TreeRoot): TreeRoot {\r\n let root: TreeRoot = existed;\r\n if (!root) {\r\n root = TreeRoot.create();\r\n }\r\n\r\n for (let val of items) {\r\n let node: any;\r\n if (val.path == \"\") {\r\n continue;\r\n }\r\n if (val.path == \"/\") {\r\n node = root.origin;\r\n } else {\r\n let arr = val.path.substring(1).split(\"/\");\r\n node = root.createNode(arr.pop(), val.isLeaf);\r\n root.addNode(node, arr.join(\"/\"), true)\r\n }\r\n node.data = val.data;\r\n node.tags = val.tags;\r\n }\r\n\r\n return root;\r\n }\r\n\r\n\r\n static sortChildrenByName(node: TreeNode, des: boolean = false) {\r\n node.walk((node) => {\r\n if (!node.isLeaf) {\r\n node.children.sort((a, b) => {\r\n if (des) {\r\n return b.getName().localeCompare(a.getName())\r\n } else {\r\n return a.getName().localeCompare(b.getName())\r\n }\r\n })\r\n }\r\n return true;\r\n });\r\n }\r\n\r\n\r\n constructor() {\r\n super();\r\n\r\n this.origin = this.createNode(\"/\", false);\r\n this.origin.setRoot(this);\r\n this.origin.setTag(\"title\", true)\r\n this.name = this.uuid;\r\n }\r\n\r\n setNodeData(node: TreeNode, data: any) {\r\n if (node.data == data) {\r\n return\r\n }\r\n node.data = data\r\n this.dispatch(TreeRoot.EVENT_DATA_SET, {node: node})\r\n }\r\n\r\n setNodeTags(node: TreeNode, tag: string, value: any, force: boolean = false) {\r\n let tags = node.getTags();\r\n if (!force) {\r\n if (tags[tag] === value) {\r\n return;\r\n }\r\n }\r\n tags[tag] = value;\r\n this.dispatch(TreeRoot.EVENT_TAGS_SET, {node: node, tag: tag, value: value})\r\n }\r\n\r\n getNodeByPath(path: string): TreeNode {\r\n return this.origin.getNodeByPath(path) as TreeNode;\r\n }\r\n\r\n makeNodeByPath(path: string): TreeNode {\r\n if (path == \"\" || path == \"/\") {\r\n return;\r\n }\r\n if (path[0] == \"/\") {\r\n path = path.substring(1);\r\n }\r\n let arr = path.split(\"/\");\r\n let curPath = \"/\";\r\n let lastNode;\r\n for (const string of arr) {\r\n let node = this.createNode(string, false);\r\n this.addNode(node, curPath);\r\n\r\n lastNode = node;\r\n curPath += string + \"/\";\r\n }\r\n\r\n return lastNode;\r\n }\r\n\r\n /**\r\n * 添加节点,按照 node.path 添加到正确的位置\r\n * @param node\r\n * @param parentPath 如果父节点路径为 \"\", 则添加到起源节点\r\n * @param autoCreateParent 如果父节点不存在,自动创建\r\n */\r\n addNode(node: TreeNode, parentPath: string = \"\", autoCreateParent: boolean = false) {\r\n if (parentPath == \"\") {\r\n parentPath = \"/\"\r\n }\r\n let parent = this.origin.getNodeByPath(parentPath)\r\n if (!parent) {\r\n if (autoCreateParent) {\r\n parent = this.makeNodeByPath(parentPath);\r\n } else {\r\n console.warn(`TreeRoot.addNode: parent not found: parentPath=${parentPath}, node.id=${node.id}`)\r\n return\r\n }\r\n }\r\n parent.addChild(node);\r\n this.dispatch(TreeRoot.EVENT_ADD, {node: node, parent: parent});\r\n }\r\n\r\n\r\n removeNode(node: TreeNode) {\r\n let parent = node.parent;\r\n if (!parent) {\r\n return;\r\n }\r\n let index = parent.children.indexOf(node);\r\n if (index != -1) {\r\n parent.children.splice(index, 1);\r\n }\r\n this.dispatch(TreeRoot.EVENT_REMOVE, {node: node, parent: parent});\r\n node.parent = null;\r\n }\r\n\r\n removeChildren(node: TreeNode) {\r\n let children = node.children.concat();\r\n for (let item of children) {\r\n this.removeNode(item)\r\n }\r\n }\r\n\r\n insertNode(node: TreeNode, before: TreeNode, resetId: boolean = true) {\r\n let parent = before.parent;\r\n let index = parent.getChildIndex(before);\r\n if (index == -1) {\r\n throw new Error(\"getChildIndex: 数据异常\")\r\n }\r\n let children = before.parent.children;\r\n let indexLast = parent.getChildIndex(node);\r\n if (indexLast == -1) {\r\n indexLast = children.length;\r\n }\r\n\r\n before.parent.insertChild(node, index);\r\n if (resetId) {\r\n let indexMin = Math.min(index, indexLast);\r\n let indexMax = Math.max(index, indexLast);\r\n for (let i = indexMin; i < indexMax + 1; i++) {\r\n let child = children[i];\r\n child.id = i.toString();\r\n child.setTag(\"title\", i.toString())\r\n this.refresh(child);\r\n }\r\n }\r\n this.dispatch(TreeRoot.EVENT_INSERT, {node: node, before: before});\r\n }\r\n\r\n walk(f: (node: TreeNode) => boolean, inChild?: (node: TreeNode) => boolean) {\r\n this.origin.walk(f, inChild)\r\n }\r\n\r\n walkPrev(f: (node: TreeNode) => boolean, inChild?: (node: TreeNode) => boolean) {\r\n this.origin.walkPrev(f, inChild)\r\n }\r\n\r\n /**\r\n * 派发 refresh 消息\r\n * @param node\r\n */\r\n refresh(node: TreeNode) {\r\n this.dispatch(TreeRoot.EVENT_REFRESH, {node: node});\r\n }\r\n\r\n /**\r\n * 克隆当前的树结\r\n * * 新的tags克隆旧的data\r\n * * 新的data指向旧的data\r\n */\r\n clone(): TreeRoot {\r\n let root = TreeRoot.create();\r\n root.origin = this.origin.clone();\r\n root.origin.fixDepthAndRoot(0, root);\r\n return root;\r\n }\r\n\r\n public toString() {\r\n return `TreeRoot`\r\n }\r\n\r\n createNode(id: string, isLeaf?: boolean): TreeNode {\r\n let node = new TreeNode(id, isLeaf);\r\n node.setRoot(this);\r\n return node;\r\n }\r\n\r\n\r\n /**\r\n * origin的第一个child\r\n */\r\n get firstNode(): TreeNode {\r\n if (!this.origin) {\r\n return null;\r\n }\r\n if (!this.origin.children) {\r\n return null;\r\n }\r\n return this.origin.children[0]\r\n }\r\n\r\n origin: TreeNode\r\n\r\n}\r\n\r\n\r\n///////////////////////////\r\n\r\nexport class TreeRootPlugin {\r\n root: TreeRoot\r\n}\r\n\r\n\r\nexport class TreeNodePlugin {\r\n node: TreeNode\r\n}\r\n","import {EventManager} from \"../event/EventManager\";\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 EventManager {\r\n /**\r\n * 通过数组创建 ListSource。ListSource的id自动生成。如果需要指定编号,可设置 idCreator\r\n * @param arr\r\n * @param idCreator\r\n */\r\n static createByArray(arr: any[], idCreator?: (item: any) => string) {\r\n let root = new ListSource();\r\n for (let i = 0; i < arr.length; i++) {\r\n let item = arr[i];\r\n let id = \"\";\r\n if (idCreator) {\r\n id = idCreator(item);\r\n } else {\r\n id = identutil.genOne();\r\n }\r\n let node = ListNode.create(id, item);\r\n root.add(node, false);\r\n }\r\n return root;\r\n }\r\n\r\n static createByListItem(arr: IListItem[], target?: ListSource): any {\r\n if(!target){\r\n target = new ListSource()\r\n }\r\n for (let i = 0; i < arr.length; i++) {\r\n let item = arr[i];\r\n let id = \"\";\r\n let node = ListNode.create(id);\r\n node.id = item.id;\r\n node.tags = item.tags;\r\n node.data = item.data;\r\n target.add(node, false);\r\n }\r\n return target;\r\n }\r\n\r\n /**\r\n * 设置数据时触发\r\n * dispatchParams = {node:ListNode}\r\n */\r\n static EVENT_ADD = \"add\";\r\n /**\r\n * 设置数据时触发\r\n * dispatchParams = {node:ListNode, index:number}\r\n */\r\n static EVENT_REMOVE = \"remove\";\r\n\r\n /**\r\n * 设置数据时触发\r\n */\r\n static EVENT_REMOVE_ALL = \"remove_all\";\r\n\r\n /**\r\n * 刷新数据节点\r\n * dispatchParams = {node:ListNode}\r\n */\r\n static EVENT_REFRESH = \"refresh\";\r\n\r\n /**\r\n * 设置数据时触发\r\n * dispatchParams = nodes: [ListNode], indexs: [number]\r\n */\r\n static EVENT_SWAP = \"swap\";\r\n /**\r\n * 设置数据时触发\r\n * dispatchParams = {node:ListNode, data:any}\r\n */\r\n static EVENT_DATA_SET = \"data_set\";\r\n /**\r\n * 设置数据时触发\r\n * dispatchParams = {node:ListNode, tag:string, value:any}\r\n */\r\n static EVENT_TAGS_SET = \"tags_set\";\r\n\r\n protected _identFunc: (node: ListNode) => boolean;\r\n\r\n public at(index: number): ListNode {\r\n return this._data[index];\r\n }\r\n\r\n public first(): ListNode {\r\n return this._data[0]\r\n }\r\n\r\n public last(): ListNode {\r\n return this._data[this._data.length - 1]\r\n }\r\n\r\n public length(): number {\r\n return this._data.length;\r\n }\r\n\r\n /**\r\n * 添加项,无法添加相同的项\r\n * @param node\r\n * @param enableDispatch 默认为true\r\n */\r\n public add(node: ListNode, enableDispatch: boolean = true) {\r\n if (this.contains(node)) {\r\n return;\r\n }\r\n this._data.push(node);\r\n node.root = this;\r\n if (enableDispatch) {\r\n this.dispatch(ListSource.EVENT_ADD, {node: node})\r\n }\r\n }\r\n\r\n public getById(id: string): ListNode {\r\n for (let i = 0; i < this._data.length; i++) {\r\n let node = this._data[i];\r\n if (node.id == id) {\r\n return node;\r\n }\r\n }\r\n return null;\r\n }\r\n\r\n public remove(node: ListNode) {\r\n let index = this._data.indexOf(node);\r\n if (index == -1) {\r\n return;\r\n }\r\n\r\n node.root = null;\r\n this._data.splice(index, 1);\r\n this.dispatch(ListSource.EVENT_REMOVE, {node: node, index: index})\r\n }\r\n\r\n public removeAll() {\r\n this._data.length = 0;\r\n this.dispatch(ListSource.EVENT_REMOVE_ALL)\r\n }\r\n\r\n public swap(a: ListNode, b: ListNode) {\r\n let aidx = this.indexOf(a);\r\n let bidx = this.indexOf(b);\r\n let d = this._data;\r\n [d[aidx], d[bidx]] = [d[bidx], a[aidx]];\r\n this.dispatch(ListSource.EVENT_SWAP, {nodes: [a, b], indexs: [aidx, bidx]})\r\n }\r\n\r\n public contains(node: ListNode): boolean {\r\n return this.indexOf(node) != -1\r\n }\r\n\r\n\r\n public containsById(id: string): boolean {\r\n return this.indexOfById(id) != -1\r\n }\r\n\r\n\r\n public indexOf(node: ListNode): number {\r\n for (let i = 0; i < this._data.length; i++) {\r\n let item = this._data[i];\r\n if (item.id == node.id) {\r\n return i;\r\n }\r\n }\r\n\r\n return -1\r\n }\r\n\r\n public indexOfById(id: string): number {\r\n for (let i = 0; i < this._data.length; i++) {\r\n let item = this._data[i];\r\n\r\n if (item.id == id) {\r\n return i;\r\n }\r\n }\r\n\r\n return -1\r\n }\r\n\r\n setData(node: ListNode, data: any) {\r\n if (!node) {\r\n return;\r\n }\r\n node.data = data\r\n this.dispatch(ListSource.EVENT_DATA_SET, {node: node, data: data})\r\n }\r\n\r\n\r\n setNodeTags(node: ListNode, tag: string, value: any) {\r\n let tags = node.getTags();\r\n if (tags[tag] === value) {\r\n return;\r\n }\r\n tags[tag] = value;\r\n this.dispatch(ListSource.EVENT_TAGS_SET, {node: node, tag: tag, value: value})\r\n }\r\n\r\n /**\r\n * 派发 refresh 消息\r\n * @param node\r\n */\r\n refresh(node: ListNode) {\r\n this.dispatch(ListSource.EVENT_REFRESH, {node: node});\r\n }\r\n\r\n walk(f: (node: ListNode) => boolean) {\r\n for (let i = 0; i < this.length(); i++) {\r\n let item = this._data[i];\r\n if (!f(item)) {\r\n return false;\r\n }\r\n }\r\n }\r\n\r\n walkPrev(node: ListNode, f: (node: ListNode) => boolean) {\r\n let index = this.indexOf(node);\r\n if (index == -1) {\r\n return;\r\n }\r\n for (let i = index; i >= 0; i--) {\r\n let item = this._data[i];\r\n if (!f(item)) {\r\n return false;\r\n }\r\n }\r\n }\r\n\r\n get data(): any[] {\r\n return this._data;\r\n }\r\n\r\n private _data = [];\r\n}","export class DictIterator {\n break() {\n this._isBreak = true;\n }\n\n isBreak(): boolean {\n return this._isBreak;\n }\n\n protected _isBreak;\n}\n\nexport class Dictionary<K = string, V = any> {\n constructor(data?: any) {\n if (data) {\n this._data = data;\n } else {\n this._data = {};\n }\n this._onSet = null;\n this._onDelete = null;\n }\n\n public reset(data: any): void {\n this._reset(data);\n }\n\n protected _reset(data: any, size?: number): void {\n this._data = data;\n if (size == undefined) {\n for (let _ in data) {\n size++;\n }\n }\n this.size = size;\n }\n\n public getData(): any {\n return this._data;\n }\n\n /**\n * 如果使用了 onSet or onDelete,需要注意清理\n */\n public clear(): void {\n this._data = {};\n this.size = 0;\n }\n\n /**\n * 克隆自身所有项到【target】对象,并返回【target】对象\n * @param target\n */\n public clone(target: this): this {\n for (const key in this._data) {\n let item = this._data[key];\n // @ts-ignore\n target.setData(key, item);\n }\n return target as this;\n }\n\n public resetByDict(dict: Dictionary): void {\n this._data = dict._data;\n this.size = dict.size;\n }\n\n public onSet(caller: any, handler: (key: K, value: V) => void): void {\n this._onSetCaller = caller;\n this._onSet = handler;\n }\n\n public onDelete(caller: any, handler: (key: K, value: V) => void): void {\n this._onDelete = handler;\n this._onDeleteCaller = caller;\n }\n\n\n /**\n * 设置键值对,如果没有发生变化,不会触发onSet函数\n * @param key\n * @param value\n */\n public set(key: K, value: V): void {\n this.setData(key, value);\n }\n\n private setData(key: K, value: V): void {\n if (this._data.hasOwnProperty(key)) {// 已经存在,数量不变化\n } else {\n this.size++;\n }\n let existed = this._data[key];\n if (existed == value) {\n return;\n }\n this._data[key] = value;\n if (this._onSet !== null) {\n this._onSet.call(this._onSetCaller, key, value);\n }\n }\n\n\n public setByMap(m: any): void {\n for (const key in m) {\n let item = m[key];\n // @ts-ignore\n this.setData(key, item);\n }\n }\n\n public addDictionary(other: Dictionary<K, V>): void {\n if (other.length() == 0) {\n return;\n }\n for (const key in other._data) {\n let item = other._data[key];\n // @ts-ignore\n this.setData(key, item);\n }\n }\n\n public deleteDictionary(other: Dictionary<K, V>): void {\n if (other.length() == 0) {\n return;\n }\n for (const key in other._data) {\n // @ts-ignore\n this.delete(key);\n }\n }\n\n /**\n * 如果不存在,返回 undefined\n * @param key\n */\n public get(key: K): V {\n return this._data[key];\n }\n\n public exist(key: K): boolean {\n return !!this._data[key];\n }\n\n public delete(key: K): void {\n this.deleteData(key);\n }\n\n private deleteData(key: K): void {\n const value = this._data[key];\n if (value === undefined) {\n return;\n }\n if (this._onDelete !== null) {\n this._onDelete.call(this._onDeleteCaller, key, value);\n }\n this._data[key] = null;\n delete this._data[key];\n this.size--;\n }\n\n public exists(key: K): boolean {\n return !!this._data[key];\n }\n\n public length(): number {\n return this.size;\n }\n\n public pop(key: K): [V, boolean] {\n const value = this._data[key];\n this.deleteData(key);\n return [value, value !== undefined];\n }\n\n public isEmpty(): boolean {\n return this.length() === 0;\n }\n\n\n public items(): V[] {\n const items: V[] = [];\n for (const key in this._data) {\n let item = this._data[key];\n items.push(item);\n }\n return items;\n }\n\n public keys(): K[] {\n const keys: K[] = [];\n for (const key in this._data) {\n keys.push(key as K);\n }\n return keys;\n }\n\n /**\n *\n * @param handler 可以使用【iterator】中断遍历\n * @return iterator 获取是否中断了\n */\n public forEach(handler: (key: K, val: V, iterator: DictIterator) => void): DictIterator {\n let iterator = new DictIterator();\n for (const key in this._data) {\n let val = this._data[key]\n // @ts-ignore\n handler(key, val, iterator)\n if (iterator.isBreak()) {\n return iterator;\n }\n }\n return iterator;\n }\n\n\n /**\n */\n public first(): V | undefined {\n for (const key in this._data) {\n return this._data[key]\n }\n return undefined\n }\n\n /**\n * @param handler 返回true结束迭代\n */\n public firstByCondition(handler: (key: K, val: V) => boolean): V | undefined {\n for (const key in this._data) {\n let val = this._data[key]\n // @ts-ignore\n if (handler(key, val)) {\n return val;\n }\n }\n }\n\n\n /**\n * 移除符合条件的项\n * @param cond 可以使用【iterator】中断遍历\n */\n public removeByCondition(cond: (key: K, val: V, iterator: DictIterator) => boolean) {\n let newdata = this._data;\n let newsize = this.size;\n let iterator = new DictIterator();\n for (const key in this._data) {\n let val = this._data[key]\n // @ts-ignore\n if (cond(key, val, iterator)) {\n newsize--;\n delete newdata[key];\n }\n if (iterator.isBreak()) {\n break;\n }\n }\n this.size = newsize;\n }\n\n /**\n * 查找符合条件的项保存到【target】对象中,并返回【target】对象\n * @param cond 可以使用【iterator】中断遍历\n * @param target 存到目标对象中\n */\n public findByCondition(cond: (key: K, val: V, iterator: DictIterator) => boolean, target: Dictionary): this {\n if (!target) {\n throw new Error(\"需要设置目标对象\")\n }\n let iterator = new DictIterator();\n let newdata = {}\n let newsize = 0;\n for (const key in this._data) {\n let val = this._data[key]\n // @ts-ignore\n if (cond(key, val, iterator)) {\n newsize++;\n newdata[key] = val;\n }\n if (iterator.isBreak()) {\n break;\n }\n }\n target._reset(newdata, newsize);\n return target as this;\n }\n\n\n public groupByCondition(createKey: (key: K, val: V) => string, ITEM_CLASS?: any): { [key: string]: any } {\n let newdata = {}\n for (const key in this._data) {\n let val = this._data[key]\n // @ts-ignore\n let newkey = createKey(key, val);\n let dict: Dictionary = newdata[newkey];\n if (!dict) {\n if (ITEM_CLASS) {\n dict = new ITEM_CLASS();\n } else {\n dict = new Dictionary();\n }\n newdata[newkey] = dict;\n }\n dict.set(key, val);\n }\n return newdata;\n }\n\n\n protected size: number = 0;\n private _data: any;\n private _onSet: ((key: K, value: V) => void) | null;\n private _onDelete: ((key: K, value: V) => void) | null;\n private _onSetCaller: any;\n private _onDeleteCaller: any;\n\n}","import {Dictionary} from \"./Dictionary\";\nimport {identutil} from \"../utils/IdentUtil\";\nimport {ListSource} from \"./ListSource\";\nimport {EventManager} from \"../event/EventManager\";\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(): EventManager {\n return this._dispatcher;\n }\n\n protected _dispatcher = new EventManager();\n}","import {convertutil} from \"../../utils/ConvertUtil\";\nimport {Field} from \"../schema/schema-field\";\n\nexport interface IType {\n name: TypeName;\n}\n\nexport enum TypeName {\n /**\n * {_type:TypeName.Class, Decl:\"类型声明的编号\"}\n */\n Class = \"class\",\n\n\n Func = \"func\",\n\n /**\n * {_type: TypeName.Map, Key: {_type:TypeName.Basic,Kind: Kind.String}, Value:{_type:TypeName.Basic,Kind: Kind.String}}\n */\n Map = \"map\",\n\n /**\n * {_type:TypeName.Enum, Decl:\"枚举声明的编号\"}\n */\n Enum = \"enum\",\n\n /**\n * {_type: TypeName.Array, Elem: {_type:TypeName.Basic,Kind: Kind.String}}\n */\n Array = \"array\",\n\n /**\n * {_type:TypeName.Basic,Kind: Kind.String}\n */\n Basic = \"basic\",\n Any = \"any\",\n}\n\n\nexport class MapType {\n name = TypeName.Map\n\n constructor(public Key: IType = null, public Value: IType = null) {\n }\n}\n\nexport class FuncType {\n name = TypeName.Func\n\n constructor(public Args: Field[] = [], public Results: Field[] = []) {\n }\n}\n\n\nexport class ClassType {\n name = TypeName.Class\n\n constructor(public Decl: string = \"\") {\n }\n}\n\nexport class EnumType {\n name = TypeName.Enum\n\n constructor(public Decl: string = \"\") {\n }\n\n}\n\nexport class ArrayType {\n name = TypeName.Array\n\n constructor(public Elem: IType = null) {\n }\n}\n\nexport class BasicType {\n name = TypeName.Basic\n\n constructor(public Kind: Kind = 0) {\n }\n\n\n}\n\nexport class AnyType {\n name = TypeName.Any;\n\n constructor() {\n }\n\n}\n\nexport enum Kind {\n Invalid,\n Bool,\n Int8,\n Int16,\n Int32,\n Int64,\n Uint8,\n Uint16,\n Uint32,\n Uint64,\n Float32,\n Float64,\n String,\n Bytes,\n}\n\n\nexport function isInt(kind: Kind): boolean {\n switch (this.Kind) {\n case Kind.Int8:\n case Kind.Int16:\n case Kind.Int32:\n case Kind.Int64:\n return true;\n }\n return false;\n}\n\nexport function isNumber(kind: Kind): boolean {\n switch (kind) {\n case Kind.Uint8:\n case Kind.Uint16:\n case Kind.Uint32:\n case Kind.Uint64:\n case Kind.Int8:\n case Kind.Int16:\n case Kind.Int32:\n case Kind.Int64:\n case Kind.Float32:\n case Kind.Float64:\n return true;\n }\n\n return false;\n}\n\n\nexport function isFloat(kind: Kind): boolean {\n switch (kind) {\n case Kind.Float32:\n case Kind.Float64:\n return true;\n }\n\n return false;\n}\n\nexport function isUint(kind: Kind): boolean {\n switch (kind) {\n case Kind.Uint8:\n case Kind.Uint16:\n case Kind.Uint32:\n case Kind.Uint64:\n return true;\n }\n\n return false;\n}\n\nexport function getInitValue(type: IType): any {\n if (type instanceof BasicType) {\n switch (type.Kind) {\n case Kind.Bool:\n return false\n case Kind.Int8:\n case Kind.Int16:\n case Kind.Int32:\n case Kind.Int64:\n case Kind.Uint8:\n case Kind.Uint16:\n case Kind.Uint32:\n case Kind.Uint64:\n case Kind.Float32:\n case Kind.Float64:\n return 0;\n case Kind.String:\n return \"\";\n }\n } else if (type instanceof MapType) {\n return {};\n } else if (type instanceof ArrayType) {\n return [];\n } else if (type instanceof ClassType) {\n return {};\n }\n}\n\n\nexport function convertBasicTypeToJsonValue(basic: BasicType, val: any, defaultValue: any = undefined): any {\n return convertBaicKindToJsonValue(basic.Kind, val)\n}\n\n/**\n *\n * @param kind\n * @param val\n * @param defaultValue\n */\nexport function convertBaicKindToJsonValue(kind: Kind, val: any, defaultValue: any = undefined): any {\n switch (kind) {\n case Kind.Bool:\n if (defaultValue !== undefined) {\n if (val === undefined || val === \"\") {\n val = defaultValue;\n }\n }\n return convertutil.anyToBoolean(val)\n case Kind.Int8:\n case Kind.Int16:\n case Kind.Int32:\n case Kind.Int64:\n case Kind.Uint8:\n case Kind.Uint16:\n case Kind.Uint32:\n case Kind.Uint64:\n if (defaultValue !== undefined) {\n if (val === undefined || val === \"\") {\n val = defaultValue;\n }\n }\n return convertutil.anyToInt(val)\n case Kind.Float32:\n case Kind.Float64:\n if (defaultValue !== undefined) {\n if (val === undefined || val === \"\") {\n val = defaultValue;\n }\n }\n\n return convertutil.anyToFloat(val)\n case Kind.String:\n if (defaultValue !== undefined) {\n if (val === undefined) {\n val = defaultValue;\n }\n }\n return convertutil.anyToString(val)\n\n }\n\n return\n}\n","import {AnyType, ArrayType, BasicType, ClassType, convertBaicKindToJsonValue, EnumType, isUint, IType, Kind, MapType} from \"./schema-type\";\nimport {declrepo, EnumDecl, IDecl} from \"./schema-decl\";\n\nexport class Field {\n /**\n * 如果Type=ClassType, 可通过设置{}建立新对象, 否则默认为nil\n * 如果Type=MapType, 可通过设置{}建立新对象, 否则默认为nil\n * 如果Type=BasicType/EnumType, Value为初始值\n * Value: string = \"\";\n * @param Name\n * @param Type\n * @param Value\n * @param Tags\n */\n constructor(public Name: string = \"\", public Type: IType = null, public Value: string = \"\", public Tags: any = {}) {\n }\n\n getTag(name: string): string {\n if (this.Tags) {\n let a = this.Tags[name];\n if (a) {\n return a;\n }\n }\n return \"\";\n }\n\n convertToJsonValue(dataValue) {\n let kind = this.getValueBasicKind();\n let defaultValue = this.getValue();\n defaultValue = convertBaicKindToJsonValue(kind, defaultValue);\n return convertBaicKindToJsonValue(kind, dataValue, defaultValue)\n }\n\n /**\n * 默认值\n * 获取转化后的Field.Value\n */\n getValue() {\n if (this.Type instanceof ClassType) {\n if (this.Value !== \"\") {\n return JSON.parse(this.Value)\n } else {\n return null;\n }\n } else if (this.Type instanceof MapType) {\n if (this.Value !== \"\") {\n return JSON.parse(this.Value)\n } else {\n return null;\n }\n } else if (this.Type instanceof ArrayType) {\n if (this.Value !== \"\") {\n return JSON.parse(this.Value)\n } else {\n return null;\n }\n } else if (this.Type instanceof EnumType) {\n let desc = declrepo.get(this.Type.Decl);\n if (!desc) {\n throw new Error(\"initObj EnumType: description not found: \" + this.Type.Decl)\n }\n let enumdesc = desc as EnumDecl;\n if (isUint(enumdesc.Kind)) {\n return 0;// 状态位操作,默认为0\n } else {\n let val = enumdesc.Fields[0].Value;\n if (this.Value !== \"\") {\n val = this.Value;\n }\n return convertBaicKindToJsonValue(enumdesc.Kind, val);\n }\n } else if (this.Type instanceof BasicType) {\n return convertBaicKindToJsonValue(this.Type.Kind, this.Value);\n } else if (this.Type instanceof AnyType) {\n if (this.Value !== \"\") {\n return JSON.parse(this.Value)\n } else {\n return null;\n }\n }\n }\n\n /**\n *\n */\n getValueBasicKind(): Kind {\n if (this.Type instanceof ClassType) {\n\n } else if (this.Type instanceof MapType) {\n if (this.Type.Value instanceof BasicType) {\n return this.Type.Value.Kind\n }\n } else if (this.Type instanceof ArrayType) {\n if (this.Type.Elem instanceof BasicType) {\n return this.Type.Elem.Kind\n }\n } else if (this.Type instanceof EnumType) {\n let desc = declrepo.get(this.Type.Decl);\n if (!desc) {\n throw new Error(\"initObj EnumType: description not found: \" + this.Type.Decl)\n }\n let enumdesc = desc as EnumDecl;\n return enumdesc.Kind;\n } else if (this.Type instanceof BasicType) {\n return this.Type.Kind;\n } else if (this.Type instanceof AnyType) {\n }\n\n return Kind.Invalid\n }\n\n\n // containTag(name:string, checkParentLink:boolean = false):boolean{\n //\n // }\n\n public Comments: string[];\n public decl: IDecl;\n\n\n}","import {Field} from \"./schema-field\";\nimport {AnyType, ArrayType, BasicType, ClassType, EnumType, IType, Kind, MapType} from \"./schema-type\";\nimport {ClassDecl, declrepo, EnumDecl, typerepo} from \"./schema-decl\";\n\nexport default class ObjectVisitor {\n\n constructor(classDecl: ClassDecl, origin?: any) {\n this.classDecl = classDecl;\n this.origin = origin\n }\n\n walk(f: (visitor: ObjectVisitor, object: any, key: string, value: any) => void) {\n this._walkClassDecl(\"\", this.classDecl, this.origin, f);\n }\n\n\n protected _basicStringType = new BasicType(Kind.String);\n\n protected _walkClassDecl(path: string, classDecl: ClassDecl, sourceObject: any, f: (ctx: ObjectVisitor, object: any, key: string, value: any) => void) {\n if (!classDecl) {\n throw new Error(`未发现ClassDecl: ${this.lastField.Name}:${this.lastFieldType.name}`)\n }\n if (!sourceObject) {\n return;\n }\n let repo = declrepo;\n // 优先广度搜\n // 索\n classDecl.walkField((field) => {\n let fieldName = field.Name;\n let fieldType = field.Type;\n let sourceVal = sourceObject[fieldName];\n this.lastField = field;\n this.lastFieldType = fieldType;\n this.lastValueType = fieldType;\n this.lastParent = classDecl;\n this.lastKey = fieldName;\n this.lastKeyType = typerepo.getBasicType(Kind.String);\n this.lastPathParent = `${path}`;\n this.lastPath = `${path}/${fieldName}`;\n // 先遍历字段本身\n f(this, sourceObject, fieldName, sourceVal);\n\n // 如果是类,map,array,遍历\n if (fieldType instanceof MapType) {\n let ktyp = fieldType.Key;\n this.lastKeyType = ktyp;\n if (sourceVal) {\n this.lastParent = fieldType;\n this.lastValueType = fieldType.Value;\n if (ktyp instanceof EnumType) {\n let enumDecl = repo.get(ktyp.Decl) as EnumDecl;\n if (!enumDecl) {\n throw Error(\"object visitor MapType[key:EnumType]: description not found: \" + ktyp.Decl)\n }\n\n for (let ef of enumDecl.Fields) {\n this.lastPathParent = `${path}/${fieldName}`;\n this.lastPath = `${path}/${fieldName}/${ef.Value}`;\n this.lastKey = ef.Value;\n f(this, sourceVal, ef.Value, sourceVal[ef.Value]);\n }\n } else {\n for (const skey in sourceVal) {\n this.lastPathParent = `${path}/${fieldName}`;\n this.lastPath = `${path}/${fieldName}/${skey}`\n this.lastKey = skey;\n f(this, sourceVal, skey, sourceVal[skey]);\n }\n }\n }\n } else if (fieldType instanceof ArrayType) {\n if (sourceVal) {\n this.lastParent = fieldType;\n this.lastValueType = fieldType.Elem;\n this.lastKeyType = typerepo.getBasicType(Kind.String);\n this.lastPathParent = `${path}/${fieldName}`;\n for (const skey in sourceVal) {\n this.lastKey = skey;\n this.lastPath = `${path}/${fieldName}/${skey}`;\n f(this, sourceVal, skey, sourceVal[skey]);\n }\n }\n }\n });\n\n\n classDecl.walkField((field) => {\n let fieldName = field.Name;\n let fieldType = field.Type;\n let sourceVal = sourceObject[fieldName];\n // 先遍历字段本身\n if (fieldType instanceof ClassType) {\n if (sourceVal != undefined) {\n this._walkClassDecl(`${path}/${fieldName}`, repo.get(fieldType.Decl) as ClassDecl, sourceVal, f);\n }\n } else if (fieldType instanceof MapType) {\n let ktyp = fieldType.Key;\n let vtyp = fieldType.Value;\n if (sourceVal != undefined) {\n if (ktyp instanceof EnumType) {\n let enumDecl = repo.get(ktyp.Decl) as EnumDecl;\n for (let ef of enumDecl.Fields) {\n let sourceMapVal = sourceVal[ef.Value];\n if (sourceMapVal) {\n if (vtyp instanceof ClassType) {\n this._walkClassDecl(`${path}/${fieldName}/${ef.Value}`, repo.get(vtyp.Decl) as ClassDecl, sourceMapVal, f);\n }\n }\n\n }\n } else {\n for (const skey in sourceVal) {\n let sourceMapVal = sourceVal[skey];\n if (sourceMapVal) {\n if (vtyp instanceof ClassType) {\n this._walkClassDecl(`${path}/${fieldName}/${skey}`, repo.get(vtyp.Decl) as ClassDecl, sourceMapVal, f);\n\n } else if (vtyp instanceof AnyType) {\n let _type = sourceMapVal._type;\n if (_type) {\n this._walkClassDecl(`${path}/${fieldName}/${skey}`, repo.get(_type) as ClassDecl, sourceMapVal, f);\n }\n }\n }\n }\n }\n }\n } else if (fieldType instanceof ArrayType) {\n if (sourceVal != undefined) {\n let elemType = fieldType.Elem;\n for (let index in sourceVal) {\n let sourceArrayVal = sourceVal[index];\n if (sourceArrayVal) {\n if (elemType instanceof ClassType) {\n this._walkClassDecl(`${path}/${fieldName}/${index}`, repo.get(elemType.Decl) as ClassDecl, sourceArrayVal, f);\n\n } else if (elemType instanceof AnyType) {\n let _type = sourceArrayVal._type;\n if (_type) {\n this._walkClassDecl(`${path}/${fieldName}/${index}`, repo.get(_type) as ClassDecl, sourceArrayVal, f);\n }\n }\n }\n\n\n }\n }\n } else if (fieldType instanceof AnyType) {\n if (sourceVal) {\n let _type = sourceVal._type;\n if (_type) {\n this._walkClassDecl(`${path}/${fieldName}`, repo.get(_type) as ClassDecl as ClassDecl, sourceVal, f);\n }\n }\n }\n });\n }\n\n classDecl: ClassDecl\n origin?: any;\n\n lastField: Field;\n lastFieldType: IType;\n lastValueType: IType;\n lastKeyType: IType;\n lastKey: string;\n /**\n * class/map/array\n */\n lastParent: ClassDecl | IType;\n\n lastPathWith(key: string): string {\n if (this._lastPathParent == \"/\") {\n return this._lastPathParent + key;\n }\n return this._lastPathParent + \"/\" + key;\n }\n\n get lastPathParent(): string {\n return this._lastPathParent;\n }\n\n set lastPathParent(path: string) {\n if (path == \"\") {\n path = \"/\"\n }\n\n this._lastPathParent = path;\n }\n\n protected _lastPathParent = \"\";\n\n\n get lastPath(): string {\n return this._lastPath;\n }\n\n set lastPath(path: string) {\n if (path == \"\") {\n path = \"/\"\n }\n this._lastPath = path;\n }\n\n protected _lastPath = \"\";\n}\n","import {maputil} from \"../../utils/MapUtil\";\nimport { declrepo, ClassDecl, EnumDecl } from \"../schema/schema-decl\";\nimport { ClassType, MapType, ArrayType, EnumType, BasicType, AnyType, convertBaicKindToJsonValue } from \"../schema/schema-type\";\n\n/**\n * 解码反射值的接口\n */\nexport interface IRefValue {\n // 结构的类名\n refType(): string\n}\n\nexport class MapDecoder {\n constructor() {\n }\n\n public decodeSet(m: { [key: string]: any }): any {\n let r = {};\n let repo = declrepo;\n for (let mkey in m) {\n let mval = m[mkey];\n let className = maputil.string(mval, \"_type\");\n if (!className) {\n continue;\n }\n let desc = repo.get(className) as ClassDecl;\n if (!desc) {\n throw (\"description not found: \" + className)\n }\n\n let obj = repo.newClass(className);\n this.parseObj(obj, mval, desc);\n\n r[mkey] = obj;\n }\n\n return r;\n }\n\n public decodeMap(m: { [key: string]: any }): any {\n let repo = declrepo;\n let className = maputil.string(m, \"_type\");\n let desc = repo.get(className) as ClassDecl;\n if (!desc) {\n throw (\"description not found: \" + className)\n }\n let obj = repo.newClass(className);\n this.parseObj(obj, m, desc);\n return obj;\n }\n\n public decodeObj(obj: IRefValue, m: any) {\n let desc = declrepo.get(obj.refType()) as ClassDecl;\n if (!desc) {\n throw (\"description not found: \" + obj.refType())\n }\n this.parseObj(obj, m, desc)\n }\n\n protected parseObj(obj: any, m: any, desc: ClassDecl) {\n for (let field of desc.Fields) {\n let fname = field.Name;\n let mval = m[fname];\n if (mval === undefined) {\n let ailas = maputil.string(field.Tags, \"ailas\");\n if (ailas) {\n mval = m[ailas]\n }\n }\n\n let oval = obj[fname];\n if (field.Type instanceof ClassType) {\n obj[fname] = this.parseClass(oval, mval, field.Type)\n } else if (field.Type instanceof MapType) {\n obj[fname] = this.parseMap(oval, mval, field.Type)\n } else if (field.Type instanceof ArrayType) {\n obj[fname] = this.parseSlice(oval, mval, field.Type)\n } else if (field.Type instanceof EnumType) {\n obj[fname] = this.parseEnum(oval, mval, field.Type)\n } else if (field.Type instanceof BasicType) {\n obj[fname] = this.parseBasic(oval, mval, field.Type)\n } else if (field.Type instanceof AnyType) {\n obj[fname] = this.parseAny(oval, mval, field.Type)\n }\n }\n }\n\n protected parseMap(omap: any, mmap: any, typ: MapType): any {\n if (!mmap) {\n return null;\n }\n if (!omap) {\n omap = {};\n }\n if (mmap instanceof Object) {\n for (let mkey in mmap) {\n let mval = mmap[mkey];\n if (typ.Value instanceof ClassType) {\n omap[mkey] = this.parseClass(omap[mkey], mval, typ.Value)\n } else if (typ.Value instanceof EnumType) {\n omap[mkey] = this.parseEnum(null, mval, typ.Value)\n } else if (typ.Value instanceof BasicType) {\n omap[mkey] = this.parseBasic(null, mval, typ.Value)\n }\n }\n return omap;\n } else {\n return {};\n }\n }\n\n protected parseSlice(oarr: any, marr: any, typ: ArrayType): any {\n if (marr === undefined) {\n return oarr;\n }\n if (marr === null) {\n return [];\n }\n if (marr instanceof Array) {\n oarr = [];\n for (let i = 0; i < marr.length; i++) {\n let mval = marr[i];\n if (typ.Elem instanceof ClassType) {\n oarr[i] = this.parseClass(null, mval, typ.Elem)\n } else if (typ.Elem instanceof EnumType) {\n oarr[i] = this.parseEnum(null, mval, typ.Elem)\n } else if (typ.Elem instanceof BasicType) {\n oarr[i] = this.parseBasic(null, mval, typ.Elem)\n }\n }\n return oarr;\n } else {\n return [];\n }\n }\n\n protected parseAny(oval: any, mval: any, typ: AnyType) {\n if (mval === undefined) {\n return oval;\n }\n if (mval === null) {\n return null;\n }\n\n let repo = declrepo;\n let _typ = maputil.string(mval, \"_type\");\n let obj = repo.newClass(_typ);\n if (!obj) {\n throw (\"class not found: \" + _typ)\n }\n let desc = repo.get(_typ) as ClassDecl;\n if (!desc) {\n throw (\"description not found: \" + _typ)\n }\n this.parseObj(obj, mval, desc)\n return obj\n }\n\n protected parseClass(oval: any, mval: any, typ: ClassType): any {\n if (mval === undefined) {\n return oval;\n }\n if (mval === null) {\n return null;\n }\n let repo = declrepo;\n let desc = repo.get(typ.Decl) as ClassDecl;\n if (!desc) {\n throw (\"parseClass: description not found: \" + typ.Decl)\n }\n\n if (!oval) {\n oval = repo.newClass(typ.Decl);\n }\n this.parseObj(oval, mval, desc);\n return oval;\n }\n\n protected parseEnum(oval: any, mval: any, typ: EnumType): any {\n let desc = declrepo.get(typ.Decl);\n if (!desc) {\n throw (\"parseClass: description not found: \" + typ.Decl)\n }\n let enumdesc = desc as EnumDecl;\n oval = convertBaicKindToJsonValue(enumdesc.Kind, mval);\n return oval;\n }\n\n\n protected parseBasic(oval: any, mval: any, typ: BasicType): any {\n oval = convertBaicKindToJsonValue(typ.Kind, mval);\n return oval\n }\n}\n","import {Dictionary} from \"../../ds\";\nimport * as cc from \"cc\";\nimport {AnyType, ArrayType, BasicType, ClassType, convertBaicKindToJsonValue, EnumType, FuncType, isUint, IType, Kind, MapType, TypeName} from \"./schema-type\";\nimport {Field} from \"./schema-field\";\nimport ObjectVisitor from \"./schema-visitor\";\nimport {convertutil, maputil} from \"../../utils\";\nimport {MapDecoder} from \"../mapcoder/decoder\";\n\n\nexport class TypeRepo extends Dictionary<string, IType> {\n protected toKey(typeName: TypeName, arg1?: any): string {\n switch (typeName) {\n case TypeName.Basic:\n return Kind[arg1];\n case TypeName.Map:\n let key = arg1[0];\n let val = arg1[1];\n return `{${this.toKey(key[0], key[1])},${this.toKey(val[0], val[1])}}`;\n case TypeName.Array:\n return `[${this.toKey(arg1[0], arg1[1])}]`;\n case TypeName.Class:\n return `{${arg1}}`;\n case TypeName.Enum:\n return arg1;\n case TypeName.Any:\n return typeName;\n }\n }\n\n getEnumType(decl: string): IType {\n return this.getType(TypeName.Enum, decl)\n }\n\n getArrayType(elemName: any[]): IType {\n return this.getType(TypeName.Array, elemName)\n }\n\n getMapType(key: any[], value: any[]): IType {\n return this.getType(TypeName.Map, [key, value])\n }\n\n getBasicType(kind: Kind): IType {\n return this.getType(TypeName.Basic, kind)\n }\n\n getAnyType(): IType {\n return this.getType(TypeName.Any)\n }\n\n getType(typeName: TypeName, arg1?: any) {\n if (typeName == TypeName.Any) {\n return new AnyType()\n }\n\n let key = this.toKey(typeName, arg1);\n if (key == undefined) {\n return;\n }\n let typ = this.get(key);\n if (!typ) {\n typ = this.createType(typeName, arg1);\n this.set(key, typ);\n }\n return typ;\n }\n\n protected createType(typeName, arg1): IType {\n switch (typeName) {\n case TypeName.Basic:\n return new BasicType(arg1);\n case TypeName.Class:\n return new ClassType(arg1);\n case TypeName.Enum:\n return new EnumType(arg1);\n case TypeName.Array:\n return new ArrayType(this.createType(arg1[0], arg1[1]));\n case TypeName.Map:\n let key = arg1[0];\n let value = arg1[1];\n return new MapType(this.createType(key[0], key[1]), this.createType(value[0], value[1]));\n case TypeName.Any:\n return new AnyType();\n }\n\n return null;\n }\n}\n\nexport let typerepo = new TypeRepo();\n\nexport interface IDecl {\n Name: string;\n Namespace: string;\n Tags: any;\n Alias: string;\n}\n\nexport class EnumDecl implements IDecl {\n\n constructor(public Name: string = \"\", public Kind: Kind = 0, public Value: string = \"\", public Fields: Field[] = []) {\n }\n\n firstValue(): number {\n if (this.Fields.length == 0) {\n return 0;\n }\n return convertutil.anyToInt(this.Fields[0].Value)\n }\n\n NameToValue(name: string): any {\n for (const field of this.Fields) {\n if (field.Name == name) {\n return field.Value;\n }\n }\n return null;\n }\n\n ValueToName(value: any): string {\n for (const field of this.Fields) {\n if (field.Value == value) {\n return field.Name;\n }\n }\n return null;\n }\n\n public GetAllField(): Field[] {\n let r = [];\n for (let f of this.Fields) {\n r.push(f);\n }\n return r;\n }\n\n Alias: string;\n Namespace: string = \"\";\n Tags: any = {};\n Comments: string[];\n}\n\n\nexport class ClassDecl implements IDecl{\n\n\n constructor(public Name: string = \"\", public Parent: string = \"\", public Fields: Field[] = [], tags?: any) {\n if (tags != undefined) {\n this.Tags = tags;\n }\n for (const field of this.Fields) {\n field.decl = this;\n }\n }\n\n getIdent(): string {\n if (this.Namespace != \"\") {\n return this.Namespace + \"/\" + this.Name\n }\n return this.Name\n }\n\n public get Alias(): string {\n if (!this.Tags) {\n return \"\"\n }\n let alias = this.Tags[\"alias\"];\n if (alias) {\n return alias;\n }\n\n return \"\";\n }\n\n getParent(): ClassDecl {\n if (this.Parent == \"\") {\n return null;\n }\n return declrepo.get(this.Parent) as ClassDecl;\n }\n\n getField(name: string): Field {\n for (let f of this.Fields) {\n if (f.Name === name) {\n return f\n }\n }\n let p = this.getParent()\n if (p) {\n return p.getField(name)\n }\n return null;\n }\n\n\n walkField(handler: (field: Field) => void) {\n if (!handler) {\n throw new Error(\"未设置处理函数\")\n }\n for (let field of this.Fields) {\n handler(field)\n }\n\n let parent = this.getParent();\n if (parent) {\n parent.walkField(handler);\n }\n }\n\n protected _lastObject: any;\n\n /**\n * @param f\n * @param sourceObject\n */\n walkFieldType(f: (field: Field, type: IType, obj?: {} | undefined, value?: any) => void, sourceObject?: any) {\n this._walkFieldType(f, sourceObject)\n }\n\n protected _walkFieldType(f: (field: Field, type: IType, obj?: {} | undefined, value?: any) => void, sourceObject: any) {\n this.walkField((field) => {\n let fname = field.Name;\n let sourceVal = undefined;\n if (sourceObject) {\n sourceVal = sourceObject[fname]\n }\n f(field, field.Type, sourceObject, sourceVal);\n });\n\n let repo = declrepo;\n this.walkField((field) => {\n let fname = field.Name;\n let sourceVal = undefined;\n if (sourceObject) {\n sourceVal = sourceObject[fname]\n }\n if (field.Type instanceof ClassType) {\n if (sourceVal != undefined) {\n let decl = repo.get(field.Type.Decl) as ClassDecl;\n if (decl) {\n decl.walkFieldType(f, sourceVal);\n }\n }\n }\n })\n }\n\n\n Namespace: string = \"\";\n Tags: any = {};\n Comments: string[];\n\n}\n\nexport class InterfaceDecl implements IDecl {\n public Namespace: string = \"\";\n public Comments: string[];\n\n constructor(public Name: string = \"\", public Parent: string = \"\", public Fields: Field[] = []) {\n }\n\n public GetField(name: string): Field {\n for (let f of this.Fields) {\n if (f.Name === name) {\n return f\n }\n }\n\n return null;\n }\n\n Alias: string;\n Tags: any;\n repo: DeclRepo;\n\n\n}\n\nexport class DeclDict extends Dictionary<string, IDecl> {\n /**\n * 查找 指定 _type 的结构声明\n * @param _type\n */\n findByAnyType(_type: string): DeclDict {\n return this.findByCondition((key, decl) => {\n if (decl instanceof ClassDecl) {\n if (!decl.Tags) {\n return false;\n }\n return maputil.string(decl.Tags, \"_type\") == _type;\n }\n return false;\n }, new DeclDict())\n }\n}\n\n\nexport class DeclRepo extends DeclDict {\n\n\n constructor() {\n super();\n\n\n this.onSet(this, (key, decl) => {\n if (decl.Alias) {\n this.set(decl.Alias, decl);\n }\n\n if (decl.Namespace) {\n let pkg = decl.Namespace.split(\"/\");\n let last = \"\";\n if (pkg.length > 0) {\n last = pkg[pkg.length - 1]\n } else {\n last = decl.Namespace;\n }\n this.set(last + \"/\" + decl.Name, decl);\n }\n\n\n })\n\n this.onDelete(this, (key, decl) => {\n if (decl.Alias) {\n this.delete(decl.Alias);\n }\n\n if (decl.Namespace) {\n let pkg = decl.Namespace.split(\"/\");\n let last = \"\";\n if (pkg.length > 0) {\n last = pkg[pkg.length - 1]\n } else {\n last = decl.Namespace;\n }\n this.delete(last + \"/\" + decl.Name);\n }\n\n });\n\n this.init();\n }\n\n /**\n * @param json\n */\n parseJson(json: any) {\n let schemas = json[\"schemas\"]\n let set = new MapDecoder().decodeSet(schemas);\n for (let key in set) {\n let decl = set[key];\n this.set(decl.Name, decl)\n }\n }\n\n\n newClass(className: string): any {\n let decl = this.get(className) as ClassDecl\n if (!decl) {\n throw new Error(\"description not found: \" + className)\n }\n\n let ObjClass = cc.js.getClassByName(className);\n if (!ObjClass) {\n throw new Error(\"Class not found: \" + className)\n }\n let obj = new ObjClass();\n this.initObject(obj, decl);\n return obj;\n }\n\n /**\n *\n * @param obj\n * @param decl\n * @param ifNull 如果是空的话才初始化\n */\n initObject(obj, decl: ClassDecl, ifNull: boolean = false) {\n decl.walkField((field: Field) => {\n let fname = field.Name;\n let value = obj[fname];\n if (ifNull) {\n if (value) {\n return;\n }\n }\n if (field.Type instanceof ClassType) {\n if (field.Value !== \"\") {\n // obj[fname] = NewObject(field.Type.Decl);\n obj[fname] = JSON.parse(field.Value);\n } else {\n obj[fname] = null;\n }\n } else if (field.Type instanceof MapType) {\n let ktyp = field.Type.Key;\n let vtyp = field.Type.Value;\n if (ktyp instanceof EnumType) {\n // let desc = getDesc(ktyp.Decl) as EnumDecl;\n // if (!desc) {\n // throw new Error(\"initObj MapType[key:EnumType]: description not found: \" + ktyp.Decl)\n // }\n // let m = {};\n // obj[fname] = m;\n //\n // for (let ef of desc.Fields) {\n // if (vtyp instanceof ClassType) {\n // let mobj = {};\n // m[ef.Value] = mobj;\n // let desc = getDesc(vtyp.Decl) as ClassDecl;\n // if (!desc) {\n // throw new Error(\"initObj MapType[key:EnumType]: description not found: \" + ktyp.Decl)\n // }\n // initObj(mobj, desc)\n // } else if (vtyp instanceof EnumType) {\n // let desc = getDesc(vtyp.Decl);\n // if (!desc) {\n // throw new Error(\"initObj MapType.[val:EnumType]: description not found: \" + vtyp.Decl)\n // }\n // let enumdesc = desc as EnumDecl;\n // let val = enumdesc.Fields[0].Value;\n // if (field.Value !== \"\") {\n // val = field.Value;\n // }\n // m[ef.Value] = convertBaicKindToJsonValue(enumdesc.Kind, val);\n // } else if (vtyp instanceof BasicType) {\n // m[ef.Value] = convertBaicKindToJsonValue(vtyp.Kind, field.Value);\n // }\n // }\n } else {\n if (field.Value === \"{}\") {\n obj[fname] = {};\n } else {\n obj[fname] = null;\n }\n }\n } else if (field.Type instanceof ArrayType) {\n obj[fname] = [];\n } else if (field.Type instanceof EnumType) {\n let idesc = this.get(field.Type.Decl);\n if (!idesc) {\n throw new Error(\"initObj EnumType: description not found: \" + field.Type.Decl)\n }\n let enumdesc = idesc as EnumDecl;\n if (isUint(enumdesc.Kind)) {\n obj[fname] = 0;// 状态位操作,默认为0\n } else {\n if (field.Value !== \"\") {\n obj[fname] = enumdesc.ValueToName(field.Value);\n } else {\n obj[fname] = enumdesc.firstValue();\n }\n\n }\n } else if (field.Type instanceof BasicType) {\n let defaultValue = field.getValue();\n obj[fname] = convertBaicKindToJsonValue(field.Type.Kind, field.Value, defaultValue);\n } else if (field.Type instanceof AnyType) {\n obj[fname] = null;\n }\n })\n\n return obj;\n }\n\n createObjectVisitor(classDecl: ClassDecl, origin?: any): ObjectVisitor {\n return new ObjectVisitor(classDecl, origin);\n }\n\n\n copyObject(source: any, target: any, decl: ClassDecl) {\n if (!source || !target) {\n throw new Error(\"未设置source或者target\")\n }\n\n this.createObjectVisitor(decl, source).walk((visitor, object, key, value) => {\n if (value == undefined) {\n return;\n }\n let valueType = visitor.lastValueType;\n if (valueType instanceof ClassType) {\n if (value) {\n let decl = this.get(valueType.Decl) as ClassDecl;\n let targetValue = maputil.getByPath(target, `${visitor.lastPath}`);\n if(targetValue){\n this.initObject(targetValue, decl, true);\n }else{\n maputil.setByPath(target, `${visitor.lastPath}`, this.initObject({}, decl, true));\n }\n }\n } else if (valueType instanceof BasicType) {\n maputil.setByPath(target, `${visitor.lastPath}`, value);\n } else if (valueType instanceof EnumType) {\n maputil.setByPath(target, `${visitor.lastPath}`, value);\n } else if (valueType instanceof AnyType) {\n let _type = value[\"_type\"];\n\n if (_type) {\n maputil.setByPath(target, `${visitor.lastPath}/_type`, value[\"_type\"])\n } else {\n _type = maputil.getByPath(target, `${visitor.lastPath}/_type`);\n if (_type) {\n value[\"_type\"] = _type;\n }\n }\n }\n });\n }\n\n isContainerType(target: ClassDecl | IType) {\n if (target instanceof ClassDecl) {\n return true;\n } else if (target instanceof ClassType) {\n return true;\n } else if (target instanceof MapType) {\n return true;\n } else if (target instanceof ArrayType) {\n return true;\n }\n return false;\n }\n\n protected init() {\n if (!cc.js.getClassByName(\"interface\")) {\n cc.js.setClassName(\"interface\", InterfaceDecl)\n cc.js.setClassName(\"classdecl\", ClassDecl)\n cc.js.setClassName(\"enumdecl\", EnumDecl)\n cc.js.setClassName(\"class\", ClassType)\n cc.js.setClassName(\"enum\", EnumType)\n cc.js.setClassName(\"map\", MapType)\n cc.js.setClassName(\"array\", ArrayType)\n cc.js.setClassName(\"any\", AnyType)\n cc.js.setClassName(\"basic\", BasicType)\n cc.js.setClassName(\"field\", Field)\n cc.js.setClassName(\"func\", FuncType)\n }\n\n // typerepo\n {\n let descriptions = {};\n descriptions[\"interface\"] = new ClassDecl(\"interface\", \"\", [\n new Field(\"Namespace\", typerepo.getBasicType(Kind.String)),\n new Field(\"Name\", typerepo.getBasicType(Kind.String)),\n new Field(\"Comments\", typerepo.getArrayType([TypeName.Basic, Kind.String])),\n new Field(\"Parent\", typerepo.getBasicType(Kind.String)),\n new Field(\"Fields\", typerepo.getArrayType([TypeName.Class, \"field\"])),\n new Field(\"Tags\", typerepo.getMapType([TypeName.Basic, Kind.String], [TypeName.Basic, Kind.String])),\n ]);\n descriptions[\"classdecl\"] = new ClassDecl(\"classdecl\", \"\", [\n new Field(\"Namespace\", typerepo.getBasicType(Kind.String)),\n new Field(\"Name\", typerepo.getBasicType(Kind.String)),\n new Field(\"Comments\", typerepo.getArrayType([TypeName.Basic, Kind.String])),\n new Field(\"Parent\", typerepo.getBasicType(Kind.String)),\n new Field(\"Fields\", typerepo.getArrayType([TypeName.Class, \"field\"])),\n new Field(\"Tags\", typerepo.getMapType([TypeName.Basic, Kind.String], [TypeName.Basic, Kind.String])),\n ], {\"config\": \"结构\"});\n descriptions[\"func\"] = new ClassDecl(\"func\", \"\", [\n new Field(\"Name\", typerepo.getBasicType(Kind.String)),\n new Field(\"Args\", typerepo.getArrayType([TypeName.Class, \"field\"])),\n new Field(\"Results\", typerepo.getArrayType([TypeName.Class, \"field\"])),\n ]);\n descriptions[\"enumdecl\"] = new ClassDecl(\"enumdecl\", \"\", [\n new Field(\"Namespace\", typerepo.getBasicType(Kind.String)),\n new Field(\"Name\", typerepo.getBasicType(Kind.String)),\n new Field(\"Kind\", typerepo.getEnumType(\"kind\")),\n new Field(\"Value\", typerepo.getBasicType(Kind.String)),\n new Field(\"Fields\", typerepo.getArrayType([TypeName.Class, \"field\"])),\n new Field(\"Tags\", typerepo.getMapType([TypeName.Basic, Kind.String], [TypeName.Basic, Kind.String])),\n ]);\n descriptions[\"field\"] = new ClassDecl(\"field\", \"\", [\n new Field(\"Comments\", typerepo.getArrayType([TypeName.Basic, Kind.String])),\n new Field(\"Name\", typerepo.getBasicType(Kind.String)),\n new Field(\"Type\", typerepo.getAnyType()),\n new Field(\"Value\", typerepo.getBasicType(Kind.String)),\n new Field(\"Tags\", typerepo.getMapType([TypeName.Basic, Kind.String], [TypeName.Basic, Kind.String])),\n ]);\n\n descriptions[\"map\"] = new ClassDecl(\"map\", \"\", [\n new Field(\"Key\", typerepo.getAnyType()),\n new Field(\"Value\", typerepo.getAnyType()),\n ]);\n descriptions[\"array\"] = new ClassDecl(\"array\", \"\", [\n new Field(\"Elem\", typerepo.getAnyType()),\n ]);\n descriptions[\"class\"] = new ClassDecl(\"class\", \"\", [\n new Field(\"Decl\", typerepo.getBasicType(Kind.String)),\n ]);\n descriptions[\"enum\"] = new ClassDecl(\"enum\", \"\", [\n new Field(\"Decl\", typerepo.getBasicType(Kind.String)),\n ]);\n descriptions[\"basic\"] = new ClassDecl(\"basic\", \"\", [\n new Field(\"Kind\", typerepo.getEnumType(\"kind\")),\n ]);\n descriptions[\"any\"] = new ClassDecl(\"any\", \"\", []);\n descriptions[\"kind\"] = new EnumDecl(\"kind\", Kind.Int8, \"\", [\n new Field(\"Invalid\", null, \"0\"),\n new Field(\"Bool\", null, \"1\"),\n new Field(\"Int8\", null, \"2\"),\n new Field(\"Int16\", null, \"3\"),\n new Field(\"Int32\", null, \"4\"),\n new Field(\"Int64\", null, \"5\"),\n new Field(\"Uint8\", null, \"6\"),\n new Field(\"Uint16\", null, \"7\"),\n new Field(\"Uint32\", null, \"8\"),\n new Field(\"Uint64\", null, \"9\"),\n new Field(\"Float32\", null, \"10\"),\n new Field(\"Float64\", null, \"11\"),\n new Field(\"String\", null, \"12\"),\n ]);\n\n for (const key in descriptions) {\n let dec = descriptions[key];\n this.set(key, dec)\n }\n }\n }\n\n protected indexAlias;\n\n}\n\n/**\n * 全局的声明仓库,用于网络解码,\n */\nexport let declrepo = new DeclRepo();\n\n","import { ByteArray } from \"../../net\";\nimport { ClassDecl, declrepo, EnumDecl } from \"../schema/schema-decl\";\nimport { ClassType, MapType, ArrayType, EnumType, BasicType, AnyType, Kind } from \"../schema/schema-type\";\n\nexport class ByteDecoder {\n\n public decodeObj(obj: any, reader: ByteArray, desc: ClassDecl) {\n for (let field of desc.Fields) {\n let fname = field.Name;\n let oval = obj[fname];\n if (field.Type instanceof ClassType) {\n obj[fname] = this.parseClass(oval, reader, field.Type, field.Value)\n } else if (field.Type instanceof MapType) {\n obj[fname] = this.parseMap(oval, reader, field.Type, field.Value)\n } else if (field.Type instanceof ArrayType) {\n obj[fname] = this.parseSlice(oval, reader, field.Type)\n } else if (field.Type instanceof EnumType) {\n obj[fname] = this.parseEnum(reader, field.Type)\n } else if (field.Type instanceof BasicType) {\n obj[fname] = this.parseBasic(reader, field.Type)\n } else if (field.Type instanceof AnyType) {\n obj[fname] = this.parseAny(oval, reader, field.Type, field.Value)\n }\n }\n }\n\n protected parseMap(omap: any, reader: ByteArray, typ: MapType, value: string): any {\n let isNil = reader.readByte() !== 1;\n if (isNil) {\n return null;\n }\n\n if (!omap) {\n omap = {};\n }\n\n let length = reader.readByte();\n for (let i = 0; i < length; i++) {\n let mkey: any;\n if (typ.Key instanceof BasicType) {\n mkey = this.parseBasic(reader, typ.Key)\n }\n if (typ.Value instanceof ClassType) {\n omap[mkey] = this.parseClass(omap[mkey], reader, typ.Value, \"\")\n } else if (typ.Value instanceof EnumType) {\n omap[mkey] = this.parseEnum(reader, typ.Value)\n } else if (typ.Value instanceof BasicType) {\n omap[mkey] = this.parseBasic(reader, typ.Value)\n }\n }\n\n return omap;\n }\n\n protected parseSlice(oarr: any, reader: ByteArray, typ: ArrayType): any {\n let length = reader.readInt16();\n if (length ===0) {\n return [];\n }\n oarr = [];// 数组直接覆盖\n for (let i = 0; i < length; i++) {\n if (typ.Elem instanceof ClassType) {\n oarr[i] = this.parseClass(null, reader, typ.Elem, \"\")\n } else if (typ.Elem instanceof EnumType) {\n oarr[i] = this.parseEnum(reader, typ.Elem)\n } else if (typ.Elem instanceof BasicType) {\n oarr[i] = this.parseBasic(reader, typ.Elem)\n }\n }\n\n return oarr;\n\n }\n\n protected parseAny(oval: any, reader: ByteArray, typ: AnyType, value: string) {\n let isNil = reader.readByte() !== 1;\n if (isNil) {\n return null;\n }\n let _typ = reader.readUTF();\n\n let obj = declrepo.newClass(_typ);\n if (!obj) {\n throw (\"decodeMap: class not found: \" + _typ)\n }\n let desc = declrepo.get(_typ);\n if (!desc) {\n throw (\"decodeMap: description not found: \" + _typ)\n }\n this.decodeObj(obj, oval, desc as ClassDecl);\n return obj\n }\n\n protected parseClass(oval: any, reader: ByteArray, typ: ClassType, value: string): any {\n let isNil = reader.readByte() !== 1;\n if (isNil) {\n return null;\n }\n if (!oval) {\n let obj = declrepo.newClass(typ.Decl);\n if (!obj) {\n throw (\"decodeMap: parseClass: class not found: \" + typ.Decl)\n }\n oval = obj;\n }\n\n let desc = declrepo.get(typ.Decl);\n if (!desc) {\n throw (\"decodeMap: parseClass: description not found: \" + typ.Decl)\n }\n\n this.decodeObj(oval, reader, desc as ClassDecl);\n return oval;\n }\n\n protected parseEnum(reader: ByteArray, typ: EnumType): any {\n let desc = declrepo.get(typ.Decl);\n if (!desc) {\n throw (\"decodeMap: parseClass: description not found: \" + typ.Decl)\n }\n let enumdesc = desc as EnumDecl;\n let oval = this.parseKind(reader, enumdesc.Kind);\n return oval;\n }\n\n\n protected parseBasic(reader: ByteArray, typ: BasicType): any {\n return this.parseKind(reader, typ.Kind)\n }\n\n protected parseKind(reader: ByteArray, kind: Kind): any {\n let oval: any;\n switch (kind) {\n case Kind.Invalid:\n break;\n case Kind.Bool:\n oval = reader.readByte() ===1;\n break;\n case Kind.Int8:\n oval = reader.readByte();\n break;\n case Kind.Int16:\n oval = reader.readInt16();\n break;\n case Kind.Int32:\n oval = reader.readInt32();\n break;\n case Kind.Int64:\n oval = reader.readInt32();\n break;\n case Kind.Uint8:\n oval = reader.readUint8();\n break;\n case Kind.Uint16:\n oval = reader.readInt16();\n break;\n case Kind.Uint32:\n oval = reader.readUint32();\n break;\n case Kind.Uint64:\n oval = reader.readUint32();\n break;\n case Kind.Float32:\n oval = reader.readFloat32();\n break;\n case Kind.Float64:\n oval = reader.readFloat64();\n break;\n case Kind.String:\n oval = reader.readUTF();\n break;\n }\n\n return oval\n }\n}\n","import {PushTag} from \"./net-enum\";\nimport {CommandProtocol, CreateProtocol, DeleteProtocol, EventProtocol, PushProtocol, ResponseProtocol, UpdateProtocol} from \"./net-protocol\";\nimport {ByteArray} from \"./ByteArray\";\nimport {datamgr} from \"../database/frame_data\";\nimport {ByteDecoder} from \"../serial/bytecoder/decoder\";\n\nimport {error, errorutil} from \"../utils/ErrorUtil\";\nimport {IConn} from \"./net-iface\";\nimport {netmgr} from \"./net-manager\";\nimport { ClassDecl, declrepo, InterfaceDecl } from \"../serial/schema/schema-decl\";\nimport { FuncType, ClassType } from \"../serial/schema/schema-type\";\n\n\nvar _optHandler: { [key: number]: Function } = {};\n\nfunction registerOptHandler(opt: number, handler: Function) {\n if (_optHandler[opt]) {\n throw (new Error(\"不能注册相同的操作码\"))\n }\n _optHandler[opt] = handler;\n}\n\n\nexport function parseData(mode: number, data: any | ByteArray, route: string = \"\"): [any, error] {\n switch (mode) {\n case 0:\n let jsonstr = data.readUTF()\n return [JSON.parse(jsonstr), null];\n case 1:\n let routeArr = route.split(\"/\")\n let route0 = routeArr[0];\n let decl = declrepo.get(route0);\n if (decl instanceof InterfaceDecl) {\n let route1 = routeArr[1];\n let field = decl.GetField(route1);\n if (!field) {\n return [null, errorutil.create(\"no field \" + route)]\n }\n\n let ftyp = field.Type as FuncType;\n let args1 = ftyp.Args[1];\n if (args1) {\n let classTyp = args1.Type as ClassType;\n if (classTyp) {\n let resultDecl = declrepo.get(classTyp.Decl) as ClassDecl;\n let m = {};\n new ByteDecoder().decodeObj(m, data, resultDecl);\n return [m, null]\n }\n }\n\n } else {\n return [null, errorutil.create(\"no interface decl \" + route0)]\n }\n // new ByteDecoder().decodeObj()\n // return data;\n }\n}\n\nexport function receiveData(conn: IConn, ba: ByteArray, endian: string) {\n\n while (ba.bytesAvailable > 0) {\n let packageLen = ba.readUint16();\n let data = new ByteArray();\n data.endian = endian;\n ba.readBytes(data, 0, packageLen);\n let tag = data.readByte() as PushTag;\n switch (tag) {\n case PushTag.Response: {// response\n let msg = new ResponseProtocol();\n msg.unpack(data, endian);\n\n // todo: 为啥需要设置,应该是不需要的\n // conn.lastSeqResp = msg.seq;\n let caller = conn.seqToCaller[msg.seq];\n if (!caller) {\n console.error(\"response caller not found\", msg.seq)\n return;\n }\n delete conn.seqToCaller[msg.seq];\n\n if (msg.error) {\n console.log(`<<< socket[${this.addr}] protocol[${caller.protocol}] error=${msg.error}`);\n caller.response(null, errorutil.parse(msg.error))\n } else {\n let resp = parseData(msg.serialMode, msg.data, caller.protocol);\n console.log(`<<< socket[${this.addr},${msg.seq}] protocol[${caller.protocol}] resp=`, resp);\n caller.response(resp, null);\n }\n netmgr.dispatch(caller.protocol, caller);\n break;\n }\n case PushTag.Push: {// server push\n let msg = new PushProtocol();\n msg.unpack(data);\n\n let reader = new ByteArray(msg.data);\n reader.endian = this.endian;\n let opt = reader.readByte();\n try {\n let optHandler = _optHandler[opt];\n if (optHandler) {\n optHandler(data, reader, opt, 0, 0)\n }\n } catch (e) {\n console.error(`<<< parse message error: send_seq=${this.lastSeqSend}, resp_seq=${this.lastSeqResp}, srv_seq=${0}, opt=${opt}`, e)\n console.error(e);\n }\n break;\n }\n case PushTag.SyncCreate: {\n\n let msg = new CreateProtocol();\n msg.unpack(data);\n let [obj, err] = parseData(msg.serialMode, msg.data);\n console.log(`<<< socket[${this.addr}] SyncCreate key=${msg.key} obj=${JSON.stringify(obj)}`);\n\n let dataObject = datamgr.createObject(msg.key, obj);\n // @ts-ignore\n let syncHandler = netmgr._syncHandler;\n if (syncHandler) {\n syncHandler.create(msg.key, dataObject);\n }\n\n break;\n }\n case PushTag.SyncUpdate: {\n let msg = new UpdateProtocol();\n msg.unpack(data);\n let obj = parseData(msg.serialMode, msg.data);\n console.log(`<<< socket[${this.addr}] SyncUpdate key=${msg.key} obj=${JSON.stringify(obj)}`);\n datamgr.updateByPath(msg.key, obj);\n // @ts-ignore\n let syncHandler = netmgr._syncHandler;\n if (syncHandler) {\n syncHandler.update(msg.key, datamgr.getObject(msg.key));\n }\n break;\n }\n case PushTag.SyncDelete: {\n let msg = new DeleteProtocol();\n msg.unpack(data);\n\n console.log(`<<< socket[${this.addr}] SyncDelete key=${msg.key}`);\n let dataObject = datamgr.getObject(msg.key);\n datamgr.removeObject(msg.key);\n // @ts-ignore\n let syncHandler = netmgr._syncHandler;\n if (syncHandler) {\n syncHandler.remove(msg.key, dataObject);\n }\n break;\n }\n case PushTag.Event: {\n let msg = new EventProtocol();\n msg.unpack(data);\n let obj = parseData(msg.serialMode, msg.data);\n console.log(`<<< socket[${this.addr}] Event key=${msg.key} obj=${JSON.stringify(obj)}`);\n netmgr.dispatch(msg.key, obj);\n break;\n }\n case PushTag.Command:\n let msg = new CommandProtocol();\n msg.unpack(data);\n let obj = parseData(msg.serialMode, msg.data);\n console.log(`<<< socket[${this.addr}] Event key=${msg.key} obj=${JSON.stringify(obj)}`);\n netmgr.executeCommand(msg.key, obj);\n break;\n default:\n console.log(\"未知的协议: \", data.rawBuffer)\n }\n }\n\n\n}\n","import {error, errorutil, LinkError} from \"../utils/ErrorUtil\";\r\nimport {timer} from \"../timer/frame_timer\";\r\nimport {IConn} from \"./net-iface\";\r\nimport {EventManager} from \"../event/EventManager\";\r\nimport {netmgr} from \"./net-manager\";\r\n\r\nexport class Caller<ARGS = any, RESULT = any> extends EventManager {\r\n\r\n constructor(public protocol: string) {\r\n super();\r\n }\r\n\r\n public newArgs(): ARGS {\r\n return {} as ARGS;\r\n }\r\n\r\n /**\r\n * 获取参数的方法或者直接赋值\r\n * @param val\r\n */\r\n public argsGetter(val: (ctx: Caller<ARGS, RESULT>) => void): this {\r\n this._argsGetter = val;\r\n return this;\r\n }\r\n\r\n public argsCondition(val: (ctx: Caller<ARGS, RESULT>) => error): this {\r\n this._argsCondition = val;\r\n return this;\r\n }\r\n\r\n public setConn(key: string): this {\r\n this._conn = key\r\n return this;\r\n }\r\n\r\n public setTimeout(val: number = 3000): this {\r\n this._timeout = val\r\n return this;\r\n }\r\n\r\n public noValid(): this {\r\n this._noValid = true\r\n return this;\r\n }\r\n\r\n public onSimulate(val: (ctx: Caller<ARGS, RESULT>) => void): this {\r\n this._onSimulate = val;\r\n return this;\r\n }\r\n\r\n /**\r\n * 添加响应返回时的处理函数\r\n * @param val\r\n */\r\n public onResponse(val: (ctx: Caller<ARGS, RESULT>) => void): this {\r\n this._hasResponse = true;\r\n this.on(\"response\", this, (e) => {\r\n let f = e.onParams;\r\n try {\r\n f(this);\r\n } catch (e) {\r\n console.error(`caller onResponse: protocol=${this.protocol} args=${JSON.stringify(this.args)}`)\r\n console.error(e.stack);\r\n }\r\n }, val);\r\n\r\n if (this._seq > 0) {\r\n if (!this.connection.seqToCaller[this._seq]) {\r\n this.connection.seqToCaller[this._seq] = this;\r\n }\r\n\r\n }\r\n\r\n return this;\r\n }\r\n\r\n\r\n send(): this {\r\n let err = this._send();\r\n if (err) {\r\n // 下一帧执行是为了统一的逻辑\r\n // 可避免外部调用需要处理两种情况\r\n timer.once(0, this, () => {\r\n this.response(null, err)\r\n })\r\n }\r\n return this;\r\n }\r\n\r\n /**\r\n * 等待发送的结果\r\n * 如果返回 null,表示主动取消 [cancel]\r\n */\r\n wait(): Promise<this> {\r\n return new Promise((resolve, reject) => {\r\n let succeed = () => {\r\n this.off(\"response\", this, succeed);\r\n resolve(this);\r\n }\r\n this.on(\"response\", this, succeed);\r\n });\r\n }\r\n\r\n // 没办法处理返回错误的情况\r\n // async waitResult(): Promise<RESULT> {\r\n // let caller = await this.wait();\r\n // return caller.result as RESULT;\r\n // }\r\n\r\n protected _send(): LinkError {\r\n if (!this.protocol) {\r\n return errorutil.create(\"protocol not found\");\r\n }\r\n let conn: IConn;\r\n if (!netmgr.isSimulate()) {\r\n conn = this.connection;\r\n if (!conn) {\r\n return errorutil.create(\"connection not found\");\r\n }\r\n if (!conn.connected) {\r\n return errorutil.create(\"connection not connected\", {conn: conn.key});\r\n }\r\n }\r\n\r\n\r\n // todo: 测试时屏蔽,注意要打开\r\n // if (!this._noValid) {\r\n // if (!conn.isValid()) {\r\n // return errorutil.create(\"connection not valid\", {conn: conn.key});\r\n // }\r\n // }\r\n // 超时\r\n if (this._timeout > 0) {\r\n timer.once(this._timeout, this, this.timeoutHandler.bind(this));\r\n }\r\n {\r\n if (this._argsGetter) {\r\n if (this._argsGetter instanceof Function) {\r\n try {\r\n this.args = this._argsGetter(this);\r\n } catch (e) {\r\n console.error(`caller argsGetter: protocol=${this.protocol} args=${JSON.stringify(this.args)}`)\r\n console.error(e.stack);\r\n }\r\n } else {\r\n this.args = this._argsGetter;\r\n }\r\n }\r\n\r\n }\r\n {\r\n if (this._argsCondition) {\r\n try {\r\n let error = this._argsCondition(this);\r\n if (error) {\r\n return error;\r\n }\r\n } catch (e) {\r\n console.error(`caller argsCondition: protocol=${this.protocol} args=${JSON.stringify(this.args)}`)\r\n console.error(e.stack);\r\n }\r\n }\r\n }\r\n\r\n if (netmgr.isSimulate()) {\r\n let self = this;\r\n // 模拟\r\n setTimeout(() => {\r\n if (self._onSimulate) {\r\n try {\r\n self._onSimulate(this);\r\n } catch (e) {\r\n console.error(`caller onSimulate: protocol=${this.protocol} args=${JSON.stringify(this.args)}`)\r\n console.error(e.stack);\r\n }\r\n\r\n }\r\n }, 0);\r\n } else {\r\n conn.send(this);\r\n }\r\n }\r\n\r\n protected get connection(): IConn {\r\n let c;\r\n if (this._conn) {\r\n c = netmgr.getConn(this._conn);\r\n if (!c) {\r\n throw new Error(\"未发现网络连接: \" + this._conn)\r\n }\r\n } else {\r\n c = netmgr.getDefault();\r\n }\r\n return c;\r\n }\r\n\r\n response(data, err: LinkError) {\r\n // 取消后,不再触发 response 事件\r\n this.result = data;\r\n this.error = err;\r\n timer.clearAll(this);\r\n this.dispatch(\"response\");\r\n }\r\n\r\n cancel() {\r\n this.response(null, errorutil.create(\"cancel\", {\"protocol\": this.protocol}))\r\n }\r\n\r\n dispose() {\r\n this.error = null;\r\n this.result = null;\r\n this.args = null;\r\n this.protocol = null;\r\n this.offAll();\r\n super.dispose();\r\n }\r\n\r\n protected timeoutHandler() {\r\n this.response(null, errorutil.create(\"timeout\", {\"protocol\": this.protocol}))\r\n }\r\n\r\n // protected callRespHandler() {\r\n // if (this._onResponse) {\r\n // try {\r\n // this.args = this._onResponse(this);\r\n // } catch (e) {\r\n // let err = errorutil.create(\"Caller send on onResponse\", {\r\n // \"protocol\": this.protocol,\r\n // \"error\": e.message\r\n // });\r\n // console.error(err.toString())\r\n // console.error(e.stack)\r\n // }\r\n // }\r\n // }\r\n\r\n\r\n get hasResponse(): boolean {\r\n return this._hasResponse;\r\n }\r\n\r\n /**\r\n * 连接的名字\r\n */\r\n protected _conn: string;\r\n /**\r\n * 无需验证\r\n */\r\n protected _noValid: boolean = false;\r\n protected _onSimulate: Function;\r\n\r\n protected _argsGetter: Function | any;\r\n protected _argsCondition: Function;\r\n private _hasResponse: boolean = false;\r\n protected _seq: number = 0;\r\n\r\n /**\r\n * 消息额参数\r\n */\r\n args: ARGS;\r\n result: RESULT;\r\n error: LinkError;\r\n\r\n get timeout(): number {\r\n return this._timeout;\r\n }\r\n\r\n protected _timeout: number = 0;\r\n}\r\n","/**\n *\n */\nimport {ConnectState, SerializeMode, ValidState, WebSocketType} from \"./net-enum\";\nimport {receiveData} from \"./net-receive\";\nimport {ByteArray, Endian} from \"./ByteArray\";\nimport {error, errorutil} from \"../utils/ErrorUtil\";\nimport {EventManager} from \"../event/EventManager\";\nimport {Caller} from \"./Caller\";\nimport {RequestProtocol} from \"./net-protocol\";\nimport { timer } from \"../timer/frame_timer\";\n\n\n/**\n * egret.WebSocket 类启用代码以建立传输控制协议 (TCP) 套接字连接,用于发送和接收字符串或二进制数据。\n * 要使用 egret.WebSocket 类的方法,请先使用构造函数 new egret.WebSocket 创建一个 egret.WebSocket 对象。\n * 套接字以异步方式传输和接收数据。\n */\nexport class FrameWebSocket {\n /**\n * 以字符串格式发送和接收数据\n */\n public static TYPE_STRING: string = \"webSocketTypeString\";\n\n /**\n * 以二进制格式发送和接收数据\n */\n public static TYPE_BINARY: string = \"webSocketTypeBinary\";\n\n private _writeMessage: string = \"\";\n private _readMessage: string = \"\";\n private _connected: boolean = false;\n private _connecting: boolean = false;\n\n private _socket: WebSocket;\n private _url: string = \"\";\n\n\n /**\n * 出现错误时的错误信息\n */\n public error: error;\n\n /**\n * 根据提供的url连接\n * @param url 全地址。如ws://echo.websocket.org:80\n */\n constructor(url: string = \"\") {\n if (!window[\"WebSocket\"]) {\n console.log(\"HTML5WebSocket.constructor: WebSocket is null\");\n }\n\n this._connected = false;\n this._writeMessage = \"\";\n this._readMessage = \"\";\n this._url = url;\n }\n\n public onOpen: (socket: FrameWebSocket) => void;\n public onClose: (socket: FrameWebSocket) => void;\n public onMessage: (socket: FrameWebSocket) => void;\n public onError: (socket: FrameWebSocket) => void;\n\n private callOnOpen() {\n if (this.onOpen) {\n this.onOpen(this);\n }\n }\n\n private callOnClose() {\n if (this.onClose) {\n this.onClose(this);\n }\n }\n\n private callOnMessage() {\n if (this.onMessage) {\n this.onMessage(this);\n }\n }\n\n private callOnError() {\n if (this.onError) {\n this.onError(this);\n }\n }\n\n\n /**\n * 根据提供的url连接\n * @param url 全地址。如ws://echo.websocket.org:80\n */\n public connect(url: string): void {\n this._url = url;\n if (!this._connecting && !this._connected) {\n let socket = new WebSocket(this._url);\n\n this._connecting = true;\n this._socket = socket;\n socket.binaryType = \"arraybuffer\";\n socket.onopen = function () {\n this._connected = true;\n this._connecting = false;\n this.callOnOpen();\n }.bind(this);\n socket.onclose = function (e: CloseEvent) {\n this._connected = false;\n this.callOnClose();\n }.bind(this);\n socket.onerror = function (e: Event) {\n if (this._connecting) {\n this._connecting = false;\n }\n this.callOnError();\n }.bind(this);\n socket.onmessage = function (e: MessageEvent) {\n let message: any = e;\n if (e.data) {\n message = e.data;\n }\n\n if (typeof message === \"string\") {\n this._readMessage += message;\n } else {\n this._readByte._writeUint8Array(new Uint8Array(message));\n }\n this.callOnMessage();\n }.bind(this);\n }\n }\n\n /**\n * 关闭套接字\n */\n public close(): void {\n if (this._connected) {\n this._socket.close();\n }\n }\n\n\n /**\n * 对套接字输出缓冲区中积累的所有数据进行刷新\n */\n public flush(): void {\n if (!this._connected) {\n console.log(\"WebSocket.flush: connected is false\");\n return;\n }\n if (this._writeMessage) {\n this._socket.send(this._writeMessage);\n this._writeMessage = \"\";\n }\n if (this._bytesWrite) {\n this._socket.send(this._writeByte.buffer);\n this._bytesWrite = false;\n this._writeByte.clear();\n }\n this._isReadySend = false;\n }\n\n private _isReadySend: boolean = false;\n\n\n /**\n * 将字符串数据写入套接字\n * @param message 要写入套接字的字符串\n */\n public writeUTF(message: string): void {\n if (!this._connected) {\n console.log(\"WebSocket.writeUTF: connected is false\");\n return;\n }\n if (this._type === WebSocketType.BINARY) {\n this._bytesWrite = true;\n this._writeByte.writeUTF(message);\n } else {\n this._writeMessage += message;\n }\n\n this.flush();\n // return;\n // if (this._isReadySend) {\n // return;\n // }\n // this._isReadySend = true;\n // egret.callLater(this.flush, this);\n }\n\n /**\n * 从套接字读取一个 UTF-8 字符串\n * @returns {string}\n */\n public readUTF(): string {\n let message: string;\n if (this._type === WebSocketType.BINARY) {\n this._readByte.position = 0;\n message = this._readByte.readUTF();\n this._readByte.clear();\n } else {\n message = this._readMessage;\n this._readMessage = \"\";\n }\n return message;\n }\n\n private _readByte: ByteArray;\n private _writeByte: ByteArray;\n private _bytesWrite: boolean = false;\n\n /**\n * 从指定的字节数组写入一系列字节。写入操作从 offset 指定的位置开始。\n * 如果省略了 length 参数,则默认长度 0 将导致该方法从 offset 开始写入整个缓冲区。\n * 如果还省略了 offset 参数,则写入整个缓冲区。\n * @param bytes 要从中读取数据的 ByteArray 对象\n * @param offset ByteArray 对象中从零开始的偏移量,应由此开始执行数据写入\n * @param length 要写入的字节数。默认值 0 导致从 offset 参数指定的值开始写入整个缓冲区\n\n */\n public writeBytes(bytes: ByteArray, offset: number = 0, length: number = 0): void {\n if (!this._connected) {\n console.log(\"WebSocket.writeBytes: connected is false\");\n return;\n }\n if (!this._writeByte) {\n console.log(\"WebSocket.writeBytes: writeByte is false\");\n return;\n }\n this._bytesWrite = true;\n this._writeByte.writeBytes(bytes, offset, length);\n this.flush();\n }\n\n /**\n * 从套接字读取 length 参数指定的数据字节数。从 offset 所表示的位置开始,将这些字节读入指定的字节数组\n * @param bytes 要将数据读入的 ByteArray 对象\n * @param offset 数据读取的偏移量应从该字节数组中开始\n * @param length 要读取的字节数。默认值 0 导致读取所有可用的数据\n */\n public readBytes(bytes: ByteArray, offset: number = 0, length: number = 0): void {\n if (!this._readByte) {\n console.log(\"WebSocket.readBytes: readByte is false\");\n return;\n }\n this._readByte.position = 0;\n this._readByte.readBytes(bytes, offset, length);\n this._readByte.clear();\n }\n\n /**\n * 表示此 Socket 对象目前是否已连接\n */\n public get connected(): boolean {\n return this._connected;\n }\n\n /**\n * @private\n */\n private _type: WebSocketType = WebSocketType.STRING;\n\n /**\n * 发送和接收数据的格式,默认是字符串格式\n */\n public get type(): WebSocketType {\n return this._type;\n }\n\n public set type(value: WebSocketType) {\n this._type = value;\n if (value === WebSocketType.BINARY && !this._writeByte) {\n this._readByte = new ByteArray();\n this._writeByte = new ByteArray();\n }\n }\n\n\n public static URI: \"ws://\" | \"wss://\" = \"ws://\";\n}\n\n\nexport class NetSocket extends EventManager {\n static EVENT_CONNECTED = \"connected\";\n static EVENT_CLOSED = \"closed\";\n static EVENT_TIMEOUT = \"timeout\";\n /**\n * 连接校验失败,并超过重试次数\n */\n static EVENT_VALID_FAIL = \"valid_fail\";\n /**\n * 连接校验成功\n */\n static EVENT_VALID = \"valid\";\n //\n public key: string = \"\";\n //\n protected reconnectMax: number = 10;\n // 重连次数\n protected reconnectCount: number = 0;\n // 重连间隔\n protected reconnectSpace: number = 1000;\n // 地址\n public addr: string = \"\";\n // 连接状态\n public state: ConnectState = ConnectState.Closed;\n // 是否已经验证\n public valid: ValidState = ValidState.Unknown;\n // 重连连接的时间\n private lastReconnectTime: number = 0;\n // 发送的最后序号\n public lastSeqSend: number = 0;\n // 响应的最后序号\n public lastSeqResp: number = 0;\n //\n public seqToCaller: { [key: string]: Caller } = {};\n //\n public endian: string = Endian.LITTLE_ENDIAN\n //\n protected _socket: FrameWebSocket;\n //\n public token: string = \"\";\n //\n serialMode: SerializeMode = SerializeMode.JSON;\n\n //\n constructor() {\n super();\n\n this._socket = new FrameWebSocket();\n this._socket.type = WebSocketType.BINARY;\n this._socket.onMessage = this._onMessage.bind(this);\n this._socket.onOpen = this._onOpen.bind(this);\n this._socket.onClose = this._onClose.bind(this);\n this._socket.onError = this._onError.bind(this);\n }\n\n get connected(): boolean {\n return this.state === ConnectState.Connected;\n }\n\n isValid(): boolean {\n return this.valid == ValidState.Valid;\n }\n\n //\n update() {\n if (this.addr === \"\") {\n return;\n }\n switch (this.state) {\n case ConnectState.Closed: {\n if (Date.now() - this.lastReconnectTime >= this.getReconnectSpace()) {\n this.reconnect();\n }\n break;\n }\n case ConnectState.Connecting:\n break;\n case ConnectState.Connected:\n this.updateValid()\n break;\n }\n }\n\n protected createVerifyConnectionCaller(): Caller {\n return new Caller(\"VerifyConnection\")\n .argsGetter(() => {\n return {Token: this.token}\n })\n .noValid()\n .onResponse((caller) => {\n if (caller.error) {\n // 如果验证错误,延时一秒重试\n if (this._validCount < this._validMax) {\n timer.once(1000, this, () => {\n this.valid = ValidState.Unknown\n })\n } else {\n // 验证超过最大次数,清空令牌,重新登陆\n this.token = \"\";\n this.dispatch(NetSocket.EVENT_VALID_FAIL);\n }\n } else {\n // 验证成功\n this.valid = ValidState.Valid;\n timer.loop(40 * 1000, this, () => {\n this.createHeartBeatCaller().send();\n })\n this.createHeartBeatCaller().send();\n this.dispatch(NetSocket.EVENT_VALID);\n }\n })\n }\n\n protected createHeartBeatCaller(): Caller {\n return new Caller(\"HeartBeat\")\n .argsGetter(() => {\n return {}\n })\n }\n\n protected updateValid() {\n if (this.token === \"\") {\n this.valid = ValidState.Unknown;\n return\n }\n switch (this.valid) {\n case ValidState.Unknown:\n this.valid = ValidState.Validing\n if (this._validCaller) {\n // this._validCaller.dispose();\n this._validCaller = null;\n }\n this._validCount++;\n let caller = this.createVerifyConnectionCaller();\n this._validCaller = caller;\n caller.send();\n break;\n case ValidState.Valid:\n if (this._validCaller) {\n this._validCaller.dispose()\n this._validCaller = null;\n }\n break;\n }\n }\n\n protected _validCaller: Caller;\n // 为避免一直重试,设定最大重试次数\n protected _validMax: number = 10;\n protected _validCount: number = 0;\n\n //\n public getReconnectSpace(): number {\n if (this.reconnectCount > 10) {\n return this.reconnectSpace * 10;\n }\n if (this.reconnectCount > 3) {\n return this.reconnectSpace * 3;\n }\n return this.reconnectSpace\n }\n\n reconnect() {\n this.reconnectCount++;\n this.connect()\n }\n\n connect(): void {\n this.state = ConnectState.Connecting;\n console.log(`socket[${this.key}] connecting`);\n this._socket.connect(this.addr);\n }\n\n\n close() {\n console.log(`socket[${this.key}] closing`);\n this._socket.close();\n }\n\n waitConnect(): Promise<boolean> {\n return new Promise((resolve, reject) => {\n if (this.connected) {\n resolve(true);\n return;\n }\n let succeed = () => {\n this.off(NetSocket.EVENT_CONNECTED, this, succeed);\n this.off(NetSocket.EVENT_CLOSED, this, failed)\n resolve(true);\n }\n let failed = () => {\n this.off(NetSocket.EVENT_CONNECTED, this, succeed);\n this.off(NetSocket.EVENT_CLOSED, this, failed)\n resolve(false);\n }\n this.on(NetSocket.EVENT_CONNECTED, this, succeed);\n this.on(NetSocket.EVENT_CLOSED, this, failed)\n });\n }\n\n waitValid(): Promise<boolean> {\n return new Promise((resolve, reject) => {\n if (this.valid == ValidState.Valid) {\n resolve(true);\n return;\n }\n let succeed = () => {\n this.off(NetSocket.EVENT_VALID, this, succeed);\n this.off(NetSocket.EVENT_VALID_FAIL, this, failed)\n resolve(true);\n }\n let failed = () => {\n this.off(NetSocket.EVENT_VALID, this, succeed);\n this.off(NetSocket.EVENT_VALID_FAIL, this, failed)\n resolve(false);\n }\n this.on(NetSocket.EVENT_VALID, this, succeed);\n this.on(NetSocket.EVENT_VALID_FAIL, this, failed)\n });\n }\n\n /**\n *\n * @param caller\n */\n send(caller: Caller): Caller {\n if (this.state !== ConnectState.Connected) {\n setTimeout(() => {\n caller.response(\"\", errorutil.create(\"not connect\"))\n })\n return caller;\n }\n\n let obj = new RequestProtocol();\n obj.id = caller.protocol;\n obj.seq = ++this.lastSeqSend;\n obj.serialMode = this.serialMode;\n obj.token = this.token\n obj.data = caller.args;\n\n let writer = new ByteArray();\n writer.endian = this.endian;\n obj.pack(writer)\n\n // @ts-ignore\n caller._seq = obj.seq;\n if (caller.hasResponse) {\n this.seqToCaller[obj.seq] = caller;\n }\n\n console.log(`>>> socket[${this.key},${obj.seq}] protocol[${caller.protocol}] args[${JSON.stringify(caller.args)}]`);\n this._socket.writeBytes(writer);\n return caller;\n }\n\n protected _onOpen(e: any): void {\n console.log(`socket[${this.key}] connected`);\n this.state = ConnectState.Connected;\n this.reconnectCount = 0;\n\n this.dispatch(NetSocket.EVENT_CONNECTED);\n }\n\n // 流量优化前-2.5-2.8kb/s\n // 优化后0.33kb/s\n protected _流量: number = 0;\n\n //\n public reset流量(): void {\n this._流量 = 0;\n this._流量时间 = Date.now();\n }\n\n protected _流量时间: number = 0;\n protected _count = 0;\n\n protected _onMessage(): void {\n // console.log(`socket[${this.addr}] received`);\n let ba = new ByteArray();\n ba.endian = this.endian;\n //读取数据\n this._socket.readBytes(ba);\n\n // if (this._流量时间 === 0) {\n // this._流量时间 = Date.now();\n // }\n // this._流量 += ba.length;\n // let per = this._流量 / 1024 / ((Date.now() - this._流量时间) / 1000);\n // console.log(`${Math.floor(this._流量 / 1024)}KB, 每秒=${per.toFixed(2)}KB/s`);\n receiveData.bind(this)(this, ba, this.endian);\n }\n\n //\n protected _onClose(e: any): void {\n console.log(`socket[${this.key}] closed`);\n timer.clearAll(this);\n this.state = ConnectState.Closed;\n this.valid = ValidState.Unknown;\n this.lastReconnectTime = Date.now();\n for (let key in this.seqToCaller) {\n let caller = this.seqToCaller[key];\n caller.response(null, errorutil.create(\"connect closed\"))\n }\n this.seqToCaller = {};\n\n this.dispatch(NetSocket.EVENT_CLOSED);\n }\n\n //\n protected _onError(e: any): void {\n console.log(`socket[${this.key}] error: `, e);\n this.state = ConnectState.Closed;\n this.valid = ValidState.Unknown;\n this.lastReconnectTime = Date.now();\n }\n}\n","import {HttpMethod, HttpResponseType, ValidState} from \"./net-enum\";\nimport {maputil} from \"../utils/MapUtil\";\nimport {error, errorutil} from \"../utils/ErrorUtil\";\nimport {Caller} from \"./Caller\";\nimport { netmgr } from \"./net-manager\";\n\nexport class HttpRequest {\n\n public constructor() {\n }\n\n /**\n * @private\n */\n private _xhr: XMLHttpRequest;\n\n /**\n *\n */\n public timeout: number = 0;\n\n /**\n *\n */\n public onError: (request: HttpRequest) => void;\n /**\n *\n */\n public onComplete: (request: HttpRequest) => void;\n\n /**\n *\n */\n public onProgress: (request: HttpRequest, event: any) => void;\n\n /**\n * 出现错误时的错误信息\n */\n public error: error;\n\n\n /**\n * @private\n * 本次请求返回的数据,数据类型根据responseType设置的值确定。\n */\n\n public get response(): any {\n if (!this._xhr) {\n return null;\n }\n\n if (this._xhr.response !== undefined) {\n return this._xhr.response;\n }\n\n if (this._responseType === \"text\") {\n return this._xhr.responseText;\n }\n\n if (this._responseType === \"arraybuffer\" && /msie 9.0/i.test(navigator.userAgent)) {\n let w: any = window;\n return w.convertResponseBodyToText(this._xhr[\"responseBody\"]);\n }\n\n if (this._responseType === \"document\") {\n return this._xhr.responseXML;\n }\n\n /*if (this._xhr.responseXML) {\n return this._xhr.responseXML;\n }\n if (this._xhr.responseText !== undefined) {\n return this._xhr.responseText;\n }*/\n return null;\n }\n\n /**\n * @private\n */\n private _responseType: HttpResponseType;\n\n /**\n * @private\n * 设置返回的数据格式,请使用 HttpResponseType 里定义的枚举值。设置非法的值或不设置,都将使用HttpResponseType.TEXT。\n */\n public get responseType(): HttpResponseType {\n return this._responseType;\n }\n\n public set responseType(value: HttpResponseType) {\n this._responseType = value;\n }\n\n /**\n * @private\n */\n private _withCredentials: boolean;\n\n /**\n * @private\n * 表明在进行跨站(cross-site)的访问控制(Access-Control)请求时,是否使用认证信息(例如cookie或授权的header)。 默认为 false。(这个标志不会影响同站的请求)\n */\n public get withCredentials(): boolean {\n return this._withCredentials;\n }\n\n public set withCredentials(value: boolean) {\n this._withCredentials = value;\n }\n\n /**\n * @private\n */\n private _url: string = \"\";\n private _method: HttpMethod;\n\n /**\n * @private\n *\n * @returns\n */\n private getXHR(): any {\n if (window[\"XMLHttpRequest\"]) {\n return new window[\"XMLHttpRequest\"]();\n } else {\n // return new ActiveXObject(\"MSXML2.XMLHTTP\");\n }\n }\n\n /**\n * @private\n * 初始化一个请求.注意,若在已经发出请求的对象上调用此方法,相当于立即调用abort().\n * @param url 该请求所要访问的URL该请求所要访问的URL\n * @param method 请求所使用的HTTP方法, 请使用 HttpMethod 定义的枚举值.\n */\n public open(url: string, method: HttpMethod = HttpMethod.GET): void {\n this._url = url;\n this._method = method;\n if (this._xhr) {\n this._xhr.abort();\n this._xhr = null;\n }\n let xhr = this.getXHR();//new XMLHttpRequest();\n if (window[\"XMLHttpRequest\"]) {\n xhr.addEventListener(\"load\", this.onload.bind(this));\n xhr.addEventListener(\"error\", this.onerror.bind(this));\n } else {\n xhr.onreadystatechange = this.onReadyStateChange.bind(this);\n }\n xhr.onprogress = this.updateProgress.bind(this);\n xhr.ontimeout = this.onTimeout.bind(this)\n xhr.open(this._method, this._url, true);\n this._xhr = xhr;\n }\n\n /**\n * @private\n * 发送请求.\n * @param data 需要发送的数据\n */\n public send(data?: any): void {\n if (this._responseType !== null) {\n this._xhr.responseType = this._responseType;\n }\n if (this._withCredentials !== null) {\n this._xhr.withCredentials = this._withCredentials;\n }\n if (this.headerObj) {\n for (let key in this.headerObj) {\n this._xhr.setRequestHeader(key, this.headerObj[key]);\n }\n }\n this._xhr.timeout = this.timeout;\n this._xhr.send(data);\n }\n\n /**\n * @private\n * 如果请求已经被发送,则立刻中止请求.\n */\n public abort(): void {\n if (this._xhr) {\n this._xhr.abort();\n }\n }\n\n /**\n * @private\n * 返回所有响应头信息(响应头名和值), 如果响应头还没接受,则返回\"\".\n */\n public getAllResponseHeaders(): string {\n if (!this._xhr) {\n return null;\n }\n let result = this._xhr.getAllResponseHeaders();\n return result ? result : \"\";\n }\n\n private headerObj: any;\n\n /**\n * @private\n * 给指定的HTTP请求头赋值.在这之前,您必须确认已经调用 open() 方法打开了一个url.\n * @param header 将要被赋值的请求头名称.\n * @param value 给指定的请求头赋的值.\n */\n public setRequestHeader(header: string, value: string): void {\n if (!this.headerObj) {\n this.headerObj = {};\n }\n this.headerObj[header] = value;\n }\n\n /**\n * @private\n * 返回指定的响应头的值, 如果响应头还没被接受,或该响应头不存在,则返回\"\".\n * @param header 要返回的响应头名称\n */\n public getResponseHeader(header: string): string {\n if (!this._xhr) {\n return null;\n }\n let result = this._xhr.getResponseHeader(header);\n return result ? result : \"\";\n }\n\n /**\n * @private\n */\n private onTimeout(): void {\n let self = this;\n window.setTimeout(function (): void {\n self.callOnError(errorutil.create(\"timeout\"));\n })\n }\n\n private callOnError(error: error) {\n this.error = error;\n if (this.onError) {\n this.onError(this);\n }\n }\n\n private callOnProgress(event) {\n if (this.onProgress) {\n this.onProgress(this, event);\n }\n }\n\n private callOnComplete() {\n if (this.onComplete) {\n this.onComplete(this);\n }\n }\n\n /**\n * @private\n */\n private onReadyStateChange(): void {\n let xhr = this._xhr;\n if (xhr.readyState === 4) {// 4 = \"loaded\"\n let ioError = (xhr.status >= 400 || xhr.status === 0);\n let url = this._url;\n let self = this;\n window.setTimeout(function (): void {\n if (ioError) {//请求错误\n self.callOnError(errorutil.create(\"io onReadyStateChange\"))\n } else {\n self.callOnComplete();\n }\n }, 0)\n\n }\n }\n\n /**\n * @private\n */\n private updateProgress(event): void {\n if (event.lengthComputable) {\n this.callOnProgress(event)\n }\n }\n\n\n /**\n * @private\n */\n private onload(): void {\n let self = this;\n let xhr = this._xhr;\n let url = this._url;\n let ioError = (xhr.status >= 400);\n window.setTimeout(function (): void {\n if (ioError) {//请求错误\n self.callOnError(errorutil.create(\"io onload\"))\n } else {\n self.callOnComplete();\n }\n }, 0);\n }\n\n /**\n * @private\n */\n private onerror(): void {\n let url = this._url;\n let self = this;\n window.setTimeout(function (): void {\n self.callOnError(errorutil.create(\"io onerror\"))\n }, 0);\n }\n}\n\nexport class NetHttp {\n /**\n * 地址\n */\n public addr: string = \"\";\n //\n public key: string = \"\";\n //\n public token: string = \"\";\n\n lastSeqResp: number = 0;\n lastSeqSend: number = 0;\n seqToCaller: any = {};\n\n public valid: ValidState = ValidState.Unknown;\n\n constructor() {\n }\n\n isValid(): boolean {\n return this.valid == ValidState.Valid;\n }\n\n send(caller: Caller) {\n let message = caller.protocol;\n let args = caller.args\n\n let request = new HttpRequest();\n request.responseType = HttpResponseType.TEXT;\n request.timeout = caller.timeout;\n //设置为 POST 请求\n let lastaddr = `${this.addr}/${message}`\n request.open(lastaddr, HttpMethod.POST);\n request.setRequestHeader(\"Content-Type\", \"application/x-www-form-urlencoded\");\n if (this.token) {\n request.setRequestHeader(\"Authorization\", this.token);\n }\n console.log(`>>> http[${this.key}-${message}] args[${JSON.stringify(args)}]`);\n\n let params = [];\n for (let key in args) {\n params.push(`${key}=${encodeURIComponent(args[key])}`)\n }\n\n request.onComplete = (request: HttpRequest) => {\n if (request.response == \"\") {\n console.log(`$<<< http[${this.key}-${message}] data=null`);\n caller.response(null, null);\n return;\n }\n let response = JSON.parse(request.response);\n let err = maputil.string(response, \"error\", \"\");\n if (err) {\n console.log(`$<<< http[${this.key}-${message}] err=${err}`);\n caller.response(null, errorutil.create(err))\n\n } else {\n let result = maputil.map(response, \"result\");\n console.log(`$<<< http[${this.key}-${message}] result=${JSON.stringify(result)}`);\n caller.response(result, null);\n }\n\n netmgr.dispatch(caller.protocol, caller);\n };\n request.onError = (request: HttpRequest) => {\n console.log(`$=== http[${this.key}] err=${request.error}`);\n caller.response(null, errorutil.create(request.error.toString(), {addr: this.addr}))\n }\n\n request.send(params.join(\"&\"));\n return caller;\n }\n\n\n //\n public update() {\n\n }\n\n public get connected(): boolean {\n return true;\n }\n\n\n}\n","import {SerializeMode} from \"./net-enum\";\nimport {NetSocket} from \"./net-socket\";\nimport {NetHttp} from \"./net-http\";\nimport {EventManager} from \"../event/EventManager\";\nimport {IConn} from \"./net-iface\";\nimport {Caller} from \"./Caller\";\n\nexport class SyncHandler {\n create: (key: string, obj: any) => void;\n update: (key: string, obj: any) => void;\n remove: (key: string, obj: any) => void;\n}\n\nexport class NetManager extends EventManager {\n init() {\n setInterval(() => {\n for (let key in this.conns) {\n let conn = this.conns[key];\n conn.update();\n }\n }, 100)\n }\n\n /**\n * 创建一个socket链接\n * 可通过SendMessageCtrl.SetConn指定\n * @param key\n * @param addr\n */\n createSocket(key: string, addr: string): IConn {\n let conn = new NetSocket();\n conn.key = key;\n conn.addr = addr;\n this.conns[key] = conn;\n return conn;\n }\n\n /**\n * 创建一个http链接\n * 可通过SendMessageCtrl.SetConn指定\n * @param key\n * @param addr\n */\n createHttp(key: string, addr: string): IConn {\n let conn = new NetHttp();\n conn.key = key;\n conn.addr = addr;\n this.conns[key] = conn;\n return conn;\n }\n\n\n /**\n * 设置默认的链接\n * ctrlz.SendMessageAction默认使用此链接\n * 一个游戏可能包括多个链接:主socket,战斗socket,聊天socket,功能http\n * @param key\n */\n setDefault(key: string) {\n this.defaultKey = key;\n }\n\n /**\n * 获取链接\n * @param key\n */\n getConn(key: string): IConn {\n return this.conns[key];\n }\n\n /**\n * 获取默认的链接\n */\n getDefault(): IConn {\n if (this.defaultKey === \"\") {\n console.error(\"netmgr: default conn key not set\")\n return null;\n }\n return this.conns[this.defaultKey]\n }\n\n /**\n * 注册Caller的创建函数\n * 通常在打开界面的时候注册\n * ```\n * netmgr.register(this.uuid, rg_opt.Http.S数据表创建, ()=>{\n * return new Caller(rg_opt.Http.S数据表读取)\n * .argsGetter((caller?) => {\n * return null;\n * })\n * .argsCondition((caller) => {\n * return null;\n * })\n * .onResponse((caller) => {\n *\n * })\n * })\n * ```\n * @param group\n * @param id\n * @param creator\n */\n register(group: string, id: string, creator: Function) {\n if (this.getCallerCreator(group, id)) {\n throw new Error(\"registerCallerCreator: 存在相同编号的creator: \" + id)\n }\n this._callerCreator.push([group, id, creator])\n }\n\n /**\n * 如果有全局调用的需求,可以设置group为 \"global\"\n * @param id\n * @param creator\n */\n registerGlobal(id: string, creator: Function) {\n this.register(\"global\", id, creator)\n }\n\n /**\n * 获取调用者\n * @param group\n * @param id\n */\n getCaller(group: string, id: string): Caller {\n let creator = this.getCallerCreator(group, id);\n if (creator) {\n return creator();\n }\n return null;\n }\n\n\n getCallerGlobal(id: string): Caller {\n return this.getCaller(\"global\", id)\n }\n\n\n protected getCallerCreator(group: string, id: string) {\n for (let i = this._callerCreator.length - 1; i >= 0; i--) {\n let trigger = this._callerCreator[i];\n if (trigger[0] == group && trigger[1] == id) {\n return trigger[2];\n }\n }\n\n return null;\n }\n\n removeGroup(group: string) {\n let news = [];\n for (let i = this._callerCreator.length - 1; i >= 0; i--) {\n let trigger = this._callerCreator[i];\n if (trigger[0] == group) {\n continue;\n }\n news.push(trigger);\n }\n\n this._callerCreator = news;\n }\n\n removeGroupGlobal() {\n this.removeGroup(\"global\")\n }\n\n removeAll() {\n this._callerCreator = [];\n }\n\n // 优先处理的命令\n registerCommandPriority(handler: (cmd, args: any) => void) {\n this._cmdPriority = handler;\n }\n\n registerCommand(cmd: string, handler: (args: any) => void) {\n if (this._cmdHandlers[cmd]) {\n throw (new Error(\"不能注册相同的命令\"))\n }\n this._cmdHandlers[cmd] = handler;\n }\n\n executeCommand(key: string, args: any) {\n let cmdPriority = this._cmdPriority;\n if (cmdPriority) {\n cmdPriority(key, args);\n }\n let cmd = this._cmdHandlers[key];\n if (!cmd) {\n console.error(`command not found: ` + cmd);\n } else {\n cmd(args);\n }\n }\n\n registerSyncHandler(handler: SyncHandler) {\n this._syncHandler = handler;\n }\n\n useSimulate() {\n this._simulate = true;\n }\n\n isSimulate(): boolean {\n return this._simulate;\n }\n\n protected _syncHandler: SyncHandler;\n protected _cmdHandlers: { [key: string]: (args: any) => void } = {};\n protected _cmdPriority: Function;\n protected _callerCreator = [];\n protected _simulate = false;\n conns: { [key: string]: IConn } = {};\n defaultKey: string = \"\";\n serialMode: SerializeMode = SerializeMode.JSON;\n}\n\nexport var netmgr = new NetManager();\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","import {EventManager} from \"../event/EventManager\";\r\nimport {Trigger} from \"./Trigger\";\r\nimport {Node} from \"cc\";\r\n\r\nexport class TriggerManager extends EventManager {\r\n triggers: Trigger[] = [];\r\n\r\n constructor() {\r\n super();\r\n }\r\n\r\n // execute(group: string, ident, args?: any) {\r\n // this.dispatch(\"trigger_execute\", {group: group, ident: ident, args: args})\r\n // }\r\n\r\n\r\n enable(group: string, ident: any) {\r\n let trigger = this.getById(group, ident);\r\n trigger.enable()\r\n }\r\n\r\n disable(group: string, ident: any) {\r\n let trigger = this.getById(group, ident);\r\n trigger.disable()\r\n }\r\n\r\n remove(group: string, ident: any) {\r\n let trigger = this.getById(group, ident);\r\n trigger.destroy();\r\n this.triggers = this.triggers.filter(item => !(item.ident == ident && item.group == group))\r\n }\r\n\r\n removeTrigger(trigger: Trigger) {\r\n trigger.destroy();\r\n this.triggers = this.triggers.filter(item => !(item == trigger))\r\n }\r\n\r\n removeGroup(name: string) {\r\n let news = [];\r\n for (let i = this.triggers.length - 1; i >= 0; i--) {\r\n let trigger = this.triggers[i];\r\n if (trigger.group == name) {\r\n trigger.destroy();\r\n continue;\r\n }\r\n\r\n news.push(trigger);\r\n }\r\n\r\n this.triggers = news;\r\n }\r\n\r\n removeAll() {\r\n for (const trigger of this.triggers) {\r\n trigger.destroy();\r\n }\r\n this.triggers = [];\r\n }\r\n\r\n /**\r\n * 当节点[node]销毁时,移除触发器组[destroyGroup]\r\n * @param node\r\n * @param destroyGroup\r\n */\r\n removeOnNodeDestroyed(node: Node, destroyGroup: string) {\r\n // node销毁时会移除监听\r\n node.on(Node.EventType.NODE_DESTROYED, function () {\r\n this.removeGroup(destroyGroup);\r\n }.bind(this))\r\n }\r\n\r\n register(trigger: Trigger) {\r\n if (this.triggers.indexOf(trigger) != -1) {\r\n return;\r\n }\r\n this.triggers.push(trigger);\r\n }\r\n\r\n\r\n getById(group: string, ident: any): Trigger {\r\n if (!ident) {\r\n return;\r\n }\r\n for (const trigger of this.triggers) {\r\n if (trigger.group == group && trigger.ident == ident) {\r\n return trigger;\r\n }\r\n }\r\n return null;\r\n }\r\n}\r\n\r\nexport const triggermgr = new TriggerManager();","import {timer} from \"../timer/frame_timer\";\nimport {ITriggerEvent} from \"./iface\";\nimport {Scheduler} from \"cc\";\n\n// export function getEvent(host: IHost, key: string): ITrigger {\n// let id = this.convertkey(key);\n// let list = getHostEvents(host);\n// return list[id];\n// }\n//\n// export function getHostEvents(host: IHost): ITrigger[] {\n// let events = host[\"$_events\"];\n// if (!events) {\n// events = {};\n// host[\"$_events\"] = events;\n// }\n//\n// return events;\n// }\n\n\n/**\n * 触发器\n */\nexport class TriggerEvent implements ITriggerEvent {\n id?: string;\n uuid?: string;\n\n protected _enable: boolean = false;\n protected _callback: Function;\n protected _args: any | Function;\n protected _ident: string = \"\";\n protected _condition: Function;\n private _isNextFrame: boolean = false;\n\n constructor() {\n Scheduler.enableForTarget(this);\n }\n\n reset() {\n return\n }\n\n setCondition(val: (event: this) => boolean): this {\n this._condition = val;\n return this;\n }\n\n /**\n * 可通过ident直接控制触发器\n */\n setIdent(ident: string = \"\"): this {\n this._ident = ident;\n return this;\n }\n\n\n /**\n * 设置触发后,下一帧再执行\n * @param val\n */\n setCallLater(val: boolean): this {\n this._isNextFrame = val;\n return this;\n }\n\n\n /**\n * @param val\n */\n callback(val: (event: this) => void): this {\n if (this._callback) {\n throw new Error(\"only one\")\n }\n this._callback = val;\n return this;\n }\n\n execute() {\n if (!this._enable) {\n return;\n }\n\n if (this._condition) {\n if (!this._condition(this)) {\n return;\n }\n }\n\n if (this._callback) {\n if (this._isNextFrame) {\n timer.once(0, this, () => {\n this._callback(this);\n })\n } else {\n this._callback(this);\n }\n }\n }\n\n enable() {\n this._enable = true;\n }\n\n disable() {\n this._enable = false;\n timer.clearAll(this);\n }\n\n dispose() {\n timer.clearAll(this);\n }\n\n\n /**\n * 用于异步函数, 等待事件\n */\n wait(): Promise<ITriggerEvent> {\n return new Promise((resolve, reject) => {\n this._callback = (e: ITriggerEvent) => {\n resolve(e);\n }\n this.enable();\n })\n }\n}\n\n\n\n","/**\r\n * 事件触发器\r\n * 注意: 列表项中监听全局的事件容易导致所有项都进行了监听.\r\n */\r\nimport {XEvent} from \"../../event/XEvent\";\r\nimport {IEventManager} from \"../../event/iface\";\r\nimport {TriggerEvent} from \"../TriggerEvent\";\r\n\r\n\r\n/**\r\n * 触发器-监听框架的事件\r\n */\r\nexport class FrameEvent extends TriggerEvent {\r\n static create(dispatcher: IEventManager, eventName: string) {\r\n return new FrameEvent(dispatcher, eventName);\r\n }\r\n\r\n /**\r\n * 数据发生变化时使用,默认参数为 集合的编号\r\n * 可通过 event.dispatchParams 获取发生变化的配置\r\n */\r\n static MAP_CHANGE = \"map_change\";\r\n /**\r\n *\r\n */\r\n static DATA_CHANGE = \"data_change\";\r\n\r\n /**\r\n *\r\n */\r\n static CHANGED = \"changed\";\r\n\r\n\r\n /**\r\n * 派发的事件;\r\n */\r\n public event: XEvent;\r\n\r\n\r\n constructor(public dispatcher: IEventManager, public eventName: string) {\r\n super();\r\n\r\n this.enable();\r\n }\r\n\r\n enable() {\r\n if (this._enable) {\r\n return;\r\n }\r\n super.enable();\r\n this.dispatcher.on(this.eventName, this, this.handler)\r\n }\r\n\r\n protected handler(event: XEvent) {\r\n this.event = event;\r\n this.execute();\r\n }\r\n\r\n disable() {\r\n if (!this._enable) {\r\n return;\r\n }\r\n super.disable();\r\n this.dispatcher.off(this.eventName, this, this.handler)\r\n }\r\n\r\n dispose() {\r\n this.dispatcher.off(this.eventName, this, this.handler)\r\n super.dispose();\r\n }\r\n}\r\n\r\n","/**\r\n * 用于扩展\r\n */\r\nimport {Timer} from \"../timer/Timer\";\r\nimport {timer} from \"../timer/frame_timer\";\r\nimport {ITriggerEvent} from \"./iface\";\r\nimport {triggermgr} from \"./TriggerManager\";\r\nimport {FrameEvent} from \"./event/FrameEvent\";\r\nimport {Scheduler} from \"cc\";\r\n\r\nexport class Trigger {\r\n\r\n /**\r\n *\r\n * @param group 设置所在组,通常为当前界面的uuid\r\n * @param ident 默认为不用设置,如果需要对触发器进行操作,可指定ident\r\n */\r\n constructor(group: string, ident?: any) {\r\n\r\n Scheduler.enableForTarget(this);\r\n this.setIdent(ident);\r\n this._group = group;\r\n\r\n this._nodeEvent = new FrameEvent(triggermgr, \"trigger_execute\").setCondition((trigger: FrameEvent) => {\r\n let params = trigger.event.dispatchParams;\r\n let pident = params.path;\r\n let pgroup = params.group;\r\n return this.ident == pident && this.group == pgroup;\r\n });\r\n this.when(this._nodeEvent);\r\n }\r\n\r\n enable() {\r\n for (let val of this._events) {\r\n val.enable();\r\n }\r\n }\r\n\r\n disable() {\r\n for (let val of this._events) {\r\n val.disable();\r\n }\r\n }\r\n\r\n destroy() {\r\n for (let val of this._events) {\r\n val.dispose();\r\n }\r\n this._events = null;\r\n this._actions = null;\r\n\r\n this.getTimer().clearAll(this);\r\n this._lastEvent = null;\r\n this._onCompleteHandler = null;\r\n }\r\n\r\n\r\n /**\r\n * 把当前的行为转化为异步,等待当前行为结束\r\n */\r\n waitAction() {\r\n this._actionWaiting = true;\r\n }\r\n\r\n /**\r\n * 当前行为结束,执行下一个行为\r\n */\r\n nextAction() {\r\n this._actionWaiting = false;\r\n this.executeNextAction();\r\n }\r\n\r\n\r\n protected setIdent(ident: any): this {\r\n this._ident = ident;\r\n return this;\r\n }\r\n\r\n public getTimer(): Timer {\r\n return timer;\r\n }\r\n\r\n\r\n when(val: ITriggerEvent): this {\r\n return this._when(val, this.callback);\r\n }\r\n\r\n protected callback(event: ITriggerEvent) {\r\n this._lastEvent = event;\r\n this._actionExectuingIndex = -1;\r\n this.executeNextAction();\r\n this._lastEvent = null\r\n }\r\n\r\n\r\n protected _when(val: ITriggerEvent, callback: (event: ITriggerEvent) => void): this {\r\n val.callback(callback.bind(this));\r\n val.enable();\r\n this._events.push(val);\r\n return this;\r\n }\r\n\r\n action(val: (trigger: Trigger) => void | Promise<any>): this {\r\n this._actions.push(val);\r\n return this;\r\n }\r\n\r\n once(): this {\r\n this._isOnce = true;\r\n return this;\r\n }\r\n\r\n protected _isOnce: boolean = false;\r\n\r\n protected executeNextAction() {\r\n this._actionExectuingIndex++;\r\n if (this._actionExectuingIndex >= this._actions.length) {\r\n this.complete();\r\n return;\r\n }\r\n let action = this._actions[this._actionExectuingIndex];\r\n\r\n if (action instanceof Function) {\r\n action(this);\r\n if (!this._actionWaiting) {\r\n this.executeNextAction();\r\n }\r\n } else if (action instanceof Promise) {\r\n action.then(() => {\r\n this.executeNextAction();\r\n })\r\n }\r\n }\r\n\r\n /**\r\n * 完成时, 执行的方法\r\n * @param f\r\n */\r\n public onComplete(f: (action: this) => any): this {\r\n this._onCompleteHandler = f;\r\n return this;\r\n }\r\n\r\n\r\n public complete(...args: any[]) {\r\n this._runing = false;\r\n this.callOnComplete(...args);\r\n //\r\n if (this._isOnce) {\r\n triggermgr.removeTrigger(this);\r\n }\r\n }\r\n\r\n protected callOnComplete(...args: any[]) {\r\n if (this._onCompleteHandler) {\r\n this._onCompleteHandler(this);\r\n }\r\n }\r\n\r\n get lastEvent(): ITriggerEvent {\r\n return this._lastEvent;\r\n }\r\n\r\n get group(): string {\r\n return this._group;\r\n }\r\n\r\n get ident(): string {\r\n return this._ident;\r\n }\r\n\r\n //\r\n protected _disposed: boolean = false;\r\n private _ident: string = \"\";\r\n protected _events: ITriggerEvent[] = [];\r\n protected _actions: (Function | Promise<any>)[] = [];\r\n protected _actionExectuingIndex: number = 0;\r\n protected _actionWaiting: boolean = false;\r\n protected _actionExecuting: any = null;\r\n protected _onCompleteHandler: Function;\r\n protected _runing: boolean;\r\n private _lastEvent: ITriggerEvent;\r\n private _group: string;\r\n protected _nodeEvent: FrameEvent;\r\n id?: string;\r\n uuid?: string;\r\n}","import {game} from \"cc\";\r\n\r\nexport class GameUtil {\r\n /**\r\n * 获取每帧时间\r\n * 单位: 每帧毫秒\r\n */\r\n getFrameTime(): number {\r\n let rate = game.frameRate as number;\r\n return 1000 / rate;\r\n }\r\n\r\n}\r\n\r\nexport const gameutil = new GameUtil();","import {gameutil} from \"../../utils/game-util\";\r\nimport {timer} from \"../../timer/frame_timer\";\r\nimport {TriggerEvent} from \"../TriggerEvent\";\r\n\r\n/**\r\n * 触发器-定时器\r\n */\r\nexport class TimerEvent extends TriggerEvent {\r\n protected _updateAtStart: boolean = false;\r\n protected _count: number = 0;\r\n protected _countLimit: number = 0;\r\n protected _internal: number = 0;\r\n protected _handler: Function;\r\n\r\n /**\r\n *\r\n * @param _internal 默认为帧频\r\n */\r\n constructor(_internal: number = 0) {\r\n super();\r\n\r\n this._internal = _internal;\r\n if (_internal == 0) {\r\n this._internal = gameutil.getFrameTime()\r\n }\r\n this.enable();\r\n }\r\n\r\n dispose() {\r\n super.dispose();\r\n\r\n timer.clearAll(this);\r\n }\r\n\r\n /**\r\n * 设置次数\r\n * @param val\r\n */\r\n public setCount(val: number): TimerEvent {\r\n this._countLimit = val;\r\n return this;\r\n }\r\n\r\n /**\r\n * 开始的时候是否执行一次update\r\n * @param updateAtStart\r\n */\r\n public setUpdateAtStart(updateAtStart: boolean = false): TimerEvent {\r\n this._updateAtStart = updateAtStart;\r\n return this;\r\n }\r\n\r\n enable() {\r\n if (this._enable) {\r\n return\r\n }\r\n this._count = 0;\r\n this._enable = true;\r\n timer.loop(this._internal, this, this.onTimerLoop);\r\n\r\n if (this._updateAtStart) {\r\n this.execute();\r\n }\r\n\r\n return this;\r\n }\r\n\r\n disable() {\r\n if (!this._enable) {\r\n return;\r\n }\r\n this._enable = false;\r\n timer.clear(this, this.onTimerLoop);\r\n }\r\n\r\n protected onTimerLoop() {\r\n this.execute();\r\n\r\n if (this._countLimit !== 0) {\r\n this._count++;\r\n if (this._count >= this._countLimit) {\r\n this.disable();\r\n }\r\n }\r\n }\r\n}\r\n\r\n","import {TriggerEvent} from \"../TriggerEvent\";\r\nimport {Button, EventMouse, EventTouch, find, Node, sys, Vec2} from \"cc\";\r\nimport {uiutil} from \"../../utils/UIUtil\";\r\n\r\n/**\r\n * 点击目标区域后触发事件\r\n */\r\nexport class ClickEvent extends TriggerEvent {\r\n get target(): Node {\r\n return this._target;\r\n }\r\n\r\n // todo: 后面可以增加池\r\n static create(target: Node, rangeOut: boolean = false) {\r\n return new ClickEvent(target, rangeOut);\r\n }\r\n\r\n get position(): Vec2 {\r\n return this._position;\r\n }\r\n\r\n private _target: Node;\r\n protected _openTime: number;\r\n protected _rangeOut: boolean;\r\n\r\n\r\n private _position: Vec2;\r\n private _isButton: boolean;\r\n\r\n /**\r\n *\r\n * @param target\r\n * @param rangeOut 点击除去目标的区域时触发\r\n */\r\n constructor(target: Node, rangeOut: boolean = false) {\r\n super();\r\n\r\n this._target = target;\r\n if (target.getComponent(Button)) {\r\n this._isButton = true;\r\n }\r\n this._rangeOut = rangeOut;\r\n this._target.on(Node.EventType.NODE_DESTROYED, this.onTargetDestroyedHandler, this);\r\n\r\n this.enable();\r\n }\r\n\r\n\r\n enable() {\r\n this._enable = true;\r\n\r\n if (this._rangeOut) {\r\n this._target.on(Node.EventType.PARENT_CHANGED, this._parentChanged, this)\r\n if (this._target.parent) {\r\n this.onCanvas()\r\n }\r\n } else {\r\n this.onTarget();\r\n }\r\n\r\n }\r\n\r\n\r\n disable() {\r\n this._enable = false;\r\n }\r\n\r\n dispose() {\r\n if (!this._target.isValid) {\r\n return;\r\n }\r\n this._target.off(Node.EventType.NODE_DESTROYED, this.onTargetDestroyedHandler, this);\r\n if (this._rangeOut) {\r\n this._target.off(Node.EventType.PARENT_CHANGED, this._parentChanged, this);\r\n this.offCanvas();\r\n } else {\r\n this.offTarget();\r\n }\r\n super.dispose();\r\n }\r\n\r\n onTarget() {\r\n if (sys.isMobile) {\r\n this._target.on(Node.EventType.TOUCH_START, this.onTouchStartHandler, this);\r\n this._target.on(Node.EventType.TOUCH_END, this.onTouchEndHandler, this);\r\n } else {\r\n this._target.on(Node.EventType.MOUSE_DOWN, this.onMouseDownHandler, this);\r\n this._target.on(Node.EventType.MOUSE_UP, this.onMouseUpHandler, this);\r\n }\r\n }\r\n\r\n offTarget() {\r\n // if(!this._target.isValid){\r\n // return;\r\n // }\r\n if (sys.isMobile) {\r\n if (this._target.isValid) {\r\n this._target.off(Node.EventType.TOUCH_START, this.onTouchStartHandler, this);\r\n this._target.off(Node.EventType.TOUCH_END, this.onTouchEndHandler, this);\r\n }\r\n } else {\r\n this._target.off(Node.EventType.MOUSE_DOWN, this.onMouseDownHandler, this);\r\n this._target.off(Node.EventType.MOUSE_UP, this.onMouseUpHandler, this);\r\n }\r\n }\r\n\r\n onCanvas() {\r\n this._openTime = Date.now();\r\n if (sys.isMobile) {\r\n this.canvas.on(Node.EventType.TOUCH_END, this.onCanvasTouchEndHandler, this);\r\n } else {\r\n this.canvas.on(Node.EventType.MOUSE_DOWN, this.onCanvasMouseDownHandler, this);\r\n }\r\n }\r\n\r\n offCanvas() {\r\n this._openTime = 0;\r\n if (sys.isMobile) {\r\n this.canvas.off(Node.EventType.TOUCH_END, this.onCanvasTouchEndHandler, this);\r\n } else {\r\n this.canvas.off(Node.EventType.MOUSE_DOWN, this.onCanvasMouseDownHandler, this);\r\n }\r\n }\r\n\r\n protected onTargetDestroyedHandler() {\r\n this.dispose();\r\n }\r\n\r\n protected _parentChanged() {\r\n if (this._target.parent) {\r\n this.onCanvas();\r\n } else {\r\n this.offCanvas();\r\n }\r\n }\r\n\r\n protected onCanvasTouchEndHandler(evt: EventTouch) {\r\n if (!this._enable) {\r\n return;\r\n }\r\n this.setLastEventTouch(evt);\r\n this.hitTest(evt.getLocation())\r\n }\r\n\r\n protected onCanvasMouseDownHandler(evt: EventMouse) {\r\n if (!this._enable) {\r\n return;\r\n }\r\n this.setLastEventMouse(evt);\r\n this.hitTest(evt.getLocation())\r\n }\r\n\r\n protected hitTest(loc: Vec2) {\r\n // 避免一打开就关闭\r\n if (Date.now() - this._openTime <= 200) {\r\n return\r\n }\r\n let clickpos = loc;\r\n if (!uiutil.hitTest(this._target, clickpos.x, clickpos.y)) {\r\n this._position = clickpos;\r\n this.execute();\r\n }\r\n }\r\n\r\n protected onMouseDownHandler(e: EventMouse) {\r\n if (this._isButton) {\r\n if (this.target.getComponent(Button).interactable == false) {\r\n return;\r\n }\r\n }\r\n\r\n this.setLastEventMouse(e);\r\n this._downTarget = e.target;\r\n }\r\n\r\n protected onMouseUpHandler(e: EventMouse) {\r\n if (this._isButton) {\r\n if (this.target.getComponent(Button).interactable == false) {\r\n return;\r\n }\r\n }\r\n this.setLastEventMouse(e);\r\n let itemObject = e.target;\r\n if (itemObject === this._downTarget) {\r\n this._position = e.getUILocation();\r\n this.execute();\r\n }\r\n }\r\n\r\n\r\n protected onTouchStartHandler(e: EventTouch) {\r\n this.setLastEventTouch(e);\r\n this._downTarget = e.target;\r\n }\r\n\r\n protected onTouchEndHandler(e: EventTouch) {\r\n this.setLastEventTouch(e);\r\n let itemObject = e.target;\r\n if (itemObject === this._downTarget) {\r\n this._position = e.getUILocation();\r\n this.execute();\r\n }\r\n }\r\n\r\n\r\n protected setLastEventMouse(e: EventMouse) {\r\n this._lastEventMouse = e;\r\n this._lastLocation = e.getLocation();\r\n this._lastTarget = e.target;\r\n }\r\n\r\n\r\n public get lastEventMouse(): EventMouse {\r\n return this._lastEventMouse;\r\n }\r\n\r\n protected _lastEventMouse: EventMouse;\r\n\r\n\r\n protected setLastEventTouch(e: EventTouch) {\r\n this._lastEventTouch = e;\r\n this._lastLocation = e.getLocation();\r\n this._lastTarget = e.target;\r\n }\r\n\r\n public get lastEventTouch(): EventTouch {\r\n return this._lastEventTouch;\r\n }\r\n\r\n protected _lastEventTouch: EventTouch;\r\n\r\n\r\n public get lastLocation(): Vec2 {\r\n return this._lastLocation;\r\n }\r\n\r\n protected _lastLocation: Vec2;\r\n\r\n protected _downTarget: any;\r\n\r\n public get lastTarget(): Node {\r\n return this._lastTarget;\r\n }\r\n\r\n protected _lastTarget: Node;\r\n\r\n\r\n get canvas(): Node {\r\n if (!this._canvas) {\r\n this._canvas = find(\"Canvas\")\r\n }\r\n\r\n return this._canvas;\r\n }\r\n\r\n private _canvas: Node;\r\n\r\n}\r\n","/**\r\n * 事件触发器\r\n * 注意: 列表项中监听全局的事件容易导致所有项都进行了监听.\r\n */\r\nimport {TriggerEvent} from \"../TriggerEvent\";\r\nimport {Node} from \"cc\";\r\n\r\n\r\n/**\r\n * 触发器-事件派发器\r\n */\r\nexport class NodeEvent extends TriggerEvent {\r\n\r\n static create(dispatcher: Node, event: string) {\r\n return new NodeEvent(dispatcher, event);\r\n }\r\n\r\n public args: any[];\r\n\r\n constructor(public dispatcher: Node, public event: string) {\r\n super();\r\n\r\n this.dispatcher.on(Node.EventType.NODE_DESTROYED, this.onTargetDestroyedHandler, this);\r\n this.enable();\r\n }\r\n\r\n enable() {\r\n if (this._enable) {\r\n return;\r\n }\r\n super.enable();\r\n this.dispatcher.on(this.event, this.onHandler, this)\r\n }\r\n\r\n protected onHandler(...args: any) {\r\n this.args = args;\r\n this.execute();\r\n }\r\n\r\n disable() {\r\n if (!this._enable) {\r\n return;\r\n }\r\n super.disable();\r\n this.dispatcher.off(this.event, this.onHandler, this)\r\n }\r\n\r\n dispose() {\r\n if (!this.dispatcher.isValid) {\r\n return;\r\n }\r\n this.dispatcher.off(Node.EventType.NODE_DESTROYED, this.onTargetDestroyedHandler, this);\r\n this.dispatcher.off(this.event, this.onHandler, this)\r\n super.dispose();\r\n }\r\n\r\n protected onTargetDestroyedHandler() {\r\n this.dispose();\r\n }\r\n}\r\n\r\n","import {TriggerEvent} from \"../TriggerEvent\";\r\n\r\n/**\r\n * 触发器-缓存中的数据属性\r\n */\r\nexport class CacheObjectEvent extends TriggerEvent {\r\n\r\n // /**\r\n // * 创建更新事件\r\n // * @param object\r\n // * @param propPath\r\n // */\r\n // static createUpdate(object: ICacheObject, propPath: string = \"\"): CacheObjectEvent {\r\n // return new CacheObjectEvent(object, CacheObject.UPDATE, propPath)\r\n // }\r\n //\r\n // /**\r\n // * 创建刷新事件\r\n // * @param object\r\n // */\r\n // static createRefresh(object: ICacheObject): CacheObjectEvent {\r\n // return new CacheObjectEvent(object, CacheObject.REFRESH)\r\n // }\r\n //\r\n // static create(object: ICacheObject, event?: string, propPath: string = \"\") {\r\n // return new CacheObjectEvent(object, event, propPath)\r\n // }\r\n //\r\n // public propPath: string;\r\n // public event: string;\r\n // public object: ICacheObject;\r\n //\r\n // constructor(object: ICacheObject, event?: string, propPath: string = \"\") {\r\n // super();\r\n //\r\n // this.object = object;\r\n // this.event = event;\r\n // this.propPath = propPath;\r\n // this.enable();\r\n // }\r\n //\r\n // protected get listener(): IEventManager {\r\n // return this.object;\r\n // }\r\n //\r\n //\r\n // enable() {\r\n // if (this._enable) {\r\n // return;\r\n // }\r\n // super.enable();\r\n //\r\n // this.listener.on(this.event, this, this.onHandler)\r\n // }\r\n //\r\n // disable() {\r\n // if (!this._enable) {\r\n // return;\r\n // }\r\n // super.disable();\r\n // this.listener.off(this.event, this, this.onHandler)\r\n // }\r\n //\r\n // dispose() {\r\n // this.listener.off(this.event, this, this.onHandler)\r\n // super.dispose();\r\n // }\r\n //\r\n // protected onHandler(event: Event) {\r\n // let params = event.dispatchParams;\r\n // if (this.propPath && this.propPath !== params.path) {\r\n // return;\r\n // }\r\n // this.execute();\r\n // }\r\n}\r\n","import {TriggerEvent} from \"../TriggerEvent\";\r\nimport {IEventManager} from \"../../event/iface\";\r\nimport {XEvent} from \"../../event/XEvent\";\r\nimport {ResponseSub} from \"../../net/net-enum\";\r\nimport {netmgr} from \"../../net/net-manager\";\r\n\r\n/**\r\n * 触发器-缓存中的数据痛\r\n */\r\nexport class ResponseEvent extends TriggerEvent {\r\n static create(msgName: string, sub?: ResponseSub): ResponseEvent {\r\n return new ResponseEvent(msgName, sub)\r\n }\r\n\r\n\r\n public sub: ResponseSub;\r\n public msgName: string;\r\n\r\n constructor(msgName: string, sub?: ResponseSub) {\r\n super();\r\n\r\n this.msgName = msgName\r\n this.sub = sub;\r\n this.enable();\r\n }\r\n\r\n protected get listener(): IEventManager {\r\n return netmgr;\r\n }\r\n\r\n enable() {\r\n if (this._enable) {\r\n return;\r\n }\r\n super.enable();\r\n\r\n this.listener.on(this.msgName, this, this.onHandler);\r\n }\r\n\r\n disable() {\r\n if (!this._enable) {\r\n return;\r\n }\r\n super.disable();\r\n this.listener.off(this.msgName, this, this.onHandler);\r\n }\r\n\r\n dispose() {\r\n this.listener.off(this.msgName, this, this.onHandler)\r\n super.dispose();\r\n }\r\n\r\n protected onHandler(event: XEvent) {\r\n let sub = event.dispatchParams[0];\r\n if (this.sub && this.sub !== sub) {\r\n return;\r\n }\r\n this.execute();\r\n }\r\n}\r\n","import {gameutil} from \"../../utils/game-util\";\r\nimport {timer} from \"../../timer/frame_timer\";\r\nimport {TriggerEvent} from \"../TriggerEvent\";\r\n\r\n/**\r\n * 触发器-等待直到符合条件\r\n */\r\nexport class WaitEvent extends TriggerEvent {\r\n\r\n\r\n protected _updateAtStart: boolean = false;\r\n protected _count: number = 0;\r\n protected _countLimit: number = 0;\r\n protected _internal: number = gameutil.getFrameTime();\r\n protected _handler: Function;\r\n\r\n constructor(util: () => boolean, frequency?: number) {\r\n super();\r\n\r\n this._handler = util;\r\n if (frequency) {\r\n this._internal = frequency;\r\n }\r\n this.enable();\r\n }\r\n\r\n dispose() {\r\n super.dispose();\r\n\r\n timer.clearAll(this);\r\n }\r\n\r\n enable() {\r\n if (this._enable) {\r\n return\r\n }\r\n this._count = 0;\r\n this._enable = true;\r\n timer.loop(this._internal, this, this.onTimerLoop);\r\n\r\n if (this._updateAtStart) {\r\n this.execute();\r\n }\r\n\r\n return this;\r\n }\r\n\r\n disable() {\r\n if (!this._enable) {\r\n return;\r\n }\r\n this._enable = false;\r\n timer.clear(this, this.onTimerLoop);\r\n }\r\n\r\n protected onTimerLoop() {\r\n if (this._handler && this._handler()) {\r\n this.execute();\r\n this.disable();\r\n }\r\n }\r\n}\r\n\r\n","import {TriggerEvent} from \"../TriggerEvent\";\r\nimport {datamgr} from \"../../database/frame_data\";\r\nimport {XEvent} from \"../../event/XEvent\";\r\nimport {IDBEventDispatchParams} from \"../../database/iface\";\r\n\r\n/**\r\n * 触发器-缓存中的数据集合\r\n */\r\nexport class DBEvent extends TriggerEvent {\r\n static create(objectId: string): DBEvent {\r\n return new DBEvent(objectId);\r\n }\r\n\r\n\r\n constructor(objectId: string) {\r\n super();\r\n\r\n this.event = objectId;\r\n this.enable();\r\n }\r\n\r\n enable() {\r\n if (this._enable) {\r\n return;\r\n }\r\n super.enable();\r\n\r\n datamgr.on(this.event, this, this.onHandler);\r\n }\r\n\r\n disable() {\r\n if (!this._enable) {\r\n return;\r\n }\r\n super.disable();\r\n datamgr.off(this.event, this, this.onHandler);\r\n }\r\n\r\n dispose() {\r\n datamgr.off(this.event, this, this.onHandler)\r\n super.dispose();\r\n }\r\n\r\n protected onHandler(event: XEvent) {\r\n this.eventParams = event.dispatchParams;\r\n this.execute();\r\n }\r\n\r\n public event: string;\r\n public eventParams: IDBEventDispatchParams;\r\n}\r\n","import {IController, IModule} from \"./index\";\n\nexport class ControllerSet {\n constructor(mod: IModule) {\n this._mod = mod;\n }\n\n has(name: string): boolean {\n return !!this.data[name]\n }\n\n add(controller: IController) {\n if (this.data[controller.name]) {\n throw new Error(\"重复创建控制器: \" + name)\n }\n controller.init(this._mod)\n this.data[controller.name] = controller;\n }\n\n createAndEnable(name: string, ...args) {\n if (!this.has(name)) {\n this.create(name, ...args);\n }\n this.enable(name);\n }\n\n create(name: string, ...args) {\n let creator = this._creator[name];\n if (!creator) {\n throw new Error(\"controller creator not found\");\n }\n\n this.add(new creator(...args));\n }\n\n remove(name: string) {\n let ctrl = this.data[name];\n if (ctrl) {\n ctrl.dispose();\n delete this.data[name];\n }\n }\n\n disable(name: string) {\n let ctrl = this.data[name];\n if (ctrl) {\n ctrl.disable();\n }\n }\n\n enable(name: string) {\n let ctrl = this.data[name];\n if (ctrl) {\n ctrl.enable();\n }\n }\n\n enableAll() {\n for (let key in this.data) {\n let ctrl = this.data[key];\n ctrl.enable();\n }\n }\n\n disableAll() {\n for (let key in this.data) {\n let ctrl = this.data[key];\n ctrl.disable();\n }\n }\n\n dispose() {\n for (let key in this.data) {\n let ctrl = this.data[key];\n ctrl.dispose();\n }\n }\n\n\n registerCreator(name: string, creator: (...args) => IController) {\n this._creator[name] = creator;\n }\n\n protected _creator = {};\n protected _mod: IModule;\n private data: { [key: string]: IController } = {};\n}","import {IModule} from \"./Module\";\n\nexport interface IController {\n get name(): string;\n\n get module(): IModule;\n\n init(core: IModule)\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 init(core: IModule) {\n this._module = core;\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._module = null;\n this._enabled = false;\n this._name = \"\";\n }\n\n get name(): string {\n return this._name;\n }\n\n get module(): IModule {\n return this._module;\n }\n\n\n get isEnable() {\n return this._enabled;\n }\n\n protected _module: IModule;\n protected _name: string;\n protected _enabled: boolean = false;\n}","import {EventManager} from \"../event/EventManager\";\nimport { ControllerSet } from \"./ControllerSet\";\n\n\n/**\n * 一个简单的功能/库模块\n */\nexport interface IModuleSample {\n}\n\n\nexport interface IModule {\n controllers: ControllerSet\n}\n\nexport class Module extends EventManager implements IModule {\n\n constructor() {\n super();\n\n this._controllers = new ControllerSet(this);\n }\n\n get controllers(): ControllerSet {\n return this._controllers;\n }\n\n private _controllers: ControllerSet;\n}\n\n","// 用于描述数据及之间的关系\n// 也可提供对控制器的封装\nimport {EventManager} from \"../event/EventManager\";\nimport {IModule} from \"./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 EventManager {\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 \"./Module\";\nimport {IExtend} from \"./Extend\";\nimport { IController } from \"./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 {Page} from \"./Page\";\n\n/**\n * 视图管理器\n * 打开一个视图的时候,可能会听过加载资源,读取数据,调整布局,切换特效等处理,所以使用视图模式封装视图打开关闭的逻辑\n */\nexport class PageLayer {\n\n constructor(public name: string) {\n }\n\n\n close() {\n if (this.currentPage) {\n this.currentPage.controller.closeByRoute();\n }\n }\n\n /**\n * 当前的页面\n */\n currentPage: Page\n}\n","import {instantiate, Node, Prefab} from \"cc\";\nimport {Dictionary} from \"../ds/Dictionary\";\nimport {List} from \"../ds/List\";\n\nexport class UIObjectDict 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\nexport var uidict = new UIObjectDict();","import {Route} from \"./Route\";\nimport {PageController} from \"./PageController\";\nimport {EventManager} from \"../event/EventManager\";\nimport {UIObjectDict} from \"./UIObjectDict\";\nimport {LinkError} from \"../utils/ErrorUtil\";\n\nexport enum PageState {\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 PageEvent {\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 Page extends EventManager {\n\n constructor(controller: PageController, route: Route) {\n super();\n this._controller = controller;\n this._route = route;\n }\n\n\n /**\n * 等待打开完成指令\n */\n waitOpenComplete() {\n this._waitOpenComplete = true;\n }\n\n waitCloseComplete() {\n this._waitCloseComplete = true;\n }\n\n openComplete() {\n this._waitOpenComplete = false;\n this._controller.openComplete(this);\n }\n\n closeComplete() {\n this._waitOpenComplete = false;\n this._controller.closeComplete(this);\n }\n\n stop(reason: LinkError) {\n\n }\n\n /**\n * 等待发送的结果\n * 如果返回 null,表示主动取消 [cancel]\n */\n wait(): Promise<this> {\n switch (this.state) {\n case PageState.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 PageState.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 `Page[${this.route.toString()}, ${this.id}]`\n }\n\n public get objectDict(): UIObjectDict {\n let dict = this._objectDict;\n if (!dict) {\n dict = new UIObjectDict();\n this._objectDict = dict;\n }\n return dict;\n }\n\n protected _objectDict: UIObjectDict;\n protected _waitOpenComplete: boolean = false;\n protected _waitCloseComplete: boolean = false;\n\n get controller(): PageController {\n return this._controller;\n }\n\n get route(): Route {\n return this._route;\n }\n\n\n cache = {};\n tags = {};\n layer: string;\n state: PageState = 0;\n protected _controller: PageController;\n protected _route: Route;\n\n}\n\n","import {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","import {Component} from \"cc\";\nimport { Dictionary } from \"../ds\";\nimport { UIObjectDict } from \"./UIObjectDict\";\n\nexport class ViewController extends Component {\n constructor(name: string) {\n super();\n this.name = name;\n //\n ctrlrepo.register(this);\n }\n\n open(...args) {\n\n }\n\n close() {\n\n }\n\n get objectDict(): UIObjectDict {\n let dict = this._objectDict;\n if (!dict) {\n dict = new UIObjectDict();\n this._objectDict = dict;\n }\n return dict;\n }\n\n protected _objectDict: UIObjectDict;\n}\n\n\nexport class ControllerDict extends Dictionary<string, ViewController> {\n\n getByName(name: string): ViewController {\n return this.get(name);\n }\n\n register(controller: ViewController) {\n this.set(controller.name, controller);\n }\n}\n\nexport var ctrlrepo = new ControllerDict();","import {Route} from \"./Route\";\nimport {PageLayer} from \"./PageLayer\";\nimport {List} from \"../ds/List\";\nimport { Page } from \"./Page\";\nimport { PageController } from \"./PageController\";\nimport { UIObjectDict } from \"./UIObjectDict\";\nimport { ctrlrepo } from \"./ViewController\";\n\n\nexport class PageList extends List<Page> {\n\n /**\n * 页面配置集合\n */\n}\n\n\nexport class PageRepo extends PageList {\n\n constructor() {\n super();\n\n this.onSet(this, (item) => {\n this._indexRoute[item.route.path] = item;\n })\n\n this.onDelete(this, (item) => {\n delete this._indexRoute[item.route.path];\n })\n }\n\n openByString(route: string): Page {\n return this.open(new Route(route))\n }\n\n /**\n * 打开页面\n * 一个路由代表一个页面\n * @param route\n */\n open(route: Route): Page {\n let controller = this.getController(route);\n if (!controller) {\n throw new Error(\"page controller no register: \" + route.path)\n }\n\n return controller.openByRoute(route);\n }\n\n close(route: Route) {\n let controller = this.getController(route);\n if (!controller) {\n throw new Error(\"page controller no register: \" + route.path)\n }\n\n controller.closeByRoute(route);\n }\n\n /**\n * 如果页面存在,则刷新\n * @param route\n */\n refresh(route: Route) {\n let page = this.getByRoute(route);\n if (page) {\n page.controller.refresh();\n }\n }\n\n /**\n * 历史记录\n */\n getHistory(): Route[] {\n return this._history;\n }\n\n back() {\n this.open(this._history.pop())\n }\n\n getByRoute(route: Route): Page {\n return this._indexRoute[route.path];\n }\n\n\n listByTags(tags: string[]): PageList {\n let list = new PageList();\n this.forEach((index, item) => {\n if (item.controller.hasTags(tags)) {\n list.push(item);\n }\n })\n return list\n }\n\n getLayerMain(): PageLayer {\n return this._indexLayer[\"main\"];\n }\n\n /**\n * @param name\n */\n getLayer(name: string): PageLayer {\n return this.getOrNewLayer(name);\n }\n\n protected getOrNewLayer(name: string): PageLayer {\n let layer = this._indexLayer[name];\n if (!layer) {\n layer = new PageLayer(name);\n this._indexLayer[name] = layer;\n }\n return layer;\n }\n\n getController(route: Route): PageController {\n return ctrlrepo.getByName(route.path) as PageController;\n }\n\n public get objectDict(): UIObjectDict {\n let dict = this._objectDict;\n if (!dict) {\n dict = new UIObjectDict();\n this._objectDict = dict;\n }\n return dict;\n }\n\n protected _objectDict: UIObjectDict;\n protected _indexLayer = {};\n protected _indexRoute = {};\n protected _history: Route[] = [];\n\n}\n\n\nexport const pagerepo = new PageRepo();\n","import { Page, PageState, PageEvent } from \"./Page\";\nimport { pagerepo } from \"./PageRepo\";\nimport { Route } from \"./Route\";\nimport { ViewController } from \"./ViewController\";\n\nexport class PageController extends ViewController {\n\n constructor(routeName: string, config?: { layer?: string, tags?: string[], enableHistory?: boolean }) {\n super(routeName);\n this._route = new Route(routeName);\n if (config) {\n if (config.layer) {\n this._layer = config.layer;\n }\n if (config.tags) {\n this._tags = config.tags;\n }\n if (config.enableHistory) {\n this._enableHistory = config.enableHistory;\n }\n }\n }\n\n\n protected onOpening(page: Page) {\n }\n\n protected onOpened(page: Page) {\n\n }\n\n protected onClosing(page: Page) {\n }\n\n protected onClosed(page: Page) {\n }\n\n\n protected onRefresh(page: Page) {\n }\n\n openByRoute(route: Route): Page {\n let newpage: Page;\n let oldpage: Page;\n if (this._layer) {\n let layer = pagerepo.getLayer(this._layer);\n oldpage = layer.currentPage;\n if (oldpage) {\n let currentRoute = oldpage.route;\n if (currentRoute.key == route.key) {\n return oldpage;\n }\n // 关闭\n let currentCtrl = oldpage.controller;\n currentCtrl.closePage(oldpage);\n if (currentCtrl._enableHistory) {\n pagerepo.getHistory().push(oldpage.route);\n }\n\n }\n\n newpage = new Page(this, route);\n layer.currentPage = newpage;\n\n\n } else {\n newpage = new Page(this, route);\n }\n //\n this.openPage(newpage);\n //\n return newpage;\n }\n\n private openPage(page: Page) {\n if (!page) {\n return;\n }\n if (page.state != PageState.Closed) {\n return;\n }\n this._lastPage = page;\n page.state = PageState.Opening;\n page.dispatch(PageEvent.Opening);\n //\n try {\n pagerepo.push(page);\n this.onOpening(page);\n // @ts-ignore\n if (!page._waitOpenComplete) {\n // 没有被打断,打开完成\n this.openComplete(page);\n } else {\n // 被打断了,等待完成1\n }\n } catch (e) {\n console.error(`open page ${page.route.key}`)\n console.error(e.stack);\n //\n this.closePage(page);\n }\n }\n\n\n openComplete(page: Page) {\n if (!page) {\n return;\n }\n this._lastPage = page;\n page.state = PageState.Opened;\n this.onOpened(page);\n page.dispatch(PageEvent.Opened);\n }\n\n closeByRoute(route?: Route): Page {\n let lastpage: Page;\n if (this._layer) {\n let layer = pagerepo.getLayer(this._layer);\n lastpage = layer.currentPage;\n layer.currentPage = null;\n } else {\n lastpage = pagerepo.getByRoute(route);\n }\n this.closePage(lastpage);\n if (this._enableHistory) {\n // 清空历史记录\n pagerepo.getHistory().length = 0;\n }\n\n return lastpage;\n }\n\n private closePage(page: Page) {\n if (!page) {\n return;\n }\n if (page.state == PageState.Closed) {\n return;\n }\n this._lastPage = page;\n page.state = PageState.Closeing;\n page.dispatch(PageEvent.Closeing);\n\n try {\n this.onClosing(page);\n // @ts-ignore\n if (!page._waitCloseComplete) {\n // 没有被打断,关闭完成\n this.closeComplete(page);\n } else {\n // 被打断了,等待完成1\n }\n\n\n } catch (e) {\n console.error(`close page ${page.route.key}`)\n console.error(e.stack);\n }\n }\n\n closeComplete(page: Page) {\n if (!page) {\n return;\n }\n pagerepo.remove(page);\n this._lastPage = page;\n // @ts-ignore\n let objectDict = page._objectDict;\n if (objectDict) {\n objectDict.clear();\n }\n page.state = PageState.Closed;\n page.dispatch(PageEvent.Closed);\n\n this.onClosed(page);\n }\n\n refresh() {\n this.onRefresh(this._lastPage);\n }\n\n\n get layer(): string {\n return this._layer;\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 setLayer(name: string): this {\n this._layer = name;\n return this;\n }\n\n setTags(tags: string[]): this {\n this._tags = tags;\n return this;\n }\n\n\n get lastPage(): Page {\n return this._lastPage;\n }\n\n get route(): Route {\n return this._route;\n }\n\n get enableHistory(): boolean {\n return this._enableHistory;\n }\n\n protected _enableHistory: boolean = false;\n protected _route: Route;\n protected _lastPage: Page;\n protected _tags = {};\n protected _layer: string;\n}","import {identutil} from \"../../utils/IdentUtil\";\r\nimport {TreeNode, TreeRoot} from \"../../ds/TreeSource\";\r\nimport {maputil} from \"../../utils/MapUtil\";\r\nimport {Field} from \"./schema-field\";\r\nimport {AnyType, ArrayType, BasicType, ClassType, convertBaicKindToJsonValue, EnumType, IType, MapType} from \"./schema-type\";\r\nimport {ClassDecl, declrepo, EnumDecl} from \"./schema-decl\";\r\n\r\nexport interface ISchemaTreeNode extends TreeNode {\r\n tags: {\r\n /**\r\n * Field.Name\r\n */\r\n title: string;\r\n /**\r\n * 可获取节点对应的 Field\r\n */\r\n field: Field;\r\n\r\n /**\r\n * 可获取节点对应的 IType\r\n */\r\n schema: IType;\r\n\r\n /**\r\n * 当类型为ClassType时,标识是否为null\r\n */\r\n isNull: boolean;\r\n\r\n /**\r\n * 标识是否为默认值\r\n */\r\n isDefault: boolean;\r\n }\r\n /**\r\n * 当 Field 的类型为 BasicType 时,设置成传入对象对应的值\r\n * 否则为 null\r\n */\r\n data: any;\r\n}\r\n\r\n\r\nexport class SchemaTreeRootCreator {\r\n static default = new SchemaTreeRootCreator();\r\n\r\n constructor() {\r\n }\r\n\r\n createByType(root: TreeRoot, type: IType, id: string, object: any, title?: string, defaultValue?: any): TreeNode {\r\n let node\r\n if (type instanceof ClassType) {\r\n node = this.createChildByClassType(root, type, id, object, title)\r\n } else if (type instanceof MapType) {\r\n node = this.createChildByMapType(root, type, id, object, title)\r\n } else if (type instanceof ArrayType) {\r\n node = this.createChildByArrayType(root, type, id, object, title)\r\n } else if (type instanceof AnyType) {\r\n node = this.createChildByAnyType(root, type, id, object, title)\r\n } else if (type instanceof EnumType) {\r\n node = this.createByEnumType(root, type, id, object, title, defaultValue)\r\n } else if (type instanceof BasicType) {\r\n node = this.createByBasicType(root, type, id, object, title, defaultValue)\r\n }\r\n return node\r\n }\r\n\r\n updateByType(node: TreeNode, value: any) {\r\n let type = node.getTag(\"schema\")\r\n if (type instanceof ClassType) {\r\n } else if (type instanceof MapType) {\r\n } else if (type instanceof ArrayType) {\r\n } else if (type instanceof AnyType) {\r\n // 清理\r\n delete node.tags[\"decl\"];\r\n node.children.length = 0;\r\n\r\n this.updateAnyType(node, value);\r\n } else if (type instanceof EnumType) {\r\n } else if (type instanceof BasicType) {\r\n }\r\n }\r\n\r\n\r\n /**\r\n * 通过类的约束和类的map值,生成用于对象编辑器的树对象\r\n * @param decl\r\n * @param object\r\n *\r\n * @see ISchemaTreeNode\r\n */\r\n createByClassDecl(decl: ClassDecl, object: any): TreeRoot {\r\n let root = new TreeRoot();\r\n root.origin = this.createOriginByClassDecl(root, decl, object)\r\n return root;\r\n }\r\n\r\n /**\r\n * 通过类的约束和类的map值,生成用于对象编辑器的树对象\r\n * @param decl\r\n *\r\n * @see ISchemaTreeNode\r\n */\r\n createByEnumDecl(decl: EnumDecl): TreeRoot {\r\n let root = new TreeRoot();\r\n root.origin = this.createOriginByEnumDecl(root, decl, null)\r\n return root;\r\n }\r\n\r\n\r\n createNode(type: IType | ClassDecl | EnumDecl, id: string): TreeNode {\r\n let isLeaf = true;\r\n if (type instanceof ClassDecl) {\r\n isLeaf = false;\r\n } else if (type instanceof EnumDecl) {\r\n isLeaf = false;\r\n } else if (type instanceof ClassType) {\r\n isLeaf = false;\r\n } else if (type instanceof MapType) {\r\n isLeaf = false;\r\n } else if (type instanceof ArrayType) {\r\n isLeaf = false;\r\n } else if (type instanceof AnyType) {\r\n isLeaf = false;\r\n } else if (type instanceof EnumType) {\r\n } else if (type instanceof BasicType) {\r\n }\r\n\r\n let node = new TreeNode(id, isLeaf);\r\n node.setTag(\"schema\", type);\r\n return node;\r\n }\r\n\r\n createOriginByClassDecl(root: TreeRoot, decl: ClassDecl, object: any): TreeNode {\r\n let origin = this.createNode(decl, \"/\")\r\n origin.setTag(\"title\", \"root\");\r\n origin.setTag(\"schema\", decl);\r\n origin.setRoot(root);\r\n this.createChildrenByClassDecl(origin, decl, object);\r\n return origin\r\n }\r\n\r\n createOriginByEnumDecl(root: TreeRoot, decl: EnumDecl, object: any): TreeNode {\r\n let origin = this.createNode(decl, \"/\")\r\n origin.setTag(\"title\", \"root\");\r\n origin.setTag(\"schema\", decl);\r\n origin.setRoot(root);\r\n this.createChildrenByEnumDecl(origin, decl, object);\r\n return origin\r\n }\r\n\r\n protected createChildrenByEnumDecl(node: TreeNode, decl: EnumDecl, object: any) {\r\n let checkHide = this._checkHide;\r\n let fields = decl.GetAllField();\r\n for (let i = 0; i < fields.length; i++) {\r\n let field = fields[i];\r\n if (checkHide) {\r\n if (field.getTag(\"hide\")) {\r\n return\r\n }\r\n }\r\n let type = new BasicType();\r\n type.Kind = decl.Kind;\r\n field.Type = type;\r\n\r\n this.createChildByField(node, field, object);\r\n }\r\n }\r\n\r\n protected createChildrenByClassDecl(node: TreeNode, decl: ClassDecl, object: any) {\r\n let checkHide = this._checkHide;\r\n decl.walkField((field: Field) => {\r\n if (checkHide) {\r\n if (field.getTag(\"hide\")) {\r\n return\r\n }\r\n }\r\n\r\n let handler = this._replaceField[decl.Name + \"_\" + field.Name];\r\n if (handler) {\r\n field = handler(decl, object, field)\r\n }\r\n\r\n this.createChildByField(node, field, object);\r\n })\r\n }\r\n\r\n\r\n protected createChildByField(node: TreeNode, field: Field, object: any) {\r\n let childData;\r\n if (object) {\r\n childData = object[field.Name];\r\n }\r\n let childNode;\r\n let type = field.Type;\r\n if (type instanceof ClassType) {\r\n childNode = this.createChildByClassType(node.root, type, field.Name, childData, field.Name);\r\n } else if (type instanceof MapType) {\r\n childNode = this.createChildByMapType(node.root, type, field.Name, childData, field.Name)\r\n } else if (type instanceof ArrayType) {\r\n if (childData) {\r\n if (type.Elem instanceof AnyType) {\r\n for (let i = 0; i < childData.length; i++) {\r\n let item = childData[i];\r\n if (item && !item._type) {\r\n let _type = field.getTag(\"_type\");\r\n if (_type) {\r\n item._type = _type\r\n }\r\n }\r\n }\r\n }\r\n }\r\n childNode = this.createChildByArrayType(node.root, type, field.Name, childData, field.Name);\r\n } else if (type instanceof AnyType) {\r\n if (childData && !childData._type) {\r\n let _type = field.getTag(\"_type\");\r\n if (_type) {\r\n childData._type = _type;\r\n }\r\n }\r\n childNode = this.createChildByAnyType(node.root, type, field.Name, childData, field.Name);\r\n } else if (type instanceof EnumType) {\r\n childNode = this.createByEnumType(node.root, type, field.Name, childData, field.Name, field.Value)\r\n } else if (type instanceof BasicType) {\r\n let keepOrigin: boolean = false;\r\n if (field.getTag(\"dlink\")) {\r\n keepOrigin = true;\r\n }\r\n childNode = this.createByBasicType(node.root, type, field.Name, childData, field.Name, field.Value, field.getTag(\"ident\"), keepOrigin);\r\n } else {\r\n throw new Error(\"未知的类型\")\r\n }\r\n\r\n childNode.setTag(\"field\", field);\r\n if (field.Tags && field.Tags.hasOwnProperty(\"enabled\")) {\r\n childNode.setTag(\"enabled\", maputil.boolean(field.Tags, \"enabled\"))\r\n }\r\n node.addChild(childNode);\r\n }\r\n\r\n protected createChildByMapType(root: TreeRoot, type: MapType, id: string, object: { [key: string]: any }, title: string): TreeNode {\r\n let node = this.createNode(type, id)\r\n node.setTag(\"title\", title);\r\n\r\n if (type.Key instanceof EnumType) {\r\n let decl = declrepo.get(type.Key.Decl) as EnumDecl;\r\n for (let i = 0; i < decl.Fields.length; i++) {\r\n let field = decl.Fields[i];\r\n let childNode\r\n let childData;\r\n if (object) {\r\n childData = object[field.Value];\r\n }\r\n if (type.Value instanceof ClassType) {\r\n childNode = this.createChildByClassType(root, type.Value, field.Value, childData, field.Name)\r\n } else if (type.Value instanceof BasicType) {\r\n childNode = this.createByBasicType(root, type.Value, field.Value, childData, field.Name, undefined, undefined)\r\n }\r\n node.addChild(childNode)\r\n }\r\n } else {\r\n if (object) {\r\n for (let key in object) {\r\n let childData;\r\n if (object) {\r\n childData = object[key];\r\n }\r\n let childNode = this.createChildByMapType_Child(node, root, type.Value, key, childData, key)\r\n node.addChild(childNode)\r\n }\r\n }\r\n }\r\n return node;\r\n }\r\n\r\n protected createChildByMapType_Child(node: TreeNode, root: TreeRoot, type: IType, id: string, object: any, title: string): TreeNode {\r\n let childNode;\r\n let childData = object;\r\n if (type instanceof ClassType) {\r\n childNode = this.createChildByClassType(root, type, id, childData, title);\r\n } else if (type instanceof AnyType) {\r\n childNode = this.createChildByAnyType(root, type, id, childData, title);\r\n } else if (type instanceof BasicType) {\r\n childNode = this.createByBasicType(root, type, id, childData, title, undefined, undefined);\r\n }\r\n return childNode;\r\n }\r\n\r\n protected createChildByArrayType(root: TreeRoot, type: ArrayType, id: string, object: any[], title: string): TreeNode {\r\n let node = this.createNode(type, id)\r\n node.setTag(\"title\", title);\r\n\r\n for (let key in object) {\r\n let childData;\r\n if (object) {\r\n childData = object[key];\r\n }\r\n let childNode = this.createChildByMapType_Child(node, root, type.Elem, key, childData, key);\r\n node.addChild(childNode)\r\n }\r\n return node\r\n }\r\n\r\n protected createChildByClassType(root: TreeRoot, type: ClassType, id: string, value: any, title: string): TreeNode {\r\n let desc = declrepo.get(type.Decl) as ClassDecl;\r\n if (!desc) {\r\n console.error(\"desc not found: \" + type.Decl);\r\n return;\r\n }\r\n\r\n let node = this.createNode(type, id)\r\n node.setTag(\"title\", title);\r\n node.setRoot(root);\r\n this.createChildrenByClassDecl(node, desc, value);\r\n return node;\r\n }\r\n\r\n protected createChildByAnyType(root: TreeRoot, type: AnyType, id: string, value: any, title: string): TreeNode {\r\n let node = this.createNode(type, id)\r\n node.setTag(\"title\", title);\r\n node.setRoot(root);\r\n\r\n this.updateAnyType(node, value)\r\n return node;\r\n }\r\n\r\n protected updateAnyType(node: TreeNode, value: any) {\r\n\r\n let _type = null;\r\n if (value) {\r\n _type = value._type\r\n }\r\n node.setTag(\"_type\", _type);\r\n if (!_type) {\r\n node.data = value;\r\n return;\r\n }\r\n\r\n let classDecl = declrepo.get(_type) as ClassDecl;\r\n if (!classDecl) {\r\n console.warn(\"init any: desc not found: \" + _type);\r\n return;\r\n }\r\n node.setTag(\"decl\", classDecl);\r\n this.createChildrenByClassDecl(node, classDecl, value);\r\n }\r\n\r\n protected createByEnumType(root: TreeRoot, type: EnumType, id: string, value: any, title: string, defaultValue: any): TreeNode {\r\n let node = this.createNode(type, id)\r\n node.setTag(\"title\", title);\r\n let decl = declrepo.get(type.Decl) as EnumDecl;\r\n let data;\r\n if (decl) {\r\n data = convertBaicKindToJsonValue(decl.Kind, value, defaultValue)\r\n } else {\r\n data = value;\r\n }\r\n node.data = data;\r\n return node;\r\n }\r\n\r\n /**\r\n * @param root\r\n * @param type\r\n * @param id\r\n * @param value\r\n * @param title\r\n * @param defaultValue\r\n * @param ident\r\n * @param keepOrigin 保持 value 的值\r\n * @protected\r\n */\r\n protected createByBasicType(root: TreeRoot, type: BasicType, id: string, value: any, title: string, defaultValue: any, ident?: string, keepOrigin?: boolean): TreeNode {\r\n let node = this.createNode(type, id)\r\n node.setTag(\"title\", title);\r\n node.setRoot(root);\r\n\r\n let data: any;\r\n if (keepOrigin) {\r\n data = value;\r\n } else {\r\n data = convertBaicKindToJsonValue(type.Kind, value, defaultValue);\r\n if (!data) {\r\n switch (ident) {\r\n case \"auto\":\r\n data = identutil.genOne();\r\n break;\r\n }\r\n }\r\n }\r\n node.data = data;\r\n return node;\r\n }\r\n\r\n /**\r\n * 表示是否检查约束声明中的 [hide] 标签\r\n */\r\n disableHide(): this {\r\n this._checkHide = false;\r\n return this;\r\n }\r\n\r\n disableAutoValue(): this {\r\n this._autoValue = true;\r\n return this;\r\n }\r\n\r\n replaceField(classDecl: string, fieldName: string, handler: (decl: ClassDecl, object: any, field: Field) => Field): this {\r\n this._replaceField[classDecl + \"_\" + fieldName] = handler\r\n return this;\r\n }\r\n\r\n protected _checkHide: boolean = true;\r\n protected _autoValue: boolean = true;\r\n protected _replaceField = {};\r\n\r\n}\r\n","// 用于把一些内聚的行为代码整理在一块\r\n\r\nimport { ClassDecl, declrepo } from \"./schema-decl\";\r\nimport { Field } from \"./schema-field\";\r\nimport { IType, ClassType, MapType, ArrayType, AnyType, EnumType, BasicType } from \"./schema-type\";\r\n\r\nexport class SchemaValueToJson {\r\n\r\n\r\n constructor(public field: Field) {\r\n }\r\n\r\n\r\n toJson(treeValue: any) {\r\n return this._toJson(this.field.Type, treeValue, this.field);\r\n }\r\n\r\n _toJson(type: IType, value: any, field?: Field): any {\r\n let result: any;\r\n if (type instanceof ClassDecl) {\r\n result = this.toObject_ClassDecl(type, value)\r\n } else if (type instanceof ClassType) {\r\n result = this.toObject_ClassType(type, value);\r\n } else if (type instanceof MapType) {\r\n result = this.toObject_MapType(type, value);\r\n } else if (type instanceof ArrayType) {\r\n result = this.toObject_ArrayType(type, value);\r\n } else if (type instanceof AnyType) {\r\n result = value;\r\n } else if (type instanceof EnumType) {\r\n result = value;\r\n } else if (type instanceof BasicType) {\r\n result = this.toObject_BasicType(type, value, field);\r\n }\r\n\r\n return result;\r\n }\r\n\r\n private toObject_ClassType(type: ClassType, valueObj: any): { [key: string]: any } {\r\n let desc = declrepo.get(type.Decl) as ClassDecl;\r\n if (!desc) {\r\n console.error(\"desc not found: \" + type.Decl);\r\n return;\r\n }\r\n return this.toObject_ClassDecl(desc, valueObj)\r\n }\r\n\r\n private toObject_MapType(type: MapType, valueObj: { [key: string]: any }): { [key: string]: any } {\r\n let object = {};\r\n for (const key in valueObj) {\r\n let value = valueObj[key];\r\n object[key] = this._toJson(type.Value, value);\r\n }\r\n return object;\r\n }\r\n\r\n private toObject_ArrayType(type: ArrayType, valueObj: any): { [key: string]: any } {\r\n let object = [];\r\n for (const key in valueObj) {\r\n let value = valueObj[key];\r\n object[parseInt(key)] = this._toJson(type.Elem, value);\r\n }\r\n return object;\r\n }\r\n\r\n private toObject_BasicType(decl: BasicType, valueObj: any, field: Field): any {\r\n if (field) {\r\n let tagType = field.getTag(\"type\");\r\n switch (tagType) {\r\n default:\r\n let dlink = field.getTag(\"dlink\");\r\n if (dlink && valueObj) {\r\n return valueObj._id;\r\n }\r\n }\r\n\r\n }\r\n\r\n return valueObj;\r\n }\r\n\r\n\r\n private toObject_ClassDecl(decl: ClassDecl, valueObj: any): { [key: string]: any } {\r\n if (!valueObj) {\r\n return null;\r\n }\r\n let object = {};\r\n\r\n decl.walkField((field)=>{\r\n let fname = field.Name;\r\n let val = valueObj[fname]\r\n object[fname] = this._toJson(field.Type, val);\r\n })\r\n\r\n return object;\r\n }\r\n\r\n\r\n}\r\n","import {TreeNode, TreeRoot} from \"../../ds/TreeSource\";\r\nimport {EventManager} from \"../../event/EventManager\";\r\nimport {SchemaTreeRootCreator} from \"./SchemaTreeRootCreator\";\r\nimport {Prefab} from \"cc\";\r\nimport {ArrayType, IType, MapType} from \"./schema-type\";\r\nimport {Field} from \"./schema-field\";\r\n\r\nexport interface ISchemaType {\r\n name: string;\r\n // 如果没有定义,需要自己处理不同类型的情况\r\n matchType?: IType\r\n\r\n /**\r\n * 值转换成字符串用于显示\r\n * @param configSet\r\n * @param data\r\n * @param typeValue\r\n */\r\n valueToText: (dataNode: TreeNode, field: Field, typeValue: string) => string;\r\n\r\n /**\r\n * 转换成识别号\r\n */\r\n valueToIdent: Function;\r\n\r\n /**\r\n * 编辑器中使用的预设体\r\n */\r\n valueToPrefab?: (dataNode: TreeNode, field: Field, typeValue: string) => Prefab;\r\n}\r\n\r\n\r\nexport class SchemaManager extends EventManager {\r\n\r\n registerExtendType(typ: ISchemaType) {\r\n this._typeExtendMap[typ.name] = typ;\r\n }\r\n\r\n getExtendTypeByField(field: Field): ISchemaType {\r\n for (let key in field.Tags) {\r\n let typ = this._typeExtendMap[key];\r\n if (typ) {\r\n return typ\r\n }\r\n\r\n }\r\n return null\r\n }\r\n\r\n /**\r\n * 通过约束树的节点获取该节点定义的扩展类型\r\n * 如果是 map/array 的子节点,则返回 map和array 中定义的扩展类型\r\n * @param node tags = {field:Field, schema:IType}\r\n */\r\n getExtendTypeByNode(node: TreeNode): ISchemaType {\r\n let field = node.getTag(\"field\");\r\n if (!field) {\r\n field = node.parent.getTag(\"field\")\r\n }\r\n let stype: IType = node.getTag(\"schema\");\r\n let extype;\r\n for (let key in field.Tags) {\r\n let typ = this._typeExtendMap[key];\r\n if (typ) {\r\n extype = typ;\r\n break;\r\n }\r\n }\r\n if (!extype) {\r\n return null;\r\n }\r\n if (!extype.matchType) {\r\n return extype\r\n }\r\n if (stype instanceof ArrayType) {\r\n if (extype.matchType.name == stype.Elem.name) {\r\n return extype;\r\n }\r\n } else if (stype instanceof MapType) {\r\n if (extype.matchType.name == stype.Value.name) {\r\n return extype;\r\n }\r\n } else {\r\n if (extype.matchType.name == stype.name) {\r\n return extype;\r\n }\r\n }\r\n\r\n return null\r\n }\r\n\r\n getExtendType(typ: string): ISchemaType {\r\n return this._typeExtendMap[typ]\r\n }\r\n\r\n // 类型扩展集合\r\n protected _typeExtendMap: { [key: string]: ISchemaType } = {};\r\n\r\n /**\r\n * 通过约束树的节点获取该节点定义的字段信息\r\n * 如果是 map/array 的子节点,则返回 map和array 的字段信息\r\n * @param node\r\n */\r\n getFieldByNode(node: TreeNode): Field {\r\n let field = node.getTag(\"field\");\r\n if (!field) {\r\n field = node.parent.getTag(\"field\")\r\n }\r\n return field;\r\n }\r\n\r\n createByType(root: TreeRoot, type: IType, id: string, object: any, title?: string, defaultValue?: any): TreeNode {\r\n let creator = new SchemaTreeRootCreator();\r\n return creator.createByType(root, type, id, object, title, defaultValue)\r\n }\r\n\r\n public getDataNodeFieldTags(dataTyp: IType | Field, parentTyp: IType): any {\r\n if (dataTyp instanceof Field) {\r\n return dataTyp.Tags;\r\n } else {\r\n if (parentTyp && parentTyp instanceof Field) {\r\n return parentTyp.Tags;\r\n }\r\n }\r\n return null;\r\n }\r\n\r\n /**\r\n * 获取节点schema中,所在Field的Tags。\r\n * @param dataNode\r\n */\r\n public getFieldTags(dataNode: TreeNode): { [key: string]: string } {\r\n let tags;\r\n {\r\n let field: Field = dataNode.getTag(\"field\");\r\n if (field) {\r\n return field.Tags;\r\n }\r\n }\r\n {\r\n let field: Field = dataNode.parent.getTag(\"field\");\r\n if (field) {\r\n return field.Tags\r\n }\r\n }\r\n\r\n if (!tags) {\r\n tags = {};\r\n }\r\n\r\n return tags;\r\n }\r\n}\r\n\r\n\r\nexport var schemamgr = new SchemaManager();\r\n\r\n","// 用于把一些内聚的行为代码整理在一块\r\nimport {TreeNode} from \"../../ds\";\r\nimport {schemamgr} from \"./SchemaManager\";\r\nimport {ClassDecl, declrepo, EnumDecl} from \"./schema-decl\";\r\nimport {AnyType, ArrayType, BasicType, ClassType, EnumType, MapType} from \"./schema-type\";\r\n\r\nexport class SchemaNodeToValue {\r\n constructor(public node: TreeNode) {\r\n }\r\n\r\n toValue() {\r\n return this._toValue(this.node);\r\n }\r\n\r\n _toValue(node: TreeNode): any {\r\n let result: any;\r\n let type = node.getTag(\"schema\");\r\n if (type instanceof ClassDecl) {\r\n result = this.toObject_ClassDecl(type, node)\r\n } else if (type instanceof ClassType) {\r\n result = this.toObject_ClassType(type, node);\r\n } else if (type instanceof MapType) {\r\n result = this.toObject_MapType(type, node);\r\n } else if (type instanceof ArrayType) {\r\n result = this.toObject_ArrayType(type, node);\r\n } else if (type instanceof AnyType) {\r\n result = this.toObject_AnyType(type, node);\r\n } else if (type instanceof EnumType) {\r\n result = node.data;\r\n } else if (type instanceof BasicType) {\r\n result = this.toObject_BasicType(type, node);\r\n }\r\n return result;\r\n }\r\n\r\n private toObject_ClassType(type: ClassType, node: TreeNode): { [key: string]: any } {\r\n let desc = declrepo.get(type.Decl) as ClassDecl;\r\n if (!desc) {\r\n console.error(\"desc not found: \" + type.Decl);\r\n return;\r\n }\r\n return this.toObject_ClassDecl(desc, node)\r\n }\r\n\r\n private toObject_MapType(type: MapType, node: TreeNode): { [key: string]: any } {\r\n let object = {};\r\n for (let i = 0; i < node.children.length; i++) {\r\n let childNode = node.children[i];\r\n if (!childNode) {\r\n continue;\r\n }\r\n if (childNode.getTag(\"isNull\")) {\r\n continue;\r\n }\r\n if (type.Key instanceof EnumType) {\r\n let decl = declrepo.get(type.Key.Decl) as EnumDecl;\r\n if (!decl) {\r\n throw new Error(\"schema not found: \" + type.Key.Decl)\r\n }\r\n let value = this._toValue(childNode);\r\n if (type.Value instanceof ClassType) {\r\n } else if (type.Value instanceof MapType) {\r\n } else if (type instanceof AnyType) {\r\n } else {\r\n if (this._removeFieldDefault && childNode.getTag(\"isDefault\")) {\r\n continue;\r\n }\r\n }\r\n\r\n object[childNode.id] = value;\r\n } else {\r\n object[childNode.id] = this._toValue(childNode);\r\n }\r\n\r\n\r\n }\r\n return object;\r\n }\r\n\r\n\r\n private toObject_ArrayType(type: ArrayType, node: TreeNode): { [key: string]: any } {\r\n let object = {};\r\n for (let i = 0; i < node.children.length; i++) {\r\n let childNode = node.children[i];\r\n if (!childNode) {\r\n continue;\r\n }\r\n if (childNode.getTag(\"isNull\")) {\r\n continue;\r\n }\r\n let value = this._toValue(childNode);\r\n if (value) {\r\n object[parseInt(childNode.id)] = value;\r\n } else {// class\r\n // 数组项不能存在空\r\n object[parseInt(childNode.id)] = {}\r\n }\r\n }\r\n return object;\r\n }\r\n\r\n\r\n private toObject_AnyType(type: AnyType, node: TreeNode): any {\r\n if (this._dlinkObjectToString) {\r\n let tags = schemamgr.getFieldTags(node)\r\n let dlink = tags[\"dlink\"];\r\n if (dlink && node.data) {\r\n return node.data._id;\r\n }\r\n }\r\n\r\n let decl = node.getTag(\"decl\");\r\n if (decl) {\r\n let obj = this.toObject_ClassDecl(decl, node);\r\n obj[\"_type\"] = node.getTag(\"_type\")\r\n return obj;\r\n }\r\n\r\n\r\n return node.data;\r\n }\r\n\r\n\r\n private toObject_BasicType(type: BasicType, node: TreeNode): any {\r\n return node.data;\r\n }\r\n\r\n\r\n private toObject_ClassDecl(decl: ClassDecl, node: TreeNode): { [key: string]: any } {\r\n if (node.getTag(\"isNull\")) {\r\n return null;\r\n }\r\n\r\n let object = {};\r\n for (let i = 0; i < node.children.length; i++) {\r\n let childNode = node.children[i];\r\n if (!childNode) {\r\n continue;\r\n }\r\n\r\n if (childNode.getTag(\"isNull\")) {\r\n continue;\r\n }\r\n let type = childNode.getTag(\"schema\");\r\n if (type instanceof ClassType) {\r\n } else if (type instanceof MapType) {\r\n } else if (type instanceof AnyType) {\r\n } else {\r\n if (this._removeFieldDefault && childNode.getTag(\"isDefault\")) {\r\n continue;\r\n }\r\n }\r\n\r\n let value = this._toValue(childNode);\r\n if (value != undefined) {\r\n object[childNode.id] = value;\r\n }\r\n }\r\n\r\n return object;\r\n }\r\n\r\n\r\n /**\r\n * 动态关联的对象转化成字符串\r\n */\r\n setDlinkObjectToString(): this {\r\n this._dlinkObjectToString = true;\r\n return this;\r\n }\r\n\r\n /**\r\n * 设置移除默认的字段\r\n */\r\n setRemoveFieldDefault(): this {\r\n this._removeFieldDefault = true;\r\n return this;\r\n }\r\n\r\n protected _dlinkObjectToString: boolean = false;\r\n protected _removeFieldDefault: boolean = false;\r\n\r\n}\r\n","export class SimpleModify {\r\n constructor(public ctx: any) {\r\n }\r\n\r\n public setValue(key: string, valueOrCreator: any | Function) {\r\n this._data[key] = valueOrCreator;\r\n }\r\n\r\n protected _data = [];\r\n\r\n public getValue(key: string): any {\r\n let valueOrCreator = this._data[key];\r\n if (valueOrCreator instanceof Function) {\r\n return valueOrCreator(this.ctx);\r\n }\r\n\r\n return valueOrCreator;\r\n }\r\n}","import {IDBObject, IDBTable} from \"./iface\";\n\nexport class IDataTableConfig {\n /**\n * 名字\n */\n public name: string;\n}\nexport class DataTableConfig {\n\n /**\n * 名字\n */\n public name: string;\n\n /**\n * 数据对象的方法\n */\n public objectCreator?: (ident: any, data: any) => IDBObject;\n\n /**\n * 数据集的类\n */\n public mapCreator?: () => IDBTable;\n\n\n constructor({name, objectCreator = null, mapCreator = null}: DataTableConfig) {\n this.name = name;\n this.objectCreator = objectCreator;\n this.mapCreator = mapCreator;\n }\n}\n\n\n/**\n * 独立类型的配置表\n */\nexport class DataTableAloneConfig {\n /**\n * 名字\n */\n public name: string;\n\n /**\n * 指定项的配置,用于独立模式,通常名字为alone\n */\n public items: { [key: string]: DataTableItemConfig } = {}\n\n\n constructor({name, items}: DataTableAloneConfig) {\n this.name = name;\n this.items = items;\n }\n}\n\n\nexport interface DataTableItemConfig {\n /**\n * 数据对象的方法\n */\n objectCreator: (ident: any, data: any) => IDBObject;\n}","import {Color} from \"cc\";\r\nimport {maputil} from \"../utils/MapUtil\";\r\nimport {IConfigInfo} from \"./ConfigSet\";\r\nimport {configRepo} from \"./index_config\";\r\nimport {ClassDecl, declrepo} from \"../serial/schema/schema-decl\";\r\nimport {AnyType, ArrayType, BasicType, ClassType, EnumType, MapType} from \"../serial/schema/schema-type\";\r\n\r\n\r\nexport class Config {\r\n\r\n static createByJSONMap(编号: string, conf: IConfigInfo): Config {\r\n let obj = new Config();\r\n if (conf) {\r\n obj.分类 = maputil.string(conf, \"_catalog\");\r\n obj.类型 = maputil.string(conf, \"_type\");\r\n obj.命名空间 = maputil.string(conf, \"_namespace\");\r\n obj.父编号 = maputil.string(conf, \"_parent\");\r\n obj.默认的 = maputil.boolean(conf, \"_default\");\r\n obj.唯一的 = maputil.boolean(conf, \"_unique\");\r\n obj.名称 = maputil.string(conf, \"_name\");\r\n obj.编辑器前缀 = maputil.string(conf, \"_prefix\");\r\n obj.编辑器后缀 = maputil.string(conf, \"_suffix\");\r\n obj.编辑器路径 = maputil.string(conf, \"_path\");\r\n obj.编辑器模版 = maputil.string(conf, \"_template\");\r\n obj.编辑器数据 = maputil.map(conf, \"_editor\", {});\r\n obj.文件 = maputil.string(conf, \"_file\");\r\n obj.导出的 = maputil.number(conf, \"_export\");\r\n }\r\n obj.编号 = 编号;\r\n return obj;\r\n }\r\n\r\n static create(编号: string, 类型: string, 分类: string): Config {\r\n let obj = new Config();\r\n obj.类型 = 类型;\r\n obj.分类 = 分类;\r\n obj.编号 = 编号;\r\n\r\n return obj;\r\n }\r\n\r\n\r\n /**\r\n * 命名空间/类型\r\n */\r\n get类型标识(): string {\r\n if (this.命名空间) {\r\n return this.命名空间 + \"/\" + this.类型;\r\n }\r\n return this.类型;\r\n }\r\n\r\n calculate最终数据() {\r\n let 最终数据 = {};\r\n if (this.父编号) {\r\n if (this.父对象) {\r\n 最终数据 = maputil.clone(this.父对象.calculate最终数据());\r\n } else {\r\n 最终数据 = {};\r\n }\r\n maputil.copy(this.原始数据, 最终数据)\r\n } else {\r\n 最终数据 = maputil.clone(this.原始数据)\r\n }\r\n return 最终数据;\r\n }\r\n\r\n /**\r\n * 配置保存的数据\r\n */\r\n public get 数据(): any {\r\n if (this.最终数据) {\r\n return this.最终数据\r\n }\r\n // 在配置编辑器, 数据每次都会重新生成,降低开发难度\r\n if (this.父编号) {\r\n if (this.父对象) {\r\n this.最终数据 = maputil.clone(this.父对象.数据);\r\n } else {\r\n this.最终数据 = {};\r\n }\r\n maputil.copy(this.原始数据, this.最终数据)\r\n } else {\r\n this.最终数据 = maputil.clone(this.原始数据)\r\n }\r\n\r\n return this.最终数据\r\n }\r\n\r\n\r\n public get 编辑器名称(): string {\r\n let r = \"\";\r\n if (this.名称) {\r\n r += this.名称;\r\n } else {\r\n // todo: 考虑避免污染Config的方式\r\n switch (this.分类) {\r\n case \"卡槽\":\r\n let 索引标识 = maputil.string(this.数据, \"索引标识\");\r\n let 指定卡片 = maputil.string(this.数据, \"指定卡片\");\r\n let 名称 = maputil.string(this.数据, \"名称\");\r\n let 标识 = maputil.string(this.数据, \"标识\");\r\n r = 索引标识;\r\n if (名称) {\r\n r += \"-\" + 名称;\r\n } else if (标识) {\r\n r += \"-\" + 标识;\r\n } else if (指定卡片) {\r\n let 卡片配置 = configRepo.getBy编号(指定卡片);\r\n if (卡片配置) {\r\n r += \"-\" + 卡片配置.名称;\r\n } else {\r\n r += \"-\" + 指定卡片;\r\n }\r\n }\r\n break;\r\n default:\r\n r = this.编号;\r\n }\r\n\r\n }\r\n if (this.编辑器前缀) {\r\n r = this.编辑器前缀 + \" \" + r;\r\n }\r\n if (this.编辑器后缀) {\r\n r += \" \" + this.编辑器后缀\r\n }\r\n return r;\r\n }\r\n\r\n public get 父对象(): Config {\r\n if (!this.父编号) {\r\n return null;\r\n }\r\n return configRepo.getBy编号(this.父编号);\r\n }\r\n\r\n public 克隆(): Config {\r\n let obj = new Config();\r\n obj.类型 = this.类型;\r\n obj.分类 = this.分类;\r\n obj.编号 = this.编号;\r\n obj.父编号 = this.父编号;\r\n obj.默认的 = this.默认的;\r\n obj.唯一的 = this.唯一的;\r\n obj.名称 = this.名称;\r\n obj.编辑器前缀 = this.编辑器前缀;\r\n obj.编辑器后缀 = this.编辑器后缀;\r\n obj.编辑器路径 = this.编辑器路径;\r\n obj.编辑器模版 = this.编辑器模版;\r\n obj.编辑器数据 = this.编辑器数据;\r\n obj.文件 = this.文件;\r\n obj.导出的 = this.导出的;\r\n obj.原始数据 = this.原始数据;\r\n return obj;\r\n }\r\n\r\n\r\n /**\r\n * 设置数据\r\n * @param path /p1/p2/key\r\n * @param value\r\n */\r\n setData(path: string, value: any) {\r\n if (path == \"/\") {\r\n this.原始数据 = value;\r\n } else {\r\n maputil.setByPath(this.原始数据, path, value);\r\n }\r\n\r\n this.最终数据 = null;\r\n }\r\n\r\n removeData(path: string) {\r\n maputil.removeByPath(this.原始数据, path);\r\n }\r\n\r\n\r\n public getSchema(): ClassDecl {\r\n if (this.classDecl) {\r\n return this.classDecl;\r\n }\r\n\r\n return declrepo.get(this.get类型()) as ClassDecl;\r\n }\r\n\r\n public get类型(): string {\r\n let 类型 = this.类型\r\n if (!类型) {\r\n if (this.父对象) {\r\n 类型 = this.父对象.get类型()\r\n }\r\n }\r\n return 类型;\r\n }\r\n\r\n /**\r\n * 转化成存储到文件的map对象的值\r\n */\r\n public toSaveObj(r: any): any {\r\n let 父配置 = this.父对象;\r\n if (父配置) {\r\n if (this.类型 != 父配置.类型) {\r\n r[\"_type\"] = this.类型\r\n }\r\n } else {\r\n r[\"_type\"] = this.类型\r\n }\r\n\r\n r[\"_catalog\"] = this.分类;\r\n if (this.父编号) {\r\n r[\"_parent\"] = this.父编号\r\n }\r\n if (this.默认的) {\r\n r[\"_default\"] = true;\r\n }\r\n r[\"_export\"] = this.导出的;\r\n if (this.禁止编辑) {\r\n r[\"_disableEditor\"] = true;\r\n }\r\n if (this.禁止删除) {\r\n r[\"_disableDelete\"] = true;\r\n }\r\n if (this.编辑器前缀) {\r\n r[\"_prefix\"] = this.编辑器前缀;\r\n }\r\n if (this.编辑器后缀) {\r\n r[\"_suffix\"] = this.编辑器后缀;\r\n }\r\n if (this.编辑器路径) {\r\n r[\"_path\"] = this.编辑器路径;\r\n }\r\n if (this.编辑器模版) {\r\n r[\"_template\"] = this.编辑器模版;\r\n }\r\n if (this.编辑器数据) {\r\n r[\"_editor\"] = this.编辑器数据;\r\n }\r\n\r\n if (this.名称) {\r\n r[\"_name\"] = this.名称;\r\n }\r\n return r;\r\n }\r\n\r\n /**\r\n * 转化成存储到文件的map对象的值\r\n */\r\n public toSaveFileValue(): any {\r\n let r = this.原始数据\r\n if (this.类型) {\r\n r[\"_type\"] = this.类型\r\n }\r\n r[\"_catalog\"] = this.分类;\r\n if (this.父编号) {\r\n r[\"_parent\"] = this.父编号\r\n }\r\n if (this.默认的) {\r\n r[\"_default\"] = true;\r\n }\r\n r[\"_export\"] = this.导出的;\r\n if (this.禁止编辑) {\r\n r[\"_disableEditor\"] = true;\r\n }\r\n if (this.禁止删除) {\r\n r[\"_disableDelete\"] = true;\r\n }\r\n if (this.编辑器前缀) {\r\n r[\"_prefix\"] = this.编辑器前缀;\r\n }\r\n if (this.编辑器后缀) {\r\n r[\"_suffix\"] = this.编辑器后缀;\r\n }\r\n if (this.编辑器路径) {\r\n r[\"_path\"] = this.编辑器路径;\r\n }\r\n if (this.编辑器模版) {\r\n r[\"_template\"] = this.编辑器模版;\r\n }\r\n if (this.编辑器数据) {\r\n r[\"_editor\"] = this.编辑器数据;\r\n }\r\n\r\n if (this.名称) {\r\n r[\"_name\"] = this.名称;\r\n }\r\n return r;\r\n }\r\n\r\n /**\r\n * 转化成存储到文件的map对象 {编号:toSaveFileValue()}\r\n */\r\n public toSaveFileObject(): any {\r\n let r = {};\r\n r[this.编号] = this.toSaveFileValue();\r\n return r;\r\n }\r\n\r\n public 已变化的属性路径: { [key: string]: boolean } = {};\r\n public 发生错误的属性路径: { [key: string]: boolean } = {};\r\n\r\n public 编辑器字体颜色(属性路径: string): Color {\r\n if (this.发生错误的属性路径[属性路径]) {\r\n return new Color(\"#FF0000\");\r\n }\r\n if (this.已变化的属性路径[属性路径]) {\r\n return new Color(\"#50acf6\");\r\n }\r\n\r\n return new Color(\"#BDBDBD\");\r\n }\r\n\r\n public 更新发生错误(path: string) {\r\n let arr = path.split(\"/\");\r\n arr.shift();// 去掉第一个空\r\n while (arr.length > 0) {\r\n let p = arr.join(\"/\");\r\n this.发生错误的属性路径[\"/\" + p] = true;\r\n arr.pop();\r\n }\r\n\r\n this.发生错误的属性路径[\"/\"] = true;\r\n }\r\n\r\n protected 更新已更新(path: string) {\r\n let arr = path.split(\"/\");\r\n arr.shift();// 去掉第一个空\r\n while (arr.length > 0) {\r\n let p = arr.join(\"/\");\r\n this.已变化的属性路径[\"/\" + p] = true;\r\n\r\n arr.pop();\r\n }\r\n //\r\n this.已变化的属性路径[\"/\"] = true;\r\n }\r\n\r\n 刷新已变化的属性路径() {\r\n this.已变化的属性路径 = {};\r\n\r\n let a = maputil.flat(this.数据);\r\n let 父配置 = this.父对象;\r\n if (!父配置) {\r\n return;\r\n }\r\n let b = maputil.flat(父配置.数据);\r\n for (let aKey in a) {\r\n let aval = a[aKey];\r\n let bval = b[aKey];\r\n if (bval == undefined) {// 和父对象不是同一个类型\r\n switch (typeof aval) {\r\n case \"object\":\r\n if (aval) {\r\n let count = 0;\r\n for (let key in aval) {\r\n count++;\r\n }\r\n if (count > 0) {\r\n this.更新已更新(aKey);\r\n }\r\n }\r\n break;\r\n default:\r\n if (aval) {\r\n this.更新已更新(aKey);\r\n }\r\n break;\r\n }\r\n } else {\r\n if (aval != bval) {\r\n this.更新已更新(aKey);\r\n }\r\n }\r\n }\r\n }\r\n\r\n\r\n 刷新发生错误的属性路径() {\r\n this.发生错误的属性路径 = {};\r\n let decl = this.getSchema();\r\n if (decl) {\r\n this.刷新发生错误的属性路径_class_decl(decl, this.数据, \"\")\r\n }\r\n }\r\n\r\n protected 刷新发生错误的属性路径_class_decl(decl: ClassDecl, obj: any, path: string) {\r\n decl.walkField((field)=>{\r\n let fname = field.Name;\r\n let fval = obj[fname];\r\n let tags = field.Tags;\r\n let ftyp = field.Type;\r\n\r\n if (ftyp instanceof ClassType) {\r\n\r\n } else if (ftyp instanceof MapType) {\r\n let ktyp = ftyp.Key;\r\n let vtyp = ftyp.Value;\r\n for (let key in fval) {\r\n let mval = fval[key];\r\n let id = path + \"/\" + fname + \"/\" + key;\r\n if (vtyp instanceof ClassType) {\r\n this.刷新发生错误的属性路径_class_decl(declrepo.get(vtyp.Decl) as ClassDecl, mval, id)\r\n } else {\r\n if (tags.hasOwnProperty(\"link\")) {\r\n if (mval) {\r\n let 指向配置 = configRepo.getBy编号(mval);\r\n if (!指向配置) {\r\n this.更新发生错误(id)\r\n }\r\n }\r\n }\r\n }\r\n }\r\n } else if (ftyp instanceof ArrayType) {\r\n } else if (ftyp instanceof EnumType) {\r\n } else if (ftyp instanceof BasicType) {\r\n if (tags.hasOwnProperty(\"link\")) {\r\n if (fval) {\r\n let 指向配置 = configRepo.getBy编号(fval);\r\n if (!指向配置) {\r\n this.更新发生错误(path + \"/\" + fname)\r\n }\r\n }\r\n }\r\n } else if (ftyp instanceof AnyType) {\r\n }\r\n })\r\n }\r\n\r\n\r\n public 井号to分类编号(val: string): string {\r\n return val.replace(\"##id##\", this.分类编号)\r\n }\r\n\r\n public 分类编号to井号(val: string): string {\r\n return val.replace(this.分类编号, \"##id##\")\r\n }\r\n\r\n\r\n /**\r\n * 由类型和类型编号组成\r\n * 格式为:分类编号@分类\r\n */\r\n public 编号: string;\r\n\r\n /**\r\n * 父配置的编号\r\n */\r\n public 父编号: string\r\n\r\n public 原始数据: any = {};\r\n\r\n // 运行时数据, 发布后,在游戏中使用,避免每次都要重新更新数据\r\n public 最终数据: any;\r\n\r\n /**\r\n * 私有的文件,只在文件内部可以发现\r\n * 0-文件内可见, 1-目录内可见, 2-全局可见\r\n */\r\n public 导出的: number = 0;\r\n\r\n /**\r\n * 配置所在的文件路径\r\n */\r\n public 文件: string;\r\n /**\r\n * 配置的分类\r\n * 例如单位,技能,掉落\r\n */\r\n public 分类: string;\r\n\r\n /**\r\n * 分类编号\r\n */\r\n public 分类编号: string;\r\n\r\n /**\r\n * 配置的对象类型\r\n * 例如技能-攻击,技能-移动,技能-效果\r\n */\r\n public 类型: string\r\n public 命名空间: string\r\n\r\n /**\r\n * 编辑器使用的名称\r\n */\r\n public 名称: string\r\n\r\n /**\r\n * 编辑器的数据\r\n */\r\n public 编辑器数据: any\r\n\r\n public 编辑器前缀: string\r\n\r\n public 编辑器后缀: string;\r\n /**\r\n * 用于记录当前配置是由哪个模版创建而成\r\n */\r\n public 编辑器模版: string\r\n /**\r\n * 用于生成树结构\r\n */\r\n public 编辑器路径: string\r\n\r\n public classDecl: ClassDecl;\r\n\r\n /**\r\n * 默认的配置\r\n */\r\n public 默认的: boolean = false;\r\n\r\n /**\r\n * 在自己的分类的名称是唯一的\r\n */\r\n public 唯一的: boolean = false;\r\n\r\n /**\r\n * 用于避免误操作\r\n */\r\n public 禁止删除: boolean = false;\r\n\r\n /**\r\n * 用于避免误操作\r\n */\r\n public 禁止编辑: boolean = false;\r\n}\r\n","import {Config} from \"./Config\";\r\nimport {ITreeListItem, TreeNode, TreeRoot} from \"../ds/TreeSource\";\r\nimport {EventManager} from \"../event/EventManager\";\r\nimport {maputil} from \"../utils/MapUtil\";\r\nimport {arrayutil} from \"../utils/ArrayUtil\";\r\nimport {error, errorutil} from \"../utils/ErrorUtil\";\r\nimport {AnyType, ArrayType, BasicType, ClassType, EnumType, MapType} from \"../serial/schema/schema-type\";\r\nimport {ClassDecl, declrepo, EnumDecl} from \"../serial/schema/schema-decl\";\r\nimport {Field} from \"../serial/schema/schema-field\";\r\n\r\nexport enum ConfigSetEventSub {\r\n Add = \"add\",\r\n DELETE = \"delete\",\r\n UPDATE = \"item_update1\",\r\n}\r\n\r\nexport interface IConfigInfo {\r\n _type: string;\r\n _catalog: string;\r\n _parent: string;\r\n _export: string;\r\n _default: string;\r\n _prefix: string;\r\n _suffix: string;\r\n _name: string;\r\n _file: string;\r\n}\r\n\r\nexport class ConfigSetEvent {\r\n constructor(public sub: ConfigSetEventSub, public config: Config) {\r\n }\r\n}\r\n\r\nexport class ConfigSet extends EventManager {\r\n\r\n /**\r\n * dispatchParams = {config:Config}\r\n */\r\n static EVENT_ADD = \"add\";\r\n\r\n /**\r\n * dispatchParams = {config:Config}\r\n */\r\n static EVENT_DELETE = \"delete\";\r\n\r\n /**\r\n * dispatchParams = {config:Config}\r\n */\r\n static EVENT_UPDATE = \"item_update\";\r\n\r\n protected _data: Config[] = [];\r\n\r\n protected _indexTree: TreeRoot;\r\n\r\n public get data(): Config[] {\r\n return this._data;\r\n }\r\n\r\n\r\n constructor() {\r\n super();\r\n\r\n\r\n }\r\n\r\n /**\r\n * 加载发布后的文件\r\n * @param contentObject\r\n */\r\n public loadPublish(configMap: { [key: string]: any }) {\r\n for (let key in configMap) {\r\n let conf = configMap[key];\r\n let obj = Config.createByJSONMap(key, conf);\r\n delete conf[\"_type\"];\r\n delete conf[\"_catalog\"];\r\n delete conf[\"_parent\"];\r\n delete conf[\"_export\"];\r\n delete conf[\"_default\"];\r\n delete conf[\"_prefix\"];\r\n delete conf[\"_suffix\"];\r\n delete conf[\"_name\"];\r\n delete conf[\"_file\"];\r\n\r\n obj.原始数据 = conf;\r\n this._data.push(obj);\r\n }\r\n // 生成最终数据\r\n let root = this.生成类树();\r\n this._indexTree = root;\r\n root.origin.dump()\r\n root.walk((node: TreeNode) => {\r\n let node配置 = node.data as Config;\r\n if (!node配置) {\r\n return true;\r\n }\r\n let data = {};\r\n node配置.最终数据 = data;\r\n\r\n let decl = node配置.getSchema();\r\n if (decl) {\r\n declrepo.initObject(data, decl)\r\n }\r\n\r\n if (node.parent && node.parent.data) {\r\n let parent配置 = node.parent.data as Config;\r\n maputil.copy(parent配置.最终数据, data);\r\n }\r\n if (node.parent && node.parent.id != \"/\") {\r\n let parent配置 = node.parent.data as Config;\r\n if (!parent配置) {\r\n console.error(\"父配置不存在: \" + node.parent.id)\r\n return\r\n }\r\n if (!node配置.类型) {\r\n node配置.类型 = parent配置.类型;\r\n }\r\n if (!node配置.命名空间) {\r\n node配置.命名空间 = parent配置.命名空间;\r\n }\r\n if (!node配置.分类) {\r\n node配置.分类 = parent配置.分类;\r\n }\r\n if (!node配置.文件) {\r\n node配置.文件 = parent配置.文件;\r\n }\r\n }\r\n\r\n\r\n if (decl) {\r\n this.copyObj(node配置.原始数据, data, decl);\r\n } else {\r\n maputil.copy(node配置.原始数据, data);\r\n }\r\n node配置.刷新已变化的属性路径();\r\n node配置.刷新发生错误的属性路径();\r\n return true;\r\n })\r\n }\r\n\r\n get indexTree(): TreeRoot {\r\n return this._indexTree;\r\n }\r\n\r\n public loadByFile(file: string, contentObject: any) {\r\n for (let key in contentObject) {\r\n let conf = contentObject[key];\r\n let obj = Config.createByJSONMap(key, conf);\r\n delete conf[\"_type\"];\r\n delete conf[\"_catalog\"];\r\n delete conf[\"_parent\"];\r\n delete conf[\"_export\"];\r\n delete conf[\"_default\"];\r\n delete conf[\"_prefix\"];\r\n delete conf[\"_suffix\"];\r\n delete conf[\"_name\"];\r\n delete conf[\"_file\"];\r\n\r\n obj.原始数据 = conf;\r\n obj.文件 = file;\r\n this._data.push(obj);\r\n }\r\n }\r\n\r\n public loadByFileMap(files: any) {\r\n for (let file in files) {\r\n let fileBody = files[file];\r\n this.loadByFile(file, fileBody);\r\n\r\n }\r\n }\r\n\r\n removeAll() {\r\n this._data = [];\r\n }\r\n\r\n\r\n /**\r\n * 把源对象的数据复制到目标对象\r\n * @param source\r\n * @param target\r\n * @param decl\r\n */\r\n copyObj(source: any, target: any, decl: ClassDecl) {\r\n if (!source) {\r\n return\r\n }\r\n decl.walkField((field: Field) => {\r\n let fname = field.Name;\r\n let sourceVal = source[fname];\r\n let targetVal = target[fname];\r\n if (field.Type instanceof ClassType) {\r\n if (sourceVal != undefined) {\r\n if (!targetVal) {\r\n targetVal = declrepo.newClass(field.Type.Decl);\r\n target[fname] = targetVal;\r\n }\r\n this.copyObj(sourceVal, targetVal, declrepo.get(field.Type.Decl) as ClassDecl);\r\n }\r\n } else if (field.Type instanceof MapType) {\r\n let ktyp = field.Type.Key;\r\n let vtyp = field.Type.Value;\r\n if (sourceVal != undefined) {\r\n if (!targetVal) {\r\n targetVal = {}\r\n target[fname] = targetVal;\r\n }\r\n\r\n if (ktyp instanceof EnumType) {\r\n let enumDecl = declrepo.get(ktyp.Decl) as EnumDecl;\r\n if (!enumDecl) {\r\n throw (\"initObj MapType[key:EnumType]: description not found: \" + ktyp.Decl)\r\n }\r\n\r\n for (let ef of enumDecl.Fields) {\r\n let sourceMapVal = sourceVal[ef.Value]\r\n let targetMapVal = targetVal[ef.Value]\r\n if (vtyp instanceof ClassType) {\r\n if (!targetMapVal) {\r\n targetMapVal = declrepo.newClass(vtyp.Decl);\r\n targetVal[ef.Value] = targetMapVal;\r\n }\r\n this.copyObj(sourceMapVal, targetMapVal, declrepo.get(vtyp.Decl) as ClassDecl);\r\n } else if (vtyp instanceof EnumType) {\r\n let desc = declrepo.get(vtyp.Decl);\r\n if (!desc) {\r\n throw (\"initObj MapType.[val:EnumType]: description not found: \" + vtyp.Decl)\r\n }\r\n let enumdesc = desc as EnumDecl;\r\n let val = enumdesc.Fields[0].Value;\r\n if (field.Value != \"\") {\r\n val = field.Value;\r\n }\r\n\r\n if (sourceMapVal != undefined) {\r\n targetVal[ef.Value] = sourceMapVal;\r\n }\r\n } else if (vtyp instanceof BasicType) {\r\n if (sourceMapVal != undefined) {\r\n targetVal[ef.Value] = sourceMapVal;\r\n }\r\n }\r\n }\r\n } else {\r\n for (const skey in sourceVal) {\r\n let sourceMapVal = sourceVal[skey];\r\n if (sourceMapVal != undefined) {\r\n targetVal[skey] = sourceMapVal;\r\n }\r\n }\r\n }\r\n }\r\n } else if (field.Type instanceof ArrayType) {\r\n if (sourceVal != undefined) {\r\n if (!targetVal) {\r\n targetVal = []\r\n target[fname] = targetVal;\r\n }\r\n let elemType = field.Type.Elem;\r\n for (let index in sourceVal) {\r\n let sourceArrayVal = sourceVal[index];\r\n let targetArrayVal = targetVal[index];\r\n if (elemType instanceof ClassType) {\r\n if (sourceArrayVal != undefined) {\r\n if (!targetArrayVal) {\r\n targetArrayVal = declrepo.newClass(elemType.Decl);\r\n targetVal[index] = targetArrayVal;\r\n }\r\n this.copyObj(sourceArrayVal, targetArrayVal, declrepo.get(elemType.Decl) as ClassDecl);\r\n }\r\n } else {\r\n if (sourceArrayVal != undefined) {\r\n targetVal[index] = sourceArrayVal;\r\n }\r\n }\r\n }\r\n }\r\n } else if (field.Type instanceof EnumType) {\r\n if (sourceVal != undefined) {\r\n target[fname] = sourceVal;\r\n }\r\n\r\n } else if (field.Type instanceof BasicType) {\r\n if (sourceVal != undefined) {\r\n target[fname] = sourceVal;\r\n }\r\n } else if (field.Type instanceof AnyType) {\r\n if (sourceVal != undefined) {\r\n target[fname] = sourceVal;\r\n }\r\n }\r\n })\r\n\r\n }\r\n\r\n public 查找_通过编号(编号: string): Config {\r\n for (let i = 0; i < this._data.length; i++) {\r\n let item = this._data[i];\r\n if (item.编号 == 编号) {\r\n return item;\r\n }\r\n }\r\n\r\n return null;\r\n }\r\n\r\n public 查找_通过文件(文件: string): ConfigSet {\r\n let list = new ConfigSet();\r\n for (let i = 0; i < this._data.length; i++) {\r\n let item = this._data[i];\r\n if (item.文件 == 文件) {\r\n list._data.push(item);\r\n }\r\n }\r\n\r\n return list;\r\n }\r\n\r\n\r\n public 查找_通过类型(类型: string): ConfigSet {\r\n let list = new ConfigSet();\r\n for (let i = 0; i < this._data.length; i++) {\r\n let item = this._data[i];\r\n if (item.类型 == 类型) {\r\n list._data.push(item);\r\n }\r\n }\r\n\r\n return list;\r\n }\r\n\r\n public 查找_通过分类(分类: string): ConfigSet {\r\n let list = new ConfigSet();\r\n for (let i = 0; i < this._data.length; i++) {\r\n let item = this._data[i];\r\n if (item.分类 == 分类) {\r\n list._data.push(item);\r\n }\r\n }\r\n\r\n return list;\r\n }\r\n\r\n public 获取所有分类(指定文件: string = undefined): string[] {\r\n let r = [];\r\n for (let i = 0; i < this._data.length; i++) {\r\n let item = this._data[i];\r\n if (指定文件 && item.文件 != 指定文件) {\r\n continue\r\n }\r\n r.push(item.分类);\r\n }\r\n\r\n r = arrayutil.unique(r)\r\n return r;\r\n }\r\n\r\n public 获取所有类型(指定文件: string = undefined): string[] {\r\n let r = [];\r\n for (let i = 0; i < this._data.length; i++) {\r\n let item = this._data[i];\r\n if (指定文件 && item.文件 != 指定文件) {\r\n continue\r\n }\r\n r.push(item.类型);\r\n }\r\n\r\n r = arrayutil.unique(r)\r\n return r;\r\n }\r\n\r\n public 获取所有文件(): string[] {\r\n let r = [];\r\n for (let i = 0; i < this._data.length; i++) {\r\n let item = this._data[i];\r\n r.push(item.文件);\r\n }\r\n\r\n r = arrayutil.unique(r)\r\n r = arrayutil.sortString(r);\r\n return r;\r\n }\r\n\r\n public 生成类树(): TreeRoot {\r\n\r\n let list: ITreeListItem[] = [];\r\n list.push({data: undefined, path: \"/\", isLeaf: false, tags: {title: \"root\"}})\r\n\r\n for (let i = 0; i < this._data.length; i++) {\r\n let item = this._data[i];\r\n let parent = this.getItemParentLink(item);\r\n list.push({path: parent + \"/\" + item.编号, data: item, isLeaf: false} as ITreeListItem);\r\n }\r\n list = arrayutil.sortObject(list, false, \"path\")\r\n return TreeRoot.createByList(list);\r\n }\r\n\r\n protected getItemParentLink(item: Config): string {\r\n let link = \"\";\r\n let cur = item;\r\n while (cur) {\r\n if (cur.父编号) {\r\n if (link == \"\") {\r\n link = cur.父编号;\r\n } else {\r\n link = cur.父编号 + \"/\" + link;\r\n }\r\n cur = this.查找_通过编号(cur.父编号)\r\n } else {\r\n cur = null;\r\n }\r\n }\r\n\r\n return \"/\" + link;\r\n }\r\n\r\n /**\r\n *\r\n * @param 当前文件 优先显示当前文件的内容\r\n */\r\n public 生成类型树(当前文件: string = \"\", 默认优先: boolean = false): TreeRoot {\r\n let list: ITreeListItem[] = [];\r\n list.push({data: undefined, path: \"/\", isLeaf: false, tags: {title: \"root\"}})\r\n\r\n let 当前文件修正 = 当前文件.replace(/\\//ig, \"$\");\r\n if (当前文件) {\r\n list.push({data: undefined, path: \"/\" + 当前文件修正, isLeaf: false, tags: {title: 当前文件修正}})\r\n }\r\n if (默认优先) {\r\n list.push({data: undefined, path: \"/\" + \"默认\", isLeaf: false, tags: {title: \"默认\"}})\r\n }\r\n\r\n\r\n let 类型集合 = arrayutil.sortString(this.获取所有类型())\r\n for (let 类型 of 类型集合) {\r\n list.push({data: undefined, path: \"/\" + 类型, isLeaf: false, tags: {title: 类型}})\r\n }\r\n\r\n\r\n for (let i = 0; i < this._data.length; i++) {\r\n let item = this._data[i];\r\n if (item.文件 == 当前文件) {\r\n list.push({data: item, path: \"/\" + 当前文件修正 + \"/\" + item.编号, isLeaf: true, tags: {title: item.名称}})\r\n } else if (默认优先) {\r\n if (item.默认的) {\r\n list.push({data: item, path: \"/\" + \"默认\" + \"/\" + item.编号, isLeaf: true, tags: {title: item.名称}})\r\n } else {\r\n list.push({data: item, path: \"/\" + item.类型 + \"/\" + item.编号, isLeaf: true, tags: {title: item.名称}})\r\n }\r\n } else {\r\n list.push({data: item, path: \"/\" + item.类型 + \"/\" + item.编号, isLeaf: true, tags: {title: item.名称}})\r\n }\r\n }\r\n return TreeRoot.createByList(list);\r\n }\r\n\r\n /**\r\n * 由于树结构使用 \"/\" 来分隔,为避免冲突,把文件的 \"/\" 全替换成 $\r\n */\r\n public 生成分类树(使用分类: boolean = false, 使用文件: boolean = false): TreeRoot {\r\n\r\n let list: ITreeListItem[] = [];\r\n list.push({data: undefined, path: \"/\", isLeaf: false, tags: {title: \"root\"}})\r\n\r\n if (使用文件) {\r\n for (let file of this.获取所有文件()) {\r\n let newfile = file.replace(\"/\", \"$\");\r\n list.push({data: undefined, path: \"/\" + newfile, isLeaf: false, tags: {title: file}})\r\n }\r\n }\r\n\r\n if (使用分类) {\r\n if (使用文件) {\r\n for (let file of this.获取所有文件()) {\r\n let newfile = file.replace(\"/\", \"$\");\r\n for (let 分类 of this.获取所有分类(file)) {\r\n list.push({\r\n data: undefined,\r\n path: \"/\" + newfile + \"/\" + newfile + \"_\" + 分类,\r\n isLeaf: false,\r\n tags: {title: 分类}\r\n })\r\n }\r\n }\r\n } else {\r\n let 分类集合 = arrayutil.sortString(this.获取所有分类())\r\n for (let 分类 of 分类集合) {\r\n list.push({data: undefined, path: \"/\" + 分类, isLeaf: false, tags: {title: 分类}})\r\n }\r\n }\r\n }\r\n\r\n for (let i = 0; i < this._data.length; i++) {\r\n let item = this._data[i];\r\n let decl = item.getSchema();\r\n if (!decl) {\r\n continue;\r\n }\r\n let config = maputil.string(decl.Tags, \"config\");\r\n if (!config) {\r\n continue\r\n }\r\n if (使用文件) {\r\n let newfile = item.文件.replace(\"/\", \"$\");\r\n if (使用分类) {\r\n list.push({\r\n data: item,\r\n path: \"/\" + newfile + \"_\" + config + \"/\" + item.编号,\r\n isLeaf: true,\r\n tags: {title: item.名称}\r\n })\r\n } else {\r\n list.push({\r\n data: item,\r\n path: \"/\" + newfile + \"/\" + item.编号,\r\n isLeaf: true,\r\n tags: {title: item.名称}\r\n })\r\n }\r\n } else {\r\n if (使用分类) {\r\n list.push({\r\n data: item,\r\n path: \"/\" + config + \"/\" + item.编号,\r\n isLeaf: true,\r\n tags: {title: item.名称}\r\n })\r\n } else {\r\n list.push({data: item, path: \"/\" + item.编号, isLeaf: true, tags: {title: item.名称}})\r\n }\r\n }\r\n }\r\n\r\n return TreeRoot.createByList(list);\r\n }\r\n\r\n /**\r\n * 按指定属性进行分类\r\n * @param 指定属性\r\n */\r\n public 生成属性树(指定属性: string): TreeRoot {\r\n\r\n let list: ITreeListItem[] = [];\r\n list.push({data: undefined, path: \"/\", isLeaf: false, tags: {title: \"root\"}})\r\n\r\n let keys = {};\r\n\r\n for (let i = 0; i < this._data.length; i++) {\r\n let item = this._data[i];\r\n let 属性 = item.数据[指定属性];\r\n if (属性) {\r\n if (!keys[属性]) {\r\n keys[属性] = true;\r\n list.push({data: null, path: \"/\" + 属性, isLeaf: false, tags: {title: 属性}})\r\n }\r\n }\r\n }\r\n\r\n for (let i = 0; i < this._data.length; i++) {\r\n let item = this._data[i];\r\n let 属性 = item.数据[指定属性];\r\n if (属性) {\r\n list.push({data: item, path: \"/\" + 属性 + \"/\" + item.编号, isLeaf: true, tags: {title: item.编号}})\r\n } else {\r\n list.push({data: item, path: \"/\" + item.编号, isLeaf: true, tags: {title: item.编号}})\r\n }\r\n }\r\n\r\n return TreeRoot.createByList(list);\r\n }\r\n\r\n /**\r\n *\r\n * @param value\r\n * @param existed\r\n */\r\n public 合并(value: ConfigSet, existed?: ConfigSet): ConfigSet {\r\n if (!existed) {\r\n existed = new ConfigSet();\r\n }\r\n\r\n for (const item of value._data) {\r\n existed.data.push(item);\r\n }\r\n\r\n return existed;\r\n }\r\n\r\n\r\n public 创建配置_通过父配置(父配置编号: string, 编号: string, 选项: { 数据?: any, 信息?: IConfigInfo, 继承复制的对象?: boolean }): Config {\r\n if (this.查找_通过编号(编号)) {\r\n throw new Error(errorutil.create(\"已经存在相同编号的配置\", {编号: 编号}).toString())\r\n }\r\n let 父配置 = this.查找_通过编号(父配置编号);\r\n if (!父配置) {\r\n throw new Error(errorutil.create(\"父配置不存在\", {编号: 父配置编号}).toString())\r\n }\r\n let 新配置 = 父配置.克隆();\r\n 新配置.编号 = 编号;\r\n\r\n if (选项.继承复制的对象) {\r\n 新配置.父编号 = 父配置.编号;\r\n } else {\r\n 新配置.父编号 = 父配置.父编号;\r\n }\r\n if (选项.数据) {\r\n 新配置.原始数据 = 选项.数据;\r\n }\r\n if (选项.信息) {\r\n if (选项.信息._file) {\r\n 新配置.文件 = 选项.信息._file;\r\n }\r\n }\r\n this.添加配置(新配置);\r\n return 新配置;\r\n }\r\n\r\n /**\r\n * @param 配置\r\n * @param enableDispatch\r\n * @see ConfigSet.EVENT_ADD\r\n */\r\n public 添加配置(配置: Config, enableDispatch: boolean = true): error {\r\n if (this.查找_通过编号(配置.编号)) {\r\n return errorutil.create(\"已经存在相同编号的配置\", {编号: 配置.编号})\r\n }\r\n this._data.push(配置);\r\n if (enableDispatch) {\r\n this.dispatch(ConfigSet.EVENT_ADD, {config: 配置})\r\n }\r\n return null;\r\n }\r\n\r\n public 删除配置集(set: ConfigSet, enableDispatch: boolean = false): error {\r\n for (let val of set.data) {\r\n this.删除配置(val.编号, enableDispatch);\r\n }\r\n return null;\r\n }\r\n\r\n /**\r\n *\r\n * @param 编号\r\n * @param enableDispatch\r\n * @see ConfigSet.EVENT_DELETE\r\n */\r\n public 删除配置(编号: string, enableDispatch: boolean = true): error {\r\n let 配置 = this.查找_通过编号(编号);\r\n if (!配置) {\r\n return errorutil.create(\"配置不存在\", {编号: 编号})\r\n }\r\n let index = this._data.indexOf(配置);\r\n this._data.splice(index, 1);\r\n if (enableDispatch) {\r\n this.dispatch(ConfigSet.EVENT_DELETE, {config: 配置})\r\n }\r\n return null;\r\n }\r\n\r\n /**\r\n * 用于复制文件时使用,不触发事件,不修改缓存\r\n * @param 配置\r\n * @param 新编号\r\n */\r\n public 重置编号(配置: Config, 新编号: string): error {\r\n let 已存在配置 = this.查找_通过编号(新编号);\r\n if (已存在配置) {\r\n return errorutil.create(\"新编号的配置已经存在\", {编号: 新编号})\r\n }\r\n let 修改的编号 = 配置.编号;\r\n for (let child of this._data) {\r\n let str = JSON.stringify(child.原始数据);\r\n let re = new RegExp(`${修改的编号}`, \"ig\")\r\n let newstr = str.replace(re, 新编号);\r\n child.原始数据 = JSON.parse(newstr)\r\n }\r\n 配置.编号 = 新编号;\r\n }\r\n\r\n 删除_通过文件路径(路径: string) {\r\n for (let i = 0; i < this._data.concat().length; i++) {\r\n let item = this._data[i];\r\n if (item.文件 == 路径) {\r\n let index = this._data.indexOf(item);\r\n this._data.splice(index, 1);\r\n }\r\n }\r\n }\r\n\r\n 重置文件路径(fromPath, toPath) {\r\n let configs = this.查找_通过文件(fromPath);\r\n for (const config of configs.data) {\r\n config.文件 = toPath;\r\n }\r\n }\r\n\r\n /**\r\n *\r\n * 与setData一样, 但会派发 ConfigSet.EVENT_UPDATE\r\n * @param 配置\r\n * @param path\r\n * @param value\r\n */\r\n public 设置配置值(配置: Config, path: string, value: any) {\r\n 配置.setData(path, value)\r\n this.dispatch(ConfigSet.EVENT_UPDATE, {config: 配置})\r\n }\r\n\r\n public addItem(配置: Config) {\r\n if (this.查找_通过编号(配置.编号)) {\r\n return;\r\n }\r\n\r\n this._data.push(配置);\r\n }\r\n\r\n public removeItem(编号: string) {\r\n let 配置 = this.查找_通过编号(编号);\r\n if (!配置) {\r\n return;\r\n }\r\n let index = this._data.indexOf(配置);\r\n this._data.splice(index, 1);\r\n return null;\r\n }\r\n\r\n\r\n public dispatchUpdateByIdent(ident: string) {\r\n let config = this.查找_通过编号(ident);\r\n if (!config) {\r\n return;\r\n }\r\n this.dispatch(ConfigSet.EVENT_UPDATE, {config: config})\r\n }\r\n\r\n public dispatchUpdate(config: Config) {\r\n this.dispatch(ConfigSet.EVENT_UPDATE, {config: config})\r\n }\r\n\r\n /**\r\n * 转换成保存到文件的对象\r\n */\r\n toSaveFileObject(): { [key: string]: any } {\r\n let obj = {}\r\n for (let child of this._data) {\r\n obj[child.编号] = child.toSaveFileValue();\r\n }\r\n\r\n return obj;\r\n }\r\n\r\n toKeys(): string[] {\r\n let r = [];\r\n for (let val of this._data) {\r\n r.push(val.编号);\r\n }\r\n return r;\r\n }\r\n}","import {ConfigSet} from \"./ConfigSet\";\r\nimport {TreeRoot} from \"../ds\";\r\n\r\nexport class ConfigManager {\r\n\r\n _default: ConfigSet;\r\n get default(): ConfigSet {\r\n if (!this._default) {\r\n this._default = new ConfigSet()\r\n }\r\n return this._default;\r\n }\r\n\r\n\r\n registerCascader(key: string, root: TreeRoot) {\r\n this._cascader[key] = root;\r\n }\r\n\r\n getCascader(path: string): TreeRoot {\r\n let arr = path.split(\"/\");\r\n let key = arr.shift();\r\n let casader = this._cascader[key];\r\n if (!casader) {\r\n return;\r\n }\r\n if (arr.length == 0) {\r\n return casader;\r\n }\r\n let child = casader.getNodeByPath(arr.join(\"/\"))\r\n if (!child) {\r\n return;\r\n }\r\n return child.toRoot();\r\n }\r\n\r\n _cascader: { [key: string]: TreeRoot } = {};\r\n\r\n}\r\n\r\n\r\nexport const configmgr = new ConfigManager();\r\n\r\n","import {ITreeListItem, TreeRoot} from \"../ds/TreeSource\";\nimport {Dictionary, DictIterator} from \"../ds/Dictionary\";\nimport {Config} from \"./Config\";\nimport {arrayutil} from \"../utils/ArrayUtil\";\nimport {maputil} from \"../utils/MapUtil\";\nimport {error, errorutil} from \"../utils/ErrorUtil\";\nimport {pathutil} from \"../utils/PathUtil\";\nimport {stringutil} from \"../utils/StringUtil\";\n\n\nexport class ConfigDict extends Dictionary<string, Config> {\n public getBy编号(编号: string): Config {\n return this.get(编号);\n }\n\n public findByCondition(cond: (key: string, val: Config, iterator: DictIterator) => boolean): this {\n let dictionary = super.findByCondition(cond, new ConfigDict());\n return dictionary as unknown as this;\n }\n\n public getBy模版(编号: string): Config {\n return this.firstByCondition((key, val) => {\n return val.编辑器模版 == 编号;\n })\n }\n\n public listBy文件(指定文件: string = \"\"): ConfigDict {\n return this.findByCondition((key, item): boolean => {\n return item.文件 == 指定文件\n })\n }\n\n public listBy目录(指定目录: string = \"\"): ConfigDict {\n return this.findByCondition((key, item): boolean => {\n return item.文件.indexOf(指定目录) != -1\n })\n }\n\n public listBy分类(指定分类: string = \"\"): ConfigDict {\n return this.findByCondition((key, item): boolean => {\n return item.分类 == 指定分类\n })\n }\n\n public listBy类型(指定类型: string = \"\"): ConfigDict {\n return this.findByCondition((key, item): boolean => {\n return item.类型 == 指定类型\n });\n }\n\n public list所有分类(): string[] {\n let r = [];\n this.forEach((key, item) => {\n r.push(item.分类);\n })\n r = arrayutil.unique(r)\n r = arrayutil.sortString(r);\n return r;\n }\n\n public list所有类型(): string[] {\n let r = [];\n this.forEach((key, item) => {\n r.push(item.类型);\n })\n r = arrayutil.unique(r)\n r = arrayutil.sortString(r);\n return r;\n }\n\n public list所有文件(): string[] {\n let r = [];\n this.forEach((key, item) => {\n r.push(item.文件);\n })\n\n r = arrayutil.unique(r)\n r = arrayutil.sortString(r);\n return r;\n }\n\n /**\n * @param 当前文件 优先显示当前文件的内容\n * @param 默认优先\n * @param 路径名和标题处理器 默认使用[item.编号, item.名称]\n */\n public create目录树(当前文件: string = \"\", 默认优先: boolean = false, 路径名和标题处理器?: (item: Config) => [string, string] | null): TreeRoot {\n let list: ITreeListItem[] = [];\n list.push({data: undefined, path: \"/\", isLeaf: false, tags: {title: \"root\"}})\n let 当前目录 = pathutil.getDir(当前文件);\n\n // let 当前文件修正 = 当前目录;\n let 当前文件修正 = 当前目录.split(\"/\").slice(1).join(\"$\");\n if (当前文件) {\n list.push({data: undefined, path: \"/\" + 当前文件修正, isLeaf: false, tags: {title: 当前文件修正}})\n }\n if (默认优先) {\n list.push({data: undefined, path: \"/\" + \"默认\", isLeaf: false, tags: {title: \"默认\"}})\n }\n\n this.forEach((key, item) => {\n let itemdir = pathutil.getDir(item.文件)\n switch (item.导出的) {\n case 0:// 文件内\n if (item.文件 != 当前文件) {\n return;\n }\n break;\n case 1:// 目录内\n let tempDir = \"\";\n let [prevDir, lastDir] = stringutil.splitLastArray(itemdir, \"/\");\n if (lastDir != \"\" && lastDir[0] == \"#\") {\n tempDir = prevDir;\n } else {\n tempDir = itemdir;\n }\n\n if (当前目录.indexOf(tempDir) == -1) {\n return;\n }\n break;\n case 2:// 全局\n\n }\n\n let 检查文件和目录 = function () {\n if (item.文件 == 当前文件) {\n return true;\n }\n if (当前目录.indexOf(itemdir) != -1) {\n return true;\n }\n let [prevDir, lastDir] = stringutil.splitLastArray(itemdir, \"/\");\n if (lastDir != \"\" && lastDir[0] == \"#\") {\n if (当前目录.indexOf(prevDir) != -1) {\n return true;\n }\n }\n return false;\n }();\n\n let path名称 = \"\";\n let tag名称 = \"\";\n\n if (路径名和标题处理器) {\n let r = 路径名和标题处理器(item);\n if (r) {\n [path名称, tag名称] = r;\n } else {\n path名称 = item.编号;\n tag名称 = item.名称;\n }\n } else {\n path名称 = item.编号;\n tag名称 = item.名称;\n }\n\n\n let lastItemDir = itemdir.split(\"/\").slice(1).join(\"/\")\n if (检查文件和目录) {\n list.push({data: item, path: \"/\" + 当前文件修正 + \"/\" + path名称, isLeaf: true, tags: {title: `[${stringutil.splitLast(itemdir, \"/\")}] ${tag名称}`}})\n } else if (默认优先) {\n if (item.默认的) {\n list.push({data: item, path: \"/\" + \"默认\" + \"/\" + path名称, isLeaf: true, tags: {title: tag名称}})\n } else {\n list.push({data: item, path: \"/\" + lastItemDir + \"/\" + path名称, isLeaf: true, tags: {title: tag名称}})\n }\n } else {\n list.push({data: item, path: \"/\" + lastItemDir + \"/\" + path名称, isLeaf: true, tags: {title: tag名称}})\n }\n });\n return TreeRoot.createByList(list);\n }\n\n\n /**\n * @param 当前文件 优先显示当前文件的内容\n * @param 默认优先\n * @param 路径名和标题处理器 默认使用[item.编号, item.名称]\n */\n public create类型树(当前文件: string = \"\", 默认优先: boolean = false, 路径名和标题处理器?: (item: Config) => [string, string] | null): TreeRoot {\n let list: ITreeListItem[] = [];\n list.push({data: undefined, path: \"/\", isLeaf: false, tags: {title: \"root\"}})\n let 当前目录 = pathutil.getDir(当前文件);\n\n // let 当前文件修正 = 当前目录;\n let 当前文件修正 = 当前目录.replace(/\\//ig, \"$\");\n if (当前文件) {\n list.push({data: undefined, path: \"/\" + 当前文件修正, isLeaf: false, tags: {title: 当前文件修正}})\n }\n if (默认优先) {\n list.push({data: undefined, path: \"/\" + \"默认\", isLeaf: false, tags: {title: \"默认\"}})\n }\n let 类型集合 = this.list所有类型()\n for (let 类型 of 类型集合) {\n list.push({data: undefined, path: \"/\" + 类型, isLeaf: false, tags: {title: 类型}})\n }\n\n this.forEach((key, item) => {\n let itemdir = pathutil.getDir(item.文件)\n switch (item.导出的) {\n case 0:// 文件内\n if (item.文件 != 当前文件) {\n return;\n }\n break;\n case 1:// 目录内\n let tempDir = \"\";\n let [prevDir, lastDir] = stringutil.splitLastArray(itemdir, \"/\");\n if (lastDir != \"\" && lastDir[0] == \"#\") {\n tempDir = prevDir;\n } else {\n tempDir = itemdir;\n }\n\n if (当前目录.indexOf(tempDir) == -1) {\n return;\n }\n break;\n case 2:// 全局\n\n }\n\n let 检查文件和目录 = function () {\n if (item.文件 == 当前文件) {\n return true;\n }\n if (当前目录.indexOf(itemdir) != -1) {\n return true;\n }\n let [prevDir, lastDir] = stringutil.splitLastArray(itemdir, \"/\");\n if (lastDir != \"\" && lastDir[0] == \"#\") {\n if (当前目录.indexOf(prevDir) != -1) {\n return true;\n }\n }\n return false;\n }();\n\n let path名称 = \"\";\n let tag名称 = \"\";\n\n if (路径名和标题处理器) {\n let r = 路径名和标题处理器(item);\n if (r) {\n [path名称, tag名称] = r;\n } else {\n path名称 = item.编号;\n tag名称 = item.名称;\n }\n } else {\n path名称 = item.编号;\n tag名称 = item.名称;\n }\n\n\n if (检查文件和目录) {\n list.push({data: item, path: \"/\" + 当前文件修正 + \"/\" + path名称, isLeaf: true, tags: {title: `[${stringutil.splitLast(itemdir, \"/\")}] ${tag名称}`}})\n } else if (默认优先) {\n if (item.默认的) {\n list.push({data: item, path: \"/\" + \"默认\" + \"/\" + path名称, isLeaf: true, tags: {title: tag名称}})\n } else {\n list.push({data: item, path: \"/\" + item.类型 + \"/\" + path名称, isLeaf: true, tags: {title: tag名称}})\n }\n } else {\n list.push({data: item, path: \"/\" + item.类型 + \"/\" + path名称, isLeaf: true, tags: {title: tag名称}})\n }\n });\n return TreeRoot.createByList(list);\n }\n\n\n /**\n * 由于树结构使用 \"/\" 来分隔,为避免冲突,把文件的 \"/\" 全替换成 $\n */\n public create分类树(使用分类: boolean = false, 使用文件: boolean = false, 使用名称路径 = false): TreeRoot {\n\n let list: ITreeListItem[] = [];\n list.push({data: undefined, path: \"/\", isLeaf: false, tags: {title: \"root\"}})\n\n if (使用文件) {\n for (let file of this.list所有文件()) {\n let newfile = file.replace(\"/\", \"$\");\n list.push({data: undefined, path: \"/\" + newfile, isLeaf: false, tags: {title: file}})\n }\n }\n\n if (使用分类) {\n if (使用文件) {\n for (let file of this.list所有文件()) {\n let newfile = file.replace(\"/\", \"$\");\n for (let 分类 of this.listBy文件(file).list所有分类()) {\n list.push({\n data: undefined,\n path: \"/\" + newfile + \"/\" + newfile + \"_\" + 分类,\n isLeaf: false,\n tags: {title: 分类}\n })\n }\n }\n } else {\n let 分类集合 = arrayutil.sortString(this.list所有分类())\n for (let 分类 of 分类集合) {\n list.push({data: undefined, path: \"/\" + 分类, isLeaf: false, tags: {title: 分类}})\n }\n }\n }\n\n\n this.forEach((key, item) => {\n let decl = item.getSchema();\n if (!decl) {\n return;\n }\n let config = maputil.string(decl.Tags, \"config\");\n if (!config) {\n return\n }\n\n let path名称 = \"\";\n let tag名称 = \"\";\n if (使用名称路径) {\n path名称 = item.名称;\n tag名称 = stringutil.splitLast(item.名称, \"/\")\n } else {\n tag名称 = item.名称;\n path名称 = item.编号;\n }\n\n if (使用文件) {\n let newfile = item.文件.replace(\"/\", \"$\");\n if (使用分类) {\n list.push({data: item, path: \"/\" + newfile + \"_\" + config + \"/\" + path名称, isLeaf: true, tags: {title: tag名称}})\n } else {\n list.push({data: item, path: \"/\" + newfile + \"/\" + path名称, isLeaf: true, tags: {title: tag名称}})\n }\n } else {\n if (使用分类) {\n list.push({data: item, path: \"/\" + config + \"/\" + path名称, isLeaf: true, tags: {title: tag名称}})\n } else {\n list.push({data: item, path: \"/\" + path名称, isLeaf: true, tags: {title: tag名称}})\n }\n }\n })\n\n return TreeRoot.createByList(list);\n }\n\n\n /**\n * 按指定属性进行分类\n * @param 指定属性\n */\n public create属性树(指定属性: string): TreeRoot {\n\n let list: ITreeListItem[] = [];\n list.push({data: undefined, path: \"/\", isLeaf: false, tags: {title: \"root\"}})\n\n let keys = {};\n\n this.forEach((key, item) => {\n let 属性 = item.数据[指定属性];\n if (属性) {\n if (!keys[属性]) {\n keys[属性] = true;\n list.push({data: null, path: \"/\" + 属性, isLeaf: false, tags: {title: 属性}})\n }\n }\n })\n\n this.forEach((key, item) => {\n let 属性 = item.数据[指定属性];\n if (属性) {\n list.push({data: item, path: \"/\" + 属性 + \"/\" + item.编号, isLeaf: true, tags: {title: item.编号}})\n } else {\n list.push({data: item, path: \"/\" + item.编号, isLeaf: true, tags: {title: item.编号}})\n }\n });\n\n return TreeRoot.createByList(list);\n }\n\n /**\n * 用于复制文件时使用,不触发事件,不修改缓存\n * @param 配置\n * @param 新编号\n */\n public reset编号(配置: Config, 新编号: string): error {\n let 已存在配置 = this.getBy编号(新编号);\n if (已存在配置) {\n return errorutil.create(\"新编号的配置已经存在\", {编号: 新编号})\n }\n let 修改的编号 = 配置.编号;\n // 修改相关项的编号\n this.forEach((key, item) => {\n let str = JSON.stringify(item.原始数据);\n let re = new RegExp(`${修改的编号}`, \"ig\")\n let newstr = str.replace(re, 新编号);\n item.原始数据 = JSON.parse(newstr)\n })\n 配置.编号 = 新编号;\n }\n\n /**\n * 转换成保存到文件的对象\n */\n public to保存对象(): { [key: string]: any } {\n let obj = {}\n\n this.forEach((key, item) => {\n obj[item.编号] = item.toSaveFileValue();\n })\n return obj;\n }\n\n /**\n * 重置索引树\n *\n */\n public resetIndexTree(): TreeRoot {\n let dict: ConfigDict = this;\n let list: ITreeListItem[] = [];\n list.push({data: undefined, path: \"/\", isLeaf: false, tags: {title: \"root\"}})\n\n this.forEach((key, item) => {\n let parent = dict.getParentLink(item);\n list.push({path: parent + \"/\" + item.编号, data: item, isLeaf: false} as ITreeListItem);\n })\n list = arrayutil.sortObject(list, false, \"path\")\n return TreeRoot.createByList(list);\n }\n\n\n public getParentLink(item: Config): string {\n let link = \"\";\n let cur = item;\n try {\n while (cur) {\n if (cur.父编号) {\n if (link == \"\") {\n link = cur.父编号;\n } else {\n link = cur.父编号 + \"/\" + link;\n }\n cur = this.get(cur.父编号)\n } else {\n cur = null;\n }\n }\n\n } catch (e) {\n console.log(\"error getParentLink\")\n }\n\n return \"/\" + link;\n }\n\n\n /**\n * 重置索引树\n *\n */\n static createIndexTree(dict: ConfigDict): TreeRoot {\n let list: ITreeListItem[] = [];\n list.push({data: undefined, path: \"/\", isLeaf: false, tags: {title: \"root\"}})\n\n dict.forEach((key, item) => {\n let parent = dict.getParentLink(item);\n list.push({path: parent + \"/\" + item.编号, data: item, isLeaf: false} as ITreeListItem);\n })\n list = arrayutil.sortObject(list, false, \"path\")\n return TreeRoot.createByList(list);\n }\n}\n\n\nexport class ClassConfigDict extends ConfigDict {\n constructor() {\n super();\n\n this.onSet(this, (key, value) => {\n if (value.名称) {\n this.index标识[value.名称] = value;\n }\n })\n this.onDelete(this, (key, value) => {\n if (value.名称) {\n delete this.index标识[value.名称];\n }\n\n })\n }\n\n getBy字符串(val: string): Config {\n if (!val) {\n throw new Error(\"参数不能为空\")\n }\n if (val[0] == \"#\") {\n let 标识 = val.substring(1);\n return this.index标识[标识];\n }\n\n return this.getBy编号(val);\n }\n\n\n getBy标识(val: string): Config {\n return this.index标识[val];\n }\n\n\n protected index标识 = {};\n}","export class ConfigEvent {\n\n /**\n * dispatchParams = {config:Config}\n */\n static EVENT_ADD = \"add\";\n\n /**\n * dispatchParams = {config:Config}\n */\n static EVENT_DELETE = \"delete\";\n\n /**\n * dispatchParams = {config:Config}\n */\n static EVENT_UPDATE = \"item_update\";\n\n}","import {ClassConfigDict, ConfigDict} from \"./ConfigDict\";\nimport {Config} from \"./Config\";\nimport {maputil} from \"../utils/MapUtil\";\nimport {error, errorutil} from \"../utils/ErrorUtil\";\nimport {IConfigInfo} from \"./ConfigSet\";\nimport {ConfigEvent} from \"./ConfigEvent\";\nimport {TreeNode, TreeRoot} from \"../ds/TreeSource\";\nimport {Dictionary} from \"../ds/Dictionary\";\nimport {EventManager} from \"../event/EventManager\";\nimport {stringutil} from \"../utils/StringUtil\";\nimport {BasicType, Kind} from \"../serial/schema/schema-type\";\nimport {declrepo} from \"../serial/schema/schema-decl\";\n\n\nexport class ConfigRepo extends ConfigDict {\n constructor() {\n super();\n\n this.onSet(this, (key, value) => {\n {\n let dict = this.dictBy分类(value.分类)\n dict.set(value.编号, value)\n }\n {\n let dict = this.dictBy文件(value.文件)\n dict.set(value.编号, value)\n }\n {\n let dict = this.dictBy类型(value.类型)\n dict.set(value.编号, value)\n }\n {\n let 功能 = maputil.string(value.原始数据, \"功能\")\n if (功能 != \"\") {\n let dict = this.dictBy功能(功能)\n dict.set(value.编号, value)\n }\n }\n })\n this.onDelete(this, (key, value) => {\n {\n let dict = this.dictBy分类(value.分类)\n dict.delete(value.编号)\n }\n {\n let dict = this.dictBy类型(value.类型)\n dict.delete(value.编号)\n }\n {\n let dict = this.dictBy文件(value.文件)\n dict.delete(value.编号)\n }\n {\n let 功能 = maputil.string(value.原始数据, \"功能\")\n if (功能 != \"\") {\n let dict = this.dictBy功能(功能)\n dict.delete(value.编号)\n }\n }\n })\n }\n\n dictBy文件(文件: string): ConfigDict {\n let dict = this.index_文件.get(文件);\n if (!dict) {\n dict = new ConfigDict();\n this.index_文件.set(文件, dict)\n }\n return dict\n }\n\n\n dictBy分类(分类: string): ClassConfigDict {\n let dict = this.index_分类.get(分类);\n if (!dict) {\n dict = new ClassConfigDict();\n this.index_分类.set(分类, dict)\n }\n return dict\n }\n\n dictBy类型(类型: string): ConfigDict {\n let dict = this.index_类型.get(类型);\n if (!dict) {\n dict = new ConfigDict();\n this.index_类型.set(类型, dict)\n }\n return dict\n }\n\n dictBy功能(功能: string): ConfigDict {\n let dict = this.index_功能.get(功能);\n if (!dict) {\n dict = new ConfigDict();\n this.index_功能.set(功能, dict)\n }\n return dict\n }\n\n get编号By字符串(val: string): string {\n let config = this.getBy字符串(val);\n if (config) {\n return config.编号;\n }\n return val;\n }\n\n /**\n * 格式: @分类#标识\n * @param val\n */\n getBy字符串(val: string): Config {\n if (!val) {\n throw new Error(\"参数不能为空\")\n }\n if (val[0] == \"@\") {\n let 分类与标识 = val.substring(1);\n let [分类, 标识] = 分类与标识.split(\"#\")\n let 字典 = this.dictBy分类(分类);\n if (!字典) {\n throw new Error(\"getBy字符串: 未发现分类: 分类=\" + 标识)\n }\n return 字典.getBy标识(标识);\n }\n\n return this.getBy编号(val);\n }\n\n\n /**\n * 加载发布后的文件\n */\n public loadPublish(configMap: { [key: string]: any }) {\n for (let key in configMap) {\n let conf = configMap[key];\n let obj = Config.createByJSONMap(key, conf);\n delete conf[\"_type\"];\n delete conf[\"_catalog\"];\n delete conf[\"_parent\"];\n delete conf[\"_export\"];\n delete conf[\"_default\"];\n delete conf[\"_prefix\"];\n delete conf[\"_suffix\"];\n delete conf[\"_name\"];\n delete conf[\"_file\"];\n delete conf[\"_namespace\"];\n\n obj.原始数据 = conf;\n this.set(key, obj)\n }\n\n // 生成最终数据\n let root = ConfigDict.createIndexTree(this);\n this.index_tree = root;\n // root.origin.dump()\n root.walk((node: TreeNode) => {\n let 配置 = node.data as Config;\n if (!配置) {\n return true;\n }\n let data = {};\n // todo: 发布需要golang来实现,暂时不做处理\n 配置.最终数据 = data;\n\n let decl = 配置.getSchema();\n if (!decl) {\n throw new Error(`未发现声明: 类型=${配置.类型}`)\n }\n declrepo.initObject(data, decl);\n //\n if (node.parent && node.parent.data) {\n let parent配置 = node.parent.data as Config;\n maputil.copy(parent配置.最终数据, data);\n }\n if (node.parent && node.parent.id != \"/\") {\n let parent配置 = node.parent.data as Config;\n if (!parent配置) {\n console.error(\"父配置不存在: \" + node.parent.id)\n return\n }\n if (!配置.类型) {\n 配置.类型 = parent配置.类型;\n }\n if (!配置.命名空间) {\n 配置.命名空间 = parent配置.命名空间;\n }\n if (!配置.分类) {\n 配置.分类 = parent配置.分类;\n }\n if (!配置.文件) {\n 配置.文件 = parent配置.文件;\n }\n }\n declrepo.copyObject(配置.原始数据, data, decl);\n // 配置.刷新已变化的属性路径();\n // 配置.刷新发生错误的属性路径();\n return true;\n })\n\n root.walk((node: TreeNode) => {\n let 配置 = node.data as Config;\n if (!配置) {\n return true;\n }\n let decl = 配置.getSchema();\n declrepo.createObjectVisitor(decl, 配置.最终数据).walk((visitor, container, key, value) => {\n let valueType = visitor.lastValueType;\n if (valueType instanceof BasicType) {\n let field = visitor.lastField;\n if (valueType.Kind == Kind.String) {\n if (!value) {\n return;\n }\n if (value[0] == \"#\") {\n let link = field.getTag(\"link\");\n if (link) {\n let linkConfig = this.getBy字符串(`@${link}` + stringutil.replaceFormat(value, {\n id: 配置.名称,\n }))\n if (linkConfig) {\n container[key] = linkConfig.编号;\n }\n } else {\n container[key] = value.replace(\"#${id}\", 配置.编号);\n }\n } else if (value[0] == \"@\") {\n let linkConfig = this.getBy字符串(value)\n if (linkConfig) {\n container[key] = linkConfig.编号;\n }\n } else if (value[0] == \"!\") {\n container[key] = value.replace(\"${name}\", 配置.名称).substring(1);\n }\n }\n }\n\n })\n\n return true;\n });\n }\n\n public loadByFile(file: string, contentObject: any) {\n this._loadByFile(file, contentObject);\n }\n\n protected _loadByFile(file: string, contentObject: any) {\n for (let key in contentObject) {\n let conf = contentObject[key];\n let obj = Config.createByJSONMap(key, conf);\n delete conf[\"_type\"];\n delete conf[\"_catalog\"];\n delete conf[\"_parent\"];\n delete conf[\"_export\"];\n delete conf[\"_default\"];\n delete conf[\"_prefix\"];\n delete conf[\"_suffix\"];\n delete conf[\"_name\"];\n delete conf[\"_file\"];\n delete conf[\"_namespace\"];\n\n obj.原始数据 = conf;\n obj.文件 = file;\n this.add(obj, false)\n }\n\n let root = ConfigDict.createIndexTree(this);\n root.walk((node: TreeNode) => {\n let 配置 = node.data as Config;\n if (!配置) {\n return true;\n }\n let 父对象 = 配置.父对象;\n if (父对象) {\n if (!配置.类型) {\n 配置.类型 = 父对象.类型;\n }\n if (!配置.命名空间) {\n 配置.命名空间 = 父对象.命名空间;\n }\n if (!配置.分类) {\n 配置.分类 = 父对象.分类;\n }\n if (!配置.文件) {\n 配置.文件 = 父对象.文件;\n }\n }\n return true;\n })\n }\n\n public loadByFileMap(files: any) {\n for (let file in files) {\n let fileBody = files[file];\n this._loadByFile(file, fileBody);\n }\n }\n\n public createBy父配置(父配置编号: string, 编号: string, 选项: { 数据?: any, 信息?: IConfigInfo, 继承复制的对象?: boolean }): Config {\n if (this.getBy编号(编号)) {\n throw new Error(errorutil.create(\"已经存在相同编号的配置\", {编号: 编号}).toString())\n }\n let 父配置 = this.getBy编号(父配置编号);\n if (!父配置) {\n throw new Error(errorutil.create(\"父配置不存在\", {编号: 父配置编号}).toString())\n }\n let 新配置 = 父配置.克隆();\n 新配置.编号 = 编号;\n\n if (选项.继承复制的对象) {\n 新配置.父编号 = 父配置.编号;\n } else {\n 新配置.父编号 = 父配置.父编号;\n }\n if (选项.数据) {\n 新配置.原始数据 = 选项.数据;\n }\n if (选项.信息) {\n if (选项.信息._file) {\n 新配置.文件 = 选项.信息._file;\n }\n }\n this.add(新配置);\n return 新配置;\n }\n\n /**\n * @param 配置\n * @param enableDispatch\n * @see ConfigSet.EVENT_ADD\n */\n public add(配置: Config, enableDispatch: boolean = true): error {\n if (this.getBy编号(配置.编号)) {\n return errorutil.create(\"已经存在相同编号的配置\", {编号: 配置.编号})\n }\n this.set(配置.编号, 配置);\n if (enableDispatch) {\n this._dispatcher.dispatch(ConfigEvent.EVENT_ADD, {config: 配置})\n }\n return null;\n }\n\n public removeDict(dict: ConfigDict, enableDispatch: boolean = false): error {\n dict.forEach((key, item) => {\n this.remove(item.编号, enableDispatch);\n })\n return null;\n }\n\n /**\n *\n * @param 编号\n * @param enableDispatch\n * @see ConfigSet.EVENT_DELETE\n */\n public remove(编号: string, enableDispatch: boolean = true): error {\n let 配置 = this.getBy编号(编号);\n if (!配置) {\n return errorutil.create(\"配置不存在\", {编号: 编号})\n }\n this.delete(编号);\n if (enableDispatch) {\n this._dispatcher.dispatch(ConfigEvent.EVENT_DELETE, {config: 配置})\n }\n return null;\n }\n\n removeBy文件(路径: string) {\n let dict = this.dictBy文件(路径);\n this.removeDict(dict);\n }\n\n\n reset文件(fromPath, toPath: string) {\n let fromdict = this.dictBy文件(fromPath).clone(new ConfigDict());\n this.removeDict(fromdict);\n //\n let todict = this.dictBy文件(toPath);\n fromdict.forEach((key, item) => {\n item.文件 = toPath;\n this.set(key, item);\n })\n }\n\n /**\n *\n * 与setData一样, 但会派发 ConfigSet.EVENT_UPDATE\n * @param 配置\n * @param path\n * @param value\n */\n public set配置值(配置: Config, path: string, value: any) {\n 配置.setData(path, value)\n this._dispatcher.dispatch(ConfigEvent.EVENT_UPDATE, {config: 配置})\n }\n\n /**\n * 派发更新的消息\n * @param config\n */\n public dispatchUpdateByIdent(ident: string) {\n let config = this.getBy编号(ident);\n if (!config) {\n return;\n }\n this._dispatcher.dispatch(ConfigEvent.EVENT_UPDATE, {config: config})\n }\n\n /**\n * 派发更新的消息\n * @param config\n */\n public dispatchUpdate(config: Config) {\n this._dispatcher.dispatch(ConfigEvent.EVENT_UPDATE, {config: config})\n }\n\n\n registerCascader(key: string, root: TreeRoot) {\n this._cascader[key] = root;\n }\n\n getCascader(path: string): TreeRoot {\n let arr = path.split(\"/\");\n let key = arr.shift();\n let casader = this._cascader[key];\n if (!casader) {\n return;\n }\n if (arr.length == 0) {\n return casader;\n }\n let child = casader.getNodeByPath(arr.join(\"/\"))\n if (!child) {\n return;\n }\n return child.toRoot();\n }\n\n get dispatcher(): EventManager {\n return this._dispatcher;\n }\n\n _cascader: { [key: string]: TreeRoot } = {};\n _dispatcher = new EventManager();\n index_文件: Dictionary<string, ConfigDict> = new Dictionary();\n index_分类: Dictionary<string, ClassConfigDict> = new Dictionary();\n index_类型: Dictionary<string, ConfigDict> = new Dictionary();\n index_功能: Dictionary<string, ConfigDict> = new Dictionary();\n index_tree: TreeRoot;\n\n}\n\nexport const configRepo = new ConfigRepo();","export class DebugManager {\r\n\r\n constructor() {\r\n }\r\n\r\n\r\n // export function createCircle(target: egret.Sprite, radius: number): void {\r\n // target.graphics.beginFill(Math.random() * 0xFFFFF);\r\n // target.graphics.drawCircle(0, 0, radius);\r\n // target.graphics.endFill();\r\n // }\r\n //\r\n //\r\n // export function createCircleInStage(target: egret.Sprite, radius: number, color: number = 0xFFFFFF): void {\r\n // let gp = target.localToGlobal(0, 0);\r\n // target.graphics.beginFill(Math.random() * 0xFFFFF);\r\n // target.graphics.drawCircle(gp.x, gp.y, radius);\r\n // target.graphics.endFill();\r\n // }\r\n\r\n}\r\n\r\nexport const debugmgr = new DebugManager();","import {EventManager} from \"../event/EventManager\";\r\n\r\nexport interface CommandInfo {\r\n\r\n /**\r\n * 默认的\r\n */\r\n caller?: any\r\n name: string;\r\n handler: Function;\r\n group?: string;\r\n global: boolean;\r\n}\r\n\r\n\r\nexport class CommandManager extends EventManager {\r\n protected _infos = [];\r\n\r\n register(info: CommandInfo) {\r\n this._infos[info.name] = info;\r\n if (info.global) {\r\n window[info.name] = info.handler;\r\n }\r\n }\r\n\r\n execute(name: string, ...args: any): any {\r\n let info = this._infos[name];\r\n if (!info) {\r\n return;\r\n }\r\n\r\n let caller\r\n if (!caller) {\r\n caller = info.caller;\r\n }\r\n return info.handler.call(caller, ...args);\r\n }\r\n\r\n removeGroup(group: string) {\r\n for (let key in this._infos) {\r\n let info = this._infos[key];\r\n if (info.group == group) {\r\n delete this._infos[key];\r\n }\r\n }\r\n }\r\n}\r\n\r\n\r\nexport const cmdmgr = new CommandManager();","import {error, errorutil} from \"../utils/ErrorUtil\";\n\nimport {EventManager} from \"../event/EventManager\";\nimport {maputil} from \"../utils/MapUtil\";\nimport {ICacheObject, IModify} from \"./index\";\nimport {convertutil} from \"../utils/ConvertUtil\";\nimport {stringutil} from \"../utils/StringUtil\";\nimport {AnyType, ArrayType, BasicType, ClassType, IType, Kind, MapType, TypeName} from \"../serial/schema/schema-type\";\nimport {ClassDecl, declrepo} from \"../serial/schema/schema-decl\";\nimport {Field} from \"../serial/schema/schema-field\";\n\nlet creatorDict: { [key: string]: (data: any) => ICacheObject } = {};\n\nexport function setClassCreator(key: string, creator: (data: any) => ICacheObject) {\n if (creatorDict === null) {\n creatorDict = {};\n }\n creatorDict[key] = creator;\n if (key.indexOf(\"/\") != -1) {\n creatorDict[stringutil.splitLast(key, \"/\")] = creator;\n }\n\n}\n\nexport function getClassCreator(key: string): (data: any) => ICacheObject {\n return creatorDict[key];\n}\n\nexport function newCacheObject(data: any): ICacheObject {\n return newObjectByType(\n new CacheObject(),\n new MapType(new BasicType(Kind.String), new AnyType()),\n data\n );\n}\n\nexport function newObjectByType(obj: CacheObject, objectType: IType, data: any): ICacheObject {\n if (objectType == null) {\n throw new Error(\"objectType is nil\");\n }\n obj.schema = objectType;\n if (objectType instanceof ClassType) {\n obj.schemaDecl = declrepo.get(objectType.Decl) as ClassDecl;\n }\n obj.refUpdate(data);\n return obj;\n}\n\n\nexport enum CacheModifyMode {\n 修正结构,\n 修正字典,\n}\n\nclass ModifyField {\n // 处理修正的对象\n modify: IModify\n // 0-基础类型 1-结构类型\n modifyFieldOrItemType: number;\n modifyFieldOrItemSchema: IType;\n}\n\nexport class CacheObject extends EventManager implements ICacheObject {\n // 该对象的发生变化时触发\n static EVENT_CHANGED: string = \"changed\";\n private data: { [key: string]: any };\n schema: IType\n // 当schema为class时,临时保存\n schemaDecl: ClassDecl\n // 如果存在\n schemaField: Field;\n classId: string\n protected className: string\n\n // 字段->修改时间\n private versions: { [field: string]: number } = {};\n\n protected modifyUsed: boolean\n protected modifyMode: CacheModifyMode;\n protected modifyFieldDict: { [key: string]: ModifyField; }\n // 记录MapOrArray的修正\n protected modifyMapOrArray: IModify;\n // 0-基础类型 1-结构类型\n protected modifyFieldOrItemType: number;\n protected modifyFieldOrItemschema: IType;\n protected modifyContext: any;\n protected modifyItem0: any;\n\n refSetClassId(val: string) {\n this.classId = val;\n }\n\n refSetClassName(val: string) {\n this.className = val;\n }\n\n refClassId(): string {\n return this.classId\n }\n\n refClassType(): string {\n if (this.schemaDecl) {\n return this.schemaDecl.Name\n }\n return \"\"\n }\n\n refClassName(): string {\n return this.className;\n }\n\n /**\n * 打开修正功能后,需要设置上下文,提供给修正函数\n * @param modifyContext\n */\n refSetContext(modifyContext: any) {\n this.modifyContext = modifyContext;\n for (const dataKey in this.data) {\n let val = this.data[dataKey];\n if (val instanceof CacheObject) {\n val.refSetContext(modifyContext)\n }\n }\n }\n\n /**\n * 如果元素为对象,会自动创建一个空的ICacheObject\n * @param modify\n */\n refModifyMap(modify: IModify) {\n let modifyFieldOrItemType = 0;\n let sTyp = this.schema;\n if (sTyp instanceof MapType) {\n let vTyp = sTyp.Value\n if (vTyp instanceof AnyType) {\n modifyFieldOrItemType = 1;\n } else if (vTyp instanceof ClassType) {\n modifyFieldOrItemType = 1;\n } else {\n modifyFieldOrItemType = 0;\n }\n this.modifyFieldOrItemschema = vTyp;\n } else if (sTyp instanceof ArrayType) {\n let vTyp = sTyp.Elem\n if (vTyp instanceof AnyType) {\n modifyFieldOrItemType = 1;\n } else if (vTyp instanceof ClassType) {\n modifyFieldOrItemType = 1;\n } else {\n modifyFieldOrItemType = 0;\n }\n this.modifyFieldOrItemschema = vTyp;\n } else if (sTyp instanceof ClassType) {\n throw new Error(`refModifyMap: 不匹配的类型: 类型=结构`)\n } else {\n throw new Error(`refModifyMap:不匹配的类型`)\n }\n this.modifyMode = CacheModifyMode.修正字典;\n this.modifyMapOrArray = modify;\n this.modifyFieldOrItemType = modifyFieldOrItemType;\n if (this.data) {\n this.modifyItem0 = this.data[\"0\"];\n delete this.data[\"0\"]\n }\n this.modifyUsed = true\n }\n\n /**\n * 如果字段为对象,会自动创建一个空的ICacheObject\n * @param modify\n * @param field\n */\n refModifyClass(modify: IModify, field: string) {\n let modifyFieldOrItemType = 0;\n let modifyFieldOrItemschema = undefined;\n let sTyp = this.schema;\n if (sTyp instanceof MapType) {\n modifyFieldOrItemType = 1;\n } else if (sTyp instanceof ArrayType) {\n throw new Error(`refModifyClass: 数组不支持修正字段: 字段=${field}`)\n } else if (sTyp instanceof ClassType) {\n const declField = this.schemaDecl.getField(field);\n if (declField == null) {\n throw new Error(`refModifyClass: 未定义的字段: 字段=${field}`)\n }\n switch (declField.Type.name) {\n case TypeName.Class:\n case TypeName.Array:\n case TypeName.Map:\n modifyFieldOrItemType = 1;\n modifyFieldOrItemschema = declField.Type;\n break;\n case TypeName.Any:\n modifyFieldOrItemType = 1;\n break;\n default:\n modifyFieldOrItemType = 0;\n }\n } else {\n throw new Error(`refModifyClass:当前类型不支持修正字段: 字段=${field}`)\n }\n let modifyFieldDict = this.modifyFieldDict;\n if (modifyFieldDict == null) {\n modifyFieldDict = {};\n this.modifyFieldDict = modifyFieldDict;\n }\n let mf = new ModifyField()\n mf.modify = modify;\n mf.modifyFieldOrItemSchema = modifyFieldOrItemschema;\n mf.modifyFieldOrItemType = modifyFieldOrItemType;\n modifyFieldDict[field] = mf;\n //\n if (this.data) {\n this.modifyItem0 = this.data[field];\n }\n //\n this.modifyMode = CacheModifyMode.修正结构;\n this.modifyUsed = true\n }\n\n public refAnyType(): string {\n const val = this.data[\"_type\"];\n if (!val) {\n return \"\";\n }\n return val as string;\n }\n\n public _refGet(field: string): any {\n if (!this.data) {\n throw new Error(`对象数据为空,使用时先进行判断: 字段=${field}`)\n }\n\n if (this.modifyUsed) {\n let modify: IModify;\n let origin: any;\n switch (this.modifyMode) {\n case CacheModifyMode.修正结构: {\n let modifyField = this.modifyFieldDict[field];\n if (modifyField) {\n modify = modifyField.modify;\n origin = this.data[field];\n if (!origin) {\n if (modifyField.modifyFieldOrItemType == 1) {\n origin = this.createClassObject(modifyField.modifyFieldOrItemSchema, null)\n this.data[field] = origin;\n }\n }\n }\n break;\n }\n case CacheModifyMode.修正字典: {\n modify = this.modifyMapOrArray;\n origin = this.data[field];\n\n if (!origin) {\n if (this.modifyFieldOrItemType == 1) {\n let data = null;\n let item0 = this.modifyItem0 as ICacheObject;\n if (item0 && !item0.refIsNil()) {\n data = item0.toMap();\n }\n origin = this.createClassObject(this.modifyFieldOrItemschema, data)\n this.data[field] = origin;\n }\n }\n break;\n }\n }\n if (modify && modify.valid(this.modifyContext, field)) {\n switch (this.modifyMode) {\n case CacheModifyMode.修正字典: {\n let modifyval = modify.value(this.modifyContext, field, origin, this.modifyItem0);\n if (this.modifyFieldOrItemType == 1) {\n } else {\n this.data[field] = modifyval;\n }\n break;\n }\n case CacheModifyMode.修正结构: {\n let modifyval = modify.value(this.modifyContext, field, origin, this.modifyItem0);\n if (this.modifyFieldOrItemType == 1) {\n } else {\n this.data[field] = modifyval;\n }\n break;\n }\n\n }\n\n\n }\n }\n\n return this.data[field];\n }\n\n// 对象记录了字段发生变化时的时间,次方法通过时间判断是否发生变化\n refIsChanged(field: string, time: number): boolean {\n let setTime = this.versions[field];\n if (setTime == undefined) {\n return true;\n }\n return setTime > time;\n }\n\n // 获取发生变化的字段\n refGetChangedFields(time: number): string[] {\n let fields = [];\n for (const versionsKey in this.versions) {\n if (this.refIsChanged(versionsKey, time)) {\n fields.push(versionsKey);\n }\n }\n return fields;\n }\n\n\n refGet(field: string): any {\n return this._refGet(field);\n }\n\n refHas(field: string): boolean {\n return field in this.data;\n }\n\n refGetUint(field: string): number {\n return this.refGetInt(field);\n }\n\n refGetInt(field: string): number {\n const val = this._refGet(field);\n if (val === undefined) {\n return 0;\n }\n return val as number;\n }\n\n refGetBool(field: string): boolean {\n const val = this._refGet(field);\n if (val === undefined) {\n return false;\n }\n return val as boolean;\n }\n\n refGetFloat64(field: string): number {\n return this.refFloat64(field);\n }\n\n refFloat64(field: string): number {\n const val = this._refGet(field);\n if (val === undefined) {\n return 0.0;\n }\n return val as number;\n }\n\n refGetString(field: string): string {\n const val = this._refGet(field);\n if (val === undefined) {\n return \"\";\n }\n\n return val as string;\n }\n\n refIsObject(field: string): boolean {\n let sTyp = this.schema;\n if (sTyp instanceof MapType) {\n let vTyp = sTyp.Value\n if (vTyp instanceof AnyType) {\n return true;\n } else if (vTyp instanceof ClassType) {\n return true;\n } else {\n }\n } else if (sTyp instanceof ArrayType) {\n let eTyp = sTyp.Elem\n if (eTyp instanceof AnyType) {\n return true;\n } else if (eTyp instanceof ClassType) {\n return true;\n } else {\n }\n } else if (sTyp instanceof ClassType) {\n const declField = this.schemaDecl.getField(field);\n if (declField == null) {\n console.warn(errorutil.create('CacheObject.refIsObject: field not found', {decl: sTyp.Decl, field: field}).toString())\n return\n }\n switch (declField.Type.name) {\n case TypeName.Class:\n return true;\n case TypeName.Array:\n return true;\n case TypeName.Map:\n return true;\n case TypeName.Any:\n return true;\n default:\n }\n }\n\n return false;\n }\n\n refGetObject(field: string): ICacheObject {\n if (this.data === null) {\n throw new Error(\"get field object failed: object is nil\");\n }\n const val = this._refGet(field);\n if (!val) {\n this._refSet(this.data, field, null);\n const newVal = this.data[field];\n return newVal as ICacheObject;\n }\n\n return val as ICacheObject;\n }\n\n refNew(): this {\n this.data = {};\n return this;\n }\n\n refNewIfNil(): this {\n if (!this.data) {\n return this.refNew();\n }\n return this;\n }\n\n refIsNil(): boolean {\n return !this.data;\n }\n\n refGetArray(field: string): ICacheObject {\n return this.refGetObject(field);\n }\n\n refReplace(data: { [key: string]: any }): void {\n this.refSetNil()\n this.refUpdate(data);\n }\n\n refUpdate(data: { [key: string]: any }): void {\n if (data === null) {\n this.refSetNil();\n } else {\n if (this.data == null) {\n this.data = {};\n }\n const sdata = this.data;\n for (const field in data) {\n const val = data[field];\n if (val === undefined) {\n delete sdata[field];\n continue\n }\n const sval = sdata[field];\n if (sval == null) {\n this._refSet(sdata, field, val);\n } else {\n const obj = sval as ICacheObject;\n if (obj instanceof Object) {\n if (val === null) {\n obj.refUpdate(null);\n } else {\n obj.refUpdate(val);\n }\n } else {\n this._refSet(sdata, field, val);\n }\n }\n }\n }\n\n this.dispatch(CacheObject.EVENT_CHANGED);\n }\n\n// 设置字段的值,val会根据字段类型进行处理\n refSet(field: string, val: any) {\n this._refSet(this.data, field, val);\n this.dispatch(CacheObject.EVENT_CHANGED);\n }\n\n _refSet(sdata: { [key: string]: any }, field: string, fieldVal: any): error {\n if (field == \"_type\") {// any类型特殊处理?\n sdata[field] = fieldVal;\n return;\n }\n let sTyp = this.schema;\n if (sTyp instanceof MapType) {\n let vTyp = sTyp.Value\n if (vTyp instanceof AnyType) {\n sdata[field] = this.createSchemaAny(fieldVal);\n } else if (vTyp instanceof ClassType) {\n sdata[field] = this.createSchemaClass(vTyp, fieldVal);\n } else {\n sdata[field] = fieldVal;\n }\n } else if (sTyp instanceof ArrayType) {\n let eTyp = sTyp.Elem\n if (eTyp instanceof AnyType) {\n sdata[field] = this.createSchemaAny(fieldVal);\n } else if (eTyp instanceof ClassType) {\n sdata[field] = this.createSchemaClass(eTyp, fieldVal);\n } else {\n sdata[field] = fieldVal;\n }\n } else if (sTyp instanceof ClassType) {\n const declField = this.schemaDecl.getField(field);\n if (declField == null) {\n console.warn(errorutil.create('CacheObject.refset: field not found', {decl: sTyp.Decl, field: field}).toString())\n return\n }\n this.schemaField = declField;\n let ftyp = declField.Type;\n if (ftyp instanceof ClassType) {\n let classTyp = declField.Type as ClassType;\n let obj = fieldVal as ICacheObject;\n if (obj instanceof CacheObject) {\n } else {\n obj = this.createSchemaClass(classTyp, fieldVal);\n }\n sdata[field] = obj;\n } else if (ftyp instanceof AnyType) {\n sdata[field] = this.createSchemaAny(fieldVal);\n } else if (ftyp instanceof MapType) {\n let obj = fieldVal as ICacheObject;\n if (fieldVal == null) {\n obj = newObjectByType(new CacheObject(), declField.Type, null);\n } else {\n obj = newObjectByType(new CacheObject(), declField.Type, fieldVal);\n }\n obj.refSetContext(this.modifyContext);\n sdata[field] = obj;\n } else if (ftyp instanceof ArrayType) {\n if (fieldVal == null) {\n sdata[field] = newObjectByType(new CacheObject(), declField.Type, null);\n } else {\n switch (typeof fieldVal) {\n case \"object\":\n if (fieldVal instanceof Array) {\n let newmap = {};\n for (let i = 0; i < fieldVal.length; i++) {\n newmap[i.toString()] = fieldVal[i];\n }\n fieldVal = newmap;\n }\n let obj = newObjectByType(new CacheObject(), declField.Type, fieldVal);\n obj.refSetContext(this.modifyContext);\n sdata[field] = obj\n break;\n default:\n // 不等于空,也不为object和array,丢弃\n }\n }\n } else if (ftyp instanceof BasicType) {\n switch (ftyp.Kind) {\n case Kind.Float64:\n case Kind.Float32:\n sdata[field] = convertutil.anyToFloat(fieldVal);\n break;\n case Kind.Int8:\n case Kind.Int16:\n case Kind.Int32:\n case Kind.Int64:\n sdata[field] = convertutil.anyToInt(fieldVal);\n break;\n case Kind.Uint8:\n case Kind.Uint16:\n case Kind.Uint32:\n case Kind.Uint64:\n sdata[field] = convertutil.anyToInt(fieldVal);\n break;\n case Kind.String:\n sdata[field] = convertutil.anyToString(fieldVal);\n break;\n case Kind.Bool:\n sdata[field] = convertutil.anyToBoolean(fieldVal);\n break;\n default:\n sdata[field] = fieldVal;\n }\n } else {\n sdata[field] = fieldVal;\n }\n }\n\n this.versions[field] = Date.now()\n return null;\n }\n\n protected createSchemaClass(classTyp: ClassType, fieldVal: any): ICacheObject {\n const creator = getClassCreator(classTyp.Decl);\n if (!creator) {\n throw new Error(\"class type must set creator\")\n }\n let fieldObj: ICacheObject;\n if (fieldVal == null) {\n fieldObj = creator(null);\n } else {\n fieldObj = creator(fieldVal);\n }\n fieldObj.refSetContext(this.modifyContext);\n return fieldObj;\n }\n\n\n protected createClassObject(typ, data: any) {\n let obj;\n if (typ instanceof AnyType) {\n obj = this.createSchemaAny(data);\n } else if (typ instanceof ClassType) {\n obj = this.createSchemaClass(typ, data);\n } else if (typ instanceof MapType) {\n obj = newObjectByType(new CacheObject(), typ, data);\n obj.refSetContext(this.modifyContext);\n } else if (typ instanceof ArrayType) {\n obj = newObjectByType(new CacheObject(), typ, data);\n obj.refSetContext(this.modifyContext);\n } else {\n obj = data;\n }\n return obj;\n }\n\n protected createSchemaAny(fieldVal: any): any {\n if (fieldVal) {\n switch (typeof fieldVal) {\n case 'object':\n const _type = fieldVal['_type'];\n if (!_type) {\n return new CacheObject();\n }\n const _typeDecl = declrepo.get(_type) as ClassDecl;\n if (!_typeDecl) {\n console.error('any type decl not found: ' + _type)\n return null;\n }\n const creator = getClassCreator(_typeDecl.getIdent());\n if (!creator) {\n console.error('any type creator not found: ' + _type)\n return null;\n }\n let fieldObj: ICacheObject;\n fieldObj = creator(fieldVal);\n fieldObj.refSetContext(this.modifyContext);\n fieldObj.refSet(\"_type\", _type)\n return fieldObj;\n default:\n }\n }\n return new CacheObject();\n }\n\n refRemove(field: string): void {\n this.data[field] = null;\n delete this.data[field];\n this.versions[field] = Date.now();\n this.dispatch(CacheObject.EVENT_CHANGED);\n return;\n }\n\n refSetNil(): this {\n this.data = null;\n return this;\n }\n\n refLength(): number {\n let length = maputil.keys(this.data).length;\n if (this.modifyMode) {// 当前为数组修正\n if (this.modifyMapOrArray) {\n return this.modifyMapOrArray.length(this.modifyContext, length);\n }\n }\n return length;\n }\n\n\n refFields(): string[] {\n const r: string[] = [];\n for (const key in this.data) {\n if (key == \"_type\") {\n continue\n }\n r.push(key);\n }\n return r;\n }\n\n refNewByMap(data: { [key: string]: any }): void {\n this.refSetNil();\n this.refUpdate(data);\n return;\n }\n\n refLinkData(target: ICacheObject): void {\n this.data = target.refGetData();\n }\n\n refGetData(): { [key: string]: any } {\n return this.data;\n }\n\n toMap(): { [key: string]: any } {\n if (this.data == null) {\n return null;\n }\n const r: { [key: string]: any } = {};\n this._toMapByField(null, r);\n return r;\n }\n\n toList(): any[] {\n let r = [];\n for (const key in this.data) {\n let val = this.data[key];\n let index = parseInt(key);\n if (val instanceof CacheObject) {\n r[index] = val.toMap();\n } else {\n r[index] = val;\n }\n }\n return r;\n }\n\n toMapByField(fieldMap: { [key: string]: any }): { [key: string]: any } {\n const r: { [key: string]: any } = {};\n this._toMapByField(fieldMap, r);\n return r;\n }\n\n _toMapByField(fieldMap: { [key: string]: any }, toMap: { [key: string]: any }): void {\n const sdata = this.data;\n if (sdata === null) {\n return;\n }\n\n if (fieldMap === null) {\n fieldMap = {};\n for (const key in this.data) {\n fieldMap[key] = null;\n }\n }\n\n switch (this.schema.name) {\n case TypeName.Array: {\n let mapTyp = this.schema as ArrayType;\n switch (mapTyp.Elem.name) {\n case TypeName.Class:\n for (const fieldName in fieldMap) {\n const fieldValue = fieldMap[fieldName];\n const sval = sdata[fieldName];\n if (sval == null) {\n toMap[fieldName] = sval;\n continue;\n }\n let obj = sval as ICacheObject;\n if (fieldValue === null) {\n toMap[fieldName] = obj.toMap();\n } else {\n const tm: { [key: string]: any } = {};\n obj._toMapByField(fieldValue, tm);\n toMap[fieldName] = tm;\n }\n }\n break;\n default:\n for (const fieldName in fieldMap) {\n const sval = sdata[fieldName];\n toMap[fieldName] = sval;\n }\n break;\n }\n break;\n }\n\n case TypeName.Map: {\n let mapTyp = this.schema as MapType;\n switch (mapTyp.Value.name) {\n case TypeName.Class:\n for (const fieldName in fieldMap) {\n const fieldValue = fieldMap[fieldName];\n const sval = sdata[fieldName];\n if (sval == null) {\n toMap[fieldName] = sval;\n continue;\n }\n let obj = sval as ICacheObject;\n if (fieldValue === null) {\n toMap[fieldName] = obj.toMap();\n } else {\n const tm: { [key: string]: any } = {};\n obj._toMapByField(fieldValue, tm);\n toMap[fieldName] = tm;\n }\n }\n break;\n default:\n for (const fieldName in fieldMap) {\n const sval = sdata[fieldName];\n toMap[fieldName] = sval;\n }\n break;\n }\n }\n\n break;\n case TypeName.Class:\n const decl = this.schemaDecl;\n for (const fieldName in fieldMap) {\n const fieldValue = fieldMap[fieldName];\n const field = decl.getField(fieldName);\n if (!field) {\n if (fieldName != \"_type\") {\n console.warn(\"CacheObject.toMapByField: field not found: \" + fieldName);\n }\n continue;\n }\n const sval = sdata[fieldName];\n if (sval == null) {\n toMap[fieldName] = sval;\n continue;\n }\n\n switch (field.Type.name) {\n case TypeName.Class: {\n let classTyp = field.Type as ClassType;\n let obj = sval as ICacheObject;\n if (fieldValue === null) {\n toMap[fieldName] = obj.toMap();\n } else {\n const tm: { [key: string]: any } = {};\n obj._toMapByField(fieldValue, tm);\n toMap[fieldName] = tm;\n }\n break;\n }\n\n case TypeName.Map: {\n let obj = sval as ICacheObject;\n if (fieldValue === null) {\n toMap[fieldName] = obj.toMap();\n } else {\n const tm: { [key: string]: any } = {};\n obj._toMapByField(fieldValue, tm);\n toMap[fieldName] = tm;\n }\n break;\n }\n case TypeName.Any: {\n let obj = sval as ICacheObject;\n if (fieldValue === null) {\n toMap[fieldName] = obj.toMap();\n } else {\n const tm: { [key: string]: any } = {};\n obj._toMapByField(fieldValue, tm);\n toMap[fieldName] = tm;\n toMap[fieldName]._type = obj.refAnyType();\n }\n break;\n }\n default:\n toMap[fieldName] = sval;\n break;\n }\n }\n break;\n default:\n break;\n }\n\n return;\n }\n\n refSetObject(field: string, val: ICacheObject): void {\n this.data[field] = val;\n }\n\n}\n\n\n","import {ICacheObject} from \"./index\";\n\nexport namespace cachex {\n export function getObjectByPath(object: ICacheObject, path: string): ICacheObject {\n if (path == \"/\") {\n return object;\n }\n if (path[0] === \"/\") {\n path = path.slice(1);\n }\n const pathArr: string[] = path.split(\"/\");\n let cur: ICacheObject = object;\n while (true) {\n if (pathArr.length === 0) {\n break;\n }\n\n const field: string = pathArr[0];\n pathArr.shift();\n if (!cur.refIsObject(field)) {\n throw new Error(`路径非对象: 字段=${field}`)\n }\n cur = cur.refGetObject(field);\n }\n return cur;\n }\n\n export function getObjectFieldByPath(object: ICacheObject, path: string): [ICacheObject, string] {\n if (path[0] === \"/\") {\n path = path.slice(1);\n }\n const pathArr: string[] = path.split(\"/\");\n let cur: ICacheObject = object;\n while (true) {\n if (pathArr.length === 0) {\n break;\n }\n const f: string = pathArr[0];\n pathArr.shift();\n if (!cur.refIsObject(f)) {\n return [cur, f];\n }\n cur = cur.refGetObject(f);\n }\n return [cur, \"\"];\n }\n\n export function getFieldByPath(object: ICacheObject, path: string): any {\n if (path[0] === \"/\") {\n path = path.slice(1);\n }\n const pathArr: string[] = path.split(\"/\");\n let cur: ICacheObject = object;\n while (true) {\n if (pathArr.length === 0) {\n break;\n }\n const f: string = pathArr[0];\n pathArr.shift();\n if (!cur.refIsObject(f)) {\n if (pathArr.length != 0) {\n throw new Error(\"非法的路径\")\n }\n return cur.refGet(f);\n }\n cur = cur.refGetObject(f);\n }\n return cur;\n }\n\n export function contains(obj: ICacheObject, value: any): boolean {\n if (obj.refIsNil()) {\n return true;\n }\n let fields = obj.refFields();\n if (fields.length == 0) {\n return true;\n }\n for (const key in fields) {\n let item = obj.refGetString(key)\n if (item == value) {\n return true;\n }\n }\n\n return false;\n }\n\n}","export class XDate extends Date {\n // YYYY-MM-DDTHH:mm:ss.sssZ\n static parseString(val: string): XDate {\n return new XDate(Date.parse(val));\n }\n\n add(year?: number, month?: number, date?: number, hour?: number, minute?: number, second?: number): XDate {\n if (year) {\n this.setFullYear(this.getFullYear() + year)\n }\n if (month) {\n this.setMonth(this.getMonth() + month)\n }\n if (this) {\n this.setDate(this.getDate() + date)\n }\n if (hour) {\n this.setHours(this.getHours() + hour)\n }\n if (minute) {\n this.setMinutes(this.getMinutes() + minute)\n }\n if (second) {\n this.setSeconds(this.getSeconds() + second)\n }\n return this\n }\n\n\n /**\n * 获取当月总共天数函数\n */\n getMonthDay(): number {\n //d.getMonth()+1月份索引从0开始,天数索引从1开始,第0天即代表最后一天\n return new Date(this.getFullYear(), (this.getMonth() + 1), 0).getDate();\n }\n\n// 获取当前季度\n getQuarter(): number {\n const month = this.getMonth();\n let quarter;\n if (month >= 10) {\n quarter = 4\n } else if (month >= 7) {\n quarter = 3\n } else if (month >= 10) {\n quarter = 2\n } else if (month >= 10) {\n quarter = 1\n }\n return quarter;\n }\n\n\n startOfYear(): XDate {\n return new XDate(this.getFullYear(), 0, 1);\n }\n\n endOfYear(): XDate {\n return new XDate(this.getFullYear(), 11, 31, 23, 59, 59, 999);\n }\n\n startOfQuarter(): XDate {\n const quarter = Math.ceil(this.getMonth() / 3);\n const day = 1;\n return new XDate(this.getFullYear(), 3 * quarter - 2, day, 0, 0, 0, 0);\n }\n\n endOfQuarter(): XDate {\n const quarter = Math.ceil(this.getMonth() / 3);\n let day = 30;\n switch (quarter) {\n case 1:\n case 4:\n day = 31;\n break;\n case 2:\n case 3:\n day = 30;\n break;\n }\n return new XDate(this.getFullYear(), 3 * quarter, day, 23, 59, 59, 999999999);\n }\n\n startOfMonth(): XDate {\n return new XDate(this.getFullYear(), this.getMonth(), 1);\n }\n\n endOfMonth(): XDate {\n return new XDate(this.getFullYear(), this.getMonth() + 1, 0, 23, 59, 59, 999);\n }\n\n startOfWeek(): XDate {\n let day = this.getDay() || 7;\n return new XDate(this.getFullYear(), this.getMonth(), this.getDate() + 1 - day);\n }\n\n endOfWeek(): XDate {\n let day = this.getDay() || 7;\n return new XDate(this.getFullYear(), this.getMonth(), this.getDate() + 1 - day + 7);\n }\n\n startOfDay(): XDate {\n return new XDate(this.getFullYear(), this.getMonth(), this.getDate(), 0, 0, 0, 0);\n }\n\n endOfDay(): XDate {\n return new XDate(this.getFullYear(), this.getMonth(), this.getDate(), 23, 59, 59, 999);\n }\n\n startOfHour(): XDate {\n return new XDate(this.getFullYear(), this.getMonth(), this.getDate(), this.getHours(), 0, 0, 0);\n }\n\n endOfHour(): XDate {\n return new XDate(this.getFullYear(), this.getMonth(), this.getDate(), this.getHours(), 59, 59, 999);\n }\n\n startOfMinute(): XDate {\n return new XDate(this.getFullYear(), this.getMonth(), this.getDate(), this.getHours(), this.getMinutes(), 0, 0);\n }\n\n endOfMinute(): XDate {\n return new XDate(this.getFullYear(), this.getMonth(), this.getDate(), this.getHours(), this.getMinutes(), 59, 999);\n }\n\n startOfSecond(): XDate {\n return new XDate(this.getFullYear(), this.getMonth(), this.getDate(), this.getHours(), this.getMinutes(), this.getSeconds(), 0);\n }\n\n endOfSecond(): XDate {\n return new XDate(this.getFullYear(), this.getMonth(), this.getDate(), this.getHours(), this.getMinutes(), this.getSeconds(), 999);\n }\n\n clone(): XDate {\n return new XDate(this.getTime())\n }\n}\n\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.esm.js","sources":["../src/libs/utils/NetUtil.ts","../src/libs/utils/ErrorUtil.ts","../src/libs/ui/uimgr.ts","../src/libs/timer/Timer.ts","../src/libs/mvc/ControllerSet.ts","../src/libs/mvc/Controller.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/EventManager.ts","../src/libs/mvc/Module.ts","../src/libs/mvc/Model.ts","../src/libs/mvc/Factory.ts","../src/libs/page/PageLayer.ts","../src/libs/ds/Dictionary.ts","../src/libs/ds/List.ts","../src/libs/page/UIObjectDict.ts","../src/libs/page/Page.ts","../src/libs/page/Route.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/DictSource.ts","../src/libs/page/ViewController.ts","../src/libs/page/PageRepo.ts","../src/libs/page/PageController.ts","../src/libs/event/Listener.ts","../src/libs/event/CallbackList.ts","../src/libs/event/Dispatcher.ts","../src/libs/utils/UIUtil.ts","../src/libs/utils/Eventutil.ts","../src/libs/utils/ArrayUtil.ts","../src/libs/utils/BitUtil.ts","../src/libs/utils/StringUtil.ts","../src/libs/utils/RandUtil.ts","../src/libs/utils/MathUtil.ts","../src/libs/utils/ResUtil/LoadAtlas.ts","../src/libs/utils/ResUtil.ts","../src/libs/utils/TimeUtil.ts","../src/libs/utils/GeometryUtil.ts","../src/libs/utils/format-util.ts","../src/libs/utils/float-util.ts","../src/libs/utils/PathUtil.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 error {\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 {\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: error): 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 {error, 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, error] {\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, error] {\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 = new Scheduler()\n Scheduler.enableForTarget(this._scheduler);\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\n","import {IController, IModule} from \"./index\";\n\nexport class ControllerSet {\n constructor(mod: IModule) {\n this._mod = mod;\n }\n\n has(name: string): boolean {\n return !!this.data[name]\n }\n\n add(controller: IController) {\n if (this.data[controller.name]) {\n throw new Error(\"重复创建控制器: \" + name)\n }\n controller.init(this._mod)\n this.data[controller.name] = controller;\n }\n\n createAndEnable(name: string, ...args) {\n if (!this.has(name)) {\n this.create(name, ...args);\n }\n this.enable(name);\n }\n\n create(name: string, ...args) {\n let creator = this._creator[name];\n if (!creator) {\n throw new Error(\"controller creator not found\");\n }\n\n this.add(new creator(...args));\n }\n\n remove(name: string) {\n let ctrl = this.data[name];\n if (ctrl) {\n ctrl.dispose();\n delete this.data[name];\n }\n }\n\n disable(name: string) {\n let ctrl = this.data[name];\n if (ctrl) {\n ctrl.disable();\n }\n }\n\n enable(name: string) {\n let ctrl = this.data[name];\n if (ctrl) {\n ctrl.enable();\n }\n }\n\n enableAll() {\n for (let key in this.data) {\n let ctrl = this.data[key];\n ctrl.enable();\n }\n }\n\n disableAll() {\n for (let key in this.data) {\n let ctrl = this.data[key];\n ctrl.disable();\n }\n }\n\n dispose() {\n for (let key in this.data) {\n let ctrl = this.data[key];\n ctrl.dispose();\n }\n }\n\n\n registerCreator(name: string, creator: (...args) => IController) {\n this._creator[name] = creator;\n }\n\n protected _creator = {};\n protected _mod: IModule;\n private data: { [key: string]: IController } = {};\n}","import {IModule} from \"./Module\";\n\nexport interface IController {\n get name(): string;\n\n get module(): IModule;\n\n init(core: IModule)\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 init(core: IModule) {\n this._module = core;\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._module = null;\n this._enabled = false;\n this._name = \"\";\n }\n\n get name(): string {\n return this._name;\n }\n\n get module(): IModule {\n return this._module;\n }\n\n\n get isEnable() {\n return this._enabled;\n }\n\n protected _module: IModule;\n protected _name: string;\n protected _enabled: boolean = false;\n}","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 */\nimport { IEventManager } 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 EventManager implements IEventManager/*, 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 `EventManager`;\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 EventManager();\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","import {EventManager} from \"../event/EventManager\";\nimport { ControllerSet } from \"./ControllerSet\";\n\n\n/**\n * 一个简单的功能/库模块\n */\nexport interface IModuleSample {\n}\n\n\nexport interface IModule {\n controllers: ControllerSet\n}\n\nexport class Module extends EventManager implements IModule {\n\n constructor() {\n super();\n\n this._controllers = new ControllerSet(this);\n }\n\n get controllers(): ControllerSet {\n return this._controllers;\n }\n\n private _controllers: ControllerSet;\n}\n\n","// 用于描述数据及之间的关系\n// 也可提供对控制器的封装\nimport {EventManager} from \"../event/EventManager\";\nimport {IModule} from \"./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 EventManager {\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 \"./Module\";\nimport {IExtend} from \"./Extend\";\nimport { IController } from \"./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 {Page} from \"./Page\";\n\n/**\n * 视图管理器\n * 打开一个视图的时候,可能会听过加载资源,读取数据,调整布局,切换特效等处理,所以使用视图模式封装视图打开关闭的逻辑\n */\nexport class PageLayer {\n\n constructor(public name: string) {\n }\n\n\n close() {\n if (this.currentPage) {\n this.currentPage.controller.closeByRoute();\n }\n }\n\n /**\n * 当前的页面\n */\n currentPage: Page\n}\n","export class DictIterator {\n break() {\n this._isBreak = true;\n }\n\n isBreak(): boolean {\n return this._isBreak;\n }\n\n protected _isBreak;\n}\n\nexport class Dictionary<K = string, V = any> {\n constructor(data?: any) {\n if (data) {\n this._data = data;\n } else {\n this._data = {};\n }\n this._onSet = null;\n this._onDelete = null;\n }\n\n public reset(data: any): void {\n this._reset(data);\n }\n\n protected _reset(data: any, size?: number): void {\n this._data = data;\n if (size == undefined) {\n for (let _ in data) {\n size++;\n }\n }\n this.size = size;\n }\n\n public getData(): any {\n return this._data;\n }\n\n /**\n * 如果使用了 onSet or onDelete,需要注意清理\n */\n public clear(): void {\n this._data = {};\n this.size = 0;\n }\n\n /**\n * 克隆自身所有项到【target】对象,并返回【target】对象\n * @param target\n */\n public clone(target: this): this {\n for (const key in this._data) {\n let item = this._data[key];\n // @ts-ignore\n target.setData(key, item);\n }\n return target as this;\n }\n\n public resetByDict(dict: Dictionary): void {\n this._data = dict._data;\n this.size = dict.size;\n }\n\n public onSet(caller: any, handler: (key: K, value: V) => void): void {\n this._onSetCaller = caller;\n this._onSet = handler;\n }\n\n public onDelete(caller: any, handler: (key: K, value: V) => void): void {\n this._onDelete = handler;\n this._onDeleteCaller = caller;\n }\n\n\n /**\n * 设置键值对,如果没有发生变化,不会触发onSet函数\n * @param key\n * @param value\n */\n public set(key: K, value: V): void {\n this.setData(key, value);\n }\n\n private setData(key: K, value: V): void {\n if (this._data.hasOwnProperty(key)) {// 已经存在,数量不变化\n } else {\n this.size++;\n }\n let existed = this._data[key];\n if (existed == value) {\n return;\n }\n this._data[key] = value;\n if (this._onSet !== null) {\n this._onSet.call(this._onSetCaller, key, value);\n }\n }\n\n\n public setByMap(m: any): void {\n for (const key in m) {\n let item = m[key];\n // @ts-ignore\n this.setData(key, item);\n }\n }\n\n public addDictionary(other: Dictionary<K, V>): void {\n if (other.length() == 0) {\n return;\n }\n for (const key in other._data) {\n let item = other._data[key];\n // @ts-ignore\n this.setData(key, item);\n }\n }\n\n public deleteDictionary(other: Dictionary<K, V>): void {\n if (other.length() == 0) {\n return;\n }\n for (const key in other._data) {\n // @ts-ignore\n this.delete(key);\n }\n }\n\n /**\n * 如果不存在,返回 undefined\n * @param key\n */\n public get(key: K): V {\n return this._data[key];\n }\n\n public exist(key: K): boolean {\n return !!this._data[key];\n }\n\n public delete(key: K): void {\n this.deleteData(key);\n }\n\n private deleteData(key: K): void {\n const value = this._data[key];\n if (value === undefined) {\n return;\n }\n if (this._onDelete !== null) {\n this._onDelete.call(this._onDeleteCaller, key, value);\n }\n this._data[key] = null;\n delete this._data[key];\n this.size--;\n }\n\n public exists(key: K): boolean {\n return !!this._data[key];\n }\n\n public length(): number {\n return this.size;\n }\n\n public pop(key: K): [V, boolean] {\n const value = this._data[key];\n this.deleteData(key);\n return [value, value !== undefined];\n }\n\n public isEmpty(): boolean {\n return this.length() === 0;\n }\n\n\n public items(): V[] {\n const items: V[] = [];\n for (const key in this._data) {\n let item = this._data[key];\n items.push(item);\n }\n return items;\n }\n\n public keys(): K[] {\n const keys: K[] = [];\n for (const key in this._data) {\n keys.push(key as K);\n }\n return keys;\n }\n\n /**\n *\n * @param handler 可以使用【iterator】中断遍历\n * @return iterator 获取是否中断了\n */\n public forEach(handler: (key: K, val: V, iterator: DictIterator) => void): DictIterator {\n let iterator = new DictIterator();\n for (const key in this._data) {\n let val = this._data[key]\n // @ts-ignore\n handler(key, val, iterator)\n if (iterator.isBreak()) {\n return iterator;\n }\n }\n return iterator;\n }\n\n\n /**\n */\n public first(): V | undefined {\n for (const key in this._data) {\n return this._data[key]\n }\n return undefined\n }\n\n /**\n * @param handler 返回true结束迭代\n */\n public firstByCondition(handler: (key: K, val: V) => boolean): V | undefined {\n for (const key in this._data) {\n let val = this._data[key]\n // @ts-ignore\n if (handler(key, val)) {\n return val;\n }\n }\n }\n\n\n /**\n * 移除符合条件的项\n * @param cond 可以使用【iterator】中断遍历\n */\n public removeByCondition(cond: (key: K, val: V, iterator: DictIterator) => boolean) {\n let newdata = this._data;\n let newsize = this.size;\n let iterator = new DictIterator();\n for (const key in this._data) {\n let val = this._data[key]\n // @ts-ignore\n if (cond(key, val, iterator)) {\n newsize--;\n delete newdata[key];\n }\n if (iterator.isBreak()) {\n break;\n }\n }\n this.size = newsize;\n }\n\n /**\n * 查找符合条件的项保存到【target】对象中,并返回【target】对象\n * @param cond 可以使用【iterator】中断遍历\n * @param target 存到目标对象中\n */\n public findByCondition(cond: (key: K, val: V, iterator: DictIterator) => boolean, target: Dictionary): this {\n if (!target) {\n throw new Error(\"需要设置目标对象\")\n }\n let iterator = new DictIterator();\n let newdata = {}\n let newsize = 0;\n for (const key in this._data) {\n let val = this._data[key]\n // @ts-ignore\n if (cond(key, val, iterator)) {\n newsize++;\n newdata[key] = val;\n }\n if (iterator.isBreak()) {\n break;\n }\n }\n target._reset(newdata, newsize);\n return target as this;\n }\n\n\n public groupByCondition(createKey: (key: K, val: V) => string, ITEM_CLASS?: any): { [key: string]: any } {\n let newdata = {}\n for (const key in this._data) {\n let val = this._data[key]\n // @ts-ignore\n let newkey = createKey(key, val);\n let dict: Dictionary = newdata[newkey];\n if (!dict) {\n if (ITEM_CLASS) {\n dict = new ITEM_CLASS();\n } else {\n dict = new Dictionary();\n }\n newdata[newkey] = dict;\n }\n dict.set(key, val);\n }\n return newdata;\n }\n\n\n protected size: number = 0;\n private _data: any;\n private _onSet: ((key: K, value: V) => void) | null;\n private _onDelete: ((key: K, value: V) => void) | null;\n private _onSetCaller: any;\n private _onDeleteCaller: any;\n\n}","export class ListIterator {\r\n break() {\r\n this._isBreak = true;\r\n }\r\n\r\n isBreak(): boolean {\r\n return this._isBreak;\r\n }\r\n\r\n protected _isBreak;\r\n}\r\n\r\nexport class List<T = any> {\r\n constructor() {\r\n this._onSet = null;\r\n this._onDelete = null;\r\n }\r\n\r\n public onSet(caller: any, handler: (value: T) => void): void {\r\n this._onSetCaller = caller;\r\n this._onSet = handler;\r\n }\r\n\r\n public onDelete(caller: any, handler: (value: T) => void): void {\r\n this._onDelete = handler;\r\n this._onDeleteCaller = caller;\r\n }\r\n\r\n\r\n firstByCondition(conf: (index: number, item: T) => boolean): [number, T] {\r\n let data = this._data;\r\n for (let i = 0; i < data.length; i++) {\r\n let item = data[i];\r\n if (conf(i, item)) {\r\n return [i, item]\r\n }\r\n }\r\n\r\n return [-1, null];\r\n }\r\n\r\n lastByCondition(conf: (index: number, item: T) => boolean): [number, T] {\r\n let data = this._data;\r\n for (let i = data.length - 1; i >= 0; i--) {\r\n let item = data[i];\r\n if (conf(i, item)) {\r\n return [i, item]\r\n }\r\n }\r\n return [-1, null];\r\n }\r\n\r\n forEach(handler: (index: number, item: T, iterator: ListIterator) => void) {\r\n let iterator = new ListIterator();\r\n let data = this._data;\r\n for (let i = 0; i < data.length; i++) {\r\n let item = data[i];\r\n handler(i, item, iterator);\r\n if (iterator.isBreak()) {\r\n return iterator;\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * 移除符合条件的项, 从后往前遍历\r\n * @param cond 可以使用【iterator】中断遍历\r\n * @param removedList 设置后,可获得被移除的项\r\n */\r\n public removeByCondition(cond: (index: number, val: T, iterator: ListIterator) => boolean, removedList?: List): this {\r\n let iterator = new ListIterator();\r\n let data = this._data;\r\n for (let i = data.length - 1; i >= 0; i--) {\r\n let item = data[i];\r\n if (cond(i, item, iterator)) {\r\n if (removedList) {\r\n removedList.push(item)\r\n }\r\n this.remove(item);\r\n }\r\n if (iterator.isBreak()) {\r\n break;\r\n }\r\n }\r\n\r\n return removedList as this;\r\n }\r\n\r\n /**\r\n * 查找符合条件的项保存到【target】对象中,并返回【target】对象\r\n * @param cond 可以使用【iterator】中断遍历\r\n * @param target 存到目标对象中\r\n */\r\n public findByCondition(cond: (index: number, val: T, iterator: ListIterator) => boolean, target: List): this {\r\n if (!target) {\r\n throw new Error(\"需要设置目标对象\")\r\n }\r\n let iterator = new ListIterator();\r\n let data = this._data;\r\n for (let i = 0; i < data.length; i++) {\r\n let item = data[i];\r\n if (cond(i, item, iterator)) {\r\n\r\n }\r\n if (iterator.isBreak()) {\r\n break;\r\n }\r\n }\r\n return target as this;\r\n }\r\n\r\n\r\n pop(): T {\r\n let item = this._data.pop();\r\n this.callRemove(item)\r\n return item;\r\n }\r\n\r\n shift(): T {\r\n let item = this._data.shift();\r\n this.callRemove(item);\r\n return item;\r\n }\r\n\r\n\r\n first(): T {\r\n return this._data[0];\r\n }\r\n\r\n last(): T {\r\n return this._data[this._data.length - 1];\r\n }\r\n\r\n removeAt(index: number) {\r\n if (index >= 0) {\r\n let removed = this._data.splice(index, 1);\r\n this.callRemove(removed[0])\r\n }\r\n }\r\n\r\n remove(item: T) {\r\n let data = this._data;\r\n let index = data.indexOf(item);\r\n if (index != -1) {\r\n data.splice(index, 1);\r\n this.callRemove(item);\r\n }\r\n }\r\n\r\n /**\r\n * 把【other】的项合并到自身\r\n * @param other\r\n */\r\n removeList(other: List<T>): void {\r\n for (const item of other._data) {\r\n this.remove(item);\r\n }\r\n }\r\n\r\n sort(compareFn?: (a: T, b: T) => number) {\r\n this._data.sort(compareFn)\r\n }\r\n\r\n reverse() {\r\n this._data.reverse();\r\n }\r\n\r\n clear() {\r\n this._data.length = 0;\r\n }\r\n\r\n /**\r\n * 克隆自身所有项到【target】对象,并返回【target】对象\r\n * @param target\r\n */\r\n clone(target: this): this {\r\n let newdata = target.getData().concat(this._data);\r\n target.resetData(newdata);\r\n return target as this;\r\n }\r\n\r\n get length(): number {\r\n return this._data.length;\r\n }\r\n\r\n insertAt(index: number, ...item: T[]) {\r\n this._data.splice(index, 0, ...item);\r\n this.callPush(item);\r\n }\r\n\r\n /**\r\n * @param beforeItem\r\n * @param item\r\n */\r\n insertBefore(beforeItem: T, ...item: T[]) {\r\n let data = this._data;\r\n let index = data.indexOf(beforeItem);\r\n if (index == -1) {\r\n data.push(item);\r\n } else {\r\n data.splice(index - 1, 0, ...item);\r\n }\r\n this.callPush(item);\r\n }\r\n\r\n /**\r\n * @param afterItem\r\n * @param item\r\n */\r\n insertAfter(afterItem: T, ...item: T[]) {\r\n let data = this._data;\r\n let index = data.indexOf(afterItem);\r\n if (index == -1) {\r\n data.push(item);\r\n } else {\r\n data.splice(index, 0, ...item);\r\n }\r\n\r\n this.callPush(item);\r\n }\r\n\r\n at(index: number): T {\r\n return this._data[index];\r\n }\r\n\r\n set(index: number, item: T) {\r\n let existed = this._data[index];\r\n if (existed) {\r\n if (existed == item) {\r\n return;\r\n }\r\n this.callRemove(existed);\r\n }\r\n this._data[index] = item;\r\n this.callPush(item);\r\n }\r\n\r\n indexOf(item: T): number {\r\n return this._data.indexOf(item);\r\n }\r\n\r\n has(item: T): boolean {\r\n return this._data.indexOf(item) != -1\r\n }\r\n\r\n push(item: T) {\r\n this._data.push(item);\r\n this.callPush(item);\r\n }\r\n\r\n\r\n /**\r\n * 把【other】的项合并到自身\r\n * @param other\r\n */\r\n pushList(other: List<T>): void {\r\n for (const item of other._data) {\r\n this.push(item);\r\n }\r\n }\r\n\r\n getData(): T[] {\r\n return this._data\r\n }\r\n\r\n resetData(val: T[]) {\r\n this._data = val;\r\n }\r\n\r\n /**\r\n * 随机获取【count】个项,并返回【target】对象\r\n * @param count\r\n * @param enableRepeat 允许重复\r\n * @param target\r\n */\r\n random(count: number, enableRepeat: boolean = false, target?: List<T>): List<T> {\r\n if (!target) {\r\n target = new List<T>()\r\n }\r\n const copyItems = [...this._data]; // 创建副本以避免修改原数组\r\n for (let i = 0; i < count && copyItems.length > 0; i++) {\r\n const randomIndex = Math.floor(Math.random() * copyItems.length);\r\n target.push(copyItems[randomIndex]);\r\n if (!enableRepeat) {\r\n copyItems.splice(randomIndex, 1); // 移除已选元素以防止重复选择\r\n }\r\n }\r\n return target;\r\n }\r\n\r\n protected callPush(value) {\r\n if (this._onSet !== null) {\r\n this._onSet.call(this._onSetCaller, value);\r\n }\r\n }\r\n\r\n protected callRemove(value) {\r\n if (this._onDelete !== null) {\r\n this._onDelete.call(this._onDeleteCaller, value);\r\n }\r\n }\r\n\r\n protected _data = [];\r\n private _onSet: ((value: T) => void) | null;\r\n private _onDelete: ((value: T) => void) | null;\r\n private _onSetCaller: any;\r\n private _onDeleteCaller: any;\r\n}","import {instantiate, Node, Prefab} from \"cc\";\nimport {Dictionary} from \"../ds/Dictionary\";\nimport {List} from \"../ds/List\";\n\nexport class UIObjectDict 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\nexport var uidict = new UIObjectDict();","import {Route} from \"./Route\";\nimport {PageController} from \"./PageController\";\nimport {EventManager} from \"../event/EventManager\";\nimport {UIObjectDict} from \"./UIObjectDict\";\nimport {LinkError} from \"../utils/ErrorUtil\";\n\nexport enum PageState {\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 PageEvent {\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 Page extends EventManager {\n\n constructor(controller: PageController, route: Route) {\n super();\n this._controller = controller;\n this._route = route;\n }\n\n\n /**\n * 等待打开完成指令\n */\n waitOpenComplete() {\n this._waitOpenComplete = true;\n }\n\n waitCloseComplete() {\n this._waitCloseComplete = true;\n }\n\n openComplete() {\n this._waitOpenComplete = false;\n this._controller.openComplete(this);\n }\n\n closeComplete() {\n this._waitOpenComplete = false;\n this._controller.closeComplete(this);\n }\n\n stop(reason: LinkError) {\n\n }\n\n /**\n * 等待发送的结果\n * 如果返回 null,表示主动取消 [cancel]\n */\n wait(): Promise<this> {\n switch (this.state) {\n case PageState.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 PageState.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 `Page[${this.route.toString()}, ${this.id}]`\n }\n\n public get objectDict(): UIObjectDict {\n let dict = this._objectDict;\n if (!dict) {\n dict = new UIObjectDict();\n this._objectDict = dict;\n }\n return dict;\n }\n\n protected _objectDict: UIObjectDict;\n protected _waitOpenComplete: boolean = false;\n protected _waitCloseComplete: boolean = false;\n\n get controller(): PageController {\n return this._controller;\n }\n\n get route(): Route {\n return this._route;\n }\n\n\n cache = {};\n tags = {};\n layer: string;\n state: PageState = 0;\n protected _controller: PageController;\n protected _route: Route;\n\n}\n\n","import {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","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 {convertutil} from \"./ConvertUtil\";\n\nexport class MapUtil {\n\n /**\n * 获取所欲的值\n */\n values<T = any>(m: { [key: string]: T; }): T[] {\n let r: T[] = [];\n for (let key in m) {\n r.push(m[key])\n }\n\n return r;\n }\n\n /**\n * 获取所有的键\n */\n keys(m: { [key: string]: any; }): string[] {\n let r: string[] = [];\n for (let key in m) {\n r.push(key)\n }\n return r;\n }\n\n /**\n * 以字符串数字作为键值的map,转化成数组\n */\n toList<T = any>(m: { [key: string]: T; }): T[] {\n let r: T[] = [];\n for (let key in m) {\n r[parseInt(key, 10)] = m[key]\n }\n return r;\n }\n\n /**\n * 以字符串数字作为键值的map,转化成数组\n */\n listToMap(list: any[]): any {\n let r = {}\n if (list) {\n for (let i = 0; i < list.length; i++) {\n r[i.toString()] = list[i];\n }\n }\n return r;\n }\n\n /**\n * 转换成数字, 如果原值无效, 返回0\n * @constructor\n */\n has(m: any, key: string): boolean {\n return m.hasOwnProperty(key);\n }\n\n /**\n * 转换成数字, 如果原值无效, 返回0\n * @constructor\n */\n number(m: any, key: string, dflt: number = 0): number {\n if (!m) {\n return dflt;\n }\n let data = m[key];\n if (!data) {\n return dflt\n }\n\n if (typeof data !== \"number\") {\n data = parseFloat(data)\n }\n\n return data;\n }\n\n /**\n * 转换成字符串, 如果原值无效, 返回\"\"\n * @constructor\n */\n string(m: any, key: string, dflt: string = \"\"): string {\n if (!m) {\n return dflt;\n }\n let data = m[key];\n if (!data) {\n return dflt\n }\n\n return data;\n }\n\n /**\n * 转换成布尔值, 如果原值无效, 返回false\n * @constructor\n */\n boolean(m: any, key: string, dflt: boolean = false): boolean {\n if (!m) {\n return dflt;\n }\n let data = m[key];\n if (data === undefined || data === null) {\n return dflt\n }\n\n return data;\n }\n\n /**\n * 转换成{}, 如果原值无效, 返回{}\n * @constructor\n */\n map(m: any, key: string, dflt: boolean | Object = false): any {\n if (!m) {\n return dflt;\n }\n let data = m[key];\n if (!data) {\n if (dflt instanceof Object) {\n data = dflt;\n m[key] = data;\n } else if (dflt) {\n data = {};\n m[key] = data;\n }\n }\n\n return data;\n }\n\n /**\n * 转换成[], 如果原值无效, 返回[]\n * @constructor\n */\n array(m: any, key: string, dflt: boolean | Array<any> = false): any[] {\n if (!m || !m[key]) {\n if (dflt instanceof Array) {\n m[key] = dflt;\n return m[key];\n } else if (dflt) {\n m[key] = [];\n return m[key];\n }\n return null;\n }\n let data = m[key];\n if (data instanceof Array) {\n return data;\n }\n\n let r = [];\n for (let k in data) {\n r[parseInt(k, 10)] = data[k];\n }\n\n return r;\n }\n\n /**\n * 返回第一个符合条件的key\n * @param m\n * @param conf\n */\n keyOfConf(m: any, conf: (key: string, item: any) => boolean): string {\n for (let key in m) {\n if (conf(key, m[key])) {\n return key;\n }\n }\n\n return \"\";\n }\n\n /**\n * 比较对象,并返回包含差异的对象\n * 如果返回 undefined 表示没有差异\n * @param obj\n * @param parent\n * @param removeDefault\n */\n diff(obj: any, parent: any, removeDefault: boolean = true): any {\n let result;\n switch (typeof obj) {\n case 'undefined':\n break;\n case 'string' :\n if (obj !== parent) {\n if (obj !== \"\") {\n result = obj + '';\n }\n }\n break;\n case 'number' :\n if (obj !== parent) {\n // if (obj !== 0) {// 这里会排除掉默认的\n // o = obj - 0;\n // }\n result = obj;\n }\n break;\n case 'boolean' :\n if (obj !== parent) {\n if (obj !== false) {\n result = obj;\n }\n }\n break;\n case 'object' :\n if (obj === null) {\n result = undefined;\n } else {\n if (obj instanceof Array) {\n let tempObj = [];\n for (let i = 0; i < obj.length; i++) {\n let a = obj[i];\n let b = undefined;\n if (parent) {\n b = parent[i];\n }\n let v = this.diff(a, b, removeDefault);\n if (v !== undefined) {\n tempObj.push(v);\n }\n }\n if (obj.length > 0) {\n result = tempObj;\n } else {\n if (removeDefault) {\n result = undefined;\n } else {\n result = tempObj;\n }\n }\n } else {\n let tempObj = {};\n let count = 0;\n for (let k in obj) {\n let a = obj[k];\n let b = undefined;\n if (parent) {\n b = parent[k];\n }\n let v = this.diff(a, b, removeDefault);\n if (v !== undefined) {\n tempObj[k] = v;\n count++;\n }\n }\n if (count > 0) {\n result = tempObj;\n } else {\n if (removeDefault) {\n result = undefined;\n } else {\n if (parent) {\n result = undefined;\n } else {\n result = tempObj;\n }\n }\n }\n\n }\n }\n break;\n default:\n result = obj;\n break;\n }\n return result;\n }\n\n /**\n * 克隆对象\n * @param obj\n */\n clone(obj: any): any {\n let o;\n switch (typeof obj) {\n case 'undefined':\n break;\n case 'string' :\n o = obj + '';\n break;\n case 'number' :\n o = obj - 0;\n break;\n case 'boolean' :\n o = obj;\n break;\n case 'object' :\n if (obj === null) {\n o = null;\n } else {\n if (obj instanceof Array) {\n o = [];\n for (let i = 0; i < obj.length; i++) {\n o.push(this.clone(obj[i]));\n }\n } else {\n o = {};\n for (let k in obj) {\n o[k] = this.clone(obj[k]);\n }\n }\n }\n break;\n default:\n o = obj;\n break;\n }\n return o;\n }\n\n /**\n * 通过path设置属性,创建不存在的路径对象\n * @param obj\n * @param path \"/key1/key2\"\n * @param data\n */\n setByPath(obj: any, path: string, data: any) {\n if (!obj) {\n return;\n }\n\n if (path[0] != \"/\") {\n throw new Error(\"非法路径: \" + path)\n }\n if (path == \"/\") {\n throw new Error(\"无法处理路径: \" + path)\n }\n path = path.substring(1);\n let arr = path.split(\"/\");\n let lastkey = arr.pop();\n let cur = obj;\n for (let item of arr) {\n let n = cur[item];\n if (!n) {\n n = {};\n cur[item] = n;\n }\n cur = n;\n }\n cur[lastkey] = data;\n }\n\n /**\n * 通过path删除\n * @param obj\n * @param path \"/key1/key2\"\n */\n removeByPath(obj: any, path: string) {\n if (!obj) {\n return;\n }\n let arr = path.split(\"/\");\n arr.shift();// 去掉空字符\n let lastkey = arr.pop();\n let cur = obj;\n for (let item of arr) {\n let n = cur[item];\n if (!n) {\n n = {};\n cur[item] = n;\n }\n cur = n;\n }\n\n cur[lastkey] = undefined;\n delete cur[lastkey];\n }\n\n\n /**\n * 通过path获取属性\n * @param obj\n * @param path\n */\n getByPath(obj: any, path: string): any {\n if (path === \"/\") {\n return obj;\n }\n if (path[0] !== \"/\") {\n path = \"/\" + path;\n }\n let pathARr = path.split(\"/\");\n pathARr.shift();// 去掉第一个\"/\"\n let lastkey = pathARr.pop();\n let cur = obj;\n for (let prop of pathARr) {\n cur = cur[prop];\n if (!cur) {\n return null;\n }\n }\n\n return cur[lastkey];\n }\n\n\n flat(obj: any, split = \"/\"): any {\n let result = {};\n this._flat(obj, result, \"\", split);\n return result\n }\n\n _flat(obj: any, result: any, path: string, split = \"/\"): any {\n for (let key in obj) {\n let val = obj[key];\n let type = typeof val;\n let id = path + split + key;\n switch (type) {\n case \"object\":\n this._flat(val, result, id, split)\n break;\n default:\n result[id] = val;\n }\n }\n }\n\n /**\n * 比较两个对象,包括基础类型\n * @param a\n * @param b\n */\n compare(a: any, b: any): boolean {\n\n let typea = typeof a;\n let typeb = typeof b;\n if (a == null || b == null) {\n return a == b;\n }\n\n if (typea !== typeb) {\n return false;\n }\n\n switch (typea) {\n case \"object\":\n // 获取对象的属性集合(数组)\n let aProps = Object.getOwnPropertyNames(a);\n let bProps = Object.getOwnPropertyNames(b);\n\n // 属性个数(长度)不同,对象肯定不同\n if (aProps.length !== bProps.length) {\n return false;\n }\n\n for (let i = 0; i < aProps.length; i++) {\n let propName = aProps[i];\n\n if (!this.compare(a[propName], b[propName])) {\n return false;\n }\n }\n break;\n default:\n return a === b;\n }\n\n\n return true;\n }\n\n /**\n * 从[from]对象复制到 [to]对象\n * 如果from字段为object并且等于null,则设置to字段为null\n * 如果from字段为undefined, 则不覆盖\n * @param from\n * @param to\n * @param tokey 如果[to]存在key才进行拷贝\n */\n public copy(from: any, to: any, tokey: boolean = false) {\n if (!from || !to) {\n return\n }\n for (let fromKey in from) {\n\n if (tokey) {\n if (!to.hasOwnProperty(fromKey)) {\n continue\n }\n }\n let toChild = to[fromKey];\n let fromChild = from[fromKey];\n\n let type = typeof toChild;\n if (type === \"undefined\") {\n type = typeof fromChild;\n }\n\n toChild = convertutil.undefinedToZero(toChild, type)\n fromChild = convertutil.undefinedToZero(fromChild, type)\n switch (type) {\n case \"object\":\n if (fromChild) {\n if (Array.isArray(fromChild)) {\n if (!toChild) {\n toChild = [];\n to[fromKey] = toChild;\n }\n\n if (fromChild) {\n this.copy(fromChild, toChild)\n }\n } else {\n if (!toChild) {\n toChild = {};\n to[fromKey] = toChild;\n }\n this.copy(fromChild, toChild)\n }\n } else {\n to[fromKey] = null;\n }\n break;\n case \"string\":\n if (toChild === fromChild) {\n continue;\n }\n to[fromKey] = fromChild;\n break;\n default:\n if (toChild === fromChild) {\n continue\n }\n to[fromKey] = fromChild;\n }\n }\n }\n\n /**\n * 去掉兼职\n */\n flatString(target: any): string {\n let result = \"[\";\n let arr = [];\n for (const targetKey in target) {\n let targetVal = target[targetKey];\n if (targetKey == \"_type\") {\n result += targetVal + \"#\"\n continue;\n }\n let type = typeof targetVal;\n switch (type) {\n case \"object\":\n if (targetVal) {\n arr.push(this.flatString(targetVal));\n } else {\n arr.push(\"null\")\n }\n break;\n default:\n if (targetVal) {\n arr.push(targetVal)\n } else {\n arr.push(\"null\")\n }\n\n }\n }\n result += arr.join(\", \")\n result += \"]\"\n return result;\n }\n}\n\nexport const maputil = new MapUtil();\n","import {math} from \"cc\";\n\nexport class ScaleUtil {\n tenToAny = [ // 0-75 共76个\n \"0\", \"1\", \"2\", \"3\", \"4\", \"5\", \"6\", \"7\", \"8\", \"9\", // 1-10\n \"A\", \"B\", \"C\", \"D\", \"E\", \"F\", \"G\", \"H\", \"I\", \"J\", // 11-20\n \"K\", \"L\", \"M\", \"N\", \"O\", \"P\", \"Q\", \"R\", \"S\", \"T\", // 21-30\n \"U\", \"V\", \"W\", \"X\", \"Y\", \"Z\", \"a\", \"b\", \"c\", \"d\", // 31-40\n \"e\", \"f\", \"g\", \"h\", \"i\", \"j\", \"k\", \"l\", \"m\", \"n\", // 41-50\n \"o\", \"p\", \"q\", \"r\", \"s\", \"t\", \"u\", \"v\", \"w\", \"x\", // 51-60\n \"y\", \"z\", \":\", \";\", \"<\", \"=\", \">\", \"?\", \"@\", \"{\", // 61-80\n \"]\", \"^\", \"_\", \"{\", \"|\", \"}\", // 71-75\n ]\n\n allstr = \"0123456789\" +\n \"ABCDEFGHIJ\" +\n \"KLMNOPQRST\" +\n \"UVWXYZabcd\" +\n \"efghijklmn\" +\n \"opqrstuvwx\" +\n \"yz:;<=>?@[]\" +\n \"^_{|}\"\n\n\n// RandString 生成随机字符串\n randString(size: number, n: number): string {\n var s = \"\";\n let nstr = this.allstr.substring(0, n)\n for (let i = 0; i < size; i++) {\n let c = nstr[math.randomRangeInt(0, n)]\n s += c\n }\n return s;\n }\n\n//var tenToAny map[int]string = map[int]string{0: \"0\", 1: \"1\", 2: \"2\", 3: \"3\", 4: \"4\", 5: \"5\", 6: \"6\", 7: \"7\", 8: \"8\", 9: \"9\", 10: \"a\", 11: \"b\", 12: \"c\", 13: \"d\", 14: \"e\", 15: \"f\", 16: \"g\", 17: \"h\", 18: \"i\", 19: \"j\", 20: \"k\", 21: \"l\", 22: \"m\", 23: \"n\", 24: \"o\", 25: \"p\", 26: \"q\", 27: \"r\", 28: \"s\", 29: \"t\", 30: \"u\", 31: \"v\", 32: \"w\", 33: \"x\", 34: \"y\", 35: \"z\", 36: \":\", 37: \";\", 38: \"<\", 39: \"=\", 40: \">\", 41: \"?\", 42: \"@\", 43: \"[\", 44: \"]\", 45: \"^\", 46: \"_\", 47: \"{\", 48: \"|\", 49: \"}\", 50: \"A\", 51: \"B\", 52: \"C\", 53: \"D\", 54: \"E\", 55: \"F\", 56: \"G\", 57: \"H\", 58: \"I\", 59: \"J\", 60: \"K\", 61: \"L\", 62: \"M\", 63: \"N\", 64: \"O\", 65: \"P\", 66: \"Q\", 67: \"R\", 68: \"S\", 69: \"T\", 70: \"U\", 71: \"V\", 72: \"W\", 73: \"X\", 74: \"Y\", 75: \"Z\"}\n\n// DecimalTo 10进制转任意进制 n\n decimalTo(num: number, n: number): string {\n if (num === 0) {\n return \"0\"\n }\n let newNumStr = \"\"\n\n var remainder = 0\n var remainderString = \"\"\n\n while (num !== 0) {\n remainder = num % n\n if (remainder < 0) {\n remainder = n + remainder\n }\n remainderString = this.tenToAny[remainder]\n newNumStr = remainderString + newNumStr\n num = Math.round(num / n);\n //fmt.Println(\"newNumStr>>>\", newNumStr, num)\n }\n return newNumStr\n }\n\n// Findkey map根据value找key\n findkey(instr: string): number {\n let result = -1\n for (let i = 0; i < this.tenToAny.length; i++) {\n let val = this.tenToAny[i];\n if (instr === val) {\n result = i\n }\n }\n return result\n }\n\n// ToDecimal n进制转化成10进制\n toDecimal(num: string, n: number): number {\n var newNum = 0\n let nNum = num.length - 1\n\n var pow = 1\n var cnt = 1\n for (let i = nNum; i >= 0; i--) {\n let char = num[i];\n if (cnt === 1) {\n pow = 1\n } else {\n pow = pow * n\n }\n\n let tmp = this.findkey(char)\n newNum = newNum + tmp * pow\n cnt++\n }\n return newNum\n }\n}\n\n\nexport const scaleutil = new ScaleUtil();\n","import {scaleutil} from \"./ScaleUtil\";\r\n\r\nexport class IdentUtil {\r\n\r\n /**\r\n * 设置时间的基线,通过减去已经过去的时间,可缩短id长度\r\n * 注:同一个项目必须拥有同样的基线,否则有几率出现相同的id!\r\n * 注2:基线必须与精度符合\r\n * @param time\r\n */\r\n setTimeBaseline(time: number) {\r\n this._baseline = time;\r\n }\r\n\r\n protected _baseline: number = 0;\r\n\r\n /**\r\n * 设置时间的精度\r\n * @param precision\r\n */\r\n setTimePrecision(precision: \"ms\" | \"s\") {\r\n this._precision = precision;\r\n }\r\n\r\n protected _precision: string = \"s\";\r\n\r\n /**\r\n * 设置随机数的长度\r\n * @param value\r\n */\r\n setRandLength(value: number = 3) {\r\n this._randLength = value;\r\n }\r\n\r\n protected _randLength: number = 3;\r\n\r\n\r\n genOne(): string {\r\n let time = Date.now();\r\n switch (this._precision) {\r\n case \"s\":\r\n time = Math.floor(time / 1000);\r\n break;\r\n case \"ms\":\r\n time = Date.now();\r\n break;\r\n }\r\n if (time != this._lastTime) {\r\n this._count = 0;\r\n this._lastTime = time;\r\n }\r\n this._count++\r\n let timestr = scaleutil.decimalTo(Math.floor(time - this._baseline), 62);\r\n let countstr = scaleutil.decimalTo(this._count, 62);\r\n return timestr + scaleutil.decimalTo(countstr.length, 62) + countstr;\r\n }\r\n\r\n protected _count = 0;\r\n protected _lastTime: number = 0;\r\n}\r\n\r\n\r\nexport const identutil = new IdentUtil();","import {EventManager} from \"../event/EventManager\";\r\nimport {maputil} from \"../utils/MapUtil\";\r\nimport {identutil} from \"../utils/IdentUtil\";\r\n\r\nexport class TreeIterator {\r\n break() {\r\n this._isBreak = true;\r\n }\r\n\r\n isBreak(): boolean {\r\n return this._isBreak;\r\n }\r\n\r\n protected _isBreak;\r\n}\r\n\r\nexport interface ITreeListItem {\r\n /**\r\n * 路径\r\n */\r\n path: string;\r\n\r\n /**\r\n * 自定义数据\r\n */\r\n data?: any;\r\n\r\n /**\r\n * 功能性标签,用于开发组件时,记录组件的状态。例如title, icon, 显示树的组件,需要 expanded,selected标签\r\n */\r\n tags?: { [key: string]: any }\r\n\r\n /**\r\n * 是否树叶\r\n */\r\n isLeaf: boolean;\r\n\r\n}\r\n\r\nfunction fixPath(path): string {\r\n if (path == 0) {\r\n return path;\r\n }\r\n if (path[0] != \"/\") {\r\n path = \"/\" + path\r\n }\r\n if (path.length > 1) {\r\n if (path[path.length - 1] == \"/\") {\r\n path = path.substring(0, path.length - 1);\r\n }\r\n }\r\n\r\n return path;\r\n\r\n}\r\n\r\nexport class TreeNode<T = any> {\r\n\r\n get root(): TreeRoot {\r\n return this._root;\r\n }\r\n\r\n /**\r\n * 根节点\r\n */\r\n protected _root: TreeRoot;\r\n /**\r\n * 编号\r\n */\r\n uuid: string;\r\n\r\n /**\r\n * 编号\r\n */\r\n id: string;\r\n\r\n /**\r\n * 自定义数据\r\n */\r\n data: T;\r\n\r\n /**\r\n * 是否树叶\r\n */\r\n isLeaf: boolean = true;\r\n\r\n /**\r\n * 功能性标签,用于开发组件时,记录组件的状态。例如title, icon, 显示树的组件,需要 expanded,selected标签\r\n */\r\n tags: { [key: string]: any }\r\n\r\n /**\r\n * 深度\r\n */\r\n get depth(): number {\r\n return this._depth;\r\n }\r\n\r\n private _depth: number = 0;\r\n\r\n /**\r\n * 父节点\r\n */\r\n parent: TreeNode;\r\n\r\n /**\r\n * 子节点\r\n */\r\n children: TreeNode[];\r\n\r\n /**\r\n * 设置根\r\n * @param val\r\n */\r\n setRoot(val: TreeRoot) {\r\n this._root = val;\r\n }\r\n\r\n getTags(): { [key: string]: any } {\r\n if (!this.tags) {\r\n this.tags = {};\r\n }\r\n return this.tags;\r\n }\r\n\r\n getTag(name: string): any {\r\n return this.getTags()[name];\r\n }\r\n\r\n removeTag(name: string) {\r\n if (this.tags) {\r\n delete this.tags[name];\r\n }\r\n }\r\n\r\n\r\n setTag(name: string, value: any) {\r\n this.getTags()[name] = value;\r\n }\r\n\r\n\r\n constructor(id: string, isLeaf?: boolean) {\r\n this.uuid = identutil.genOne()\r\n this.id = id;\r\n if (isLeaf == undefined) {\r\n isLeaf = false;\r\n } else {\r\n this.isLeaf = isLeaf;\r\n }\r\n if (!isLeaf && !this.children) {\r\n this.children = [];\r\n }\r\n }\r\n\r\n public addChild(val: TreeNode) {\r\n let node = this.getChildById(val.id);\r\n if (node) {\r\n return;\r\n }\r\n val._root = this._root;\r\n val.parent = this;\r\n if (!this.children) {\r\n this.children = [];\r\n }\r\n this.children.push(val);\r\n //\r\n val.fixDepthAndRoot(this._depth + 1, this.root)\r\n }\r\n\r\n public getChildIndex(val: TreeNode): number {\r\n for (let i = 0; i < this.children.length; i++) {\r\n let child = this.children[i];\r\n if (child == val) {\r\n return i;\r\n }\r\n }\r\n\r\n return -1;\r\n }\r\n\r\n\r\n public insertChild(val: TreeNode, index: number) {\r\n let indexVal = this.children.indexOf(val);\r\n if (indexVal != -1) {\r\n this.children.splice(indexVal, 1);\r\n }\r\n this.children.splice(index, 0, val);\r\n }\r\n\r\n public removeChild(val: TreeNode) {\r\n let index = this.children.indexOf(val);\r\n if (index != -1) {\r\n this.children.splice(index, 1);\r\n val.parent = null;\r\n }\r\n }\r\n\r\n public removeChildren() {\r\n if (this.children) {\r\n for (let child of this.children) {\r\n child.parent = null;\r\n }\r\n }\r\n\r\n this.children = [];\r\n }\r\n\r\n public get name(): string {\r\n let parent = this.parent;\r\n if (parent) {\r\n if (parent.id == \"/\") {\r\n return this.id.replace(parent.id, \"\")\r\n } else {\r\n return this.id.replace(parent.id + \"/\", \"\")\r\n }\r\n }\r\n\r\n return this.id;\r\n }\r\n\r\n public setDepth(val: number) {\r\n this._depth = val;\r\n }\r\n\r\n public containsById(id: string): boolean {\r\n return this.getChildById(id) != null;\r\n }\r\n\r\n /**\r\n * 通过编号获取子节点\r\n * @param id\r\n */\r\n public getChildById(id: string): TreeNode {\r\n if (!this.children) {\r\n return\r\n }\r\n for (let i = 0; i < this.children.length; i++) {\r\n let node = this.children[i];\r\n if (node.id == id) {\r\n return node;\r\n }\r\n }\r\n return null;\r\n }\r\n\r\n /**\r\n * 返回相邻的上一个节点\r\n */\r\n public prevNode(): TreeNode {\r\n let parent = this.parent;\r\n if (!parent) {\r\n return null;\r\n }\r\n let children = parent.children;\r\n let index = children.indexOf(this);\r\n if (index == -1) {\r\n throw \"节点数据异常\"\r\n }\r\n if (index == 0) {// 自己就是最后一个\r\n return null;\r\n }\r\n return children[index - 1];\r\n }\r\n\r\n /**\r\n * 返回相邻的下一个节点\r\n */\r\n public nextNode(): TreeNode {\r\n let parent = this.parent;\r\n if (!parent) {\r\n return null;\r\n }\r\n let children = parent.children;\r\n let index = children.indexOf(this);\r\n if (index == -1) {\r\n throw \"节点数据异常\"\r\n }\r\n if (index == children.length - 1) {// 自己就是最后一个\r\n return null;\r\n }\r\n return children[index + 1];\r\n }\r\n\r\n /**\r\n * 如果返回true则删除节点,包含当前节点\r\n * @param f\r\n */\r\n public walkRemove(f: (node: TreeNode) => boolean) {\r\n this._walkRemove(f);\r\n }\r\n\r\n private _walkRemove(f: (node: TreeNode) => boolean) {\r\n try {\r\n if (f(this)) {\r\n this.parent.removeChild(this);\r\n return;\r\n }\r\n } catch (e) {\r\n console.warn(e.stack)\r\n return false;\r\n }\r\n\r\n\r\n if (!this.isLeaf) {\r\n if (this.children && this.children.length > 0) {\r\n for (let i = this.children.length - 1; i >= 0; i--) {\r\n let val = this.children[i];\r\n val._walkRemove(f)\r\n }\r\n }\r\n }\r\n return true;\r\n }\r\n\r\n /**\r\n * 如果返回true则继续,包含当前节点\r\n * @param f\r\n * @param inChild\r\n */\r\n public walk(f: (node: TreeNode) => boolean, inChild?: (node: TreeNode) => boolean) {\r\n this._walk(f, inChild);\r\n }\r\n\r\n private _walk(f: (node: TreeNode) => boolean, inChild?: (node: TreeNode) => boolean): boolean {\r\n try {\r\n if (!f(this)) {\r\n return false;\r\n }\r\n } catch (e) {\r\n console.warn(e.stack)\r\n return false;\r\n }\r\n\r\n\r\n if (!this.isLeaf) {\r\n let checkChildren = inChild ? inChild(this) : true;\r\n if (checkChildren) {\r\n if (this.children && this.children.length > 0) {\r\n for (let val of this.children) {\r\n if (!val._walk(f)) {\r\n return false\r\n }\r\n }\r\n }\r\n }\r\n\r\n }\r\n return true;\r\n }\r\n\r\n /**\r\n * 从当前节点(包括)遍历父节点链,包含当前节点\r\n * @param f\r\n */\r\n public walkParent(f: (node: TreeNode) => boolean) {\r\n let cur: TreeNode = this;\r\n while (cur) {\r\n try {\r\n if (!f(cur)) {\r\n return false;\r\n }\r\n } catch (e) {\r\n console.warn(e.stack)\r\n return false;\r\n }\r\n\r\n\r\n cur = cur.parent\r\n }\r\n }\r\n\r\n /**\r\n * 从当前节点往前遍历(深度),包含当前节点\r\n * @param f\r\n * @param inChild\r\n */\r\n public walkPrev(f: (node: TreeNode) => boolean, inChild?: (node: TreeNode) => boolean) {\r\n try {\r\n if (!f(this)) {\r\n return false;\r\n }\r\n } catch (e) {\r\n console.warn(e.stack)\r\n return false;\r\n }\r\n\r\n let parent = this.parent;\r\n if (!parent) {\r\n return false;\r\n }\r\n\r\n if (!parent.isLeaf) {\r\n let checkChildren = inChild ? inChild(this.parent) : true;\r\n if (checkChildren) {\r\n if (parent.children && parent.children.length > 0) {\r\n let nodeIndex = parent.children.indexOf(this);\r\n for (let i = nodeIndex - 1; i >= 0; i--) {\r\n let child = parent.children[i];\r\n if (!child._walkPrev(f, inChild)) {\r\n return false\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n return parent.walkPrev(f);\r\n }\r\n\r\n private _walkPrev(f: (node: TreeNode) => boolean, inChild?: (node: TreeNode) => boolean): boolean {\r\n if (this.isLeaf) {\r\n if (!f(this)) {\r\n return false;\r\n }\r\n } else {\r\n if (!this.isLeaf) {\r\n let checkChildren = inChild ? inChild(this) : true;\r\n if (checkChildren) {\r\n if (this.children && this.children.length > 0) {\r\n for (let i = this.children.length - 1; i >= 0; i--) {\r\n let child = this.children[i];\r\n if (!child._walkPrev(f, inChild)) {\r\n return false\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n if (!f(this)) {\r\n return false;\r\n }\r\n }\r\n\r\n\r\n return true;\r\n }\r\n\r\n\r\n public dump() {\r\n this.walk((node: TreeNode): boolean => {\r\n let prefix = \"\";\r\n for (let i = 0; i < node.depth; i++) {\r\n prefix += \" \"\r\n }\r\n console.log(prefix + \"-\" + node.id)\r\n return true;\r\n });\r\n }\r\n\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 EventManager {\r\n /**\r\n * 添加数据节点\r\n * dispatchParams = {node:TreeNode, parent:TreeNode|TreeRoot}\r\n */\r\n static EVENT_ADD = \"add\";\r\n\r\n /**\r\n * 移除数据节点\r\n * dispatchParams = {node:TreeNode, parent:TreeNode|TreeRoot}\r\n */\r\n static EVENT_REMOVE = \"remove\";\r\n\r\n /**\r\n * 插入数据节点\r\n * dispatchParams = {node:TreeNode, before:TreeNode}\r\n */\r\n static EVENT_INSERT = \"insert\";\r\n\r\n /**\r\n * 刷新数据节点\r\n * dispatchParams = {node:TreeNode}\r\n */\r\n static EVENT_REFRESH = \"refresh\";\r\n\r\n /**\r\n * 设置数据时触发\r\n * dispatchParams = {node:TreeNode}\r\n */\r\n static EVENT_DATA_SET = \"data_set\";\r\n\r\n /**\r\n * 设置数据时触发\r\n * dispatchParams = {node:TreeNode, tag:string, value:any}\r\n */\r\n static EVENT_TAGS_SET = \"tags_set\";\r\n\r\n static create() {\r\n return new TreeRoot()\r\n }\r\n\r\n /**\r\n * 通过列表生成一个树结构\r\n * @param items\r\n * @param existed 列表将添加的已经存在的树结构\r\n */\r\n static createByList(items: ITreeListItem[], existed?: TreeRoot): TreeRoot {\r\n let root: TreeRoot = existed;\r\n if (!root) {\r\n root = TreeRoot.create();\r\n }\r\n\r\n for (let val of items) {\r\n let node: any;\r\n if (val.path == \"\") {\r\n continue;\r\n }\r\n if (val.path == \"/\") {\r\n node = root.origin;\r\n } else {\r\n let arr = val.path.substring(1).split(\"/\");\r\n node = root.createNode(arr.pop(), val.isLeaf);\r\n root.addNode(node, arr.join(\"/\"), true)\r\n }\r\n node.data = val.data;\r\n node.tags = val.tags;\r\n }\r\n\r\n return root;\r\n }\r\n\r\n\r\n static sortChildrenByName(node: TreeNode, des: boolean = false) {\r\n node.walk((node) => {\r\n if (!node.isLeaf) {\r\n node.children.sort((a, b) => {\r\n if (des) {\r\n return b.getName().localeCompare(a.getName())\r\n } else {\r\n return a.getName().localeCompare(b.getName())\r\n }\r\n })\r\n }\r\n return true;\r\n });\r\n }\r\n\r\n\r\n constructor() {\r\n super();\r\n\r\n this.origin = this.createNode(\"/\", false);\r\n this.origin.setRoot(this);\r\n this.origin.setTag(\"title\", true)\r\n this.name = this.uuid;\r\n }\r\n\r\n setNodeData(node: TreeNode, data: any) {\r\n if (node.data == data) {\r\n return\r\n }\r\n node.data = data\r\n this.dispatch(TreeRoot.EVENT_DATA_SET, {node: node})\r\n }\r\n\r\n setNodeTags(node: TreeNode, tag: string, value: any, force: boolean = false) {\r\n let tags = node.getTags();\r\n if (!force) {\r\n if (tags[tag] === value) {\r\n return;\r\n }\r\n }\r\n tags[tag] = value;\r\n this.dispatch(TreeRoot.EVENT_TAGS_SET, {node: node, tag: tag, value: value})\r\n }\r\n\r\n getNodeByPath(path: string): TreeNode {\r\n return this.origin.getNodeByPath(path) as TreeNode;\r\n }\r\n\r\n makeNodeByPath(path: string): TreeNode {\r\n if (path == \"\" || path == \"/\") {\r\n return;\r\n }\r\n if (path[0] == \"/\") {\r\n path = path.substring(1);\r\n }\r\n let arr = path.split(\"/\");\r\n let curPath = \"/\";\r\n let lastNode;\r\n for (const string of arr) {\r\n let node = this.createNode(string, false);\r\n this.addNode(node, curPath);\r\n\r\n lastNode = node;\r\n curPath += string + \"/\";\r\n }\r\n\r\n return lastNode;\r\n }\r\n\r\n /**\r\n * 添加节点,按照 node.path 添加到正确的位置\r\n * @param node\r\n * @param parentPath 如果父节点路径为 \"\", 则添加到起源节点\r\n * @param autoCreateParent 如果父节点不存在,自动创建\r\n */\r\n addNode(node: TreeNode, parentPath: string = \"\", autoCreateParent: boolean = false) {\r\n if (parentPath == \"\") {\r\n parentPath = \"/\"\r\n }\r\n let parent = this.origin.getNodeByPath(parentPath)\r\n if (!parent) {\r\n if (autoCreateParent) {\r\n parent = this.makeNodeByPath(parentPath);\r\n } else {\r\n console.warn(`TreeRoot.addNode: parent not found: parentPath=${parentPath}, node.id=${node.id}`)\r\n return\r\n }\r\n }\r\n parent.addChild(node);\r\n this.dispatch(TreeRoot.EVENT_ADD, {node: node, parent: parent});\r\n }\r\n\r\n\r\n removeNode(node: TreeNode) {\r\n let parent = node.parent;\r\n if (!parent) {\r\n return;\r\n }\r\n let index = parent.children.indexOf(node);\r\n if (index != -1) {\r\n parent.children.splice(index, 1);\r\n }\r\n this.dispatch(TreeRoot.EVENT_REMOVE, {node: node, parent: parent});\r\n node.parent = null;\r\n }\r\n\r\n removeChildren(node: TreeNode) {\r\n let children = node.children.concat();\r\n for (let item of children) {\r\n this.removeNode(item)\r\n }\r\n }\r\n\r\n insertNode(node: TreeNode, before: TreeNode, resetId: boolean = true) {\r\n let parent = before.parent;\r\n let index = parent.getChildIndex(before);\r\n if (index == -1) {\r\n throw new Error(\"getChildIndex: 数据异常\")\r\n }\r\n let children = before.parent.children;\r\n let indexLast = parent.getChildIndex(node);\r\n if (indexLast == -1) {\r\n indexLast = children.length;\r\n }\r\n\r\n before.parent.insertChild(node, index);\r\n if (resetId) {\r\n let indexMin = Math.min(index, indexLast);\r\n let indexMax = Math.max(index, indexLast);\r\n for (let i = indexMin; i < indexMax + 1; i++) {\r\n let child = children[i];\r\n child.id = i.toString();\r\n child.setTag(\"title\", i.toString())\r\n this.refresh(child);\r\n }\r\n }\r\n this.dispatch(TreeRoot.EVENT_INSERT, {node: node, before: before});\r\n }\r\n\r\n walk(f: (node: TreeNode) => boolean, inChild?: (node: TreeNode) => boolean) {\r\n this.origin.walk(f, inChild)\r\n }\r\n\r\n walkPrev(f: (node: TreeNode) => boolean, inChild?: (node: TreeNode) => boolean) {\r\n this.origin.walkPrev(f, inChild)\r\n }\r\n\r\n /**\r\n * 派发 refresh 消息\r\n * @param node\r\n */\r\n refresh(node: TreeNode) {\r\n this.dispatch(TreeRoot.EVENT_REFRESH, {node: node});\r\n }\r\n\r\n /**\r\n * 克隆当前的树结\r\n * * 新的tags克隆旧的data\r\n * * 新的data指向旧的data\r\n */\r\n clone(): TreeRoot {\r\n let root = TreeRoot.create();\r\n root.origin = this.origin.clone();\r\n root.origin.fixDepthAndRoot(0, root);\r\n return root;\r\n }\r\n\r\n public toString() {\r\n return `TreeRoot`\r\n }\r\n\r\n createNode(id: string, isLeaf?: boolean): TreeNode {\r\n let node = new TreeNode(id, isLeaf);\r\n node.setRoot(this);\r\n return node;\r\n }\r\n\r\n\r\n /**\r\n * origin的第一个child\r\n */\r\n get firstNode(): TreeNode {\r\n if (!this.origin) {\r\n return null;\r\n }\r\n if (!this.origin.children) {\r\n return null;\r\n }\r\n return this.origin.children[0]\r\n }\r\n\r\n origin: TreeNode\r\n\r\n}\r\n\r\n\r\n///////////////////////////\r\n\r\nexport class TreeRootPlugin {\r\n root: TreeRoot\r\n}\r\n\r\n\r\nexport class TreeNodePlugin {\r\n node: TreeNode\r\n}\r\n","import {EventManager} from \"../event/EventManager\";\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 EventManager {\r\n /**\r\n * 通过数组创建 ListSource。ListSource的id自动生成。如果需要指定编号,可设置 idCreator\r\n * @param arr\r\n * @param idCreator\r\n */\r\n static createByArray(arr: any[], idCreator?: (item: any) => string) {\r\n let root = new ListSource();\r\n for (let i = 0; i < arr.length; i++) {\r\n let item = arr[i];\r\n let id = \"\";\r\n if (idCreator) {\r\n id = idCreator(item);\r\n } else {\r\n id = identutil.genOne();\r\n }\r\n let node = ListNode.create(id, item);\r\n root.add(node, false);\r\n }\r\n return root;\r\n }\r\n\r\n static createByListItem(arr: IListItem[], target?: ListSource): any {\r\n if(!target){\r\n target = new ListSource()\r\n }\r\n for (let i = 0; i < arr.length; i++) {\r\n let item = arr[i];\r\n let id = \"\";\r\n let node = ListNode.create(id);\r\n node.id = item.id;\r\n node.tags = item.tags;\r\n node.data = item.data;\r\n target.add(node, false);\r\n }\r\n return target;\r\n }\r\n\r\n /**\r\n * 设置数据时触发\r\n * dispatchParams = {node:ListNode}\r\n */\r\n static EVENT_ADD = \"add\";\r\n /**\r\n * 设置数据时触发\r\n * dispatchParams = {node:ListNode, index:number}\r\n */\r\n static EVENT_REMOVE = \"remove\";\r\n\r\n /**\r\n * 设置数据时触发\r\n */\r\n static EVENT_REMOVE_ALL = \"remove_all\";\r\n\r\n /**\r\n * 刷新数据节点\r\n * dispatchParams = {node:ListNode}\r\n */\r\n static EVENT_REFRESH = \"refresh\";\r\n\r\n /**\r\n * 设置数据时触发\r\n * dispatchParams = nodes: [ListNode], indexs: [number]\r\n */\r\n static EVENT_SWAP = \"swap\";\r\n /**\r\n * 设置数据时触发\r\n * dispatchParams = {node:ListNode, data:any}\r\n */\r\n static EVENT_DATA_SET = \"data_set\";\r\n /**\r\n * 设置数据时触发\r\n * dispatchParams = {node:ListNode, tag:string, value:any}\r\n */\r\n static EVENT_TAGS_SET = \"tags_set\";\r\n\r\n protected _identFunc: (node: ListNode) => boolean;\r\n\r\n public at(index: number): ListNode {\r\n return this._data[index];\r\n }\r\n\r\n public first(): ListNode {\r\n return this._data[0]\r\n }\r\n\r\n public last(): ListNode {\r\n return this._data[this._data.length - 1]\r\n }\r\n\r\n public length(): number {\r\n return this._data.length;\r\n }\r\n\r\n /**\r\n * 添加项,无法添加相同的项\r\n * @param node\r\n * @param enableDispatch 默认为true\r\n */\r\n public add(node: ListNode, enableDispatch: boolean = true) {\r\n if (this.contains(node)) {\r\n return;\r\n }\r\n this._data.push(node);\r\n node.root = this;\r\n if (enableDispatch) {\r\n this.dispatch(ListSource.EVENT_ADD, {node: node})\r\n }\r\n }\r\n\r\n public getById(id: string): ListNode {\r\n for (let i = 0; i < this._data.length; i++) {\r\n let node = this._data[i];\r\n if (node.id == id) {\r\n return node;\r\n }\r\n }\r\n return null;\r\n }\r\n\r\n public remove(node: ListNode) {\r\n let index = this._data.indexOf(node);\r\n if (index == -1) {\r\n return;\r\n }\r\n\r\n node.root = null;\r\n this._data.splice(index, 1);\r\n this.dispatch(ListSource.EVENT_REMOVE, {node: node, index: index})\r\n }\r\n\r\n public removeAll() {\r\n this._data.length = 0;\r\n this.dispatch(ListSource.EVENT_REMOVE_ALL)\r\n }\r\n\r\n public swap(a: ListNode, b: ListNode) {\r\n let aidx = this.indexOf(a);\r\n let bidx = this.indexOf(b);\r\n let d = this._data;\r\n [d[aidx], d[bidx]] = [d[bidx], a[aidx]];\r\n this.dispatch(ListSource.EVENT_SWAP, {nodes: [a, b], indexs: [aidx, bidx]})\r\n }\r\n\r\n public contains(node: ListNode): boolean {\r\n return this.indexOf(node) != -1\r\n }\r\n\r\n\r\n public containsById(id: string): boolean {\r\n return this.indexOfById(id) != -1\r\n }\r\n\r\n\r\n public indexOf(node: ListNode): number {\r\n for (let i = 0; i < this._data.length; i++) {\r\n let item = this._data[i];\r\n if (item.id == node.id) {\r\n return i;\r\n }\r\n }\r\n\r\n return -1\r\n }\r\n\r\n public indexOfById(id: string): number {\r\n for (let i = 0; i < this._data.length; i++) {\r\n let item = this._data[i];\r\n\r\n if (item.id == id) {\r\n return i;\r\n }\r\n }\r\n\r\n return -1\r\n }\r\n\r\n setData(node: ListNode, data: any) {\r\n if (!node) {\r\n return;\r\n }\r\n node.data = data\r\n this.dispatch(ListSource.EVENT_DATA_SET, {node: node, data: data})\r\n }\r\n\r\n\r\n setNodeTags(node: ListNode, tag: string, value: any) {\r\n let tags = node.getTags();\r\n if (tags[tag] === value) {\r\n return;\r\n }\r\n tags[tag] = value;\r\n this.dispatch(ListSource.EVENT_TAGS_SET, {node: node, tag: tag, value: value})\r\n }\r\n\r\n /**\r\n * 派发 refresh 消息\r\n * @param node\r\n */\r\n refresh(node: ListNode) {\r\n this.dispatch(ListSource.EVENT_REFRESH, {node: node});\r\n }\r\n\r\n walk(f: (node: ListNode) => boolean) {\r\n for (let i = 0; i < this.length(); i++) {\r\n let item = this._data[i];\r\n if (!f(item)) {\r\n return false;\r\n }\r\n }\r\n }\r\n\r\n walkPrev(node: ListNode, f: (node: ListNode) => boolean) {\r\n let index = this.indexOf(node);\r\n if (index == -1) {\r\n return;\r\n }\r\n for (let i = index; i >= 0; i--) {\r\n let item = this._data[i];\r\n if (!f(item)) {\r\n return false;\r\n }\r\n }\r\n }\r\n\r\n get data(): any[] {\r\n return this._data;\r\n }\r\n\r\n private _data = [];\r\n}","import {Dictionary} from \"./Dictionary\";\nimport {identutil} from \"../utils/IdentUtil\";\nimport {ListSource} from \"./ListSource\";\nimport {EventManager} from \"../event/EventManager\";\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(): EventManager {\n return this._dispatcher;\n }\n\n protected _dispatcher = new EventManager();\n}","import {Component} from \"cc\";\nimport { Dictionary } from \"../ds\";\nimport { UIObjectDict } from \"./UIObjectDict\";\n\nexport class ViewController extends Component {\n constructor(name: string) {\n super();\n this.name = name;\n //\n ctrlrepo.register(this);\n }\n\n open(...args) {\n\n }\n\n close() {\n\n }\n\n get objectDict(): UIObjectDict {\n let dict = this._objectDict;\n if (!dict) {\n dict = new UIObjectDict();\n this._objectDict = dict;\n }\n return dict;\n }\n\n protected _objectDict: UIObjectDict;\n}\n\n\nexport class ControllerDict extends Dictionary<string, ViewController> {\n\n getByName(name: string): ViewController {\n return this.get(name);\n }\n\n register(controller: ViewController) {\n this.set(controller.name, controller);\n }\n}\n\nexport var ctrlrepo = new ControllerDict();","import {Route} from \"./Route\";\nimport {PageLayer} from \"./PageLayer\";\nimport {List} from \"../ds/List\";\nimport { Page } from \"./Page\";\nimport { PageController } from \"./PageController\";\nimport { UIObjectDict } from \"./UIObjectDict\";\nimport { ctrlrepo } from \"./ViewController\";\n\n\nexport class PageList extends List<Page> {\n\n /**\n * 页面配置集合\n */\n}\n\n\nexport class PageRepo extends PageList {\n\n constructor() {\n super();\n\n this.onSet(this, (item) => {\n this._indexRoute[item.route.path] = item;\n })\n\n this.onDelete(this, (item) => {\n delete this._indexRoute[item.route.path];\n })\n }\n\n openByString(route: string): Page {\n return this.open(new Route(route))\n }\n\n /**\n * 打开页面\n * 一个路由代表一个页面\n * @param route\n */\n open(route: Route): Page {\n let controller = this.getController(route);\n if (!controller) {\n throw new Error(\"page controller no register: \" + route.path)\n }\n\n return controller.openByRoute(route);\n }\n\n close(route: Route) {\n let controller = this.getController(route);\n if (!controller) {\n throw new Error(\"page controller no register: \" + route.path)\n }\n\n controller.closeByRoute(route);\n }\n\n /**\n * 如果页面存在,则刷新\n * @param route\n */\n refresh(route: Route) {\n let page = this.getByRoute(route);\n if (page) {\n page.controller.refresh();\n }\n }\n\n /**\n * 历史记录\n */\n getHistory(): Route[] {\n return this._history;\n }\n\n back() {\n this.open(this._history.pop())\n }\n\n getByRoute(route: Route): Page {\n return this._indexRoute[route.path];\n }\n\n\n listByTags(tags: string[]): PageList {\n let list = new PageList();\n this.forEach((index, item) => {\n if (item.controller.hasTags(tags)) {\n list.push(item);\n }\n })\n return list\n }\n\n getLayerMain(): PageLayer {\n return this._indexLayer[\"main\"];\n }\n\n /**\n * @param name\n */\n getLayer(name: string): PageLayer {\n return this.getOrNewLayer(name);\n }\n\n protected getOrNewLayer(name: string): PageLayer {\n let layer = this._indexLayer[name];\n if (!layer) {\n layer = new PageLayer(name);\n this._indexLayer[name] = layer;\n }\n return layer;\n }\n\n getController(route: Route): PageController {\n return ctrlrepo.getByName(route.path) as PageController;\n }\n\n public get objectDict(): UIObjectDict {\n let dict = this._objectDict;\n if (!dict) {\n dict = new UIObjectDict();\n this._objectDict = dict;\n }\n return dict;\n }\n\n protected _objectDict: UIObjectDict;\n protected _indexLayer = {};\n protected _indexRoute = {};\n protected _history: Route[] = [];\n\n}\n\n\nexport const pagerepo = new PageRepo();\n","import { Page, PageState, PageEvent } from \"./Page\";\nimport { pagerepo } from \"./PageRepo\";\nimport { Route } from \"./Route\";\nimport { ViewController } from \"./ViewController\";\n\nexport class PageController extends ViewController {\n\n constructor(routeName: string, config?: { layer?: string, tags?: string[], enableHistory?: boolean }) {\n super(routeName);\n this._route = new Route(routeName);\n if (config) {\n if (config.layer) {\n this._layer = config.layer;\n }\n if (config.tags) {\n this._tags = config.tags;\n }\n if (config.enableHistory) {\n this._enableHistory = config.enableHistory;\n }\n }\n }\n\n\n protected onOpening(page: Page) {\n }\n\n protected onOpened(page: Page) {\n\n }\n\n protected onClosing(page: Page) {\n }\n\n protected onClosed(page: Page) {\n }\n\n\n protected onRefresh(page: Page) {\n }\n\n openByRoute(route: Route): Page {\n let newpage: Page;\n let oldpage: Page;\n if (this._layer) {\n let layer = pagerepo.getLayer(this._layer);\n oldpage = layer.currentPage;\n if (oldpage) {\n let currentRoute = oldpage.route;\n if (currentRoute.key == route.key) {\n return oldpage;\n }\n // 关闭\n let currentCtrl = oldpage.controller;\n currentCtrl.closePage(oldpage);\n if (currentCtrl._enableHistory) {\n pagerepo.getHistory().push(oldpage.route);\n }\n\n }\n\n newpage = new Page(this, route);\n layer.currentPage = newpage;\n\n\n } else {\n newpage = new Page(this, route);\n }\n //\n this.openPage(newpage);\n //\n return newpage;\n }\n\n private openPage(page: Page) {\n if (!page) {\n return;\n }\n if (page.state != PageState.Closed) {\n return;\n }\n this._lastPage = page;\n page.state = PageState.Opening;\n page.dispatch(PageEvent.Opening);\n //\n try {\n pagerepo.push(page);\n this.onOpening(page);\n // @ts-ignore\n if (!page._waitOpenComplete) {\n // 没有被打断,打开完成\n this.openComplete(page);\n } else {\n // 被打断了,等待完成1\n }\n } catch (e) {\n console.error(`open page ${page.route.key}`)\n console.error(e.stack);\n //\n this.closePage(page);\n }\n }\n\n\n openComplete(page: Page) {\n if (!page) {\n return;\n }\n this._lastPage = page;\n page.state = PageState.Opened;\n this.onOpened(page);\n page.dispatch(PageEvent.Opened);\n }\n\n closeByRoute(route?: Route): Page {\n let lastpage: Page;\n if (this._layer) {\n let layer = pagerepo.getLayer(this._layer);\n lastpage = layer.currentPage;\n layer.currentPage = null;\n } else {\n lastpage = pagerepo.getByRoute(route);\n }\n this.closePage(lastpage);\n if (this._enableHistory) {\n // 清空历史记录\n pagerepo.getHistory().length = 0;\n }\n\n return lastpage;\n }\n\n private closePage(page: Page) {\n if (!page) {\n return;\n }\n if (page.state == PageState.Closed) {\n return;\n }\n this._lastPage = page;\n page.state = PageState.Closeing;\n page.dispatch(PageEvent.Closeing);\n\n try {\n this.onClosing(page);\n // @ts-ignore\n if (!page._waitCloseComplete) {\n // 没有被打断,关闭完成\n this.closeComplete(page);\n } else {\n // 被打断了,等待完成1\n }\n\n\n } catch (e) {\n console.error(`close page ${page.route.key}`)\n console.error(e.stack);\n }\n }\n\n closeComplete(page: Page) {\n if (!page) {\n return;\n }\n pagerepo.remove(page);\n this._lastPage = page;\n // @ts-ignore\n let objectDict = page._objectDict;\n if (objectDict) {\n objectDict.clear();\n }\n page.state = PageState.Closed;\n page.dispatch(PageEvent.Closed);\n\n this.onClosed(page);\n }\n\n refresh() {\n this.onRefresh(this._lastPage);\n }\n\n\n get layer(): string {\n return this._layer;\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 setLayer(name: string): this {\n this._layer = name;\n return this;\n }\n\n setTags(tags: string[]): this {\n this._tags = tags;\n return this;\n }\n\n\n get lastPage(): Page {\n return this._lastPage;\n }\n\n get route(): Route {\n return this._route;\n }\n\n get enableHistory(): boolean {\n return this._enableHistory;\n }\n\n protected _enableHistory: boolean = false;\n protected _route: Route;\n protected _lastPage: Page;\n protected _tags = {};\n protected _layer: string;\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","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();","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();","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 {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 * @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 splitLast(val: string, separator: string): string {\n let arr = val.split(separator);\n if (arr.length > 0) {\n return arr[arr.length - 1]\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 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 {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();","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 {error, errorutil} from \"./ErrorUtil\";\r\nimport {loadAtlas} from \"./ResUtil/LoadAtlas\";\r\n\r\n\r\nclass ResUtil {\r\n loadResource(path: string): Promise<[any, error]> {\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, error]> {\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, error]> {\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, error]> {\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, error]> {\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, error]> {\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();","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","enum GeometryDirection {\n East,\n SouthEast,\n South,\n SouthWest,\n West,\n NorthWest,\n North,\n NorthEast\n}\n\n\n\nexport class GeometryUtil {\n /**\n * mode,8表示八方向,2表示二方向(左右),4表示4方向\n * @param dot\n * @param mode\n */\n angleToDirection(dot: number, mode: number = 8): GeometryDirection {\n if (dot > 180) {\n dot = dot - 360\n }\n var dir = -1;\n switch (mode) {\n case 2:\n //逆时针方向\n if (dot > 0) {\n if (dot < 90) {\n //0-45度\n dir = GeometryDirection.East\n } else {\n //180度\n dir = GeometryDirection.West\n }\n } else {\n dot = -dot\n //顺时针方向\n if (dot < 90) {\n dir = GeometryDirection.East\n } else {\n //180度\n dir = GeometryDirection.West\n }\n }\n break;\n case 4: // 4方向\n //逆时针方向\n if (dot > 0) {\n if (dot < 45) {\n //0-45度\n dir = GeometryDirection.East\n } else if (dot < 135) {\n //67.5度\n dir = GeometryDirection.North\n } else {\n //180度\n dir = GeometryDirection.West\n }\n } else {\n dot = -dot\n //顺时针方向\n if (dot < 45) {\n dir = GeometryDirection.East\n } else if (dot < 135) {\n dir = GeometryDirection.South\n } else {\n //180度\n dir = GeometryDirection.West\n }\n }\n break;\n default:\n //逆时针方向\n if (dot > 0) {\n if (dot < 22.5) {\n //0-22.5度\n dir = GeometryDirection.East\n } else if (dot < 67.5) {\n //67.5度\n dir = GeometryDirection.NorthEast\n } else if (dot < 112.5) {\n //112.5度\n dir = GeometryDirection.North\n } else if (dot < 157) {\n //157度\n dir = GeometryDirection.NorthWest\n } else {\n //180度\n dir = GeometryDirection.West\n }\n } else {\n dot = -dot\n //顺时针方向\n if (dot < 22.5) {\n //0-22.5度\n dir = GeometryDirection.East\n } else if (dot < 67.5) {\n //67.5度\n dir = GeometryDirection.SouthEast\n } else if (dot < 112.5) {\n //112.5度\n dir = GeometryDirection.South\n } else if (dot < 157) {\n //157度\n dir = GeometryDirection.SouthWest\n } else {\n //180度\n dir = GeometryDirection.West\n }\n }\n }\n\n return dir\n }\n\n}\n\nexport let geoutil = new GeometryUtil();","import {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 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();","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();"],"names":[],"mappings":"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"}