HumanBreak/docs/api/class/hotkey.md
2024-03-01 19:52:30 +08:00

367 lines
6.9 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 类 Hotkey
渲染进程类,在游戏进程不能直接使用,继承自 [`EventEmitter`](./event-emitter.md)
- 实例属性
- [`id`](#id)
- [`name`](#name)
- [`data`](#data)
- [`keyMap`](#keymap)
- [`groupName`](#groupname)
- [`groups`](#groups)
- [`enabled`](#enabled)
- [`conditionMap`](#conditionmap)
- 实例方法
- 构造器[`constructor`](#constructor)
- [`register`](#register)
- [`realize`](#realize)
- [`use`](#use)
- [`dispose`](#dispose)
- [`set`](#set)
- [`emitKey`](#emitkey)
- [`group`](#group)
- [`enable`](#enable)
- [`disable`](#disable)
- [`when`](#when)
- [`toJSON`](#tojson)
- [`fromJSON`](#fromjson)
- 静态属性
- [`list`](#list)
- 静态方法
- [`get`](#get)
- 实例事件
- [`set`](#set-事件)
- [`emit`](#emit-事件)
## 部分接口与类型说明
```ts
interface AssistHotkey {
ctrl: boolean
shift: boolean
alt: boolean
}
```
三个属性分别表示对应的按键是否按下,或者是否需要被按下
```ts
interface RegisteredHotkeyData extends Partial<AssistHotkey> {
id: string
name: string
defaults: KeyCode
type?: KeyEmitType
}
```
- `id`: 注册的这个按键的 id可以加后缀参考[同 id 按键](../../guide/hotkey.md#同-id-按键)
- `name`: 这个按键的名称,会显示在自定义快捷键界面中
- `defaults`: 玩家不进行设置时,这个功能的默认按键
- `type`: 占位属性,暂时无用
- `ctrl` `shift` `alt`: 玩家不进行设置时,这个功能默认的辅助按键,按下辅助按键后按下默认按键才可触发功能
```ts
interface HotkeyData extends Required<RegisteredHotkeyData> {
key: KeyCode
func: Map<symbol, HotkeyFunc>
group?: string
}
```
- `key`: 当前这个功能的按键
- `func`: 所有当前存在的作用域下,每个作用域触发时的执行函数
- `group`: 这个按键所处的分组,参考 [按键分组](../../guide/hotkey.md#按键分组)
```ts
type HotkeyFunc = (id: string, code: KeyCode, ev: KeyboardEvent) => void;
```
表示按键的触发函数
- `id`: 触发的按键的 id包含数字后缀
- `code`: 触发时按下的按键
- `ev`: 触发时的 `KeyboardEvent`,对于虚拟键盘,会进行不完全拟真
## id
```ts
declare var id: string
```
## name
```ts
declare var name: string
```
## data
```ts
declare var data: Record<string, HotkeyData>
```
- 成员说明
该成员存储了所有注册的按键信息,其中键表示按键的 id值表示这个 id 对应的按键
## keyMap
```ts
declare var keyMap: Map<KeyCode, HotkeyData[]>
```
- 成员说明
存储了每个按键可以触发的功能列表,例如 X 键打开怪物手册等
## groupName
```ts
declare var groupName: Record<string, string>
```
- 成员说明
存储了每个分组对应的显示名称,键表示分组 id值表示分组名称
## groups
```ts
declare var groups: Record<string, string[]>
```
- 成员说明
存储了每个分组所包含的按键 id键表示分组 id值是一个数组包含了所有的按键 id
## enabled
```ts
declare var enabled: boolean
```
- 成员说明
表示当前按键实例是否被启用
## conditionMap
```ts
declare var conditionMap: Map<symbol, () => boolean>
```
- 成员说明
描述了每个作用域下的按键启用条件,也就是 [`when`](#when) 函数的功能
## constructor()
```ts
interface Hotkey {
new(id: string, name: string): Hotkey
}
```
## register()
```ts
declare function register(data: RegisterHotkeyData): this
```
- 方法说明
注册一个按键id 可以包含数字后缀,可以显示为同一个按键操作拥有多个按键可以触发
## realize()
```ts
declare function realize(id: string, func: HotkeyFunc): this
```
- 参数说明
- `id`: 要实现的按键 id可以不包含数字后缀
- `func`: 按键被触发时执行的函数
- 方法说明
实现一个按键按下时的操作
## use()
```ts
declare function use(symbol: symbol): this
```
- 方法说明
使用一个 symbol 作为当前作用域,之后调用 [`realize`](#realize) 所实现的按键功能将会添加至此作用域
## dispose()
```ts
declare function dispose(symbol?: symbol): void
```
- 参数说明
- `symbol`: 要释放的作用域
- 方法说明
释放一个作用域,释放后作用域将退回至删除的作用域的上一级
## set()
```ts
declare function set(id: string, key: KeyCode, assist: number): void
```
- 参数说明
- `id`: 要修改的按键的 id
- `key`: 要修改为的触发按键
- `assist`: 要修改为的辅助按键
- 方法说明
设置一个按键信息
## emitKey()
```ts
declare function emitKey(
key: KeyCode,
assist: number,
type: KeyEmitType,
ev: KeyboardEvent
): boolean
```
- 参数说明
- `key`: 要触发的按键
- `assist`: 触发时的辅助按键
- `type`: 暂时为占位参数,填写 `up` 即可
- `ev`: 触发按键时的按键事件信息 `KeyboardEvent`,参考 dom 中的按键事件
- 方法说明
触发一个按键
- 返回值
是否成功触发至少一个按键
## group()
```ts
declare function group(id: string, name: string): this
```
- 参数说明
- `id`: 分组的 id
- `name`: 分组的显示名称
- 方法说明
按键分组,分组后调用 [`register`](#register) 注册的按键会进入这个分组,参考[按键分组](../../guide/hotkey.md#按键分组)
## enable()
```ts
declare function enabled(): void
```
- 方法说明
启用这个按键实例
## disable()
```ts
declare function disabled(): void
```
- 方法说明
禁用这个按键实例
## when()
```ts
declare function when(fn: () => boolean): this
```
- 方法说明
在当前作用域下,满足一定条件后启用按键功能
## toJSON()
```ts
declare function toJSON(): string
```
## fromJSON()
```ts
declare function fromJSON(data: string): void
```
## list
```ts
declare var list: Hotkey[]
```
- 静态成员说明
存储了所有的按键实例
## get()
```ts
declare function get(id: string): Hotkey
```
- 静态方法说明
根据 id 获取到对应的按键实例
## set 事件
```ts
interface HotkeyEvent {
set: (id: string, key: KeyCode, assist: number) => void
}
```
- 参数说明
- `id`: 设置的按键的 id
- `key`: 设置为的触发按键
- `assist`: 设置为的辅助按键
- 事件说明
当设置按键信息(执行`set`函数)时触发该事件
## emit 事件
```ts
interface HotkeyEvent {
emit: (key: KeyCode, assist: number) => void
}
```
- 参数说明
- `key`: 触发的按键
- `assist`: 触发的辅助按键
- 事件说明
当触发一个按键时触发该事件