Skip to content

Commit

Permalink
Merge pull request #26 from Wonder-Technology/flyCamera
Browse files Browse the repository at this point in the history
Fly camera
  • Loading branch information
yyc-git committed Jun 17, 2019
2 parents 4ae5f96 + 35ec03f commit d24f54d
Show file tree
Hide file tree
Showing 14 changed files with 106 additions and 37 deletions.
2 changes: 1 addition & 1 deletion package.json
@@ -1,6 +1,6 @@
{
"name": "wonder.js",
"version": "1.1.0",
"version": "1.2.0-alpha.1",
"authors": "Wonder",
"description": "3d webgl engine",
"homepage": "https://github.com/Wonder-Technology/Wonder.js",
Expand Down
6 changes: 6 additions & 0 deletions src/Index.re
Expand Up @@ -102,6 +102,12 @@ let unbindFlyCameraControllerEvent = FlyCameraControllerAPI.unbindFlyCameraContr

let bindFlyCameraControllerEvent = FlyCameraControllerAPI.bindFlyCameraControllerEvent;

let setFlyCameraControllerDirectionArray = FlyCameraControllerAPI.setFlyCameraControllerDirectionArray;

let hasFlyCameraControllerDirection = FlyCameraControllerAPI.hasFlyCameraControllerDirection;

let unsafeGetFlyCameraControllerDirectionArray = FlyCameraControllerAPI.unsafeGetFlyCameraControllerDirectionArray;

let setFlyCameraControllerRotateSpeed = FlyCameraControllerAPI.setFlyCameraControllerRotateSpeed;

let unsafeGetFlyCameraControllerRotateSpeed = FlyCameraControllerAPI.unsafeGetFlyCameraControllerRotateSpeed;
Expand Down
17 changes: 17 additions & 0 deletions src/api/camera_controller/FlyCameraControllerAPI.re 100644 → 100755
Expand Up @@ -57,6 +57,23 @@ let setFlyCameraControllerRotateSpeed =
setRotateSpeed(cameraController, value, state.flyCameraControllerRecord),
};

let unsafeGetFlyCameraControllerDirectionArray = (cameraController, state) =>
state.flyCameraControllerRecord |> unsafeGetDirectionArray(cameraController);

let hasFlyCameraControllerDirection = (cameraController, state) =>
state.flyCameraControllerRecord |> hasDirection(cameraController);

let setFlyCameraControllerDirectionArray =
(cameraController, directionArray, state) => {
...state,
flyCameraControllerRecord:
setDirectionArray(
cameraController,
directionArray,
state.flyCameraControllerRecord,
),
};

let bindFlyCameraControllerEvent = (cameraController, state) =>
EventFlyCameraControllerMainService.bindEvent(cameraController, state);

Expand Down
Expand Up @@ -13,6 +13,7 @@ let _setDefaultValue =
rotateSpeedMap,
eulerAngleDiffMap,
translationDiffMap,
directionArrayMap,
} as record: flyCameraControllerRecord,
) => {
...record,
Expand All @@ -31,6 +32,9 @@ let _setDefaultValue =
translationDiffMap:
translationDiffMap
|> WonderCommonlib.MutableSparseMapService.set(index, (0., 0., 0.)),
directionArrayMap:
directionArrayMap
|> WonderCommonlib.MutableSparseMapService.set(index, [||]),
};

let create =
Expand Down
Expand Up @@ -116,13 +116,29 @@ let setTranslationDiff =
),
};

let getDirectionArray = (record: flyCameraControllerRecord) =>
record.directionArray;
let unsafeGetDirectionArray =
(cameraController, record: flyCameraControllerRecord) =>
WonderCommonlib.MutableSparseMapService.get(
cameraController,
record.directionArrayMap,
)
|> OptionService.unsafeGet;

let hasDirection = (record: flyCameraControllerRecord) =>
record.directionArray |> ArrayService.hasItem;
let hasDirection = (cameraController, record: flyCameraControllerRecord) =>
WonderCommonlib.MutableSparseMapService.get(
cameraController,
record.directionArrayMap,
)
|> OptionService.unsafeGet
|> ArrayService.hasItem;

