Newer
Older
reroad-test / 2020-ryusei / aframe-master / src / extras / primitives / primitives / meshPrimitives.js
@ryusei ryusei on 22 Oct 2020 1 KB パノラマ表示
/**
 * Automated mesh primitive registration.
 */
var getMeshMixin = require('../getMeshMixin');
var geometries = require('../../../core/geometry').geometries;
var geometryNames = require('../../../core/geometry').geometryNames;
var registerPrimitive = require('../primitives').registerPrimitive;
var utils = require('../../../utils/');

// For testing.
var meshPrimitives = module.exports = {};

// Generate primitive for each geometry type.
geometryNames.forEach(function registerMeshPrimitive (geometryName) {
  var geometry = geometries[geometryName];
  var geometryHyphened = unCamelCase(geometryName);

  // Generate mappings.
  var mappings = {};
  Object.keys(geometry.schema).forEach(function createMapping (property) {
    mappings[unCamelCase(property)] = 'geometry.' + property;
  });

  // Register.
  var tagName = 'a-' + geometryHyphened;
  var primitive = registerPrimitive(tagName, utils.extendDeep({}, getMeshMixin(), {
    defaultComponents: {geometry: {primitive: geometryName}},
    mappings: mappings
  }));
  meshPrimitives[tagName] = primitive;
});

/**
 * camelCase to hyphened-string.
 */
function unCamelCase (str) {
  return str.replace(/([a-z])([A-Z])/g, '$1-$2').toLowerCase();
}