wonder.js
Version:
116 lines (107 loc) • 6.4 kB
JavaScript
'use strict';
var Caml_array = require("bs-platform/lib/js/caml_array.js");
var Vector3Service$Wonderjs = require("../../../../atom/Vector3Service.js");
var ArrayService$WonderCommonlib = require("wonder-commonlib/lib/js/src/ArrayService.js");
var GetAllComponentService$Wonderjs = require("../../../../primitive/component/GetAllComponentService.js");
var RecordTransformMainService$Wonderjs = require("../../transform/RecordTransformMainService.js");
var ModelMatrixTransformService$Wonderjs = require("../../../../record/main/transform/ModelMatrixTransformService.js");
var GetComponentGameObjectService$Wonderjs = require("../../../../record/main/gameObject/GetComponentGameObjectService.js");
var ModelMatrixTransformMainService$Wonderjs = require("../../transform/ModelMatrixTransformMainService.js");
var OperateFlyCameraControllerService$Wonderjs = require("../../../../record/main/camera_controller/fly/OperateFlyCameraControllerService.js");
var GameObjectFlyCameraControllerService$Wonderjs = require("../../../../record/main/camera_controller/fly/GameObjectFlyCameraControllerService.js");
var RotateFlyCameraControllerMainService$Wonderjs = require("./RotateFlyCameraControllerMainService.js");
function _getTranslationPosition(cameraController, flyCameraControllerRecord) {
var initPosition = /* tuple */[
0,
0,
0
];
var moveSpeed = OperateFlyCameraControllerService$Wonderjs.unsafeGetMoveSpeed(cameraController, flyCameraControllerRecord);
var match = OperateFlyCameraControllerService$Wonderjs.hasDirection(cameraController, flyCameraControllerRecord);
var positionTuple = match ? ArrayService$WonderCommonlib.reduceOneParam((function (param, direction) {
var dz = param[2];
var dy = param[1];
var dx = param[0];
switch (direction) {
case 0 :
return /* tuple */[
-moveSpeed,
dy,
dz
];
case 1 :
return /* tuple */[
moveSpeed,
dy,
dz
];
case 2 :
return /* tuple */[
dx,
moveSpeed,
dz
];
case 3 :
return /* tuple */[
dx,
-moveSpeed,
dz
];
case 4 :
return /* tuple */[
dx,
dy,
-moveSpeed
];
case 5 :
return /* tuple */[
dx,
dy,
moveSpeed
];
}
}), initPosition, OperateFlyCameraControllerService$Wonderjs.unsafeGetDirectionArray(cameraController, flyCameraControllerRecord)) : initPosition;
return Vector3Service$Wonderjs.add(/* Float */0, positionTuple, OperateFlyCameraControllerService$Wonderjs.unsafeGetTranslationDiff(cameraController, flyCameraControllerRecord));
}
function _resetFlyCameraDiffValue(cameraController, flyCameraControllerRecord) {
return OperateFlyCameraControllerService$Wonderjs.setTranslationDiff(cameraController, /* tuple */[
0,
0,
0
], OperateFlyCameraControllerService$Wonderjs.setEulerAngleDiff(cameraController, /* record */[
/* diffX */0,
/* diffY */0
], flyCameraControllerRecord));
}
function _updateTransform(cameraController, state) {
var gameObjectRecord = state[/* gameObjectRecord */10];
var flyCameraControllerRecord = state[/* flyCameraControllerRecord */26];
var transformRecord = RecordTransformMainService$Wonderjs.getRecord(state);
var cameraTransform = GetComponentGameObjectService$Wonderjs.unsafeGetTransformComponent(GameObjectFlyCameraControllerService$Wonderjs.unsafeGetGameObject(cameraController, flyCameraControllerRecord), gameObjectRecord);
var match = OperateFlyCameraControllerService$Wonderjs.unsafeGetEulerAngleDiff(cameraController, flyCameraControllerRecord);
var match$1 = RotateFlyCameraControllerMainService$Wonderjs.getLocalEulerAngleWithDiffValueAndSetToMap(cameraTransform, /* tuple */[
match[/* diffX */0],
match[/* diffY */1]
], state);
var state$1 = ModelMatrixTransformMainService$Wonderjs.setLocalEulerAnglesByTuple(cameraTransform, match$1[0], match$1[1]);
var cameraLocalPositionTuple = Vector3Service$Wonderjs.add(/* Float */0, ModelMatrixTransformService$Wonderjs.getLocalPositionTuple(cameraTransform, RecordTransformMainService$Wonderjs.getRecord(state$1)[/* localPositions */3]), Vector3Service$Wonderjs.transformQuat(_getTranslationPosition(cameraController, flyCameraControllerRecord), ModelMatrixTransformService$Wonderjs.getLocalRotationTuple(cameraTransform, RecordTransformMainService$Wonderjs.getRecord(state$1)[/* localRotations */4])));
var newrecord = Caml_array.caml_array_dup(state$1);
newrecord[/* transformRecord */11] = ModelMatrixTransformService$Wonderjs.setLocalPositionByTuple(cameraTransform, cameraLocalPositionTuple, transformRecord);
newrecord[/* flyCameraControllerRecord */26] = _resetFlyCameraDiffValue(cameraController, flyCameraControllerRecord);
return newrecord;
}
function _getAllFlyCameraControllers(state) {
var flyCameraControllerRecord = state[/* flyCameraControllerRecord */26];
return GetAllComponentService$Wonderjs.getAllComponents(flyCameraControllerRecord[/* index */0], flyCameraControllerRecord[/* disposedIndexArray */13]);
}
function update(state) {
return ArrayService$WonderCommonlib.reduceOneParam((function (state, cameraController) {
return _updateTransform(cameraController, state);
}), state, _getAllFlyCameraControllers(state));
}
exports._getTranslationPosition = _getTranslationPosition;
exports._resetFlyCameraDiffValue = _resetFlyCameraDiffValue;
exports._updateTransform = _updateTransform;
exports._getAllFlyCameraControllers = _getAllFlyCameraControllers;
exports.update = update;
/* GetAllComponentService-Wonderjs Not a pure module */