UNPKG

wonder.js

Version:
206 lines (194 loc) 10.7 kB
'use strict'; var Caml_array = require("bs-platform/lib/js/caml_array.js"); var ArrayService$Wonderjs = require("../../service/atom/ArrayService.js"); var ConvertCommon$Wonderjs = require("./ConvertCommon.js"); var ConvertSceneSystem$Wonderjs = require("./ConvertSceneSystem.js"); var ArrayService$WonderCommonlib = require("wonder-commonlib/lib/js/src/ArrayService.js"); var CreateStateMainService$Wonderjs = require("../../service/state/main/state/CreateStateMainService.js"); var HierachyTransformService$Wonderjs = require("../../service/record/main/transform/HierachyTransformService.js"); var CreateTransformMainService$Wonderjs = require("../../service/state/main/transform/CreateTransformMainService.js"); var RecordTransformMainService$Wonderjs = require("../../service/state/main/transform/RecordTransformMainService.js"); var UpdateTransformMainService$Wonderjs = require("../../service/state/main/transform/UpdateTransformMainService.js"); var ModelMatrixTransformService$Wonderjs = require("../../service/record/main/transform/ModelMatrixTransformService.js"); function _getTranslationTuple(mat) { return /* tuple */[ Caml_array.caml_array_get(mat, 12), Caml_array.caml_array_get(mat, 13), Caml_array.caml_array_get(mat, 14) ]; } function _getScaleTuple(mat) { var m11 = Caml_array.caml_array_get(mat, 0); var m12 = Caml_array.caml_array_get(mat, 1); var m13 = Caml_array.caml_array_get(mat, 2); var m21 = Caml_array.caml_array_get(mat, 4); var m22 = Caml_array.caml_array_get(mat, 5); var m23 = Caml_array.caml_array_get(mat, 6); var m31 = Caml_array.caml_array_get(mat, 8); var m32 = Caml_array.caml_array_get(mat, 9); var m33 = Caml_array.caml_array_get(mat, 10); return /* tuple */[ Math.sqrt(m11 * m11 + m12 * m12 + m13 * m13), Math.sqrt(m21 * m21 + m22 * m22 + m23 * m23), Math.sqrt(m31 * m31 + m32 * m32 + m33 * m33) ]; } function _getRotationTuple(mat) { var trace = Caml_array.caml_array_get(mat, 0) + Caml_array.caml_array_get(mat, 5) + Caml_array.caml_array_get(mat, 10); if (trace > 0) { var s = Math.sqrt(trace + 1.0) * 2; return /* tuple */[ (Caml_array.caml_array_get(mat, 6) - Caml_array.caml_array_get(mat, 9)) / s, (Caml_array.caml_array_get(mat, 8) - Caml_array.caml_array_get(mat, 2)) / s, (Caml_array.caml_array_get(mat, 1) - Caml_array.caml_array_get(mat, 4)) / s, 0.25 * s ]; } else if (Caml_array.caml_array_get(mat, 0) > Caml_array.caml_array_get(mat, 5) && Caml_array.caml_array_get(mat, 0) > Caml_array.caml_array_get(mat, 10)) { var s$1 = Math.sqrt(1.0 + Caml_array.caml_array_get(mat, 0) - Caml_array.caml_array_get(mat, 5) - Caml_array.caml_array_get(mat, 10)) * 2; return /* tuple */[ 0.25 * s$1, (Caml_array.caml_array_get(mat, 1) + Caml_array.caml_array_get(mat, 4)) / s$1, (Caml_array.caml_array_get(mat, 8) + Caml_array.caml_array_get(mat, 2)) / s$1, (Caml_array.caml_array_get(mat, 6) - Caml_array.caml_array_get(mat, 9)) / s$1 ]; } else if (Caml_array.caml_array_get(mat, 5) > Caml_array.caml_array_get(mat, 10)) { var s$2 = Math.sqrt(1.0 + Caml_array.caml_array_get(mat, 5) - Caml_array.caml_array_get(mat, 0) - Caml_array.caml_array_get(mat, 10)) * 2; return /* tuple */[ (Caml_array.caml_array_get(mat, 1) + Caml_array.caml_array_get(mat, 4)) / s$2, 0.25 * s$2, (Caml_array.caml_array_get(mat, 6) + Caml_array.caml_array_get(mat, 9)) / s$2, (Caml_array.caml_array_get(mat, 8) - Caml_array.caml_array_get(mat, 2)) / s$2 ]; } else { var s$3 = Math.sqrt(1.0 + Caml_array.caml_array_get(mat, 10) - Caml_array.caml_array_get(mat, 0) - Caml_array.caml_array_get(mat, 5)) * 2; return /* tuple */[ (Caml_array.caml_array_get(mat, 8) + Caml_array.caml_array_get(mat, 2)) / s$3, (Caml_array.caml_array_get(mat, 6) + Caml_array.caml_array_get(mat, 9)) / s$3, 0.25 * s$3, (Caml_array.caml_array_get(mat, 1) - Caml_array.caml_array_get(mat, 4)) / s$3 ]; } } function convertToTransforms(param) { return ArrayService$WonderCommonlib.reduceOneParam((function (arr, param) { var scale = param[/* scale */7]; var rotation = param[/* rotation */6]; var translation = param[/* translation */5]; var matrix = param[/* matrix */4]; if (matrix !== undefined) { var matrix$1 = matrix; return ArrayService$Wonderjs.push(/* record */[ /* translation */_getTranslationTuple(matrix$1), /* rotation */_getRotationTuple(matrix$1), /* scale */_getScaleTuple(matrix$1) ], arr); } else { return ArrayService$Wonderjs.push(/* record */[ /* translation */translation !== undefined ? translation : undefined, /* rotation */rotation !== undefined ? rotation : undefined, /* scale */scale !== undefined ? scale : undefined ], arr); } }), /* array */[], param[/* nodes */10]); } function _setParent(parentIndex, transformArr, nodes, state) { var match = nodes[parentIndex]; var children = match[/* children */3]; if (children !== undefined) { return ArrayService$WonderCommonlib.reduceOneParam((function (state, child) { state[/* transformRecord */11] = HierachyTransformService$Wonderjs.setParent(ArrayService$Wonderjs.getNth(parentIndex, transformArr), child, RecordTransformMainService$Wonderjs.getRecord(state)); return _setParent(child, transformArr, nodes, state); }), state, children); } else { return state; } } function _createTransformCount (count){ if( typeof window !== "undefined" && typeof window.wonder_transformCount_forTest !== "undefined" ){ return window.wonder_transformCount_forTest } else{ return count } }; function _createState(param) { var state = CreateStateMainService$Wonderjs.createState(/* () */0); var newrecord = Caml_array.caml_array_dup(state); return RecordTransformMainService$Wonderjs.create((newrecord[/* settingRecord */0] = /* record */[ /* canvasId */undefined, /* memory */undefined, /* buffer *//* record */[ /* geometryPointCount */300, /* geometryCount */30, /* transformCount */_createTransformCount(100000), /* basicMaterialCount */48, /* lightMaterialCount */48, /* directionLightCount */48, /* pointLightCount */48, /* basicSourceTextureCount */48, /* arrayBufferViewSourceTextureCount */48, /* cubemapTextureCount */48, /* meshRendererCount */48, /* instanceBuffer : record */[ /* sourceInstanceCount */48, /* objectInstanceCountPerSourceInstance */48 ] ], /* isDebug */undefined, /* context */undefined, /* gpu */undefined, /* worker *//* record */[/* useWorker */false] ], newrecord)); } function _setTransformData(transforms, state) { return ArrayService$WonderCommonlib.reduceOneParam((function (param, param$1) { var scale = param$1[/* scale */2]; var rotation = param$1[/* rotation */1]; var translation = param$1[/* translation */0]; var match = CreateTransformMainService$Wonderjs.create(param[1]); var transform = match[1]; var state = match[0]; var state$1 = translation !== undefined ? (state[/* transformRecord */11] = ModelMatrixTransformService$Wonderjs.setLocalPositionByTuple(transform, translation, RecordTransformMainService$Wonderjs.getRecord(state)), state) : state; var state$2 = rotation !== undefined ? (state$1[/* transformRecord */11] = ModelMatrixTransformService$Wonderjs.setLocalRotationByTuple(transform, rotation, RecordTransformMainService$Wonderjs.getRecord(state$1)), state$1) : state$1; var state$3 = scale !== undefined ? (state$2[/* transformRecord */11] = ModelMatrixTransformService$Wonderjs.setLocalScaleByTuple(transform, scale, RecordTransformMainService$Wonderjs.getRecord(state$2)), state$2) : state$2; return /* tuple */[ ArrayService$Wonderjs.push(transform, param[0]), state$3 ]; }), /* tuple */[ /* array */[], state ], transforms); } function computeWorldPositionTransforms(transforms, param) { var nodes = param[/* nodes */10]; var state = _createState(/* () */0); var match = _setTransformData(transforms, state); var transformArr = match[0]; var state$1 = ArrayService$WonderCommonlib.reduceOneParam((function (state, rootNodeIndex) { return _setParent(rootNodeIndex, transformArr, nodes, state); }), match[1], ConvertSceneSystem$Wonderjs.getRootNodeIndexs(ConvertCommon$Wonderjs.getScene(param[/* scenes */1], param[/* scene */2]))); return ArrayService$WonderCommonlib.reduceOneParam((function (param, transform) { var state = param[1]; return /* tuple */[ ArrayService$Wonderjs.push(UpdateTransformMainService$Wonderjs.updateAndGetPositionTuple(transform, state[/* globalTempRecord */37], RecordTransformMainService$Wonderjs.getRecord(state)), param[0]), state ]; }), /* tuple */[ /* array */[], state$1 ], transformArr)[0]; } exports._getTranslationTuple = _getTranslationTuple; exports._getScaleTuple = _getScaleTuple; exports._getRotationTuple = _getRotationTuple; exports.convertToTransforms = convertToTransforms; exports._setParent = _setParent; exports._createTransformCount = _createTransformCount; exports._createState = _createState; exports._setTransformData = _setTransformData; exports.computeWorldPositionTransforms = computeWorldPositionTransforms; /* ArrayService-Wonderjs Not a pure module */