models_tips.js

import { FHelp } from '../utils/index.js';

/**
 * @class
 * @summary 提示数据类
 * @classdesc 提示数据集合, 用于存储提示数据, 以及消息数据
 * @memberof module:modules
 * @alias DTips
 */
export class DTips {
  /**
   * 提示框最小宽度, 单位 px
   * @summary 最小宽度
   * @type {?number}
   * @default 230
   */
  minWidth;

  /**
   * 提示框最小高度, 单位 px
   * @summary 最小高度
   * @type {?number}
   * @default 100
   */
  minHeight;

  /**
   * 调整提示框位于舞台中的 x 轴方向偏移量
   * @summary x 偏移量
   * @type {?number}
   * @default 0
   */
  offsetX;

  /**
   * 调整提示框位于舞台中的 y 轴方向偏移量
   * @summary y 偏移量
   * @type {?number}
   * @default 0
   */
  offsetY;

  /**
   * 提示框显示时的持续时间, 单位 ms
   * @summary 持续时间
   * @type {?number}
   * @default 3000
   */
  duration;

  /**
   * 提示框隐藏时的持续时间, 单位 ms
   * @summary 隐藏时间
   * @type {?number}
   * @default 5000
   */
  interval;

  /**
   * 播放的消息内容, 需要是一个字符串数组, 播放时会从中随机取出一条进行提示, 空数组则不播放, 默认为空数组
   * @summary 消息数组
   * @type {?(DMessage[])}
   * @default []
   */
  message;

  /**
   * 如果是 true, 则启用 tips 元素的拖拽, 否则不启用拖拽
   * @summary 启用拖拽
   * @type {?boolean}
   * @default true
   */
  drag;

  /**
   * true: 启用随机说话
   * @summary 随机说话
   * @type {?boolean}
   * @default true
   */
  talk;

  /**
   * 随机说话的时间间隔, 单位 ms
   * @summary 说话间隔
   * @type {?number}
   * @default 30s
   */
  talkInterval;

  /**
   * 用于存储 url 以及处理 talk 结果的对象
   * @summary talk api 对象
   * @type {?(TTalkApi[])}
   * @default []
   */
  talkApis;

  /**
   * 控制是否启用 motion 消息, true: 启用, false: 关闭
   * @summary 启用 motion 消息
   * @type {?boolean}
   * @default true
   */
  motionMessage;

  /**
   * 创建提示数据实例
   * @summary 提示数据构造
   * @constructor
   * @param {DTips | null} [data=null] 提示数据
   */
  constructor(data = null) {
    FHelp.mixinProperty(this, data);
    this.minWidth = data?.minWidth ?? 230;
    this.minHeight = data?.minHeight ?? 100;
    this.offsetX = data?.offsetX ?? 0;
    this.offsetY = data?.offsetY ?? 0;
    this.duration = data?.duration ?? 3000;
    this.interval = data?.interval ?? 5000;
    this.message = data?.message ?? [];
    this.drag = data?.drag ?? true;
    this.talk = data?.talk ?? true;
    this.talkInterval = data?.talkInterval ?? 30000;
    this.talkApis = data?.talkApis ?? [];
    this.motionMessage = data?.motionMessage ?? true;
  }
}