4ead6a5e-502c-4891-9186-0a5eda40831f.json 21.9 KB
{
  "__type__": "cc.TextAsset",
  "_name": "slib.d",
  "_objFlags": 0,
  "_native": "",
  "text": "//编译时间Mon Apr 18 2022 14:55:11 GMT+0800 (GMT+08:00)\n/**\n * sLib\n * Base TS game lib, S for simple, standard, stable, and Sean;\n * 通用基础库,设计理念为所有项目共用的一些基础方法,不于具体业务相关联,纯TS实现,不对外部及任何引擎有依赖\n * @author Sean\n */\ndeclare namespace slib {\n    /**控制logI,logW,logE输出的开关 */\n    let LOG_ENABLE: boolean;\n    function logI(message?: string, ...args: any[]): void;\n    function logW(message?: string, ...args: any[]): void;\n    function logE(message?: string, ...args: any[]): void;\n    class StringUtil {\n        /**\n         * 是否为无效字符串,null或undefined都会返回true\n         * @param str\n         */\n        static isEmpty(str: string): boolean;\n        /**\n         * 格式化,类似c++的sprintf\n         * @param text\n         * @param formatParam\n         */\n        static format(text?: string, ...formatParam: any[]): string;\n        static formatWithArray(text: string, formatParam: any[], paramCnt?: number): string;\n        /**\n         * 获取字符串长度,中文字当2个字符\n         * @static\n         * @param {string} str\n         * @return {*}  {number}\n         * @memberof StringUtil\n         */\n        static getStringLen(str: string): number;\n        /**\n         * 将指定的秒数转换为 hh:mm:ss 的字符串\n         * @param sec 秒数\n         */\n        static formatTimeBySecs(secs: number): string;\n    }\n    class TypeUtil {\n        /**是否为undefined或null */\n        static isUndefinedOrNull(obj: any): boolean;\n    }\n    class ArrayUtil {\n        /**\n         * 从目标数组中删掉指定的元素\n         * @param list 目标数组\n         * @param element 要删除的元素\n         * @returns 要删除的元素,若不在目标数组中,则返回null\n         */\n        static removeElement<T>(list: T[], element: T): T;\n    }\n    class MathUtil {\n        /**\n         * 获得[n-m)区间中的一个随机整数,包括n,不包括m\n         */\n        static getRandom(n: number, m: number): number;\n        /**是否为有效数据,null,undefined,NaN,null皆为无效 */\n        static isValidNumber(num: number): boolean;\n        /**\n         * 限制value的值在min和max之间, 如果value小于min,返回min。 如果value大于max,返回max,否则返回value\n         */\n        static clamp(value: number, min: number, max: number): number;\n        /**\n         * 插值\n         * @param min 最小值\n         * @param max 最大值\n         * @param t 系数\n         * @returns 所求值\n         */\n        static lerp(min: number, max: number, t: number): number;\n        /**\n         * 将弧度转化为角度\n         * @param rad 弧度\n         */\n        static getDegreeByRadian(rad: number): number;\n        /**\n         * 将角度转化为弧度\n         * @param degree 角度\n         */\n        static getRadianByDegree(degree: number): number;\n        /**\n         * 根据向量求角度\n         * @param x\n         * @param y\n         * @returns 返回值为与x轴的夹角,带正负号,正值为x轴逆时针方向,负值为x轴顺时针方向\n        */\n        static getDegByVec(x: number, y: number): number;\n        /**\n         * 根据向量求弧度\n         * @param x\n         * @param y\n         * @returns 返回值为与x轴的夹角,带正负号,正值为x轴逆时针方向,负值为x轴顺时针方向\n        */\n        static getRadianByVec(x: number, y: number): number;\n        /**根据向量求角度,返回值在 [0,360]之间,代表从x轴逆时针方向旋转的角度 */\n        static get360DegByVec(x: number, y: number): number;\n        /**根据向量求弧度,返回值在 [0,2Pi]之间,代表从x轴逆时针方向旋转的弧度 */\n        static get2PiRadianByVec(x: number, y: number): number;\n        /**\n         * 根据权重列表进行一次随机,返回命中的索引\n         * @param list 权重列表\n         * @returns 命中的索引\n         */\n        static randomTestByWeightList(list: number[]): number;\n    }\n}\ndeclare namespace slib.astar {\n    /**格子节点 */\n    class GridNode {\n        private _x;\n        get x(): number;\n        private _y;\n        get y(): number;\n        weight: number;\n        /**是否已遍历过,内部使用,外部无需关注 */\n        visited: boolean;\n        /**父节点 内部使用,外部无需关注 */\n        parent: GridNode;\n        /**是否在关闭列表中  内部使用,外部无需关注*/\n        closed: boolean;\n        /**内部使用,外部无需关注 */\n        h: number;\n        /**内部使用,外部无需关注 */\n        g: number;\n        /**内部使用,外部无需关注 */\n        f: number;\n        /**内部使用,外部无需关注 */\n        cleanNode(): void;\n        /**\n         *\n         * @param x\n         * @param y\n         * @param weight 权重,计算G值时使用此值,越大代表移动代价越高,0表示为障碍物\n         */\n        constructor(x: number, y: number, weight: number);\n        /**是否是障碍物 */\n        get isWall(): boolean;\n        /**移动代价,用于计算G值 */\n        getCost(fromNeighbor: GridNode): number;\n        toString(): string;\n    }\n    /**A星格子网格类 */\n    class Graph {\n        protected _diagonal: boolean;\n        get diagonal(): boolean;\n        protected _grid: GridNode[][];\n        get grid(): GridNode[][];\n        protected _dirtyNodes: GridNode[];\n        private _neighborsRet;\n        /**\n         *\n         * @param gridIn 权重的二维数组,格式为[x][y],第一个下标为列数,第二个下表为行数\n         * @param diagonal 是否允许斜向移动\n         */\n        constructor(gridIn: number[][], diagonal?: boolean);\n        cleanDirty(): void;\n        markDirty(node: GridNode): void;\n        /**\n         * 获取目标格子相邻的格子\n         * @param node\n         * @returns 注意返回的数组为唯一实例,会随着下一次调用改变,请及时处理\n         */\n        neighbors(node: GridNode): GridNode[];\n    }\n    function pathTo(node: GridNode): GridNode[];\n    class AStar {\n        /**\n         *\n         * @param graph 寻路网格\n         * @param start 起点\n         * @param end 终点\n         * @param closest 当目标点不可到达时,是否寻路至最近的点\n         * @param heuristic 启发函数,用于在寻路时估计当前格子到终点的距离,即计算H值,默认使用manhattan方法\n         * @returns 找不到路径时返回null\n         */\n        search(graph: Graph, start: GridNode, end: GridNode, closest?: boolean, heuristic?: (pos0: GridNode, pos1: GridNode) => number): GridNode[];\n        protected getHeap(): math.BinaryHeap<GridNode>;\n    }\n    namespace heuristics {\n        function manhattan(pos0: GridNode, pos1: GridNode): number;\n    }\n}\ndeclare namespace slib.comp {\n    /**摇杆数据模型,设计思路为,传入摇杆半径和按压点,可获得摇杆坐标和力度数据\n     * 使用方法,设置半径和基准点,当操作摇杆时调用tap接口传入按压点,释放时调用release接口,修改基准点时调用setStartPos接口,所有坐标都需要与基准点在同一坐标系下\n     */\n    class JoyStick implements inter.IDestroy {\n        destroyed: boolean;\n        private _startX;\n        /**基准点X */\n        get startX(): number;\n        private _startY;\n        /**基准点Y */\n        get startY(): number;\n        private _radius;\n        get radius(): number;\n        /**X轴方向力度,正负代表方向,范围 0-1 */\n        get strengthX(): number;\n        /**Y轴方向力度,正负代表方向,范围 0-1 */\n        get strengthY(): number;\n        private _stickX;\n        /**摇杆坐标X */\n        get stickX(): number;\n        private _stickY;\n        /**摇杆坐标Y */\n        get stickY(): number;\n        private _tapping;\n        /**是否在按压中 */\n        get tapping(): boolean;\n        /**\n         * @param radius 最大半径\n         */\n        constructor(radius?: number, startX?: number, startY?: number);\n        /**修改摇杆基准点 */\n        setStartPos(posX: number, posY: number): void;\n        tap(tapX: number, tapY: number): void;\n        release(): void;\n        destroy(): void;\n    }\n}\ndeclare namespace slib.config {\n    /**配置基类 */\n    class ConfigBase {\n        /**ID 不可重复 */\n        ID: number;\n    }\n}\ndeclare namespace slib.config {\n    /**配置管理器,使用方法:setTable 后 parse, 即可获取数据 */\n    class ConfigManager {\n        private _map;\n        /**所有的配置都在这里 */\n        get map(): object;\n        private m_temp;\n        /**\n         * 传入配置表数据,传入后需调用parse方法,将传入的数据解析为对应的类\n         * @param name 表的名字,区分表用\n         * @param data 数据数组,json导出为数组形式,解析后的object\n         * @param cls 对应的类\n         */\n        setTable(name: string, data: any[], cls: new () => ConfigBase): void;\n        /**获取某张表的配置数量 */\n        getTableCount(name: string): number;\n        /**获取某张表的最大ID */\n        getTableMaxID(name: string): number;\n        /**解析后将清空所有缓存的数据 */\n        parse(): void;\n        /**\n         * 根据表名和ID取出数据\n         * @param tableName\n         * @param id\n         * @returns 找不到则返回null\n         */\n        getConfig(tableName: string, id: number): ConfigBase;\n    }\n}\ndeclare namespace slib.pool {\n    /**池元素基类,若继承此基类,则不可在构造函数中传入参数,避免池管理器创建对象时出错 */\n    class PoolUnit implements inter.IPoolUnit {\n        inPool: boolean;\n        /**从池中取出时的初始化接口,建议子类复写,在此时初始化数据 */\n        onInitFromPool(): void;\n        /**回收到池中时调用的接口,建议子类复写,在此时清除内部相关引用 */\n        onRecoverToPool(): void;\n    }\n}\ndeclare namespace slib.pool {\n    class PoolManager<T extends inter.IPoolUnit> {\n        private _pool;\n        private _warnNum;\n        /**警告数量,若池中元素数量超过设定值则打印警告,默认为200 */\n        get warnNum(): number;\n        private _class;\n        constructor(T: any);\n        /**\n         * 设置警告数量,查看warnNum属性\n         * @param num\n         */\n        setWarnNum(num: number): void;\n        getUnit(): T;\n        /**注意,若不是由PoolManager创建的,也会回收到池中 */\n        recoverUnit(unit: T): void;\n    }\n}\ndeclare namespace slib.event {\n    /**事件派发器 */\n    class EventDispatcher {\n        private static _pool;\n        private _map;\n        addEventListener(event: string, callBack: Function, thisObj: any): void;\n        removeEventListener(event: string, callBack: Function): void;\n        dispatchEvent(event: string, arg?: any): void;\n        /**清除所有监听 */\n        clearAll(): void;\n    }\n}\ndeclare namespace slib.frame {\n    class Battle {\n        destroyed: boolean;\n        private _battleLastTime;\n        /**战斗持续时间 */\n        get battleLastTime(): number;\n        protected _moduleList: BattleBaseModule[];\n        private _lazyUpdateDelta;\n        private _lazyUpdateFlag;\n        addModule(module: BattleBaseModule): void;\n        init(): void;\n        start(): void;\n        update(delta: number): void;\n        stop(): void;\n        destroy(): void;\n    }\n}\ndeclare namespace slib.frame {\n    class BattleBaseModule {\n        /**主战斗引用 */\n        protected _battle: Battle;\n        get battle(): Battle;\n        constructor(battle: Battle);\n        initModule(): void;\n        startModule(): void;\n        stopModule(): void;\n        update(delta: number): void;\n        /**在所有module的update结束后进行 */\n        lateUpdate(delta: number): void;\n        /**两帧调用一次,可处理一些并不需要频繁更新的逻辑 */\n        lazyUpdate(delta: number): void;\n        destroy(): void;\n    }\n}\ndeclare namespace slib.frame {\n    /**可控制心跳的timer */\n    class FrameTimer implements inter.IUpdate {\n        private _interval;\n        private _intervalCount;\n        private _count;\n        private _callBack;\n        private _callBackThisObj;\n        private _running;\n        /**是否正在运行 */\n        get running(): boolean;\n        /**\n         * @param interval 间隔,需要与update中传入的参数为同一单位\n         * @param callBack\n         * @param callBackThisObj\n         * @param count 0为无限\n         */\n        init(interval: number, callBack: Function, callBackThisObj: any, count?: number): void;\n        start(): void;\n        update(delta: number): void;\n        stop(): void;\n        destroy(): void;\n    }\n}\n/**接口相关 */\ndeclare namespace slib.inter {\n    interface IDestroy {\n        /**是否被销毁过 */\n        destroyed: boolean;\n        destroy(): void;\n    }\n    interface IUpdate {\n        /**\n         * 每帧刷新调用的接口\n         * @param delta\n         */\n        update(delta: number): void;\n    }\n    interface IPoolUnit {\n        /**是否在池中 */\n        inPool: boolean;\n        /**从池中取出时的初始化接口,建议子类复写,在此时初始化数据 */\n        onInitFromPool(): void;\n        /**回收到池中时调用的接口,建议子类复写,在此时清除内部相关引用 */\n        onRecoverToPool(): void;\n    }\n}\ndeclare namespace slib.math {\n    /**最小二叉堆,根节点为最小值,父节点总是小于或等于子节点,在一个频繁修改的数组中,若总是需要获取最小值,使用二叉堆性能较高 */\n    class BinaryHeap<T> {\n        private _content;\n        private _scoreFunction;\n        /**\n         *\n         * @param scoreFunction 排序值函数,二叉树根据此函数返回的值进行排序\n         */\n        constructor(scoreFunction: (element: T) => number);\n        /**所有节点数量 */\n        get size(): number;\n        /**添加节点 */\n        push(element: T): void;\n        /**取最小值节点 */\n        pop(): T;\n        /**删除所有子节点 */\n        clear(): void;\n        /**移除某个节点,二叉堆会在移除的节点处重新排序 */\n        remove(node: T): void;\n        /**\n         * 某个节点的值改变了,重排二叉堆\n         * @param node 需要重排的节点\n         * @param reduce true表示减小,false表示增加\n         */\n        rescoreElement(node: T, reduce?: boolean): void;\n        /**从索引n开始向上查找,将大的父节点下沉 */\n        private sinkDown;\n        /**从索引n开始向下查找,将小的子节点上浮 */\n        private bubbleUp;\n    }\n}\ndeclare namespace slib.math {\n    /**2d向量简易封装 */\n    class Vector extends pool.PoolUnit {\n        private static _poolManager;\n        private static _inited;\n        /**从对象池中获取 */\n        static get(): Vector;\n        static recover(p: Vector): void;\n        private _x;\n        get x(): number;\n        private _y;\n        get y(): number;\n        /**模长 */\n        get magnitude(): number;\n        /**模长的平方数,在需要比较向量长度时,可比较两向量的模长平方数,省去开方计算 */\n        get sqrMagnitude(): number;\n        constructor(x: number, y: number);\n        setValue(valueX: number, valueY: number): Vector;\n        setX(valueX: number): void;\n        setY(valueY: number): void;\n        /**当x,y都为0时,不会产生变化 */\n        normalize(): void;\n        scale(value: number): void;\n    }\n}\n/**2d移动模型 */\ndeclare namespace slib.move2d {\n    enum Dir {\n        LEFT = 0,\n        RIGHT = 1,\n        UP = 2,\n        DOWN = 3\n    }\n    /**2d移动模型,可根据设置速度、加速度、方向进行移动,需由外部调用update接口更新 */\n    class ActorMove2d implements inter.IUpdate, inter.IDestroy {\n        destroyed: boolean;\n        private _posChangeCallBack;\n        private _posChangeCallBackThisObj;\n        private _speed;\n        /**速度 */\n        get speed(): number;\n        private _accelerate;\n        /**加速度*/\n        get accelerate(): number;\n        private _dirNormal;\n        /**方向法向量 */\n        get dirNormal(): math.Vector;\n        protected _stepVec: math.Vector;\n        /**步进向量 每次调用onFrameUpdate后更新*/\n        get stepVec(): math.Vector;\n        /**步进模长 每次调用onFrameUpdate后更新*/\n        protected _stepLen: number;\n        private _pos;\n        get pos(): math.Vector;\n        active: boolean;\n        constructor(x: number, y: number);\n        /**设置前进方向 */\n        setDir(x: number, y: number): void;\n        /**直接设置前进方向的法向量,可节省一次归一运算 */\n        setDirNormal(x: number, y: number): void;\n        /**步进接口,更新一帧数据\n         * @param delta 单位秒\n         */\n        update(delta: number): void;\n        /**手动设置位置,不会触发位移回调 */\n        setPos(x: number, y: number): void;\n        /**\n         * 当调用onFrameUpdate时会触发此接口,调用posChangeCallBack,子类可复写此方法,控制调用的时机\n         * @param dis 前进的距离\n         */\n        protected callBallBack(dis: number): void;\n        /**\n        * 绑定位移回调函数,在产生位移时才会触发回调\n        * @param func 回调函数,参数 dis:number,前进的距离\n        */\n        bindPosChangeCallback(callBack: Function, thisObj: any): void;\n        /**\n         * 设置速度,若设置负值,速度会变为0\n         * @param value\n         */\n        setSpeed(value: number): void;\n        /**设置加速度,若设置负值,则产生减速效果 */\n        setAcceleration(value: number): void;\n        destroy(): void;\n    }\n}\ndeclare namespace slib.move2d {\n    /**在ActorMove2d的基础上改为根据路径列表前进,setDir接口会失效 */\n    class ActorMove2dPath extends ActorMove2d {\n        private _pathList;\n        get pathList(): math.Vector[];\n        private _curTarget;\n        private _pathIndex;\n        /**当前正在追逐的节点索引 */\n        get pathIndex(): number;\n        private _changePointCallBack;\n        private _changePointCallBackThisObj;\n        private _posChangeCallBackFlag;\n        /**\n         * 注意,若设置了加速度,只在行走时加速度才参与计算\n         * @param value 加速度\n         */\n        setAcceleration(value: number): void;\n        /**\n        * 设置路径列表,若路径点与当前位置相同,则会跳到下一个路径点,直到位置不同\n        * @param pathList 传入的路径列表,内部只会引用此数组,不修改其中的数据\n        */\n        start(pathList: math.Vector[]): void;\n        /**\n         * 绑定路径点切换时的回调函数,当走过一个点时会触发一次,若出发后此实例的pathIndex属性为-1,则表示路径已走完\n         * @param callBack\n         * @param thisObj\n         */\n        bindPointChangeCallBack(callBack: Function, thisObj: any): void;\n        setDir(): void;\n        stop(): void;\n        private gotoPathPoint;\n        update(delta: number): void;\n        protected callBallBack(dis: number): void;\n        /**\n        * 当前路径点切换时调用\n        * @returns true为成功,false为路径点已走完了\n        */\n        private checkNextPathPoint;\n        /**当前路径点切换时调用,供子类复写,第一个点不会触发 */\n        protected onGoToNextPoint(): void;\n        destroy(): void;\n    }\n}\n/**状态机相关 */\ndeclare namespace slib.sm {\n    /**\n     * 单个状态基类\n     */\n    class SMBaseState {\n        static nullTransitionId: number;\n        static nullStateId: number;\n        stateMachine: XStateMachine;\n        get id(): number;\n        set id(value: number);\n        get isRunning(): boolean;\n        isDestroy: boolean;\n        /**切换到此状态时,上一个状态ID */\n        lastStateId: number;\n        protected map: Map<number, number>;\n        protected m_stateId: number;\n        /**\n         * 定义事件和状态的跳转关系\n         * @param trans 事件类型\n         * @param id 状态类型\n         */\n        addTransition(trans: number, id: number): void;\n        deleteTransition(trans: number): void;\n        getOutputState(trans: number): number;\n        /**状态被触发时的调用 */\n        onEnter(data?: object): void;\n        /**离开状态的调用,状态机destory时,也会调用当前状态的onLeave接口 */\n        onLeave(): void;\n        onReason(transID: number, data?: object): void;\n        onUpdate(data?: object): void;\n        /**状态机destro时触发 */\n        onDestory(): void;\n        onGetDebugInfomation(): string;\n    }\n}\ndeclare namespace slib.sm {\n    /**\n         * 状态机控制类\n         */\n    class XStateMachine {\n        protected m_states: SMBaseState[];\n        protected m_currentStateID: number;\n        private m_oldStateID;\n        protected m_currentState: SMBaseState;\n        getCurrentStateID(): number;\n        performTransition(trans: number, data?: object): void;\n        protected addState(s: SMBaseState): void;\n        protected getStateById(id: number): SMBaseState;\n        protected onStateChange(): void;\n        destory(): void;\n        protected onDestory(): void;\n    }\n}\n"
}