Skip to content

Commit c586edf

Browse files
authored
Added possibility to handle progress during load (#143)
* Added possibility to handle progress during load #142 * Fixes according pull-request comments
1 parent 8311ddb commit c586edf

File tree

1 file changed

+20
-1
lines changed

1 file changed

+20
-1
lines changed

src/animate/load.ts

Lines changed: 20 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import { Texture } from '@pixi/core';
88
import { Spritesheet } from '@pixi/spritesheet';
99

1010
type Complete = (instance: MovieClip | null) => void;
11+
type Progress = (value: number) => void;
1112
export interface LoadOptions
1213
{
1314
/**
@@ -18,6 +19,10 @@ export interface LoadOptions
1819
* Callback for load completion.
1920
*/
2021
complete?: Complete;
22+
/**
23+
* Callback for load progress.
24+
*/
25+
progress?: Progress;
2126
/**
2227
* Base root directory
2328
*/
@@ -94,6 +99,8 @@ export function load(scene: AnimateAsset, options: LoadOptions): void;
9499
export function load(scene: AnimateAsset, optionsOrComplete?: Complete | LoadOptions): void
95100
{
96101
const complete: Complete = typeof optionsOrComplete === 'function' ? optionsOrComplete : optionsOrComplete?.complete;
102+
const progress: Progress | undefined = typeof optionsOrComplete === 'function' ? undefined : optionsOrComplete?.progress;
103+
97104
let basePath = '';
98105
let parent: Container = null;
99106
let metadata: any;
@@ -143,6 +150,9 @@ export function load(scene: AnimateAsset, optionsOrComplete?: Complete | LoadOpt
143150

144151
if (assets && Object.keys(assets).length)
145152
{
153+
let totalAssets = 0;
154+
let loadedAssets = 0;
155+
146156
const promises: Promise<any>[] = [];
147157
// assetBaseDir can accept either with trailing slash or not
148158

@@ -152,6 +162,8 @@ export function load(scene: AnimateAsset, optionsOrComplete?: Complete | LoadOpt
152162
}
153163
for (const id in assets)
154164
{
165+
if (progress) totalAssets++;
166+
155167
let data = null;
156168

157169
if (metadata)
@@ -169,9 +181,16 @@ export function load(scene: AnimateAsset, optionsOrComplete?: Complete | LoadOpt
169181
}
170182
promises.push(Assets.load({ alias: [id], src: basePath + assets[id], data }).then((loadedAsset) =>
171183
{
184+
if (progress)
185+
{
186+
loadedAssets++;
187+
188+
progress(loadedAssets / totalAssets);
189+
}
190+
172191
if (!loadedAsset)
173192
{
174-
return; // not sure if this can evet happen
193+
return; // not sure if this can ever happen
175194
}
176195
if (loadedAsset instanceof Spritesheet)
177196
{

0 commit comments

Comments
 (0)