Skip to content

Commit 08939f7

Browse files
authored
refactor: use Three.LoadingManager to load assets (#78)
* refactor: use Three.LoadingManager to load assets * chore: stage window case folder name * chore: rename asset_bis to asset * ci: rename engine CI
1 parent da72a41 commit 08939f7

File tree

15 files changed

+49
-56
lines changed

15 files changed

+49
-56
lines changed

.github/workflows/workspace-engine.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
name: Mutex CI
1+
name: Engine CI
22

33
on:
44
push:

packages/engine/src/systems/GameInstance.ts

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ import * as THREE from "three";
44
// Import Internal Dependencies
55
import {
66
type GameRenderer
7-
} from "./renderers/index.js";
7+
} from "./rendering/index.js";
88
import {
99
type Scene
1010
} from "./Scene.js";
@@ -26,7 +26,6 @@ import {
2626
export interface GameInstanceOptions {
2727
enableOnExit?: boolean;
2828

29-
loadingManager?: THREE.LoadingManager;
3029
scene: Scene;
3130
input?: Input;
3231
scheduler?: FixedTimeStep;
@@ -40,7 +39,7 @@ export interface GameInstanceOptions {
4039
export class GameInstance<T = THREE.WebGLRenderer> {
4140
renderer: GameRenderer<T>;
4241
input: Input;
43-
loadingManager: THREE.LoadingManager;
42+
loadingManager: THREE.LoadingManager = new THREE.LoadingManager();
4443
scheduler: FixedTimeStep;
4544
scene: Scene;
4645
audio: GlobalAudio;
@@ -55,7 +54,6 @@ export class GameInstance<T = THREE.WebGLRenderer> {
5554
options: GameInstanceOptions
5655
) {
5756
const {
58-
loadingManager = new THREE.LoadingManager(),
5957
scene,
6058
input = new Input(renderer.canvas, { enableOnExit: options.enableOnExit ?? false }),
6159
scheduler = new FixedTimeStep(options.clock),
@@ -64,7 +62,6 @@ export class GameInstance<T = THREE.WebGLRenderer> {
6462
globalsAdapter = new BrowserGlobalsAdapter()
6563
} = options;
6664

67-
this.loadingManager = loadingManager;
6865
this.renderer = renderer as unknown as GameRenderer<T>;
6966
this.scene = scene;
7067
this.input = input;
@@ -75,6 +72,14 @@ export class GameInstance<T = THREE.WebGLRenderer> {
7572
globalsAdapter.setGame(this);
7673
}
7774

75+
setLoadingManager(
76+
manager: THREE.LoadingManager
77+
) {
78+
this.loadingManager = manager;
79+
80+
return this;
81+
}
82+
7883
connect() {
7984
this.input.connect();
8085
this.#windowAdapter.addEventListener("resize", this.renderer.resize);

packages/engine/src/systems/Asset/Manager.ts renamed to packages/engine/src/systems/asset/Manager.ts

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -18,8 +18,7 @@ export type AssetOnProgressCallback = (
1818
) => void;
1919

2020
export interface LoadAssetsOptions {
21-
onLoad?: (asset: Asset) => void;
22-
onProgress?: AssetOnProgressCallback;
21+
onStart?: (asset: Asset) => void;
2322
}
2423

2524
export class AssetManager {
@@ -89,20 +88,22 @@ export class AssetManager {
8988
if (assets.length === 0) {
9089
return;
9190
}
92-
const max = assets.length;
93-
const { onProgress, onLoad } = options;
9491

95-
for (let index = 0; index < max; index++) {
96-
const asset = assets[index];
92+
const { onStart } = options;
93+
94+
const loadAsset = async(asset: Asset): Promise<void> => {
9795
const loader = this.registry.getLoaderForType(asset.type);
9896
if (!loader) {
9997
throw new Error(`No loader registered for asset type: ${asset.type}`);
10098
}
10199

102-
onLoad?.(asset);
100+
onStart?.(asset);
101+
103102
const result = await loader(asset, context);
104-
onProgress?.(index + 1, max);
105103
this.assets.set(asset.id, result);
106-
}
104+
};
105+
106+
const loadingPromises = assets.map((asset) => loadAsset(asset));
107+
await Promise.all(loadingPromises);
107108
}
108109
}
File renamed without changes.
File renamed without changes.

packages/engine/src/systems/index.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ export type {
1212
} from "./asset/Registry.js";
1313

1414
export * from "./GameInstance.js";
15-
export * from "./renderers/index.js";
15+
export * from "./rendering/index.js";
1616
export * from "./Scene.js";
1717

1818
export type {
File renamed without changes.

packages/engine/src/systems/Renderers/RenderStrategy.ts renamed to packages/engine/src/systems/rendering/RenderStrategy.ts

File renamed without changes.

packages/engine/src/systems/Renderers/ThreeRenderer.ts renamed to packages/engine/src/systems/rendering/ThreeRenderer.ts

File renamed without changes.

0 commit comments

Comments
 (0)