UNPKG

wonder.js

Version:
461 lines (457 loc) 41.7 kB
'use strict'; var Curry = require("bs-platform/lib/js/curry.js"); var Sinon = require("wonder-bs-sinon/lib/js/src/sinon.js"); var Sinon$1 = require("sinon"); var Wonder_jest = require("wonder-bs-jest/lib/js/src/wonder_jest.js"); var TestTool$Wonderjs = require("../../../../tool/TestTool.js"); var ViewTool$Wonderjs = require("../../../../tool/service/device/ViewTool.js"); var CameraTool$Wonderjs = require("../../../../tool/service/camera/CameraTool.js"); var SettingTool$Wonderjs = require("../../../../tool/service/setting/SettingTool.js"); var Vector3Tool$Wonderjs = require("../../../../tool/service/atom/Vector3Tool.js"); var DirectorTool$Wonderjs = require("../../../../tool/core/DirectorTool.js"); var TransformAPI$Wonderjs = require("../../../../../src/api/TransformAPI.js"); var MainStateTool$Wonderjs = require("../../../../tool/service/state/MainStateTool.js"); var OptionService$Wonderjs = require("../../../../../src/service/atom/OptionService.js"); var NoWorkerJobTool$Wonderjs = require("../../../../tool/service/job/no_worker/NoWorkerJobTool.js"); var NoWorkerJobConfigTool$Wonderjs = require("../../../../tool/service/noWorkerJob/NoWorkerJobConfigTool.js"); var FlyCameraControllerAPI$Wonderjs = require("../../../../../src/api/camera_controller/FlyCameraControllerAPI.js"); var FlyCameraControllerTool$Wonderjs = require("../../../../tool/service/camera_controller/FlyCameraControllerTool.js"); var ArcballCameraControllerAPI$Wonderjs = require("../../../../../src/api/camera_controller/ArcballCameraControllerAPI.js"); var ArcballCameraControllerTool$Wonderjs = require("../../../../tool/service/camera_controller/ArcballCameraControllerTool.js"); var PerspectiveCameraProjectionAPI$Wonderjs = require("../../../../../src/api/camera/PerspectiveCameraProjectionAPI.js"); var PerspectiveCameraProjectionTool$Wonderjs = require("../../../../tool/service/camera/PerspectiveCameraProjectionTool.js"); var RotateFlyCameraControllerMainService$Wonderjs = require("../../../../../src/service/state/main/camera_controller/fly/RotateFlyCameraControllerMainService.js"); Wonder_jest.describe("test update camera job", (function (param) { var sandbox = Sinon.getSandboxDefaultVal(/* () */0); var state = /* record */[/* contents */MainStateTool$Wonderjs.createState(/* () */0)]; beforeEach((function () { sandbox[0] = Sinon$1.sandbox.create(); return /* () */0; })); afterEach((function () { return Curry._1(Sinon.restoreSandbox, sandbox[0]); })); Wonder_jest.describe("update perspectiveCameraProjection", (function (param) { var _buildNoWorkerJobConfig = function (param) { return NoWorkerJobConfigTool$Wonderjs.buildNoWorkerJobConfig(undefined, undefined, "\n [\n {\n \"name\": \"default\",\n \"jobs\": [\n {\n \"name\": \"update_camera\"\n }\n ]\n }\n ]\n ", undefined, "\n [\n {\n \"name\": \"update_camera\"\n }\n ]\n ", /* () */0); }; beforeEach((function () { state[0] = TestTool$Wonderjs.initWithJobConfig(sandbox, undefined, undefined, _buildNoWorkerJobConfig(/* () */0), undefined, undefined, /* () */0); return /* () */0; })); CameraTool$Wonderjs.testBuildPMatrix((function (param) { return state[0]; }), (function (state) { return DirectorTool$Wonderjs.run(state, undefined, /* () */0); })); Wonder_jest.test("test dirty during multi updates", (function (param) { var match = CameraTool$Wonderjs.createBasicCameraViewPerspectiveCamera(state[0]); var perspectiveCameraProjection = match[2]; var state$1 = DirectorTool$Wonderjs.runWithDefaultTime(match[0]); var state$2 = PerspectiveCameraProjectionAPI$Wonderjs.setPerspectiveCameraProjectionNear(perspectiveCameraProjection, 0.2, state$1); var state$3 = DirectorTool$Wonderjs.runWithDefaultTime(state$2); return Curry._2(Wonder_jest.Expect[/* Operators */25][/* = */5], Wonder_jest.Expect[/* expect */0](PerspectiveCameraProjectionAPI$Wonderjs.unsafeGetPerspectiveCameraProjectionPMatrix(perspectiveCameraProjection, state$3)), new Float32Array(/* array */[ 1.7320508075688776, 0, 0, 0, 0, 1.7320508075688776, 0, 0, 0, 0, -1.0004000800160033, -1, 0, 0, -0.40008001600320064, 0 ])); })); return Wonder_jest.test("test mark dirty", (function (param) { var match = CameraTool$Wonderjs.createCameraGameObjectWithoutAspect(state[0]); var cameraProjection1 = match[3][1]; var __x = SettingTool$Wonderjs.buildFakeCanvasWithSize(SettingTool$Wonderjs.buildFakeGl(sandbox), sandbox, undefined, 100, 150, /* () */0); var state$1 = ViewTool$Wonderjs.setCanvas(__x, match[0]); var state$2 = DirectorTool$Wonderjs.runWithDefaultTime(state$1); var __x$1 = SettingTool$Wonderjs.buildFakeCanvasWithSize(SettingTool$Wonderjs.buildFakeGl(sandbox), sandbox, undefined, 200, 150, /* () */0); var state$3 = ViewTool$Wonderjs.setCanvas(__x$1, state$2); var state$4 = PerspectiveCameraProjectionAPI$Wonderjs.markPerspectiveCameraProjectionDirty(cameraProjection1, state$3); var state$5 = DirectorTool$Wonderjs.runWithDefaultTime(state$4); return Curry._2(Wonder_jest.Expect[/* Operators */25][/* = */5], Wonder_jest.Expect[/* expect */0](PerspectiveCameraProjectionTool$Wonderjs.unsafeGetPMatrix(cameraProjection1, state$5)), new Float32Array(/* array */[ 1.299038052558899, 0, 0, 0, 0, 1.7320507764816284, 0, 0, 0, 0, -1.0002000331878662, -1, 0, 0, -0.20002000033855438, 0 ])); })); })); Wonder_jest.describe("update arcballCameraController", (function (param) { var _prepare = function ($staropt$star, $staropt$star$1, $staropt$star$2, $staropt$star$3, $staropt$star$4, param) { var distance = $staropt$star !== undefined ? $staropt$star : 0; var phi = $staropt$star$1 !== undefined ? $staropt$star$1 : 1.57; var theta = $staropt$star$2 !== undefined ? $staropt$star$2 : 1.57; var target = $staropt$star$3 !== undefined ? $staropt$star$3 : /* tuple */[ 1, 2, 3 ]; var directionArray = $staropt$star$4 !== undefined ? $staropt$star$4 : /* array */[]; var state = TestTool$Wonderjs.initWithJobConfigWithoutBuildFakeDom(sandbox, undefined, undefined, undefined, undefined, undefined, NoWorkerJobConfigTool$Wonderjs.buildNoWorkerJobConfig(undefined, undefined, "\n [\n {\n \"name\": \"default\",\n \"jobs\": [\n {\n \"name\": \"update_camera\"\n }\n ]\n }\n ]\n ", undefined, "\n [\n {\n \"name\": \"update_camera\"\n }\n ]\n ", /* () */0), undefined, /* () */0); var match = ArcballCameraControllerTool$Wonderjs.createGameObject(state); var cameraController = match[3][0]; var state$1 = ArcballCameraControllerAPI$Wonderjs.setArcballCameraControllerTarget(cameraController, target, ArcballCameraControllerAPI$Wonderjs.setArcballCameraControllerTheta(cameraController, theta, ArcballCameraControllerAPI$Wonderjs.setArcballCameraControllerPhi(cameraController, phi, ArcballCameraControllerAPI$Wonderjs.setArcballCameraControllerDistance(cameraController, distance, ArcballCameraControllerAPI$Wonderjs.setArcballCameraControllerDirectionArray(cameraController, directionArray, match[0]))))); return /* tuple */[ state$1, match[2] ]; }; Wonder_jest.describe("update one arcballCameraController", (function (param) { return Wonder_jest.describe("update transform", (function (param) { Wonder_jest.describe("update localPosition", (function (param) { Wonder_jest.test("trigger point scale event", (function (param) { var match = _prepare(2.3, undefined, undefined, /* tuple */[ 1, 2, 3 ], undefined, /* () */0); var state = NoWorkerJobTool$Wonderjs.execLoopJobs(match[0]); return Curry._2(Wonder_jest.Expect[/* Operators */25][/* = */5], Wonder_jest.Expect[/* expect */0](Vector3Tool$Wonderjs.truncate(2, TransformAPI$Wonderjs.getTransformLocalPosition(match[1], state))), /* tuple */[ 1, 2, 5.3 ]); })); Wonder_jest.test("trigger keydown event", (function (param) { var match = _prepare(undefined, undefined, undefined, /* tuple */[ 1, 2, 3 ], /* array */[ /* Right */1, /* Up */2 ], /* () */0); var state = NoWorkerJobTool$Wonderjs.execLoopJobs(match[0]); return Curry._2(Wonder_jest.Expect[/* Operators */25][/* = */5], Wonder_jest.Expect[/* expect */0](Vector3Tool$Wonderjs.truncate(2, TransformAPI$Wonderjs.getTransformLocalPosition(match[1], state))), /* tuple */[ 2, 3, 3.05 ]); })); Wonder_jest.test("trigger point scale and keydown event", (function (param) { var match = _prepare(2.3, undefined, undefined, /* tuple */[ 1, 2, 3 ], /* array */[ /* Left */0, /* Down */3 ], /* () */0); var state = NoWorkerJobTool$Wonderjs.execLoopJobs(match[0]); return Curry._2(Wonder_jest.Expect[/* Operators */25][/* = */5], Wonder_jest.Expect[/* expect */0](Vector3Tool$Wonderjs.truncate(2, TransformAPI$Wonderjs.getTransformLocalPosition(match[1], state))), /* tuple */[ 0, 1, 5.3 ]); })); return Wonder_jest.test("trigger point drag and keydown event", (function (param) { var match = _prepare(undefined, 1, 0.5, /* tuple */[ 1, 2, 3 ], /* array */[ /* Left */0, /* Up */2 ], /* () */0); var state = NoWorkerJobTool$Wonderjs.execLoopJobs(match[0]); return Curry._2(Wonder_jest.Expect[/* Operators */25][/* = */5], Wonder_jest.Expect[/* expect */0](Vector3Tool$Wonderjs.truncate(2, TransformAPI$Wonderjs.getTransformLocalPosition(match[1], state))), /* tuple */[ 0.01, 3.04, 3.02 ]); })); })); return Wonder_jest.test("lookAt target", (function (param) { var match = _prepare(2.5, 1, 0.5, /* tuple */[ 1, 2, 3 ], undefined, /* () */0); var state = NoWorkerJobTool$Wonderjs.execLoopJobs(match[0]); return Curry._2(Wonder_jest.Expect[/* Operators */25][/* = */5], Wonder_jest.Expect[/* expect */0](TransformAPI$Wonderjs.getTransformRotation(match[1], state)), /* tuple */[ -0.4895463742519966, 0.24214243964541454, 0.14363681885111765, 0.8252756113563703 ]); })); })); })); return Wonder_jest.describe("update two arcballCameraController", (function (param) { return Wonder_jest.test("set localPosition", (function (param) { var match = _prepare(2.5, 1, 0.5, /* tuple */[ 1, 2, 3 ], undefined, /* () */0); var match$1 = ArcballCameraControllerTool$Wonderjs.createGameObject(match[0]); var state = NoWorkerJobTool$Wonderjs.execLoopJobs(match$1[0]); return Curry._2(Wonder_jest.Expect[/* Operators */25][/* = */5], Wonder_jest.Expect[/* expect */0](/* tuple */[ Vector3Tool$Wonderjs.truncate(3, TransformAPI$Wonderjs.getTransformLocalPosition(match[1], state)), Vector3Tool$Wonderjs.truncate(3, TransformAPI$Wonderjs.getTransformLocalPosition(match$1[2], state)) ]), /* tuple */[ /* tuple */[ 1.648, 4.194, 4.009 ], /* tuple */[ 0, 0, 10 ] ]); })); })); })); return Wonder_jest.describe("update flyCameraController", (function (param) { var _prepare = function ($staropt$star, $staropt$star$1, $staropt$star$2, param) { var eulerAngleDiff = $staropt$star !== undefined ? $staropt$star : /* record */[ /* diffX */0, /* diffY */0 ]; var translationDiff = $staropt$star$1 !== undefined ? $staropt$star$1 : /* tuple */[ 0, 0, 0 ]; var directionArray = $staropt$star$2 !== undefined ? $staropt$star$2 : /* array */[]; var state = TestTool$Wonderjs.initWithJobConfigWithoutBuildFakeDom(sandbox, undefined, undefined, undefined, undefined, undefined, NoWorkerJobConfigTool$Wonderjs.buildNoWorkerJobConfig(undefined, undefined, "\n [\n {\n \"name\": \"default\",\n \"jobs\": [\n {\n \"name\": \"update_camera\"\n }\n ]\n }\n ]\n ", undefined, "\n [\n {\n \"name\": \"update_camera\"\n }\n ]\n ", /* () */0), undefined, /* () */0); var match = FlyCameraControllerTool$Wonderjs.createGameObject(state); var cameraController = match[3][0]; var state$1 = FlyCameraControllerTool$Wonderjs.setTranslationDiff(cameraController, translationDiff, FlyCameraControllerTool$Wonderjs.setEulerAngleDiff(cameraController, eulerAngleDiff, FlyCameraControllerAPI$Wonderjs.setFlyCameraControllerDirectionArray(cameraController, directionArray, FlyCameraControllerAPI$Wonderjs.setFlyCameraControllerWheelSpeed(cameraController, 2.5, FlyCameraControllerAPI$Wonderjs.setFlyCameraControllerMoveSpeed(cameraController, 1.2, match[0]))))); return /* tuple */[ state$1, match[2], cameraController ]; }; Wonder_jest.describe("update one flyCameraController", (function (param) { Wonder_jest.describe("update transform localEulerAngle", (function (param) { return Wonder_jest.describe("trigger point drag event", (function (param) { Wonder_jest.describe("get localEulerAngle from map", (function (param) { Wonder_jest.test("if has localEulerAngle in map, get it", (function (param) { var match = _prepare(/* record */[ /* diffX */5.2, /* diffY */6.2 ], undefined, undefined, /* () */0); var transform = match[1]; var localEulerAngles = /* tuple */[ 1, 2, 3 ]; var match$1 = RotateFlyCameraControllerMainService$Wonderjs.getLocalEulerAngleOrInit(transform, FlyCameraControllerTool$Wonderjs.setLocalEulerAngle(transform, localEulerAngles, match[0])); var match$2 = match$1[0]; return Curry._2(Wonder_jest.Expect[/* Operators */25][/* = */5], Wonder_jest.Expect[/* expect */0](Vector3Tool$Wonderjs.truncate(3, /* tuple */[ match$2[0], match$2[1], match$2[2] ])), localEulerAngles); })); return Wonder_jest.test("else, get localEulerAngle from engine and store in map", (function (param) { var match = _prepare(undefined, undefined, undefined, /* () */0); var transform = match[1]; var localEulerAngles = /* tuple */[ 1, 2, 3 ]; var match$1 = RotateFlyCameraControllerMainService$Wonderjs.getLocalEulerAngleOrInit(transform, TransformAPI$Wonderjs.setTransformLocalEulerAngles(transform, localEulerAngles, match[0])); var match$2 = match$1[0]; return Curry._2(Wonder_jest.Expect[/* Operators */25][/* = */5], Wonder_jest.Expect[/* expect */0](/* tuple */[ Vector3Tool$Wonderjs.truncate(3, /* tuple */[ match$2[0], match$2[1], match$2[2] ]), Vector3Tool$Wonderjs.truncate(3, OptionService$Wonderjs.unsafeGet(FlyCameraControllerTool$Wonderjs.getLocalEulerAngle(transform, match$1[1]))) ]), /* tuple */[ localEulerAngles, localEulerAngles ]); })); })); return Wonder_jest.describe("calc the new localEulerAngle with diffValue and localEulerAngle in map and set to map and engine", (function (param) { var _judgeLocalEulerAngle = function (param, param$1, getNewEulerAngleFunc) { var z = param$1[2]; var y = param$1[1]; var x = param$1[0]; var diffY = param[1]; var diffX = param[0]; var match = _prepare(/* record */[ /* diffX */diffX, /* diffY */diffY ], undefined, undefined, /* () */0); var transform = match[1]; var state = FlyCameraControllerTool$Wonderjs.setLocalEulerAngle(transform, /* tuple */[ x, y, z ], match[0]); var state$1 = NoWorkerJobTool$Wonderjs.execLoopJobs(state); return Curry._2(Wonder_jest.Expect[/* Operators */25][/* = */5], Wonder_jest.Expect[/* expect */0](Vector3Tool$Wonderjs.truncate(3, Curry._2(getNewEulerAngleFunc, transform, state$1))), Vector3Tool$Wonderjs.truncate(3, /* tuple */[ x - diffX, y - diffY, z ])); }; Wonder_jest.test("set the new localEulerAngle in localEulerAngleMap", (function (param) { return _judgeLocalEulerAngle(/* tuple */[ 1.2, 3.4 ], /* tuple */[ 1, 2, 3 ], (function (transform, state) { return OptionService$Wonderjs.unsafeGet(FlyCameraControllerTool$Wonderjs.getLocalEulerAngle(transform, state)); })); })); return Wonder_jest.test("set the new localEulerAngle in engine", (function (param) { return _judgeLocalEulerAngle(/* tuple */[ 1.2, 3.4 ], /* tuple */[ 1, 2, 3 ], TransformAPI$Wonderjs.getTransformLocalEulerAngles); })); })); })); })); Wonder_jest.describe("update transform localPosition", (function (param) { Wonder_jest.test("trigger point scale event", (function (param) { var match = _prepare(undefined, /* tuple */[ 0, 0, 12 ], undefined, /* () */0); var transform = match[1]; var state = NoWorkerJobTool$Wonderjs.execLoopJobs(TransformAPI$Wonderjs.setTransformLocalEulerAngles(transform, /* tuple */[ 45, 20, 34 ], match[0])); return Curry._2(Wonder_jest.Expect[/* Operators */25][/* = */5], Wonder_jest.Expect[/* expect */0](Vector3Tool$Wonderjs.truncate(3, TransformAPI$Wonderjs.getTransformLocalPosition(transform, state))), /* tuple */[ 7.151, -5.412, 7.974 ]); })); Wonder_jest.test("trigger keydown event", (function (param) { var match = _prepare(undefined, undefined, /* array */[ /* Left */0, /* Up */2 ], /* () */0); var state = NoWorkerJobTool$Wonderjs.execLoopJobs(match[0]); return Curry._2(Wonder_jest.Expect[/* Operators */25][/* = */5], Wonder_jest.Expect[/* expect */0](Vector3Tool$Wonderjs.truncate(3, TransformAPI$Wonderjs.getTransformLocalPosition(match[1], state))), /* tuple */[ -1.2, 1.2, 0 ]); })); return Wonder_jest.test("tigger point scale and keydown event", (function (param) { var match = _prepare(undefined, /* tuple */[ 0, 0, -2.5 ], /* array */[ /* Left */0, /* Front */4 ], /* () */0); var state = NoWorkerJobTool$Wonderjs.execLoopJobs(match[0]); return Curry._2(Wonder_jest.Expect[/* Operators */25][/* = */5], Wonder_jest.Expect[/* expect */0](Vector3Tool$Wonderjs.truncate(3, TransformAPI$Wonderjs.getTransformLocalPosition(match[1], state))), /* tuple */[ -1.2, 0, -3.7 ]); })); })); return Wonder_jest.describe("update transform localPosition and localEulerAngle", (function (param) { return Wonder_jest.test("trigger keydown and point drag event", (function (param) { var match = _prepare(/* record */[ /* diffX */0, /* diffY */0 ], /* tuple */[ 1.5, 0, 0 ], undefined, /* () */0); var transform = match[1]; var state = NoWorkerJobTool$Wonderjs.execLoopJobs(TransformAPI$Wonderjs.setTransformLocalEulerAngles(transform, /* tuple */[ 45, 20, 34 ], match[0])); var localPos1 = Vector3Tool$Wonderjs.truncate(3, TransformAPI$Wonderjs.getTransformLocalPosition(transform, state)); var match$1 = _prepare(/* record */[ /* diffX */10, /* diffY */15 ], /* tuple */[ 1.5, 0, 0 ], undefined, /* () */0); var transform$1 = match$1[1]; var state$1 = NoWorkerJobTool$Wonderjs.execLoopJobs(TransformAPI$Wonderjs.setTransformLocalEulerAngles(transform$1, /* tuple */[ 45, 20, 34 ], match$1[0])); return Curry._2(Wonder_jest.Expect[/* Operators */25][/* != */7], Wonder_jest.Expect[/* expect */0](Vector3Tool$Wonderjs.truncate(3, TransformAPI$Wonderjs.getTransformLocalPosition(transform$1, state$1))), localPos1); })); })); })); return Wonder_jest.describe("test reset data", (function (param) { return Wonder_jest.test("reset flyCamera diff value after update camera", (function (param) { var match = _prepare(undefined, /* tuple */[ 1.5, 0, 0 ], undefined, /* () */0); var cameraController = match[2]; var state = NoWorkerJobTool$Wonderjs.execLoopJobs(match[0]); return Curry._2(Wonder_jest.Expect[/* Operators */25][/* = */5], Wonder_jest.Expect[/* expect */0](/* tuple */[ FlyCameraControllerTool$Wonderjs.unsafeGetTranslationDiff(cameraController, state), FlyCameraControllerTool$Wonderjs.unsafeGetEulerAngleDiff(cameraController, state) ]), /* tuple */[ /* tuple */[ 0, 0, 0 ], /* record */[ /* diffX */0, /* diffY */0 ] ]); })); })); })); })); /* Not a pure module */