Skip to content

# 类 MotaSetting ​

渲染进程类，在游戏进程不可直接使用，继承自 `EventEmitter`

- 实例成员
  - `readonly list`
- 实例方法
  - `reset`
  - `register`
  - `getSetting`
  - `setValue`
  - `addValue`
  - `getValue`
  - `setDisplayFunc`
  - `setValueController`
  - `setDescription`
- 静态成员
  - `noStorage`
- 实例事件
  - `valueChange`

## readonly list ​

ts

    declare const list: Record<string, MotaSettingItem>

- 成员说明

  该成员描述了这个设置实例在这一级设置中的所有设置。理论上其所有成员都是只读的。

- 接口 `MotaSettingItem`

  ts

      interface MotaSettingItem<T extends MotaSettingType = MotaSettingType> {
          name: string;                       // 设置的显示名称
          key: string;                        // 设置的名称(id)
          value: T;                           // 设置当前的值
          controller: SettingComponent;       // 设置的编辑组件
          description?: string;               // 设置的说明文字
          defaults?: boolean | number;        // 设置的默认值
          step?: [number, number, number];    // 数字型设置的步长信息
          display?: (value: T) => string;     // 设置显示函数
      }

  - 详细说明

    - `name`: 设置的显示名称，例如 `宝石血瓶显伤`
    - `key`: 设置的名称，也就是设置的 id，不能包含 `.`
    - `value`: 设置当前的值，可以是数字、布尔值和设置实例，该项是设置实例时表示级联设置。通过方法 `setValue` 设置，在设置时不可更改数据类型
    - `controller`: 设置的编辑组件，可以通过 `setValueController` 方法设置，一般在注册设置的时候指定
    - `description`: 设置的说明文字，如果使用默认的设置 UI 的话，会显示在右方
    - `defaults`: 设置的默认值，在注册后，如果没有设置，那么设置就会是这个值。当设置是一个级联设置的时候，该项为 `undefined`
    - `step`: 当此项设置为数字型设置时，该成员表示步长信息，第一项表示最小值，第二项表示最大值，第三项表示单步步长
    - `display`: 设置的显示函数，如果设置了，那么显示的值会是它的返回值，参考指南

## reset() ​

ts

    declare function reset(setting: Record<string, number | boolean>): void

- 参数说明

  - `setting`: 重设的设置信息，是一系列键值对，键表示设置的 id，值表示设置的值，例如`{ 'mySetting1.mySetting2': 123 }`

- 方法说明

  该方法用于重设设置，一般用于初始化设置信息

## register() ​

ts

    // overload 1
    declare function register(
        key: string,
        name: string,
        value: number,
        com?: SettingComponent,
        step?: [number, number, number]
    ): this
    // overload 2
    declare function register(
        key: string,
        name: string,
        value: boolean | MotaSetting,
        com?: SettingComponent
    ): this

- 用法一

  - 参数说明

    - `key`: 要注册的设置名称，也就是 id，不能包含 `.`
    - `name`: 设置的显示名称
    - `value`: 设置的初始值（默认值）
    - `com`: 设置的编辑组件，也就是右侧设置说明下方的内容
    - `step`: 步长信息，是一个数组，第一项表示最小值，第二项表示最大值，第三项表示单步步长

  - 方法说明

    该用法用于注册一个数字型设置

- 用法二

  - 参数说明

    - `key`: 要注册的设置名称，也就是 id，不能包含 `.`
    - `name`: 设置的显示名称
    - `value`: 设置的初始值（默认值），或者是级联设置
    - `com`: 设置的编辑组件，也就是右侧设置说明下方的内容

  - 方法说明

    该用法用于注册一个布尔型变量，或者是级联设置。当 `value` 传递一个设置实例的时候，会认为是级联设置

## getSetting() ​

ts

    declare function getSetting(key: string): Readonly<MotaSettingItem | null>

- 参数说明

  - `key`: 设置的键名，对于级联设置，使用 `.` 进行连接，例如 `mySetting1.mySetting2`

- 返回值

  该函数返回获取到的设置，如果没有获取到设置，会抛出错误。获取的返回值理论上（在 ts 下）是只读的，不允许修改。

- 方法说明

  该方法用于获取到一个设置

## setValue() ​

ts

    declare function setValue(key: string, value: boolean | number): void

- 方法说明

  该方法用于设置一个设置的值，接受设置键名，以及要设置为的值为参数。

- 示例

  js

      mySetting.setValue('mySetting1.mySetting2', 200);

## addValue() ​

ts

    declare function addValue(key: string, value: number): void

- 方法说明

  该方法用于增减一个数字型设置的值，其中 `value` 表示增减的多少

- 示例

  js

      mySetting.addValue('mySetting1.mySetting2', 100); // 增加100，减少100可以填-100

## getValue() ​

ts

    declare function getValue(
        key: string,
        defaultValue?: boolean | number
    ): boolean | number

- 参数说明

  - `key`: 设置的键名
  - `defaultValue`: 当设置或设置的值不存在，或者设置是一个级联设置时，返回的默认值

- 方法说明

  用于获取一个设置的值，当设置或设置的值不存在，或者设置是一个级联设置时，会返回默认值

## setDisplayFunc() ​

ts

    declare function setDisplayFunc(
        key: string,
        func: (value: boolean | number) => string
    ): this

- 参数说明

  - `key`: 设置的键名
  - `func`: 显示函数，接受当前设置的值作为参数，返回一个字符串作为显示值

- 示例

  js

      mySetting.setDisplayFunc('mySetting1.mySetting2', value => value ? '宝石' : '血瓶');

## setValueController() ​

ts

    declare function setValueController(key: string, com: SettingComponent): this

- 参数说明

  - `key`: 设置的键名
  - `com`: 要设置成的编辑组件，以函数式组件为宜

## setDescription() ​

ts

    declare function setDescription(key: string, desc: string): this

- 参数说明

  - `key`: 设置的键名
  - `desc`: 要设置成的描述信息，允许 html 元素的出现

## noStorage ​

ts

    declare var noStorage: string[]

- 静态成员说明

  该成员描述了所有不计入本地存储的样板自带设置的键名

- 示例

  js

      MotaSetting.noStorage.push('mySetting');

## valueChange 事件 ​

ts

    interface MotaSettingEvent {
        valueChange: <T extends boolean | number>(
            key: string,
            newValue: T,
            oldValue: T
        ) => void
    }

- 事件说明

  当设置的值被设置时触发该事件，传入设置的键名、新值、旧值作为参数