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);
}
}