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"
}