wonder.js
Version:
70 lines (64 loc) • 3.9 kB
JavaScript
'use strict';
var Caml_array = require("bs-platform/lib/js/caml_array.js");
var Log$WonderLog = require("wonder-log/lib/js/src/Log.js");
var OptionService$Wonderjs = require("../../../atom/OptionService.js");
var Matrix4Service$Wonderjs = require("../../../atom/Matrix4Service.js");
var PMatrixService$Wonderjs = require("../../../primitive/PMatrixService.js");
var DirtyArrayService$Wonderjs = require("../../../primitive/DirtyArrayService.js");
var ArrayService$WonderCommonlib = require("wonder-commonlib/lib/js/src/ArrayService.js");
var FrustumPerspectiveCameraProjectionService$Wonderjs = require("../../../record/main/perspective_camera_projection/FrustumPerspectiveCameraProjectionService.js");
var FrustumPerspectiveCameraProjectionMainService$Wonderjs = require("./FrustumPerspectiveCameraProjectionMainService.js");
function updateCameraProjection(index, state) {
var perspectiveCameraProjectionRecord = state[/* perspectiveCameraProjectionRecord */14];
var match = FrustumPerspectiveCameraProjectionService$Wonderjs.getAspect(index, perspectiveCameraProjectionRecord);
var aspect = match !== undefined ? match : OptionService$Wonderjs.unsafeGet(FrustumPerspectiveCameraProjectionMainService$Wonderjs.computeAspect(state));
var newrecord = Caml_array.caml_array_dup(state);
var match$1 = FrustumPerspectiveCameraProjectionService$Wonderjs.getFovy(index, perspectiveCameraProjectionRecord);
var match$2 = FrustumPerspectiveCameraProjectionService$Wonderjs.getNear(index, perspectiveCameraProjectionRecord);
var match$3 = FrustumPerspectiveCameraProjectionService$Wonderjs.getFar(index, perspectiveCameraProjectionRecord);
var tmp;
var exit = 0;
if (match$1 !== undefined && match$2 !== undefined && match$3 !== undefined) {
Matrix4Service$Wonderjs.buildPerspective(/* tuple */[
match$1,
aspect,
match$2,
match$3
], PMatrixService$Wonderjs.unsafeGetPMatrix(index, perspectiveCameraProjectionRecord[/* pMatrixMap */2]));
tmp = perspectiveCameraProjectionRecord;
} else {
exit = 1;
}
if (exit === 1) {
Log$WonderLog.fatal(Log$WonderLog.buildFatalMessage("update", "fovy,near,far should all exist", "", "", "cameraProjection: " + (String(index) + "")));
tmp = perspectiveCameraProjectionRecord;
}
newrecord[/* perspectiveCameraProjectionRecord */14] = tmp;
return newrecord;
}
function _clearDirtyArray(state) {
var perspectiveCameraProjectionRecord = state[/* perspectiveCameraProjectionRecord */14];
var newrecord = Caml_array.caml_array_dup(state);
newrecord[/* perspectiveCameraProjectionRecord */14] = /* record */[
/* index */perspectiveCameraProjectionRecord[/* index */0],
/* dirtyArray */DirtyArrayService$Wonderjs.create(/* () */0),
/* pMatrixMap */perspectiveCameraProjectionRecord[/* pMatrixMap */2],
/* nearMap */perspectiveCameraProjectionRecord[/* nearMap */3],
/* farMap */perspectiveCameraProjectionRecord[/* farMap */4],
/* fovyMap */perspectiveCameraProjectionRecord[/* fovyMap */5],
/* aspectMap */perspectiveCameraProjectionRecord[/* aspectMap */6],
/* gameObjectMap */perspectiveCameraProjectionRecord[/* gameObjectMap */7],
/* disposedIndexArray */perspectiveCameraProjectionRecord[/* disposedIndexArray */8]
];
return newrecord;
}
function update(state) {
var perspectiveCameraProjectionRecord = state[/* perspectiveCameraProjectionRecord */14];
return _clearDirtyArray(ArrayService$WonderCommonlib.reduceOneParam((function (state, dirtyIndex) {
return updateCameraProjection(dirtyIndex, state);
}), state, ArrayService$WonderCommonlib.removeDuplicateItems(perspectiveCameraProjectionRecord[/* dirtyArray */1])));
}
exports.updateCameraProjection = updateCameraProjection;
exports._clearDirtyArray = _clearDirtyArray;
exports.update = update;
/* Log-WonderLog Not a pure module */