Core

Entity 实体

定义某一个业务对象,本质是唯一性 id,关联特定的组件集合,需要通过 World 实例 创建。

类签名

class Entity {
  /**
   * 构造函数
   * @param id 实体id
   * @param name 实体名
   */
  constructor(public readonly id: number, public readonly name?: string)
}

Component 组件

定义某种业务的数据结构,一个 Entity 上可以动态挂载多个 Component,需要继承 Component 抽象类定义。

类签名

abstract class Component {}

System 系统

定义某种业务的逻辑,每个 System 使用多个 Component 的数据编写逻辑,存在生命周期,需要继承 System 抽象类定义。

类签名

abstract class System {
  /**
   * 更新时调用
   * @param world 世界实例
   * @param frame 帧渲染时间
   * @returns 无
   */
  public abstract update(world: World, frame?: number): void

  /**
   * 销毁时调用
   * @param world 世界实例
   * @returns 无
   */
  public abstract destory(world: World): void
}

World 世界

负责管理调度内部的所有实体、组件、系统,需要实例化后使用。

类签名

class World {
  /**
   * 构造函数
   * @param data 业务变量
   */
  constructor(data?: unknown)

  /**
   * 启动主循环
   * @returns 世界实例
   */
  public start(): World

  /**
   * 暂停主循环
   * @returns 世界实例
   */
  public pause(): World

  /**
   * 创建实体
   * @param name 实体名
   * @returns 实体
   */
  public createEntity(name?: string): Entity

  /**
   * 删除实体
   * @param entity 实体
   * @returns 世界实例
   */
  public removeEntity(entity: Entity): World

  /**
   * 重置实体
   * @returns 世界实例
   */
  public resetEntity(): World

  /**
   * 查询实体名关联的实体
   * @param name 实体名
   * @returns 实体
   */
  public findNameWithEntities(name: string): Entity[]

  /**
   * 移除实体名关联的实体
   * @param name 实体名
   * @returns 世界实例
   */
  public removeNameWithEntities(name: string): World

  /**
   * 新增实体关联的组件
   * @param entity 实体
   * @param components 组件
   * @returns 世界实例
   */
  public addEntityWithComponents(
    entity: Entity,
    ...components: Component[]
  ): World

  /**
   * 移除实体关联的组件
   * @param entity 实体
   * @param constructors 组件构造函数
   * @returns 世界实例
   */
  public removeEntityWithComponents(
    entity: Entity,
    ...constructors: ComponentConstructor[]
  ): World

  /**
   * 查询实体关联的组件构造函数-组件实例映射
   * @param entity 实体
   * @returns 组件构造函数-组件实例映射
   */
  public findEntityWithComponents(entity: Entity): ComponentMap

  /**
   * 查询组件构造函数关联的实体、组件构造函数-组件实例映射
   * @param constructors 组件构造函数
   * @returns [实体, 组件构造函数-组件实例映射]
   */
  public view(...constructors: ComponentConstructor[]): [Entity, ComponentMap][]

  /**
   * 新增系统
   * @param system 系统
   * @returns 世界实例
   */
  public addSystem(system: System): World

  /**
   * 移除系统
   * @param system 系统
   * @returns 世界实例
   */
  public removeSystem(system: System): World

  /**
   * 重置系统
   * @returns 世界实例
   */
  public resetSystem(): World
}

Create

createId 创建 id

通过 Generator 循环累加生成数字 id。

函数签名

function* createId(): IterableIterator<number>

Device

getSystemInfo 获取系统信息

通过解析 navigator.userAgent 获取系统相关信息。

函数签名

function getSystemInfo(): SystemInfo

返回值类型

type SystemInfo = {
  /** 系统 */
  system: 'windows' | 'macos' | 'linux' | 'android' | 'ios'
  /** 系统版本 */
  systemVersion: string
}

getBrowserInfo 获取浏览器信息

通过解析 navigator.userAgent 获取浏览器相关信息。

