slib.d.ts 21.2 KB
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594
//编译时间Mon Apr 18 2022 14:55:11 GMT+0800 (GMT+08:00)
/**
 * sLib
 * Base TS game lib, S for simple, standard, stable, and Sean;
 * 通用基础库,设计理念为所有项目共用的一些基础方法,不于具体业务相关联,纯TS实现,不对外部及任何引擎有依赖
 * @author Sean
 */
declare namespace slib {
    /**控制logI,logW,logE输出的开关 */
    let LOG_ENABLE: boolean;
    function logI(message?: string, ...args: any[]): void;
    function logW(message?: string, ...args: any[]): void;
    function logE(message?: string, ...args: any[]): void;
    class StringUtil {
        /**
         * 是否为无效字符串,null或undefined都会返回true
         * @param str
         */
        static isEmpty(str: string): boolean;
        /**
         * 格式化,类似c++的sprintf
         * @param text
         * @param formatParam
         */
        static format(text?: string, ...formatParam: any[]): string;
        static formatWithArray(text: string, formatParam: any[], paramCnt?: number): string;
        /**
         * 获取字符串长度,中文字当2个字符
         * @static
         * @param {string} str
         * @return {*}  {number}
         * @memberof StringUtil
         */
        static getStringLen(str: string): number;
        /**
         * 将指定的秒数转换为 hh:mm:ss 的字符串
         * @param sec 秒数
         */
        static formatTimeBySecs(secs: number): string;
    }
    class TypeUtil {
        /**是否为undefined或null */
        static isUndefinedOrNull(obj: any): boolean;
    }
    class ArrayUtil {
        /**
         * 从目标数组中删掉指定的元素
         * @param list 目标数组
         * @param element 要删除的元素
         * @returns 要删除的元素,若不在目标数组中,则返回null
         */
        static removeElement<T>(list: T[], element: T): T;
    }
    class MathUtil {
        /**
         * 获得[n-m)区间中的一个随机整数,包括n,不包括m
         */
        static getRandom(n: number, m: number): number;
        /**是否为有效数据,null,undefined,NaN,null皆为无效 */
        static isValidNumber(num: number): boolean;
        /**
         * 限制value的值在min和max之间, 如果value小于min,返回min。 如果value大于max,返回max,否则返回value
         */
        static clamp(value: number, min: number, max: number): number;
        /**
         * 插值
         * @param min 最小值
         * @param max 最大值
         * @param t 系数
         * @returns 所求值
         */
        static lerp(min: number, max: number, t: number): number;
        /**
         * 将弧度转化为角度
         * @param rad 弧度
         */
        static getDegreeByRadian(rad: number): number;
        /**
         * 将角度转化为弧度
         * @param degree 角度
         */
        static getRadianByDegree(degree: number): number;
        /**
         * 根据向量求角度
         * @param x
         * @param y
         * @returns 返回值为与x轴的夹角,带正负号,正值为x轴逆时针方向,负值为x轴顺时针方向
        */
        static getDegByVec(x: number, y: number): number;
        /**
         * 根据向量求弧度
         * @param x
         * @param y
         * @returns 返回值为与x轴的夹角,带正负号,正值为x轴逆时针方向,负值为x轴顺时针方向
        */
        static getRadianByVec(x: number, y: number): number;
        /**根据向量求角度,返回值在 [0,360]之间,代表从x轴逆时针方向旋转的角度 */
        static get360DegByVec(x: number, y: number): number;
        /**根据向量求弧度,返回值在 [0,2Pi]之间,代表从x轴逆时针方向旋转的弧度 */
        static get2PiRadianByVec(x: number, y: number): number;
        /**
         * 根据权重列表进行一次随机,返回命中的索引
         * @param list 权重列表
         * @returns 命中的索引
         */
        static randomTestByWeightList(list: number[]): number;
    }
}
declare namespace slib.astar {
    /**格子节点 */
    class GridNode {
        private _x;
        get x(): number;
        private _y;
        get y(): number;
        weight: number;
        /**是否已遍历过,内部使用,外部无需关注 */
        visited: boolean;
        /**父节点 内部使用,外部无需关注 */
        parent: GridNode;
        /**是否在关闭列表中  内部使用,外部无需关注*/
        closed: boolean;
        /**内部使用,外部无需关注 */
        h: number;
        /**内部使用,外部无需关注 */
        g: number;
        /**内部使用,外部无需关注 */
        f: number;
        /**内部使用,外部无需关注 */
        cleanNode(): void;
        /**
         *
         * @param x
         * @param y
         * @param weight 权重,计算G值时使用此值,越大代表移动代价越高,0表示为障碍物
         */
        constructor(x: number, y: number, weight: number);
        /**是否是障碍物 */
        get isWall(): boolean;
        /**移动代价,用于计算G值 */
        getCost(fromNeighbor: GridNode): number;
        toString(): string;
    }
    /**A星格子网格类 */
    class Graph {
        protected _diagonal: boolean;
        get diagonal(): boolean;
        protected _grid: GridNode[][];
        get grid(): GridNode[][];
        protected _dirtyNodes: GridNode[];
        private _neighborsRet;
        /**
         *
         * @param gridIn 权重的二维数组,格式为[x][y],第一个下标为列数,第二个下表为行数
         * @param diagonal 是否允许斜向移动
         */
        constructor(gridIn: number[][], diagonal?: boolean);
        cleanDirty(): void;
        markDirty(node: GridNode): void;
        /**
         * 获取目标格子相邻的格子
         * @param node
         * @returns 注意返回的数组为唯一实例,会随着下一次调用改变,请及时处理
         */
        neighbors(node: GridNode): GridNode[];
    }
    function pathTo(node: GridNode): GridNode[];
    class AStar {
        /**
         *
         * @param graph 寻路网格
         * @param start 起点
         * @param end 终点
         * @param closest 当目标点不可到达时,是否寻路至最近的点
         * @param heuristic 启发函数,用于在寻路时估计当前格子到终点的距离,即计算H值,默认使用manhattan方法
         * @returns 找不到路径时返回null
         */
        search(graph: Graph, start: GridNode, end: GridNode, closest?: boolean, heuristic?: (pos0: GridNode, pos1: GridNode) => number): GridNode[];
        protected getHeap(): math.BinaryHeap<GridNode>;
    }
    namespace heuristics {
        function manhattan(pos0: GridNode, pos1: GridNode): number;
    }
}
declare namespace slib.comp {
    /**摇杆数据模型,设计思路为,传入摇杆半径和按压点,可获得摇杆坐标和力度数据
     * 使用方法,设置半径和基准点,当操作摇杆时调用tap接口传入按压点,释放时调用release接口,修改基准点时调用setStartPos接口,所有坐标都需要与基准点在同一坐标系下
     */
    class JoyStick implements inter.IDestroy {
        destroyed: boolean;
        private _startX;
        /**基准点X */
        get startX(): number;
        private _startY;
        /**基准点Y */
        get startY(): number;
        private _radius;
        get radius(): number;
        /**X轴方向力度,正负代表方向,范围 0-1 */
        get strengthX(): number;
        /**Y轴方向力度,正负代表方向,范围 0-1 */
        get strengthY(): number;
        private _stickX;
        /**摇杆坐标X */
        get stickX(): number;
        private _stickY;
        /**摇杆坐标Y */
        get stickY(): number;
        private _tapping;
        /**是否在按压中 */
        get tapping(): boolean;
        /**
         * @param radius 最大半径
         */
        constructor(radius?: number, startX?: number, startY?: number);
        /**修改摇杆基准点 */
        setStartPos(posX: number, posY: number): void;
        tap(tapX: number, tapY: number): void;
        release(): void;
        destroy(): void;
    }
}
declare namespace slib.config {
    /**配置基类 */
    class ConfigBase {
        /**ID 不可重复 */
        ID: number;
    }
}
declare namespace slib.config {
    /**配置管理器,使用方法:setTable 后 parse, 即可获取数据 */
    class ConfigManager {
        private _map;
        /**所有的配置都在这里 */
        get map(): object;
        private m_temp;
        /**
         * 传入配置表数据,传入后需调用parse方法,将传入的数据解析为对应的类
         * @param name 表的名字,区分表用
         * @param data 数据数组,json导出为数组形式,解析后的object
         * @param cls 对应的类
         */
        setTable(name: string, data: any[], cls: new () => ConfigBase): void;
        /**获取某张表的配置数量 */
        getTableCount(name: string): number;
        /**获取某张表的最大ID */
        getTableMaxID(name: string): number;
        /**解析后将清空所有缓存的数据 */
        parse(): void;
        /**
         * 根据表名和ID取出数据
         * @param tableName
         * @param id
         * @returns 找不到则返回null
         */
        getConfig(tableName: string, id: number): ConfigBase;
    }
}
declare namespace slib.pool {
    /**池元素基类,若继承此基类,则不可在构造函数中传入参数,避免池管理器创建对象时出错 */
    class PoolUnit implements inter.IPoolUnit {
        inPool: boolean;
        /**从池中取出时的初始化接口,建议子类复写,在此时初始化数据 */
        onInitFromPool(): void;
        /**回收到池中时调用的接口,建议子类复写,在此时清除内部相关引用 */
        onRecoverToPool(): void;
    }
}
declare namespace slib.pool {
    class PoolManager<T extends inter.IPoolUnit> {
        private _pool;
        private _warnNum;
        /**警告数量,若池中元素数量超过设定值则打印警告,默认为200 */
        get warnNum(): number;
        private _class;
        constructor(T: any);
        /**
         * 设置警告数量,查看warnNum属性
         * @param num
         */
        setWarnNum(num: number): void;
        getUnit(): T;
        /**注意,若不是由PoolManager创建的,也会回收到池中 */
        recoverUnit(unit: T): void;
    }
}
declare namespace slib.event {
    /**事件派发器 */
    class EventDispatcher {
        private static _pool;
        private _map;
        addEventListener(event: string, callBack: Function, thisObj: any): void;
        removeEventListener(event: string, callBack: Function): void;
        dispatchEvent(event: string, arg?: any): void;
        /**清除所有监听 */
        clearAll(): void;
    }
}
declare namespace slib.frame {
    class Battle {
        destroyed: boolean;
        private _battleLastTime;
        /**战斗持续时间 */
        get battleLastTime(): number;
        protected _moduleList: BattleBaseModule[];
        private _lazyUpdateDelta;
        private _lazyUpdateFlag;
        addModule(module: BattleBaseModule): void;
        init(): void;
        start(): void;
        update(delta: number): void;
        stop(): void;
        destroy(): void;
    }
}
declare namespace slib.frame {
    class BattleBaseModule {
        /**主战斗引用 */
        protected _battle: Battle;
        get battle(): Battle;
        constructor(battle: Battle);
        initModule(): void;
        startModule(): void;
        stopModule(): void;
        update(delta: number): void;
        /**在所有module的update结束后进行 */
        lateUpdate(delta: number): void;
        /**两帧调用一次,可处理一些并不需要频繁更新的逻辑 */
        lazyUpdate(delta: number): void;
        destroy(): void;
    }
}
declare namespace slib.frame {
    /**可控制心跳的timer */
    class FrameTimer implements inter.IUpdate {
        private _interval;
        private _intervalCount;
        private _count;
        private _callBack;
        private _callBackThisObj;
        private _running;
        /**是否正在运行 */
        get running(): boolean;
        /**
         * @param interval 间隔,需要与update中传入的参数为同一单位
         * @param callBack
         * @param callBackThisObj
         * @param count 0为无限
         */
        init(interval: number, callBack: Function, callBackThisObj: any, count?: number): void;
        start(): void;
        update(delta: number): void;
        stop(): void;
        destroy(): void;
    }
}
/**接口相关 */
declare namespace slib.inter {
    interface IDestroy {
        /**是否被销毁过 */
        destroyed: boolean;
        destroy(): void;
    }
    interface IUpdate {
        /**
         * 每帧刷新调用的接口
         * @param delta
         */
        update(delta: number): void;
    }
    interface IPoolUnit {
        /**是否在池中 */
        inPool: boolean;
        /**从池中取出时的初始化接口,建议子类复写,在此时初始化数据 */
        onInitFromPool(): void;
        /**回收到池中时调用的接口,建议子类复写,在此时清除内部相关引用 */
        onRecoverToPool(): void;
    }
}
declare namespace slib.math {
    /**最小二叉堆,根节点为最小值,父节点总是小于或等于子节点,在一个频繁修改的数组中,若总是需要获取最小值,使用二叉堆性能较高 */
    class BinaryHeap<T> {
        private _content;
        private _scoreFunction;
        /**
         *
         * @param scoreFunction 排序值函数,二叉树根据此函数返回的值进行排序
         */
        constructor(scoreFunction: (element: T) => number);
        /**所有节点数量 */
        get size(): number;
        /**添加节点 */
        push(element: T): void;
        /**取最小值节点 */
        pop(): T;
        /**删除所有子节点 */
        clear(): void;
        /**移除某个节点,二叉堆会在移除的节点处重新排序 */
        remove(node: T): void;
        /**
         * 某个节点的值改变了,重排二叉堆
         * @param node 需要重排的节点
         * @param reduce true表示减小,false表示增加
         */
        rescoreElement(node: T, reduce?: boolean): void;
        /**从索引n开始向上查找,将大的父节点下沉 */
        private sinkDown;
        /**从索引n开始向下查找,将小的子节点上浮 */
        private bubbleUp;
    }
}
declare namespace slib.math {
    /**2d向量简易封装 */
    class Vector extends pool.PoolUnit {
        private static _poolManager;
        private static _inited;
        /**从对象池中获取 */
        static get(): Vector;
        static recover(p: Vector): void;
        private _x;
        get x(): number;
        private _y;
        get y(): number;
        /**模长 */
        get magnitude(): number;
        /**模长的平方数,在需要比较向量长度时,可比较两向量的模长平方数,省去开方计算 */
        get sqrMagnitude(): number;
        constructor(x: number, y: number);
        setValue(valueX: number, valueY: number): Vector;
        setX(valueX: number): void;
        setY(valueY: number): void;
        /**当x,y都为0时,不会产生变化 */
        normalize(): void;
        scale(value: number): void;
    }
}
/**2d移动模型 */
declare namespace slib.move2d {
    enum Dir {
        LEFT = 0,
        RIGHT = 1,
        UP = 2,
        DOWN = 3
    }
    /**2d移动模型,可根据设置速度、加速度、方向进行移动,需由外部调用update接口更新 */
    class ActorMove2d implements inter.IUpdate, inter.IDestroy {
        destroyed: boolean;
        private _posChangeCallBack;
        private _posChangeCallBackThisObj;
        private _speed;
        /**速度 */
        get speed(): number;
        private _accelerate;
        /**加速度*/
        get accelerate(): number;
        private _dirNormal;
        /**方向法向量 */
        get dirNormal(): math.Vector;
        protected _stepVec: math.Vector;
        /**步进向量 每次调用onFrameUpdate后更新*/
        get stepVec(): math.Vector;
        /**步进模长 每次调用onFrameUpdate后更新*/
        protected _stepLen: number;
        private _pos;
        get pos(): math.Vector;
        active: boolean;
        constructor(x: number, y: number);
        /**设置前进方向 */
        setDir(x: number, y: number): void;
        /**直接设置前进方向的法向量,可节省一次归一运算 */
        setDirNormal(x: number, y: number): void;
        /**步进接口,更新一帧数据
         * @param delta 单位秒
         */
        update(delta: number): void;
        /**手动设置位置,不会触发位移回调 */
        setPos(x: number, y: number): void;
        /**
         * 当调用onFrameUpdate时会触发此接口,调用posChangeCallBack,子类可复写此方法,控制调用的时机
         * @param dis 前进的距离
         */
        protected callBallBack(dis: number): void;
        /**
        * 绑定位移回调函数,在产生位移时才会触发回调
        * @param func 回调函数,参数 dis:number,前进的距离
        */
        bindPosChangeCallback(callBack: Function, thisObj: any): void;
        /**
         * 设置速度,若设置负值,速度会变为0
         * @param value
         */
        setSpeed(value: number): void;
        /**设置加速度,若设置负值,则产生减速效果 */
        setAcceleration(value: number): void;
        destroy(): void;
    }
}
declare namespace slib.move2d {
    /**在ActorMove2d的基础上改为根据路径列表前进,setDir接口会失效 */
    class ActorMove2dPath extends ActorMove2d {
        private _pathList;
        get pathList(): math.Vector[];
        private _curTarget;
        private _pathIndex;
        /**当前正在追逐的节点索引 */
        get pathIndex(): number;
        private _changePointCallBack;
        private _changePointCallBackThisObj;
        private _posChangeCallBackFlag;
        /**
         * 注意,若设置了加速度,只在行走时加速度才参与计算
         * @param value 加速度
         */
        setAcceleration(value: number): void;
        /**
        * 设置路径列表,若路径点与当前位置相同,则会跳到下一个路径点,直到位置不同
        * @param pathList 传入的路径列表,内部只会引用此数组,不修改其中的数据
        */
        start(pathList: math.Vector[]): void;
        /**
         * 绑定路径点切换时的回调函数,当走过一个点时会触发一次,若出发后此实例的pathIndex属性为-1,则表示路径已走完
         * @param callBack
         * @param thisObj
         */
        bindPointChangeCallBack(callBack: Function, thisObj: any): void;
        setDir(): void;
        stop(): void;
        private gotoPathPoint;
        update(delta: number): void;
        protected callBallBack(dis: number): void;
        /**
        * 当前路径点切换时调用
        * @returns true为成功,false为路径点已走完了
        */
        private checkNextPathPoint;
        /**当前路径点切换时调用,供子类复写,第一个点不会触发 */
        protected onGoToNextPoint(): void;
        destroy(): void;
    }
}
/**状态机相关 */
declare namespace slib.sm {
    /**
     * 单个状态基类
     */
    class SMBaseState {
        static nullTransitionId: number;
        static nullStateId: number;
        stateMachine: XStateMachine;
        get id(): number;
        set id(value: number);
        get isRunning(): boolean;
        isDestroy: boolean;
        /**切换到此状态时,上一个状态ID */
        lastStateId: number;
        protected map: Map<number, number>;
        protected m_stateId: number;
        /**
         * 定义事件和状态的跳转关系
         * @param trans 事件类型
         * @param id 状态类型
         */
        addTransition(trans: number, id: number): void;
        deleteTransition(trans: number): void;
        getOutputState(trans: number): number;
        /**状态被触发时的调用 */
        onEnter(data?: object): void;
        /**离开状态的调用,状态机destory时,也会调用当前状态的onLeave接口 */
        onLeave(): void;
        onReason(transID: number, data?: object): void;
        onUpdate(data?: object): void;
        /**状态机destro时触发 */
        onDestory(): void;
        onGetDebugInfomation(): string;
    }
}
declare namespace slib.sm {
    /**
         * 状态机控制类
         */
    class XStateMachine {
        protected m_states: SMBaseState[];
        protected m_currentStateID: number;
        private m_oldStateID;
        protected m_currentState: SMBaseState;
        getCurrentStateID(): number;
        performTransition(trans: number, data?: object): void;
        protected addState(s: SMBaseState): void;
        protected getStateById(id: number): SMBaseState;
        protected onStateChange(): void;
        destory(): void;
        protected onDestory(): void;
    }
}