Newer
Older
reroad-test / 2020-fuga / aframe-master / src / systems / shadow.js
@fuga sakurai fuga sakurai on 4 Nov 2020 1 KB a-フレームを追加した
var registerSystem = require('../core/system').registerSystem;
var THREE = require('../lib/three');

var SHADOW_MAP_TYPE_MAP = {
  basic: THREE.BasicShadowMap,
  pcf: THREE.PCFShadowMap,
  pcfsoft: THREE.PCFSoftShadowMap
};

/**
 * Shadow system.
 *
 * Enabled automatically when one or more shadow components are added to the scene, the system sets
 * options on the WebGLRenderer for configuring shadow appearance.
 */
module.exports.System = registerSystem('shadow', {
  schema: {
    enabled: {default: true},
    autoUpdate: {default: true},
    type: {default: 'pcf', oneOf: ['basic', 'pcf', 'pcfsoft']}
  },

  init: function () {
    var sceneEl = this.sceneEl;
    var data = this.data;

    this.shadowMapEnabled = false;

    if (!sceneEl.renderer) { return; }  // For tests.

    sceneEl.renderer.shadowMap.type = SHADOW_MAP_TYPE_MAP[data.type];
    sceneEl.renderer.shadowMap.autoUpdate = data.autoUpdate;
    this.setShadowMapEnabled(this.shadowMapEnabled);
  },

  update: function (prevData) {
    if (prevData.enabled !== this.data.enabled) {
      this.setShadowMapEnabled(this.data.enabled);
    }
  },

  /**
   * Enables/disables the renderer shadow map.
   * @param {boolean} enabled
   */
  setShadowMapEnabled: function (enabled) {
    var renderer = this.sceneEl.renderer;
    this.shadowMapEnabled = this.data.enabled && enabled;
    if (renderer) {
      renderer.shadowMap.enabled = this.shadowMapEnabled;
    }
  }
});