wonder.js
Version:
161 lines (149 loc) • 7.72 kB
JavaScript
;
var Caml_option = require("bs-platform/lib/js/caml_option.js");
var ArrayService$Wonderjs = require("../../service/atom/ArrayService.js");
var ArrayService$WonderCommonlib = require("wonder-commonlib/lib/js/src/ArrayService.js");
var MutableSparseMapService$WonderCommonlib = require("wonder-commonlib/lib/js/src/MutableSparseMapService.js");
function _buildMultiPrimitivesName(name, primitiveIndex) {
if (name !== undefined) {
return "" + (String(Caml_option.valFromOption(name)) + ("_" + (String(primitiveIndex) + "")));
}
}
var _buildMultiPrimitivesMeshName = _buildMultiPrimitivesName;
var _buildMultiPrimitivesNodeName = _buildMultiPrimitivesName;
function isMultiPrimitives(primitives) {
return primitives.length > 1;
}
function _buildMultiPrimitivesMeshMap(meshes) {
return ArrayService$WonderCommonlib.reduceOneParami((function (param, param$1, meshIndex) {
var name = param$1[/* name */1];
var primitives = param$1[/* primitives */0];
var newMeshIndex = param[1];
var multiPrimitivesMeshMap = param[0];
var match = primitives.length > 1;
if (match) {
var newMeshDataArr = ArrayService$WonderCommonlib.reduceOneParami((function (newMeshDataArr, primitive, primitiveIndex) {
return ArrayService$Wonderjs.push(/* tuple */[
/* record */[
/* primitives : array */[primitive],
/* name */_buildMultiPrimitivesName(name, primitiveIndex)
],
newMeshIndex + primitiveIndex | 0
], newMeshDataArr);
}), /* array */[], primitives);
return /* tuple */[
MutableSparseMapService$WonderCommonlib.set(meshIndex, newMeshDataArr, multiPrimitivesMeshMap),
newMeshIndex + newMeshDataArr.length | 0
];
} else {
return /* tuple */[
multiPrimitivesMeshMap,
newMeshIndex
];
}
}), /* tuple */[
MutableSparseMapService$WonderCommonlib.createEmpty(/* () */0),
meshes.length
], meshes)[0];
}
function _buildNewMeshes(meshes, multiPrimitivesMeshMap) {
return MutableSparseMapService$WonderCommonlib.reduceiValid((function (newMeshes, newMeshDataArr, param) {
return newMeshes.concat(newMeshDataArr.map((function (param) {
return param[0];
})));
}), meshes.slice(), multiPrimitivesMeshMap);
}
function _buildNewNodes(nodes, multiPrimitivesMeshMap) {
var match = ArrayService$WonderCommonlib.reduceOneParam((function (param, node) {
var mesh = node[/* mesh */2];
var name = node[/* name */0];
var newNodeIndex = param[2];
var newNodesOfMultiPrimitives = param[1];
var newNodes = param[0];
if (mesh !== undefined) {
var match = MutableSparseMapService$WonderCommonlib.get(mesh, multiPrimitivesMeshMap);
if (match !== undefined) {
var newMeshDataArr = match;
var newNodesOfMultiPrimitives$1 = ArrayService$WonderCommonlib.reduceOneParami((function (newNodesOfMultiPrimitives, param, primitiveIndex) {
return ArrayService$Wonderjs.push(/* record */[
/* name */_buildMultiPrimitivesName(name, primitiveIndex),
/* camera */undefined,
/* mesh */param[1],
/* children */undefined,
/* matrix */undefined,
/* translation */undefined,
/* rotation */undefined,
/* scale */undefined,
/* extras */undefined,
/* extensions */undefined
], newNodesOfMultiPrimitives);
}), newNodesOfMultiPrimitives, newMeshDataArr);
var newChildren = ArrayService$Wonderjs.range(newNodeIndex, (newNodeIndex + newMeshDataArr.length | 0) - 1 | 0);
var match$1 = node[/* children */3];
return /* tuple */[
ArrayService$Wonderjs.push(/* record */[
/* name */node[/* name */0],
/* camera */node[/* camera */1],
/* mesh */undefined,
/* children */match$1 !== undefined ? match$1.concat(newChildren) : newChildren,
/* matrix */node[/* matrix */4],
/* translation */node[/* translation */5],
/* rotation */node[/* rotation */6],
/* scale */node[/* scale */7],
/* extras */node[/* extras */8],
/* extensions */node[/* extensions */9]
], newNodes),
newNodesOfMultiPrimitives$1,
newNodeIndex + newMeshDataArr.length | 0
];
} else {
return /* tuple */[
ArrayService$Wonderjs.push(node, newNodes),
newNodesOfMultiPrimitives,
newNodeIndex
];
}
} else {
return /* tuple */[
ArrayService$Wonderjs.push(node, newNodes),
newNodesOfMultiPrimitives,
newNodeIndex
];
}
}), /* tuple */[
/* array */[],
/* array */[],
nodes.length
], nodes);
return match[0].concat(match[1]);
}
function convertMultiPrimitivesToNodes(gltf) {
var meshes = gltf[/* meshes */11];
var multiPrimitivesMeshMap = _buildMultiPrimitivesMeshMap(meshes);
return /* record */[
/* asset */gltf[/* asset */0],
/* scenes */gltf[/* scenes */1],
/* scene */gltf[/* scene */2],
/* images */gltf[/* images */3],
/* textures */gltf[/* textures */4],
/* samplers */gltf[/* samplers */5],
/* buffers */gltf[/* buffers */6],
/* bufferViews */gltf[/* bufferViews */7],
/* accessors */gltf[/* accessors */8],
/* cameras */gltf[/* cameras */9],
/* nodes */_buildNewNodes(gltf[/* nodes */10], multiPrimitivesMeshMap),
/* meshes */_buildNewMeshes(meshes, multiPrimitivesMeshMap),
/* materials */gltf[/* materials */12],
/* extensionsUsed */gltf[/* extensionsUsed */13],
/* extensions */gltf[/* extensions */14],
/* extras */gltf[/* extras */15]
];
}
exports._buildMultiPrimitivesName = _buildMultiPrimitivesName;
exports._buildMultiPrimitivesMeshName = _buildMultiPrimitivesMeshName;
exports._buildMultiPrimitivesNodeName = _buildMultiPrimitivesNodeName;
exports.isMultiPrimitives = isMultiPrimitives;
exports._buildMultiPrimitivesMeshMap = _buildMultiPrimitivesMeshMap;
exports._buildNewMeshes = _buildNewMeshes;
exports._buildNewNodes = _buildNewNodes;
exports.convertMultiPrimitivesToNodes = convertMultiPrimitivesToNodes;
/* ArrayService-Wonderjs Not a pure module */