函数签名

function getBrowserInfo(): BrowserInfo

返回值类型

type BrowserInfo = {
  /** 浏览器内核 */
  engine: 'webkit' | 'gecko' | 'presto' | 'trident'
  /** 浏览器内核版本 */
  engineVersion: string
  /** 浏览器载体 */
  browser: 'chrome' | 'safari' | 'firefox' | 'opera' | 'edge' | 'ie'
  /** 浏览器载体版本 */
  browserVersion: string
  /** 浏览器外壳 */
  shell:
    | 'wechat'
    | 'qq'
    | 'uc'
    | '360'
    | '2345'
    | 'sougou'
    | 'liebao'
    | 'maxthon'
  /** 浏览器外壳版本 */
  shellVersion: string
}

getDeviceInfo 获取设备信息

通过解析 navigator.userAgent 获取系统相关信息 + 浏览器相关信息。

函数签名

function getDeviceInfo(): SystemInfo & BrowserInfo

返回值类型

getDeviceSize 获取设备窗口尺寸

获取当前运行应用的浏览器视口尺寸及设备 dpr。

函数签名

function getDeviceSize(): DeviceSize

返回值类型

type DeviceSize = {
  /** dpr */
  ratio: number
  /** 像素比(宽/高) */
  ascept: number
  /** 视口宽度 */
  width: number
  /** 视口高度 */
  height: number
}

isMobile 是否为移动端

通过系统信息判断是否运行在移动端上。

函数签名

function isMobile(): boolean

Is

isTypeOf 是否为指定类型

判断入参的具体类型。

函数签名

function isTypeOf(val: unknown): ParamType

返回值类型

type IsType =
  | 'null'
  | 'undefined'
  | 'string'
  | 'number'
  | 'bigint'
  | 'boolean'
  | 'symbol'
  | 'function'
  | 'generatorfunction'
  | 'asyncfunction'
  | 'array'
  | 'uint8array'
  | 'uint16array'
  | 'uint32array'
  | 'float32array'
  | 'float64array'
  | 'object'
  | 'reflect'
  | 'date'
  | 'formdata'
  | 'blob'
  | 'promise'
  | 'regexp'
  | 'set'
  | 'weakset'
  | 'map'
  | 'weakmap'
  | 'file'

isString 是否为有效字符串

判断入参是否为非空字符串。

函数签名

function isString(val: unknown): val is string

isNumber 是否为有效数字

判断入参是否为非 NaN、Infinity、-Infinity 数字。

函数签名

function isNumber(val: unknown): val is number

isFunction 是否为函数

判断入参是否为函数。

函数签名

function isFunction(val: unknown): val is (...rest: unknown[]) => void

isObject 是否为普通对象

判断入参是否为普通对象。

函数签名

function isObject(val: unknown): boolean

isArray 是否为普通数组

判断入参是否为普通数组。

函数签名

function isArray(val: unknown): val is unknown[]

isDate 是否为日期对象

判断入参是否为日期对象。

函数签名

function isDate(val: unknown): val is Date

isRegExp 是否为正则表达式

判断入参是否为正则表达式。

函数签名

function isRegExp(val: unknown): val is RegExp

isFormData 是否为表单对象

判断入参是否为表单对象。

函数签名

function isFormData(val: unknown): val is FormData

isBlob 是否为 blob 对象

判断入参是否为 blob 对象。

函数签名

function isBlob(val: unknown): val is Blob

isPromise 是否为 promise 对象

判断入参是否为 promise 对象。

函数签名

function isPromise(val: unknown): val is Promise<unknown>

isFile 是否为文件对象

判断入参是否为文件对象。

函数签名

function isFile(val: unknown): val is File

Matrix

matrixIdentity 标准化矩阵

返回标准化矩阵。

函数签名

/**
 * @param row 矩阵行数
 * @returns 标准化矩阵
 */
function matrixIdentity(row: number): number[]

