Skip to content

Commit 000bde0

Browse files
committed
fix(clone): fix "clone transform": not mark dirty in CloneTransformMainService.re
1 parent d798390 commit 000bde0

File tree

2 files changed

+55
-33
lines changed

2 files changed

+55
-33
lines changed

src/service/state/main/transform/CloneTransformMainService.re

Lines changed: 32 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -6,49 +6,56 @@ let handleCloneComponent =
66
(
77
sourceComponent: transform,
88
countRangeArr: array(int),
9-
{settingRecord, typeArrayPoolRecord} as state
9+
{settingRecord, typeArrayPoolRecord} as state,
1010
) => {
1111
let componentArr = [||];
1212
let transformRecord = state |> RecordTransformMainService.getRecord;
1313
let localPosition =
1414
ModelMatrixTransformService.getLocalPositionTuple(
1515
sourceComponent,
16-
transformRecord.localPositions
16+
transformRecord.localPositions,
1717
);
1818
let localRotation =
1919
ModelMatrixTransformService.getLocalRotationTuple(
2020
sourceComponent,
21-
transformRecord.localRotations
21+
transformRecord.localRotations,
2222
);
2323
let localScale =
2424
ModelMatrixTransformService.getLocalScaleTuple(
2525
sourceComponent,
26-
transformRecord.localScales
26+
transformRecord.localScales,
2727
);
2828
let (transformRecord, componentArr) =
2929
countRangeArr
3030
|> WonderCommonlib.ArrayService.reduceOneParam(
31-
[@bs]
32-
(
33-
((transformRecord, componentArr), _) => {
34-
let (transformRecord, index) =
35-
CreateTransformMainService.createWithoutMarkNotDirtyWithRecord(
36-
settingRecord,
37-
transformRecord
38-
);
39-
(
40-
transformRecord
41-
|> ModelMatrixTransformService.setLocalPositionByTuple(index, localPosition)
42-
|> ModelMatrixTransformService.setLocalRotationByTuple(index, localRotation)
43-
|> ModelMatrixTransformService.setLocalScaleByTuple(index, localScale)
44-
|> DirtyTransformService.mark(index, true),
45-
componentArr |> ArrayService.push(index)
46-
)
47-
}
48-
),
49-
(transformRecord, [||])
31+
(. (transformRecord, componentArr), _) => {
32+
let (transformRecord, index) =
33+
CreateTransformMainService.createWithoutMarkNotDirtyWithRecord(
34+
settingRecord,
35+
transformRecord,
36+
);
37+
(
38+
transformRecord
39+
|> ModelMatrixTransformService.setLocalPositionByTuple(
40+
index,
41+
localPosition,
42+
)
43+
|> ModelMatrixTransformService.setLocalRotationByTuple(
44+
index,
45+
localRotation,
46+
)
47+
|> ModelMatrixTransformService.setLocalScaleByTuple(
48+
index,
49+
localScale,
50+
),
51+
componentArr |> ArrayService.push(index),
52+
);
53+
},
54+
(transformRecord, [||]),
5055
);
5156
state.transformRecord =
52-
Some(transformRecord |> DirtyTransformService.mark(sourceComponent, true));
53-
(state, componentArr)
57+
Some(
58+
transformRecord |> DirtyTransformService.mark(sourceComponent, true),
59+
);
60+
(state, componentArr);
5461
};

test/integration/no_worker/core/clone/cloneGameObject_test.re

