Skip to content

Commit 1939aca

Browse files
committed
feat(asset-bundle): script api add initAllSABGameObjects,addSABSceneGameObjectChildrenToScene
add ImportABSystem_test test; use.html use the new api;
1 parent 4df279d commit 1939aca

File tree

7 files changed

+153
-17
lines changed

7 files changed

+153
-17
lines changed

examples/asset_bundle/use.html

Lines changed: 11 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -173,21 +173,22 @@
173173
var state = api.unsafeGetState();
174174

175175

176-
var allGameObjects = api.getAllGameObjects(sceneGameObject, state);
177176

178-
var state =
179-
allGameObjects.reduce((state, gameObject) => {
180-
return api.initGameObject(
181-
gameObject, state
182-
);
183-
}, state);
177+
var state = api.initAllSABGameObjects(
178+
sceneGameObject, state
179+
);
184180

185181

186-
var state =
187-
api.disposeSceneAllChildren(state);
182+
// var state =
183+
// api.disposeSceneAllChildren(state);
184+
185+
// var state =
186+
// api.setSABSceneGameObjectToBeScene(sceneGameObject, state);
187+
188188

189189
var state =
190-
api.setSABSceneGameObjectToBeScene(sceneGameObject, state);
190+
api.addSABSceneGameObjectChildrenToScene(sceneGameObject, state);
191+
191192

192193
api.setState(state);
193194
},

src/asset_bundle/import/ImportABSystem.re

Lines changed: 17 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -183,15 +183,28 @@ module RAB = {
183183
};
184184
};
185185

186-
let setSABSceneGameObjectToBeScene = (sceneGameObject, state) =>
187-
GameObjectSceneMainService.setSceneGameObject(sceneGameObject, state);
186+
let setSABSceneGameObjectToBeScene = (sabSceneGameObject, state) =>
187+
GameObjectSceneMainService.setSceneGameObject(sabSceneGameObject, state);
188+
189+
let initAllSABGameObjects = (sabSceneGameObject, state) =>
190+
state
191+
|> AllGameObjectMainService.getAllGameObjects(sabSceneGameObject)
192+
|> WonderCommonlib.ArrayService.reduceOneParam(
193+
(. state, gameObject) =>
194+
InitGameObjectMainService.initGameObject(gameObject, state),
195+
state,
196+
);
197+
198+
let addSABSceneGameObjectChildrenToScene = (sabSceneGameObject, state) =>
199+
state
200+
|> AllGameObjectMainService.getAllChildren(sabSceneGameObject)
201+
|> GameObjectSceneMainService.addChildren(_, state);
188202

