Newer
Older
reroad-test / 2020-ryusei / aframe-master / examples / test / pool / components / spaceship.js
@ryusei ryusei on 22 Oct 2020 1 KB パノラマ表示
/* global AFRAME */

AFRAME.registerComponent('spaceship', {
  init: function () {
    var el = this.el;
    var geometry = 'primitive: box; height: 2; width: 2; depth: 2;';
    var material = 'color: #167341; roughness: 1.0; metalness: 0.2;';
    el.setAttribute('geometry', geometry);
    el.setAttribute('material', material);
    this.onKeyDown = this.onKeyDown.bind(this);
  },

  play: function () {
    this.attachKeyEventListeners();
  },

  pause: function () {
    this.removeKeyEventListeners();
  },

  onKeyDown: function (evt) {
    var el = this.el;
    var laserEl;
    var position;
    if (evt.keyCode !== 32) { return; }
    laserEl = el.sceneEl.components.pool.requestEntity();
    if (!laserEl) { return; }
    position = el.getAttribute('position');
    laserEl.setAttribute('position', position);
    laserEl.play();
    setTimeout(this.laserDestroyer(laserEl), 1000);
  },

  laserDestroyer: function (el) {
    var laserEl = el;
    var component = this;
    return function () {
      if (!laserEl.isPlaying) {
        setTimeout(component.laserDestroyer(laserEl), 1000);
        return;
      }
      this.el.sceneEl.components.pool.returnEntity(laserEl);
    }.bind(this);
  },

  attachKeyEventListeners: function () {
    window.addEventListener('keydown', this.onKeyDown);
  },

  removeKeyEventListeners: function () {
    window.removeEventListener('keydown', this.onKeyDown);
  }
});