Lines changed: 23 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ let _ =
1111
let state = ref(MainStateTool.createState());
1212
let _cloneGameObject = (gameObject, count, state) =>
1313
CloneTool.cloneGameObject(gameObject, count, false, state);
14-
let _getClonedTransformMatrixDataArr = (gameObject, count, state) => {
14+
let _cloneAndGetClonedTransformMatrixDataArr = (gameObject, count, state) => {
1515
let (state, clonedGameObjectArr) =
1616
_cloneGameObject(gameObject, count, state);
1717
(
@@ -1329,12 +1329,13 @@ let _ =
13291329
});
13301330
});
13311331
});
1332+
13321333
describe("test clone transform component", () => {
13331334
let _prepare = () => {
13341335
let (state, gameObject1, transform1) =
13351336
GameObjectTool.createGameObject(state^);
13361337
let (clonedGameObjectArr, clonedTransformArr) =
1337-
_getClonedTransformMatrixDataArr(gameObject1, 2, state);
1338+
_cloneAndGetClonedTransformMatrixDataArr(gameObject1, 2, state);
13381339
(
13391340
state,
13401341
gameObject1,
@@ -1358,7 +1359,7 @@ let _ =
13581359
let pos1 = (1., 2., 3.);
13591360
let state = state |> setTransformLocalPosition(transform1, pos1);
13601361
let (_, clonedTransformArr) =
1361-
_getClonedTransformMatrixDataArr(gameObject1, 2, state);
1362+
_cloneAndGetClonedTransformMatrixDataArr(gameObject1, 2, state);
13621363
clonedTransformArr
13631364
|> Js.Array.map(transform =>
13641365
getTransformLocalPosition(transform, state)
@@ -1376,7 +1377,7 @@ let _ =
13761377
let state =
13771378
state |> setTransformLocalPosition(transform1, pos1);
13781379
let (_, clonedTransformArr) =
1379-
_getClonedTransformMatrixDataArr(gameObject1, 2, state);
1380+
_cloneAndGetClonedTransformMatrixDataArr(gameObject1, 2, state);
13801381
let pos2 = (2., 4., 6.);
13811382
let state =
13821383
state
@@ -1404,7 +1405,7 @@ let _ =
14041405
let state =
14051406
state |> setTransformLocalRotation(transform1, rotation1);
14061407
let (_, clonedTransformArr) =
1407-
_getClonedTransformMatrixDataArr(gameObject1, 2, state);
1408+
_cloneAndGetClonedTransformMatrixDataArr(gameObject1, 2, state);
14081409
clonedTransformArr
14091410
|> Js.Array.map(transform =>
14101411
getTransformLocalRotation(transform, state)
@@ -1423,7 +1424,7 @@ let _ =
14231424
let scale1 = (1., 2., 3.);
14241425
let state = state |> setTransformLocalScale(transform1, scale1);
14251426
let (_, clonedTransformArr) =
1426-
_getClonedTransformMatrixDataArr(gameObject1, 2, state);
1427+
_cloneAndGetClonedTransformMatrixDataArr(gameObject1, 2, state);
14271428
clonedTransformArr
14281429
|> Js.Array.map(transform =>
14291430
getTransformLocalScale(transform, state)
@@ -1432,6 +1433,20 @@ let _ =
14321433
})
14331434
);
14341435

1436+
test("mark cloned transform dirty", () => {
1437+
open TransformAPI;
1438+
let (state, gameObject1, transform1) =
1439+
GameObjectTool.createGameObject(state^);
1440+
1441+
let (_, clonedTransformArr) =
1442+
_cloneAndGetClonedTransformMatrixDataArr(gameObject1, 2, state);
1443+
1444+
clonedTransformArr
1445+
|> Js.Array.map(transform
1446+
=> TransformTool.isDirty(transform, state))
1447+
|> expect == [|true, true|];
1448+
});
1449+
14351450
test("add cloned transform's gameObject to map", () => {
14361451
let (state, _, _, clonedGameObjectArr, clonedTransformArr) =
14371452
_prepare();
@@ -1879,7 +1894,7 @@ let _ =
18791894
) =
18801895
_prepare();
18811896
let (_, clonedTransformArr) =
1882-
_getClonedTransformMatrixDataArr(gameObject1, 2, state);
1897+
_cloneAndGetClonedTransformMatrixDataArr(gameObject1, 2, state);
18831898
(
18841899
state |> TransformTool.getTransformParent(clonedTransformArr[0]),
18851900
state |> TransformTool.getTransformParent(clonedTransformArr[1]),
@@ -1933,7 +1948,7 @@ let _ =
19331948
let state =
19341949
state |> setTransformLocalPosition(transform4, pos4);
19351950
let (clonedGameObjectArr, clonedTransformArr) =
1936-
_getClonedTransformMatrixDataArr(gameObject1, 1, state);
1951+
_cloneAndGetClonedTransformMatrixDataArr(gameObject1, 1, state);
19371952
clonedTransformArr
19381953
|> Js.Array.map(transform =>
19391954
getTransformPosition(transform, state)

0 commit comments

Comments
 (0)