matrixAdd 矩阵相加

返回计算后的矩阵。

函数签名

/**
 * @param m1 矩阵1
 * @param m2 矩阵2
 * @returns 执行计算后的矩阵
 */
function matrixAdd(m1: number[], m2: number[]): number[]

matrixSub 矩阵相减

返回计算后的矩阵。

函数签名

/**
 * @param m1 矩阵1
 * @param m2 矩阵2
 * @returns 执行计算后的矩阵
 */
function matrixSub(m1: number[], m2: number[]): number[]

matrixMultiply3d 矩阵相乘(图形学法)

返回计算后的矩阵。

函数签名

/**
 * @param m1 矩阵1
 * @param m2 矩阵2
 * @returns 执行计算后的矩阵
 */
function matrixMultiply3d(m1: number[], m2: number[]): number[]

matrixMultiply 矩阵相乘

返回计算后的矩阵。

函数签名

/**
 * @param m1 矩阵1
 * @param m2 矩阵2
 * @param row1 矩阵1行数
 * @param row2 矩阵2行数
 * @returns 执行计算后的矩阵
 */
function matrixMultiply(
  m1: number[],
  m2: number[],
  row1?: number,
  row2?: number
): number[]

matrixMultiplyScalar 矩阵与标量相乘

返回计算后的矩阵。

函数签名

/**
 * @param m 矩阵
 * @param scalar 标量
 * @returns 执行计算后的矩阵
 */
function matrixMultiplyScalar(m: number[], scalar: number): number[]

matrixMultiplyScalar 转置矩阵(图形学法)

返回计算后的矩阵。

函数签名

/**
 * @param m 矩阵
 * @returns 执行计算后的矩阵
 */
function matrixTranspose3d(m: number[]): number[]

matrixTranspose 转置矩阵

返回计算后的矩阵。

函数签名

/**
 * @param m 矩阵
 * @param row 矩阵行数
 * @returns 执行计算后的矩阵
 */
function matrixTranspose(m: number[], row?: number): number[]

matrixTranslate2d 平移矩阵(二维)

返回平移矩阵。

函数签名

/**
 * @param x x 轴平移距离
 * @param y y 轴平移距离
 * @returns 平移矩阵
 */
function matrixTranslate2d(x: number, y: number): number[]

matrixTranslate3d 平移矩阵(三维)

返回平移矩阵。

函数签名

/**
 * @param x x 轴平移距离
 * @param y y 轴平移距离
 * @param z z 轴平移距离
 * @returns 平移矩阵
 */
function matrixTranslate3d(x: number, y: number, z: number): number[]

matrixRotate2d 旋转矩阵(二维)

返回旋转矩阵。

函数签名

/**
 * @param rad 旋转弧度
 * @returns 旋转矩阵
 */
function matrixRotate2d(rad: number): number[]

matrixRotate3dX 绕 x 轴旋转矩阵(三维)

返回旋转矩阵。

函数签名

/**
 * @param rad 旋转弧度
 * @returns 旋转矩阵
 */
function matrixRotate3dX(rad: number): number[]

matrixRotate3dY 绕 y 轴旋转矩阵(三维)

返回旋转矩阵。

函数签名

/**
 * @param rad 旋转弧度
 * @returns 旋转矩阵
 */
function matrixRotate3dY(rad: number): number[]

matrixRotate3dZ 绕 z 轴旋转矩阵(三维)

返回旋转矩阵。

函数签名

/**
 * @param rad 旋转弧度
 * @returns 旋转矩阵
 */
function matrixRotate3dZ(rad: number): number[]

matrixScale2d 缩放矩阵(二维)

返回缩放矩阵。

函数签名

/**
 * @param sx x轴缩放比例
 * @param sy y轴缩放比例
 * @returns 缩放矩阵
 */
function matrixScale2d(sx: number, sy: number): number[]

matrixScale3d 缩放矩阵(三维)

