declare.d.ts 19 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578
  1. interface String {
  2. decodeAtoB: string;
  3. encodeBtoA: string;
  4. }
  5. interface Number {
  6. /**
  7. * 检测数字是否在指定范围内,a、b无所谓顺序,随便传就完了,但好歹得是个数字,哪怕是NaN
  8. * @param a
  9. * @param b
  10. * @returns 返回是否在范围内
  11. */
  12. inRange(a: number, b: number): boolean;
  13. }
  14. interface Array<T> {
  15. /** 操作数组的最后一个元素 */
  16. lastElement: T;
  17. /** 异步遍历 */
  18. forWait<C extends (el: T, index: number, arr: T[])=>Promise<any>>(call: C): Promise<any>;
  19. }
  20. interface ReadonlyArray<T> {
  21. /** 操作数组的最后一个元素 */
  22. lastElement: T;
  23. /** 异步遍历 */
  24. forWait<C extends (el: T, index: number, arr: T[])=>Promise<any>>(call: C): Promise<any>;
  25. }
  26. declare namespace mtec {
  27. type type_string = 'string'|'number'|'bigint'|'boolean'|'symbol'|'undefined'|'null'|'object'|'array'|'function';
  28. type Type<str extends type_string> = str extends type_string ? str extends 'string' ? string : str extends 'number' ? number : str extends 'bigint' ? bigint : str extends 'boolean' ? boolean : str extends 'symbol' ? symbol : str extends 'undefined' ? undefined : str extends 'null' ? null : str extends 'object' ? object : str extends 'array' ? any[] : ((...args: any[])=>any) : str;
  29. type TypeArray<list extends type_string[]> = list extends [infer start extends type_string, ...infer residue extends type_string[]] ? [mtec.Type<start>, ...(residue['length'] extends 0 ? [] : TypeArray<residue> )] : any;
  30. type PickFirst<list extends [unknown, ...any][]> = list extends [[infer first, ...any], ...infer residue extends [unknown, ...any][]] ? [first, ...(residue['length'] extends 0 ? [] : PickFirst<residue>)] : any;
  31. type Fusion<A, B> = A extends object ? A extends Array<infer el_a> ? Array<el_a | (B extends Array<infer el_b> ? el_b : B)> : A extends Function ? A : B extends object ? B extends Function ? A : {[key in (keyof A | keyof B)]: key extends keyof B ? B[key] : key extends keyof A ? A[key] : unknown} : A : A extends boolean|null|undefined|number ? B extends boolean|null|undefined|number ? number : B extends bigint ? bigint : string : A extends bigint ? B extends string|symbol ? string : bigint : string;
  32. type FusionAll<A, list> = list extends [infer first, ...infer residue] ? residue['length'] extends 0 ? Fusion<A, first> : Fusion<A, FusionAll<first, residue>> : Fusion<A, list>;
  33. type OmitKeys<O, T> = {[prop in keyof O]: O[prop] extends T ? never : prop}[keyof O];
  34. /**
  35. * 获取一个值的类型
  36. * @param value
  37. */
  38. export function vtype(value: any): type_string;
  39. /**
  40. * 比较两个值在数据上是否一致
  41. * @param a
  42. * @param b
  43. * @param record 比较记录,主要是为了避免递归的数据结构,可能导致死循环
  44. */
  45. export function same(a: any, b: any, record?: {cache: string[], mark: Map<any, string>, list: string[]}): boolean;
  46. export function pickValueByType<T extends [type_string, any][]>(values: any[], types: [...T]): TypeArray<PickFirst<T>>;
  47. /**
  48. * 延迟返回
  49. * @param delay - 延迟时间,单位:s
  50. * @param call - 回调函数
  51. * @param args - 回调参数
  52. */
  53. export function delay<A extends unknown[], C extends (...args: A)=>unknown>(delay: number, call: C, ...args: [...A]): Promise<ReturnType<C>>
  54. /**
  55. * @param delay - 延迟时间,单位:s
  56. * @param result - 延迟返回
  57. */
  58. export function delay<R>(delay: number, result: R): Promise<R>;
  59. /**
  60. * 抽签函数
  61. * @description 按照权重抽取数据
  62. * @param bucket - 签筒数据([数据, 权重][])
  63. */
  64. export function drawLots<B extends [unknown, number][]>(bucket: B): B extends [infer D, number][] ? D : string;
  65. /**
  66. * 合并数据,相同标记的数据,会被最后的数据覆盖
  67. * @param target 目标位置
  68. * @param data 更新数据
  69. */
  70. export function fusionData<T, list extends (T extends object ? (object&Partial<T>) : any)[]>(target: T, ...args: [...list]): FusionAll<T, list>;
  71. /**
  72. * 克隆数据,并生成新的引用
  73. * @param data
  74. * @param record 克隆记录,主要是为了避免递归的数据结构,可能导致死循环
  75. */
  76. export function cloneData<D>(data: D, record?: Map<any, any>): D;
  77. export class CountAverage {
  78. constructor(init?: number)
  79. public get average(): number;
  80. public add(value: number): number;
  81. public clean(): void;
  82. }
  83. /** 裸露的promise */
  84. export class NudityPromise<V> {
  85. public promise: Promise<V>;
  86. /**
  87. * 回复promise
  88. * @param value
  89. */
  90. public resolve(value: V|PromiseLike<V>): void;
  91. /**
  92. * 拒绝promise
  93. * @param reason
  94. */
  95. public reject(reason: any): void;
  96. }
  97. export function JsonString(data: any, record?: {mark: Map<any, string>, cache: string[]}): string;
  98. export function parseJson(json_string: string, record?: {data: Map<string, any>, ref: Map<string, {obj: any, key: string|number|symbol}[]>}): any;
  99. }
  100. declare namespace mtec.string {
  101. /**
  102. * 获取一个指定长度,指定进制的随机数字字符串
  103. * @param len - 字符串长度
  104. * @param radix - 生成随机字符串的进制
  105. */
  106. export function random(len: number, radix?: number): string;
  107. /**
  108. * 获取一个随机token字符串
  109. * @param len - token的长度
  110. * @param radix - token使用的进制
  111. * @param verify - 用于验证token的有效性
  112. */
  113. export function randomToken(len: number, radix?: number, verify?: (token: string)=>boolean): string;
  114. /**
  115. * 获取一组字符串中的公共词缀
  116. * @param list
  117. */
  118. export function getAffix(list: string[]): {prefix: string, suffix: string, max_length: number};
  119. export function normalLen(value: any, len: number): string;
  120. /**
  121. * 判断字符串数组中是否存在指定的字符串,或者找出一个与指定字符串相似度最高的字符串
  122. * @param list
  123. * @param str
  124. */
  125. export function findLikeStr(str: string, list: string[]): string;
  126. /**
  127. * 计算两个字符床的相似度
  128. * @param a
  129. * @param b
  130. */
  131. export function levenshtein(a: string, b: string): number;
  132. }
  133. declare namespace mtec.number {
  134. /** 圆周率 */
  135. export var PI: number;
  136. /** 角度转弧度(转换因子) */
  137. export var RAD: number;
  138. /** 弧度转角度(转换因子) */
  139. export var DEG: number;
  140. /**
  141. * 判断数字是否在[a, b]之间
  142. * @param num
  143. * @param a
  144. * @param b
  145. */
  146. export function inRange(num: number, a: number, b: number): boolean;
  147. /**
  148. * 获取数字num的精度(小数位数)
  149. * @param num
  150. */
  151. export function getPrecision(num: number): number;
  152. /**
  153. * 生成一个[a, b]之间的随机数
  154. * @param a
  155. * @param b
  156. * @param precision - 随机数的精度(小数点的位数)
  157. */
  158. export function random(a: number, b: number, precision?: number): number;
  159. /**
  160. * 对于丢失精度导致的循环数,尝试进行还原
  161. * @param num
  162. */
  163. export function repair(num: number): number;
  164. /**
  165. * 转换成数字
  166. * @param value
  167. * @param spare - 备用值
  168. */
  169. export function parse(value: any, spare?: number): number;
  170. /**
  171. * 保留指定位数的小数
  172. * @param num 原始数字
  173. * @param place 要保留的小数位数
  174. * @param floor 是否向下取整,true向下取整,false向上取整,其他情况四舍五入
  175. */
  176. export function fixedNum(num: number, place: number, floor?: boolean): number;
  177. /**
  178. * 将数字限制在[a, b]的区间内
  179. * @param num
  180. * @param a
  181. * @param b
  182. */
  183. export function limit(num: number, a: number, b: number): number;
  184. }
  185. declare namespace mtec.array {
  186. /**
  187. * 随机返回数组中的一个元素
  188. * @param arr
  189. */
  190. export function random<A extends any[]>(arr: A): A[number];
  191. /**
  192. * 从数组中返回指定个数的元素
  193. * @param arr
  194. * @param len
  195. * @param repetition 是否可以重复取出同一个元素,默认为false,只当没有明确其值,且[len]大于[arr.length]时,为true
  196. */
  197. export function randomeElement<A extends any[]>(arr: A, len?: number, repetition?: boolean): A;
  198. /**
  199. * 返回数组中的最后一个元素
  200. * @param arr
  201. * @param index - 倒数第几个元素,默认等于1
  202. */
  203. export function last<A extends any[]>(arr: A, index?: number): A[number];
  204. /**
  205. * 清空数组元素并返回
  206. * @param arr
  207. */
  208. export function clear<A extends Array<any>>(arr: A): A;
  209. /**
  210. * 从数组中删除一个指定的元素
  211. * @param element
  212. * @param head
  213. */
  214. export function remove<A extends Array<any>, el extends A extends Array<infer _> ? _ : any>(arr: A, element: el, head?: boolean): el;
  215. export function remove<A extends Array<any>, el extends A extends Array<infer _> ? _ : any>(arr: A, verify: (element: el, i: number, arr: A)=>boolean, head?: boolean): el;
  216. /**
  217. * 创建一个指定长度的数组
  218. * @param size 数组的长度
  219. * @param call 创建元素的回调
  220. */
  221. export function create<el>(size: number, call: (index: number)=>el): el[];
  222. }
  223. declare namespace mtec.color {
  224. /** 常用颜色映射 */
  225. var common: {[name: string]: string};
  226. /**
  227. * 根据字符串,获取对应的十六进制颜色值
  228. * @param color 表示颜色名称或者十六进制值的字符串
  229. */
  230. export function toHexColor(color: string): string;
  231. /**
  232. * 格式化颜色格式
  233. * @param color 表示颜色名称或者十六进制值的字符串
  234. */
  235. export function normalizeHexColor(color: string): string;
  236. /**
  237. * 尝试将字符串转换成rgb颜色
  238. * @param color 表示颜色名称或者十六进制值的字符串
  239. * @returns [r, g, b]
  240. */
  241. export function toRGBColor(color: string): [number, number, number];
  242. /**
  243. * 尝试将字符串转换成hsl格式颜色
  244. * @param color 表示颜色名称或者十六进制值的字符串
  245. * @returns [h, s, l]
  246. */
  247. export function toHSLColor(color: string): [number, number, number];
  248. /**
  249. * 把rgb颜色转换成hex字符串
  250. * @param r - 红
  251. * @param g - 绿
  252. * @param b - 蓝
  253. */
  254. export function RGB2Hex(r: number, g: number, b: number): string;
  255. /**
  256. * 把hsl颜色转换成hex字符串
  257. * @param h - 色相
  258. * @param s - 饱和度
  259. * @param l - 明度(亮度)
  260. */
  261. export function HSL2Hex(h: number, s: number, l: number): string;
  262. /**
  263. * 打印名称中包含[cut]片段的颜色
  264. * @param cut - 名称片段
  265. */
  266. export function logColorLike(cut: string): void;
  267. /**
  268. * 打印一条全色谱的线条
  269. * @param size - 线条尺寸
  270. */
  271. export function logFullColorLine(size?: number): void;
  272. }
  273. declare namespace mtec.log {
  274. /**
  275. * 标签化输出,并会像console.warn, console.error那样带有堆栈的调用信息\
  276. * 如果第一个参数是字符串,会尝试对其进行标签格式化\
  277. * 如果符合格式,会在输出时带上标签样式\
  278. * 否则则什么都不会发生,该函数的行为表现的和console.log一样
  279. * @param tag - 标签字符串 Formate like this 'tag1: color1; tag2: color2; ......tagN: colorN;'
  280. * @param args - 其余要输出的参数,行为和正常的log参数一致
  281. * @example ```javascript
  282. * abi.log.tag('标签1: white', ...args);
  283. * abi.log.tag('tag-2: #fff', ...args);
  284. * abi.log.tag('tag(标签)3: purple; [标签-tag4]: #808080', ...args);
  285. * ```
  286. */
  287. export function tag(tag: string, ...args: any[]): void;
  288. export function warn(...args: any[]): void;
  289. }
  290. declare namespace mtec.local {
  291. export function read<D>(key: string, out?: Partial<D>): D;
  292. export function save(key: string, data: any): void;
  293. }
  294. declare namespace mtec.time {
  295. /** 一天的时长ms */
  296. export var ONE_DAY: number;
  297. /**
  298. * 判断两个时间戳是否是同一天
  299. * @param d1
  300. * @param d2
  301. */
  302. export function sameDay(d1: number, d2: number): boolean;
  303. }
  304. declare namespace mtec.cc {
  305. type Asset = import('cc').Asset;
  306. type _types_globals__Constructor<T> = import('cc').__private._types_globals__Constructor<T>;
  307. type AssetManagerBundle = import('cc').AssetManager.Bundle;
  308. type Node = import('cc').Node;
  309. type UITransform = import('cc').UITransform;
  310. type EventHandler = import('cc').EventHandler;
  311. type SpriteFrame = import('cc').SpriteFrame;
  312. type Size = import('cc').Size;
  313. type Canvas = import('cc').Canvas;
  314. type Vec2 = import('cc').Vec2;
  315. type Vec3 = import('cc').Vec3;
  316. type Vec4 = import('cc').Vec4;
  317. export const canvas: Canvas;
  318. /** 游戏的初始化时间(单位:ms) */
  319. export const initTime: number;
  320. /** 当前帧的开始时间(单位:ms) */
  321. export const frameStartTime: number;
  322. /** 游戏运行的总时长(单位:ms) */
  323. export const totalTime: number;
  324. /** 每一帧的期望时长(单位:ms) */
  325. export const frameTime: number;
  326. /** 当前帧的剩余时长(单位:ms) */
  327. export const residueTime: number;
  328. /**
  329. * 创建一个按钮时间句柄
  330. * @param options
  331. */
  332. export function creatEventHandle(options: Partial<EventHandler>): EventHandler;
  333. /**
  334. * 加载bundle
  335. * @param bundle_name
  336. */
  337. export function loadBundle(bundle_name: string): Promise<AssetManagerBundle>;
  338. /**
  339. * 加载资源
  340. * @param path
  341. * @param type
  342. * @param call
  343. */
  344. export function loadRes<T extends Asset>(path: string, type: _types_globals__Constructor<T>, bundle?: AssetManagerBundle, call?: (asset: T)=>void): void;
  345. /**
  346. * 异步加载资源
  347. * @param path
  348. * @param type
  349. */
  350. export function loadResAsync<T extends Asset>(path: string, type: _types_globals__Constructor<T>, bundle?: AssetManagerBundle): Promise<T>;
  351. /** 坐标辅助类 */
  352. export class VecAssist {
  353. /**
  354. * @param node - 需要坐标辅助的节点
  355. * @param ref - 参考节点
  356. */
  357. constructor(node: Node, ref?: Node);
  358. /** 节点置顶时的y坐标 */
  359. public top: number;
  360. /** 节点置底时的y坐标 */
  361. public bottom: number;
  362. /** 节点贴靠左侧时的x坐标 */
  363. public left: number;
  364. /** 节点贴靠右侧时的x坐标 */
  365. public right: number;
  366. /** 节点的下边缘与参考节点的上边缘重合时的y坐标 */
  367. public over_top: number;
  368. /** 节点的上边缘与参考节点的下边缘重合时的y坐标 */
  369. public over_bottom: number;
  370. /** 节点的右边缘与参考节点的左边缘重合时的x坐标 */
  371. public over_left: number;
  372. /** 节点的左边缘与参考节点的右边缘重合时的x坐标 */
  373. public over_right: number;
  374. /** 节点相对于参考节点居中时的坐标 */
  375. public center: Vec3;
  376. /** 可供操作的vec记录 */
  377. public readonly vec: Vec3;
  378. /**
  379. * 获取指定对齐情况时的坐标
  380. * @description 调用该函数的同时,也会更新实例上的vec缓存
  381. * @param x 水平的对齐方式
  382. * @param y 垂直的对齐方式
  383. */
  384. public getPosition(x: 'center'|`${''|'over_'}${'left'|'right'|'bottom'|'top'}`, y?:'center'|`${''|'over_'}${'top'|'bottom'}`): Vec3;
  385. public static getPosition<Dx extends 'center'|`${''|'over_'}${'left'|'right'|'bottom'|'top'}`, Dy extends 'center'|`${''|'over_'}${'top'|'bottom'}`>(node: Node, ref?: Node|Dx, x?: Dx|Dy, y?: Dy): Vec3;
  386. }
  387. /**
  388. * 为节点更换精灵贴图
  389. * @param node
  390. * @param sframe
  391. * @param inner
  392. */
  393. export function skinPeeler(node: Node, sframe: SpriteFrame, inner?: boolean | {width?: boolean, height?: boolean}): void;
  394. export function getWorldPosition(node: Node, out?: Vec3): Vec3;
  395. export function getLocalPosition(local: Node, node: Node, out?: Vec3): Vec3;
  396. export function getLocalPosition(local: Node, world_position: Vec3, out?: Vec3): Vec3;
  397. export const is_long_screen: boolean;
  398. /**
  399. * 帧循环\
  400. * 只有当,当前帧还有剩余时间时,才会执行回调
  401. * @param list 要遍历的数据
  402. * @param call 每次遍历要执行的回调函数
  403. */
  404. export function frameWhile<T extends any[]>(list: T, call: (value: T[number], index: number, arr: T)=>void): Promise<0>;
  405. /**
  406. * 在帧空闲的时候,执行回调函数
  407. * @param call
  408. */
  409. export function IdleCallback<Param extends any[], R>(call: (...args: [...Param])=>R, args: Param, complete?: (result: R, args: Param)=>void, options?: {start_stamp?: number, timeout?: number}): void;
  410. /**
  411. * 创建一个二维向量
  412. * @param x
  413. * @param y
  414. */
  415. export function v2(x: number|Vec2|Vec3|Vec4, y?: number): Vec2;
  416. /**
  417. * 创建一个三维向量
  418. * @param x
  419. * @param y
  420. * @param z
  421. */
  422. export function v3(x: number|Vec2|Vec3|Vec4, y?: number, z?: number): Vec3;
  423. /**
  424. * 创建一个四维向量
  425. * @param x
  426. * @param y
  427. * @param z
  428. * @param w
  429. */
  430. export function v4(x: number|Vec2|Vec3|Vec4, y?: number, z?: number, w?: number): Vec4;
  431. /**
  432. * 把一个节点(node)以指定的节点(container)为参考,进行适配(使得container内切于node,即node能够铺满container的所有空间,但有可能会超出)
  433. * @param node
  434. * @param contianer
  435. * @description 主要用于适配背景节点
  436. */
  437. export function adaptBackgroundNode(node: Node, contianer?: Node): void;
  438. }
  439. declare namespace mtec.size {
  440. /**
  441. * 获取一个size(target)相对于另一个size(container)的内切尺寸
  442. * @param target
  443. * @param container
  444. */
  445. export function innerRatio(target: cc.Size, container: cc.Size): number;
  446. /**
  447. * 获取一个size(target)相对于另一size(filler)的外切比例
  448. * @param target
  449. * @param filler
  450. */
  451. export function exterRatio(target: cc.Size, filler: cc.Size): number;
  452. /** 设计尺寸 */
  453. export const designSize: cc.Size;
  454. /** 当前的画布尺寸 */
  455. export const canvasSize: cc.Size;
  456. }
  457. declare namespace mtec.vector {
  458. /**
  459. * 计算两个向量的向量差的长度
  460. * @param a
  461. * @param b
  462. */
  463. export function distance(a: cc.Vec2|cc.Vec3|cc.Vec4, b: cc.Vec2|cc.Vec3|cc.Vec4): number;
  464. }
  465. declare namespace mtec.data {
  466. /**
  467. * 代理拦截数据的 get 回调函数类型
  468. * @template T - 数据类型
  469. * @template prop - 属性类型
  470. * @param {T} proxy - 数据代理对象
  471. * @param {T[prop]} value - 属性值
  472. * @returns {T[prop]} 属性值
  473. */
  474. type _get_callback_<T, prop extends keyof T> = (proxy: T, value: T[prop])=>T[prop];
  475. /**
  476. * 代理拦截数据的 set 回调函数类型
  477. * @template T - 数据类型
  478. * @template prop - 属性类型
  479. * @param {T} proxy - 数据代理对象
  480. * @param {T[prop]} old - 旧属性值
  481. * @param {T[prop]} value - 新属性值
  482. * @returns {T[prop]} 属性值
  483. */
  484. type _set_callback_<T, prop extends keyof T> = (proxy: T, old: T[prop], value: T[prop])=>T[prop];
  485. /**
  486. * 代理拦截数据
  487. * @template T - 数据类型
  488. * @typedef {Object} DataBlocker
  489. * @property {Object.<keyof T, _get_callback_<T, keyof T>> & {ignore?: Array<OmitKeys<T, Function>>}} get - get 回调
  490. * @property {Object.<keyof T, _set_callback_<T, keyof T>> & {ignore?: Array<OmitKeys<T, Function>>}} set - set 回调
  491. * @property {(prop: string | symbol, old: any, value: any, hdl: PxiHandle<T>) => void} [afterSet] - set 后回调
  492. */
  493. export type DataBlocker<T> = {
  494. get?: {[prop in keyof T]?: _get_callback_<T, prop>}&{ignore?: Array<mtec.OmitKeys<T, Function>>},
  495. set?: {[prop in keyof T]?: _set_callback_<T, prop>}&{ignore?: Array<mtec.OmitKeys<T, Function>>},
  496. //afterSet?: (prop: string|symbol, old: any, value: any, hdl: PxiHandle<T>)=>void;
  497. }
  498. }