let setDirectionArray = (directionArray, record: flyCameraControllerRecord) => {
let setDirectionArray =
(cameraController, directionArray, record: flyCameraControllerRecord) => {
...record,
directionArray,
directionArrayMap:
WonderCommonlib.MutableSparseMapService.set(
cameraController,
directionArray,
record.directionArrayMap,
),
};
Expand Up @@ -19,9 +19,9 @@ let create = () => {
rotateSpeedMap: WonderCommonlib.MutableSparseMapService.createEmpty(),
eulerAngleDiffMap: WonderCommonlib.MutableSparseMapService.createEmpty(),
translationDiffMap: WonderCommonlib.MutableSparseMapService.createEmpty(),
directionArrayMap: WonderCommonlib.MutableSparseMapService.createEmpty(),
gameObjectMap: WonderCommonlib.MutableSparseMapService.createEmpty(),
disposedIndexArray: WonderCommonlib.ArrayService.createEmpty(),
directionArray: WonderCommonlib.ArrayService.createEmpty(),
};

let deepCopyForRestore =
Expand All @@ -41,7 +41,7 @@ let deepCopyForRestore =
translationDiffMap,
gameObjectMap,
disposedIndexArray,
directionArray,
directionArrayMap,
}: flyCameraControllerRecord,
) => {
index,
Expand Down Expand Up @@ -70,7 +70,8 @@ let deepCopyForRestore =
eulerAngleDiffMap |> WonderCommonlib.MutableSparseMapService.copy,
translationDiffMap:
translationDiffMap |> WonderCommonlib.MutableSparseMapService.copy,
directionArrayMap:
directionArrayMap |> WonderCommonlib.MutableSparseMapService.copy,
gameObjectMap: gameObjectMap |> WonderCommonlib.MutableSparseMapService.copy,
disposedIndexArray: disposedIndexArray |> Js.Array.copy,
directionArray: directionArray |> Js.Array.copy,
};
Expand Up @@ -159,7 +159,8 @@ let _moveSpecificDirection =
{flyCameraControllerRecord, gameObjectRecord} as state,
) => {
let directionArray =
OperateFlyCameraControllerService.getDirectionArray(
OperateFlyCameraControllerService.unsafeGetDirectionArray(
cameraController,
flyCameraControllerRecord,
);

Expand All @@ -182,7 +183,10 @@ let _moveSpecificDirection =
...state,
flyCameraControllerRecord:
flyCameraControllerRecord
|> OperateFlyCameraControllerService.setDirectionArray(directionArray),
|> OperateFlyCameraControllerService.setDirectionArray(
cameraController,
directionArray,
),
};
};

Expand All @@ -196,7 +200,8 @@ let _staticSpecificDirection =
{flyCameraControllerRecord, gameObjectRecord} as state,
) => {
let directionArray =
OperateFlyCameraControllerService.getDirectionArray(
OperateFlyCameraControllerService.unsafeGetDirectionArray(
cameraController,
flyCameraControllerRecord,
);

Expand All @@ -219,7 +224,10 @@ let _staticSpecificDirection =
...state,
flyCameraControllerRecord:
flyCameraControllerRecord
|> OperateFlyCameraControllerService.setDirectionArray(directionArray),
|> OperateFlyCameraControllerService.setDirectionArray(
cameraController,
directionArray,
),
};
};

Expand Down
Expand Up @@ -11,8 +11,12 @@ let _getTranslationPosition = (cameraController, flyCameraControllerRecord) => {
);

