interaction.js

import _ from 'lodash';

/**
 * GamifyJS의 키보드 입력을 담당하는 클래스입니다.
 * @alias Interaction
 */
export default class Interaction {
  /**
   * @description 키 이벤트 실행 함수를 document에 등록
   */
  constructor() {
    /**
     * @description key들의 callback 함수들을 저장
     * @type { object }
     */
    this.keyCallback = {};

    document.onkeydown = (e) => {
      const event = window.event ? window.event : e;
      const { key } = event;
      if (!_.isUndefined(this.keyCallback[key])) {
        for (let i = 0; i < this.keyCallback[key].length; i++) {
          this.keyCallback[key][i]();
        }
      }
    };
  }

  /**
   * Gamify에 키보드 이벤트를 추가할 때 사용하는 함수
   * @param {string} key 입력하고자 하는 키의 이름 ex) LeftArrow
   * @param {function} fn 키를 입력했을 때 실행시킬 함수
   * @memberof Interaction
   * @returns {number} 인덱스
   * @instance
   */
  addKeyboardEvent(key, fn) {
    if (_.isUndefined(this.keyCallback[key])) {
      this.keyCallback[key] = [];
    }

    this.keyCallback[key].push(fn);
    return this.keyCallback[key].length - 1;
  }

  /**
   * Gamify에 키보드 이벤트를 제거할 때 사용하는 함수
   * @param {string} key 제거하고자 하는 키의 이름 ex) LeftArrow
   * @param {number} index addKeyboardEvent를 통해 전달받은 인덱스
   * @memberof Interaction
   * @instance
   */
  removeKeyboardEvent(key, index) {
    this.keyCallback[key].splice(index, 1);
  }
}