返回缩放矩阵。

函数签名

/**
 * @param sx x轴缩放比例
 * @param sy y轴缩放比例
 * @param sz z轴缩放比例
 * @returns 缩放矩阵
 */
function matrixScale3d(sx: number, sy: number, sz: number): number[]

matrixOrthogonal3d 正交投影矩阵(三维)

返回正交投影矩阵。

函数签名

/**
 * @param left 左边距
 * @param right 右边距
 * @param top 上边距
 * @param bottom 下边距
 * @param near 近平面
 * @param far 远平面
 * @returns 正交投影矩阵
 */
export function matrixOrthogonal3d(
  left: number,
  right: number,
  bottom: number,
  top: number,
  near: number,
  far: number
): number[]

To

toRad 角度转弧度

返回转换后的弧度。

函数签名

/**
 * @param angle 角度
 * @returns 弧度
 */
function toRad(angle: number): number

toAngle 弧度转角度

返回转换后的角度。

函数签名

/**
 * @param rad 弧度
 * @returns 角度
 */
function toAngle(rad: number): number

Vector

Vector2 二维向量

继承向量抽类构建的二维向量类。

类签名

class Vector2 extends Vector {
  /**
   * 1.初始化向量
   */
  constructor(public x: number = 0, public y: number = 0)

  /**
   * 2.归一化向量
   * @returns 归一化向量
   */
  public normalize(): Vector2

  /**
   * 3.向量相加
   * @param vec 向量
   * @returns this
   */
  public add(vec: Vector2)

  /**
   * 4.向量相减
   * @param vec 向量
   * @returns this
   */
  public sub(vec: Vector2)

  /**
   * 5.向量相乘
   * @param vec 向量
   * @returns this
   */
  public multiply(vec: Vector2)

  /**
   * 6.向量与标量相乘
   * @param scalar 标量
   * @returns this
   */
  public multiplyScalar(scalar: number)

  /**
   * 7.向量与标量相除
   * @param scalar 标量
   * @returns this
   */
  public divisionScalar(scalar: number)

  /**
   * 8.点乘
   * @param vec 向量
   * @returns 计算结果
   */
  public dot(vec: Vector2): number

  /**
   * 9.叉乘
   * @param vec 向量
   * @returns 计算结果
   */
  public cross(vec: Vector2): number

  /**
   * 10.距离
   * @param vec 向量
   * @returns 计算结果
   */
  public distance(vec: Vector2): number
}

Vector3 三维向量

继承向量抽类构建的三维向量类。

类签名

class Vector3 extends Vector {
  /**
   * 1.初始化向量
   */
  constructor(public x: number = 0, public y: number = 0, public z: number = 0)

  /**
   * 2.归一化向量
   * @returns 归一化向量
   */
  public normalize(): Vector3

  /**
   * 3.向量相加
   * @param vec 向量
   * @returns this
   */
  public add(vec: Vector3)

  /**
   * 4.向量相减
   * @param vec 向量
   * @returns this
   */
  public sub(vec: Vector3)

  /**
   * 5.向量相乘
   * @param vec 向量
   * @returns this
   */
  public multiply(vec: Vector3)

  /**
   * 6.向量与标量相乘
   * @param scalar 标量
   * @returns this
   */
  public multiplyScalar(scalar: number)

  /**
   * 7.向量与标量相除
   * @param scalar 标量
   * @returns this
   */
  public divisionScalar(scalar: number)

  /**
   * 8.点乘
   * @param vec 向量
   * @returns 计算结果
   */
  public dot(vec: Vector3): number

  /**
   * 9.叉乘
   * @param vec 向量
   * @returns 垂直于两个向量的第三向量
   */
  public cross(vec: Vector3): Vector3

  /**
   * 10.距离
   * - 目标向量到当前向量的距离
   * @param vec 向量
   * @returns 计算结果
   */
  public distance(vec: Vector3): number
}
此文档贡献者: 嗷大张