let positionTuple =
OperateFlyCameraControllerService.hasDirection(flyCameraControllerRecord) ?
OperateFlyCameraControllerService.getDirectionArray(
OperateFlyCameraControllerService.hasDirection(
cameraController,
flyCameraControllerRecord,
) ?
OperateFlyCameraControllerService.unsafeGetDirectionArray(
cameraController,
flyCameraControllerRecord,
)
|> WonderCommonlib.ArrayService.reduceOneParam(
Expand Down
5 changes: 4 additions & 1 deletion src/service/state/main/data/StateDataMainType.re
Expand Up @@ -190,7 +190,10 @@ and flyCameraControllerRecord = {
WonderCommonlib.MutableSparseMapService.t(PositionType.position),
gameObjectMap,
disposedIndexArray: array(component),
directionArray: array(FlyCameraControllerType.direction),
directionArrayMap:
WonderCommonlib.MutableSparseMapService.t(
array(FlyCameraControllerType.direction),
),
}
and arcballCameraControllerRecord = {
index: int,
Expand Down
5 changes: 4 additions & 1 deletion test/integration/no_worker/job/loop/updateCameraJob_test.re
Expand Up @@ -337,7 +337,10 @@ let _ =
cameraController,
2.5,
)
|> FlyCameraControllerTool.setDirectionArray(directionArray)
|> FlyCameraControllerAPI.setFlyCameraControllerDirectionArray(
cameraController,
directionArray,
)
|> FlyCameraControllerTool.setEulerAngleDiff(
cameraController,
eulerAngleDiff,
Expand Down
11 changes: 0 additions & 11 deletions test/tool/service/camera_controller/FlyCameraControllerTool.re
Expand Up @@ -77,17 +77,6 @@ let setFlyCameraControllerData = (cameraController, state) => {
(state, (moveSpeed, rotateSpeed, wheelSpeed));
};

let getDirectionArray = state =>
state.flyCameraControllerRecord.directionArray;

let setDirectionArray = (array, {flyCameraControllerRecord} as state) => {
...state,
flyCameraControllerRecord: {
...flyCameraControllerRecord,
directionArray: array,
},
};

let addPointDragStartEventHandleFunc =
(cameraController, handleFunc, {flyCameraControllerRecord} as state) => {
...state,
Expand Down
Expand Up @@ -350,7 +350,12 @@ let _ =
);
let state = EventTool.restore(state);

state |> getDirectionArray |> Js.Array.length |> expect == 0;
state
|> FlyCameraControllerAPI.unsafeGetFlyCameraControllerDirectionArray(
cameraController,
)
|> Js.Array.length
|> expect == 0;
});

describe("else, add direction into directionArray", () => {
Expand All @@ -368,7 +373,11 @@ let _ =
let state =
MainStateTool.unsafeGetState() |> EventTool.restore;

state |> getDirectionArray |> expect == [|direction|];
state
|> FlyCameraControllerAPI.unsafeGetFlyCameraControllerDirectionArray(
cameraController,
)
|> expect == [|direction|];
};

test("test move left", () =>
Expand Down Expand Up @@ -413,9 +422,12 @@ let _ =
);
let state =
MainStateTool.unsafeGetState() |> EventTool.restore;
let directionArray = state |> getDirectionArray;

directionArray |> expect == [|direction|];
state
|> FlyCameraControllerAPI.unsafeGetFlyCameraControllerDirectionArray(
cameraController,
)
|> expect == [|direction|];
})
);

Expand Down Expand Up @@ -444,9 +456,11 @@ let _ =
let state =
MainStateTool.unsafeGetState() |> EventTool.restore;

let directionArray = state |> getDirectionArray;

directionArray |> expect == [|direction1, direction2|];
state
|> FlyCameraControllerAPI.unsafeGetFlyCameraControllerDirectionArray(
cameraController,
)
|> expect == [|direction1, direction2|];
};

test("test move left and up", () =>
Expand Down Expand Up @@ -515,7 +529,11 @@ let _ =
let state =
MainStateTool.unsafeGetState() |> EventTool.restore;

state |> getDirectionArray |> expect == [|direction|];
state
|> FlyCameraControllerAPI.unsafeGetFlyCameraControllerDirectionArray(
cameraController,
)
|> expect == [|direction|];
};

test("test keydown left and up, then keyup left", () =>
Expand Down
Empty file modified webpack.config.js 100644 → 100755
Empty file.
Empty file modified yarn.lock 100644 → 100755
Empty file.

0 comments on commit d24f54d

Please sign in to comment.