wonder.js
Version:
148 lines (133 loc) • 9.19 kB
JavaScript
;
var Matrix4Service$Wonderjs = require("../../../atom/Matrix4Service.js");
var QuaternionService$Wonderjs = require("../../../atom/QuaternionService.js");
var AllGlobalTempService$Wonderjs = require("../../../record/all/globalTemp/AllGlobalTempService.js");
var DirtyTransformService$Wonderjs = require("../../../record/main/transform/DirtyTransformService.js");
var MutableSparseMapService$Wonderjs = require("../../../atom/MutableSparseMapService.js");
var HierachyTransformService$Wonderjs = require("../../../record/main/transform/HierachyTransformService.js");
var ModelMatrixTransformService$Wonderjs = require("../../../record/main/transform/ModelMatrixTransformService.js");
var MutableSparseMapService$WonderCommonlib = require("wonder-commonlib/lib/js/src/MutableSparseMapService.js");
function _clearCache(transform, globalTempRecord, record) {
var normalMatrixCacheMap = record[/* normalMatrixCacheMap */20];
var match = MutableSparseMapService$Wonderjs.fastGet(transform, normalMatrixCacheMap);
var globalTempRecord$1 = match[0] ? AllGlobalTempService$Wonderjs.addUnUsedFloat9(match[1], globalTempRecord) : globalTempRecord;
MutableSparseMapService$WonderCommonlib.deleteVal(transform, normalMatrixCacheMap);
return /* tuple */[
record,
globalTempRecord$1
];
}
function update(transform, globalTempRecord, transformRecord) {
var localPositions = transformRecord[/* localPositions */3];
var localRotations = transformRecord[/* localRotations */4];
var localScales = transformRecord[/* localScales */5];
var match = DirtyTransformService$Wonderjs.isDirty(transform, transformRecord);
if (match) {
var match$1 = _clearCache(transform, globalTempRecord, DirtyTransformService$Wonderjs.mark(transform, false, transformRecord));
var globalTempRecord$1 = match$1[1];
var transformRecord$1 = match$1[0];
var match$2 = HierachyTransformService$Wonderjs.getParent(transform, transformRecord$1);
if (match$2 !== undefined) {
var parent = match$2;
var transformRecord$2 = update(parent, globalTempRecord$1, transformRecord$1);
var parentLocalToWorldMatrix = ModelMatrixTransformService$Wonderjs.getLocalToWorldMatrixTypeArray(parent, transformRecord$2[/* localToWorldMatrices */2], transformRecord$2[/* localToWorldMatrixCacheMap */19]);
var childLocalToWorldMatrix = ModelMatrixTransformService$Wonderjs.getLocalToWorldMatrixTypeArray(transform, transformRecord$2[/* localToWorldMatrices */2], transformRecord$2[/* localToWorldMatrixCacheMap */19]);
Matrix4Service$Wonderjs.multiply(parentLocalToWorldMatrix, Matrix4Service$Wonderjs.fromTranslationRotationScale(ModelMatrixTransformService$Wonderjs.getLocalPositionTuple(transform, localPositions), ModelMatrixTransformService$Wonderjs.getLocalRotationTuple(transform, localRotations), ModelMatrixTransformService$Wonderjs.getLocalScaleTuple(transform, localScales), AllGlobalTempService$Wonderjs.getFloat32Array1(globalTempRecord$1)), childLocalToWorldMatrix);
return transformRecord$2;
} else {
var localToWorldMatrix = ModelMatrixTransformService$Wonderjs.getLocalToWorldMatrixTypeArray(transform, transformRecord$1[/* localToWorldMatrices */2], transformRecord$1[/* localToWorldMatrixCacheMap */19]);
Matrix4Service$Wonderjs.fromTranslationRotationScale(ModelMatrixTransformService$Wonderjs.getLocalPositionTuple(transform, localPositions), ModelMatrixTransformService$Wonderjs.getLocalRotationTuple(transform, localRotations), ModelMatrixTransformService$Wonderjs.getLocalScaleTuple(transform, localScales), localToWorldMatrix);
return transformRecord$1;
}
} else {
return transformRecord;
}
}
function updateAndGetLocalToWorldMatrixTypeArray(transform, globalTempRecord, record) {
var record$1 = update(transform, globalTempRecord, record);
return ModelMatrixTransformService$Wonderjs.getLocalToWorldMatrixTypeArray(transform, record$1[/* localToWorldMatrices */2], record$1[/* localToWorldMatrixCacheMap */19]);
}
function updateAndGetNormalMatrixTypeArray(transform, globalTempRecord, record) {
var match = update(transform, globalTempRecord, record);
var localToWorldMatrices = match[/* localToWorldMatrices */2];
var localToWorldMatrixCacheMap = match[/* localToWorldMatrixCacheMap */19];
var normalMatrixCacheMap = match[/* normalMatrixCacheMap */20];
return ModelMatrixTransformService$Wonderjs.getNormalMatrixTypeArray(transform, localToWorldMatrices, /* tuple */[
localToWorldMatrixCacheMap,
normalMatrixCacheMap
], globalTempRecord);
}
function updateAndGetPositionTuple(transform, globalTempRecord, record) {
var match = update(transform, globalTempRecord, record);
var localToWorldMatrices = match[/* localToWorldMatrices */2];
var localToWorldMatrixCacheMap = match[/* localToWorldMatrixCacheMap */19];
return Matrix4Service$Wonderjs.getTranslationTuple(ModelMatrixTransformService$Wonderjs.getLocalToWorldMatrixTypeArray(transform, localToWorldMatrices, localToWorldMatrixCacheMap));
}
function updateAndSetPositionByTuple(transform, position, globalTempRecord, record) {
var match = HierachyTransformService$Wonderjs.getParent(transform, record);
if (match !== undefined) {
var parent = match;
var record$1 = update(parent, globalTempRecord, record);
return ModelMatrixTransformService$Wonderjs.setPositionByTuple(transform, parent, position, /* tuple */[
globalTempRecord,
record$1
]);
} else {
return ModelMatrixTransformService$Wonderjs.setLocalPositionByTuple(transform, position, record);
}
}
function updateAndGetRotationTuple(transform, globalTempRecord, record) {
var match = update(transform, globalTempRecord, record);
var localToWorldMatrices = match[/* localToWorldMatrices */2];
var localToWorldMatrixCacheMap = match[/* localToWorldMatrixCacheMap */19];
return Matrix4Service$Wonderjs.getRotationTuple(ModelMatrixTransformService$Wonderjs.getLocalToWorldMatrixTypeArray(transform, localToWorldMatrices, localToWorldMatrixCacheMap));
}
function updateAndSetRotationByTuple(transform, rotation, globalTempRecord, record) {
var match = HierachyTransformService$Wonderjs.getParent(transform, record);
if (match !== undefined) {
return ModelMatrixTransformService$Wonderjs.setLocalRotationByTuple(transform, QuaternionService$Wonderjs.multiply(QuaternionService$Wonderjs.invert(updateAndGetRotationTuple(match, globalTempRecord, record)), rotation), record);
} else {
return ModelMatrixTransformService$Wonderjs.setLocalRotationByTuple(transform, rotation, record);
}
}
function updateAndGetScaleTuple(transform, globalTempRecord, record) {
var match = update(transform, globalTempRecord, record);
var localToWorldMatrices = match[/* localToWorldMatrices */2];
var localToWorldMatrixCacheMap = match[/* localToWorldMatrixCacheMap */19];
return Matrix4Service$Wonderjs.getScaleTuple(ModelMatrixTransformService$Wonderjs.getLocalToWorldMatrixTypeArray(transform, localToWorldMatrices, localToWorldMatrixCacheMap));
}
function updateAndSetScaleByTuple(transform, position, globalTempRecord, record) {
var match = HierachyTransformService$Wonderjs.getParent(transform, record);
if (match !== undefined) {
var parent = match;
var record$1 = update(parent, globalTempRecord, record);
return ModelMatrixTransformService$Wonderjs.setScaleByTuple(transform, parent, position, /* tuple */[
globalTempRecord,
record$1
]);
} else {
return ModelMatrixTransformService$Wonderjs.setLocalScaleByTuple(transform, position, record);
}
}
function updateAndGetEulerAnglesTuple(transform, globalTempRecord, record) {
var match = update(transform, globalTempRecord, record);
var localToWorldMatrices = match[/* localToWorldMatrices */2];
var localToWorldMatrixCacheMap = match[/* localToWorldMatrixCacheMap */19];
return Matrix4Service$Wonderjs.getEulerAngles(ModelMatrixTransformService$Wonderjs.getLocalToWorldMatrixTypeArray(transform, localToWorldMatrices, localToWorldMatrixCacheMap));
}
function updateAndSetEulerAnglesByTuple(transform, eulerAngles, globalTempRecord, record) {
return updateAndSetRotationByTuple(transform, QuaternionService$Wonderjs.setFromEulerAngles(eulerAngles), globalTempRecord, record);
}
exports._clearCache = _clearCache;
exports.update = update;
exports.updateAndGetLocalToWorldMatrixTypeArray = updateAndGetLocalToWorldMatrixTypeArray;
exports.updateAndGetNormalMatrixTypeArray = updateAndGetNormalMatrixTypeArray;
exports.updateAndGetPositionTuple = updateAndGetPositionTuple;
exports.updateAndSetPositionByTuple = updateAndSetPositionByTuple;
exports.updateAndGetRotationTuple = updateAndGetRotationTuple;
exports.updateAndSetRotationByTuple = updateAndSetRotationByTuple;
exports.updateAndGetScaleTuple = updateAndGetScaleTuple;
exports.updateAndSetScaleByTuple = updateAndSetScaleByTuple;
exports.updateAndGetEulerAnglesTuple = updateAndGetEulerAnglesTuple;
exports.updateAndSetEulerAnglesByTuple = updateAndSetEulerAnglesByTuple;
/* Matrix4Service-Wonderjs Not a pure module */