189203
let disposeSceneAllChildren = state => {
190204
let scene = state |> GameObjectSceneMainService.getSceneGameObject;
191205

192206
state
193-
|> AllGameObjectMainService.getAllGameObjects(scene)
194-
|> Js.Array.sliceFrom(1)
207+
|> AllGameObjectMainService.getAllChildren(scene)
195208
|> WonderCommonlib.ArrayService.reduceOneParam(
196209
(. state, gameObject) =>
197210
state |> DisposeGameObjectMainService.deferDispose(gameObject),

src/service/state/main/api/script/RecordScriptAPIMainService.re

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -141,6 +141,18 @@ let create = () => {
141141
"disposeSceneAllChildren":
142142
(. state) => ImportABSystem.disposeSceneAllChildren(state),
143143
"setSABSceneGameObjectToBeScene":
144-
(. sceneGameObject, state) =>
145-
ImportABSystem.setSABSceneGameObjectToBeScene(sceneGameObject, state),
144+
(. sabSceneGameObject, state) =>
145+
ImportABSystem.setSABSceneGameObjectToBeScene(
146+
sabSceneGameObject,
147+
state,
148+
),
149+
"initAllSABGameObjects":
150+
(. sabSceneGameObject, state) =>
151+
ImportABSystem.initAllSABGameObjects(sabSceneGameObject, state),
152+
"addSABSceneGameObjectChildrenToScene":
153+
(. sabSceneGameObject, state) =>
154+
ImportABSystem.addSABSceneGameObjectChildrenToScene(
155+
sabSceneGameObject,
156+
state,
157+
),
146158
};

src/service/state/main/gameObject/AllGameObjectMainService.re

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,9 @@ let getAllGameObjects = (gameObject, state) => {
5252
);
5353
};
5454

55+
let getAllChildren = (gameObject, state) =>
56+
state |> getAllGameObjects(gameObject) |> Js.Array.sliceFrom(1);
57+
5558
let _getAllComponentsOfGameObject =
5659
(gameObject, getComponentFunc, {gameObjectRecord} as state) => {
5760
let (_, components) =

test/integration/no_worker/asset_bundle/tool/GenerateSABTool.re

100644100755
File mode changed.

test/tool/service/gameObject/GameObjectTool.re

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -364,4 +364,7 @@ let findGameObjectsByName = (targetGameObject, name, state) =>
364364

365365
let unsafeFindGameObjectByName = (targetGameObject, name, state) =>
366366
findGameObjectsByName(targetGameObject, name, state)
367-
|> ArrayService.unsafeGetFirst;
367+
|> ArrayService.unsafeGetFirst;
368+
369+
let isDeferDisposed = (gameObject, state) =>
370+
state.gameObjectRecord.disposedUidArray |> Js.Array.includes(gameObject);
Lines changed: 104 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,104 @@
1+
open Wonder_jest;
2+
3+
let _ =
4+
describe("ImportABSystem", () => {
5+
open Expect;
6+
open Expect.Operators;
7+
open Sinon;
8+
9+
let sandbox = getSandboxDefaultVal();
10+
let state = ref(CreateStateMainService.createState());
11+
12+
beforeEach(() => {
13+
sandbox := createSandbox();
14+
state := TestTool.init(~sandbox, ());
15+
});
16+
afterEach(() => restoreSandbox(refJsObjToSandbox(sandbox^)));
17+
18+
describe("setSABSceneGameObjectToBeScene", () =>
19+
test("set sab->scene gameObject to be scene", () => {
20+
let (state, gameObject) = GameObjectAPI.createGameObject(state^);
21+
22+
let state =
23+
ImportABSystem.setSABSceneGameObjectToBeScene(gameObject, state);
24+
25+
SceneAPI.getSceneGameObject(state) |> expect == gameObject;
26+
})
27+
);
28+
29+
describe("initAllSABGameObjects", () => {
30+
beforeEach(() =>
31+
state :=
32+
TestTool.initWithJobConfigWithoutBuildFakeDom(
33+
~sandbox,
34+
~noWorkerJobRecord=NoWorkerJobConfigTool.buildNoWorkerJobConfig(),
35+
(),
36+
)
37+
);
38+
39+
test("init all sab->gameObjects", () => {
40+
let (state, gameObject1, _, _) =
41+
InitLightMaterialJobTool.prepareGameObject(sandbox, state^);
42+
let (state, gameObject2, _, _) =
43+
InitLightMaterialJobTool.prepareGameObject(sandbox, state);
44+
let state =
45+
state |> GameObjectTool.addChild(gameObject1, gameObject2);
46+
let attachShader = createEmptyStubWithJsObjSandbox(sandbox);
47+
let state =
48+
state
49+
|> FakeGlTool.setFakeGl(
50+
FakeGlTool.buildFakeGl(~sandbox, ~attachShader, ()),
51+
);
52+
let state = AllMaterialTool.prepareForInit(state);
53+
54+
let state = ImportABSystem.initAllSABGameObjects(gameObject1, state);
55+
56+
attachShader |> getCallCount |> expect == 2;
57+
});
58+
});
59+
60+
describe("addSABSceneGameObjectChildrenToScene", () =>
61+
test("add sab->scene gameObject->children to scene", () => {
62+
let (state, gameObject1) = GameObjectAPI.createGameObject(state^);
63+
let (state, gameObject2) = GameObjectAPI.createGameObject(state);
64+
let state =
65+
state |> GameObjectTool.addChild(gameObject1, gameObject2);
66+
67+
let (state, gameObject3) = GameObjectAPI.createGameObject(state);
68+
69+
let state = state |> SceneAPI.addSceneChild(gameObject3);
70+
71+
let state =
72+
ImportABSystem.addSABSceneGameObjectChildrenToScene(
73+
gameObject1,
74+
state,
75+
);
76+
77+
GameObjectTool.getChildren(SceneAPI.getSceneGameObject(state), state)
78+
|> expect == [|gameObject3, gameObject2|];
79+
})
80+
);
81+
82+
describe("disposeSceneAllChildren", () =>
83+
test("dispose all scene->children", () => {
84+
let (state, gameObject1) = GameObjectAPI.createGameObject(state^);
85+
let (state, gameObject2) = GameObjectAPI.createGameObject(state);
86+
let state =
87+
state |> GameObjectTool.addChild(gameObject1, gameObject2);
88+
89+
let (state, gameObject3) = GameObjectAPI.createGameObject(state);
90+
91+
let state =
92+
state |> SceneAPI.addSceneChildren([|gameObject3, gameObject1|]);
93+
94+
let state = ImportABSystem.disposeSceneAllChildren(state);
95+
96+
(
97+
GameObjectTool.isDeferDisposed(gameObject1, state),
98+
GameObjectTool.isDeferDisposed(gameObject2, state),
99+
GameObjectTool.isDeferDisposed(gameObject3, state),
100+
)
101+
|> expect == (true, true, true);
102+
})
103+
);
104+
});

0 commit comments

Comments
 (0)