Explorar o código

Merge pull request #3112 from RaananW/tasks-generics

Added Generics to the tasks.
David Catuhe %!s(int64=7) %!d(string=hai) anos
pai
achega
d387c849a8
Modificáronse 1 ficheiros con 32 adicións e 32 borrados
  1. 32 32
      src/Tools/babylon.assetsManager.ts

+ 32 - 32
src/Tools/babylon.assetsManager.ts

@@ -7,9 +7,9 @@ module BABYLON {
         ERROR
     }
 
-    export interface IAssetTask {
-        onSuccess: (task: IAssetTask) => void;
-        onError: (task: IAssetTask, message?: string, exception?: any) => void;
+    export interface IAssetTask<T extends AbstractAssetTask> {
+        onSuccess: (task: T) => void;
+        onError: (task: T, message?: string, exception?: any) => void;
         isCompleted: boolean;
         name: string;
 
@@ -22,14 +22,14 @@ module BABYLON {
         runTask(scene: Scene, onSuccess: () => void, onError: (message?: string, exception?: any) => void): void;
     }
 
-    export abstract class AbstractAssetTask implements IAssetTask {
+    export abstract class AbstractAssetTask implements IAssetTask<AbstractAssetTask> {
 
         constructor(public name: string) {
             this.taskState = AssetTaskState.INIT;
         }
 
-        onSuccess: (task: IAssetTask) => void;
-        onError: (task: IAssetTask, message?: string, exception?: any) => void;
+        onSuccess: (task: this) => void;
+        onError: (task: this, message?: string, exception?: any) => void;
 
         isCompleted: boolean = false;
         taskState: AssetTaskState;
@@ -83,22 +83,22 @@ module BABYLON {
     export interface IAssetsProgressEvent {
         remainingCount: number;
         totalCount: number;
-        task: IAssetTask;
+        task: AbstractAssetTask;
     }
 
     export class AssetsProgressEvent implements IAssetsProgressEvent {
         remainingCount: number;
         totalCount: number;
-        task: IAssetTask;
+        task: AbstractAssetTask;
 
-        constructor(remainingCount: number, totalCount: number, task: IAssetTask) {
+        constructor(remainingCount: number, totalCount: number, task: AbstractAssetTask) {
             this.remainingCount = remainingCount;
             this.totalCount = totalCount;
             this.task = task;
         }
     }
 
-    export class MeshAssetTask extends AbstractAssetTask implements IAssetTask {
+    export class MeshAssetTask extends AbstractAssetTask implements IAssetTask<MeshAssetTask> {
         public loadedMeshes: Array<AbstractMesh>;
         public loadedParticleSystems: Array<ParticleSystem>;
         public loadedSkeletons: Array<Skeleton>;
@@ -121,7 +121,7 @@ module BABYLON {
         }
     }
 
-    export class TextFileAssetTask extends AbstractAssetTask implements IAssetTask {
+    export class TextFileAssetTask extends AbstractAssetTask implements IAssetTask<TextFileAssetTask> {
         public text: string;
 
         constructor(public name: string, public url: string) {
@@ -140,7 +140,7 @@ module BABYLON {
         }
     }
 
-    export class BinaryFileAssetTask extends AbstractAssetTask implements IAssetTask {
+    export class BinaryFileAssetTask extends AbstractAssetTask implements IAssetTask<BinaryFileAssetTask> {
         public data: ArrayBuffer;
 
         constructor(public name: string, public url: string) {
@@ -160,7 +160,7 @@ module BABYLON {
         }
     }
 
-    export class ImageAssetTask extends AbstractAssetTask implements IAssetTask {
+    export class ImageAssetTask extends AbstractAssetTask implements IAssetTask<ImageAssetTask> {
         public image: HTMLImageElement;
 
         constructor(public name: string, public url: string) {
@@ -185,11 +185,11 @@ module BABYLON {
         }
     }
 
-    export interface ITextureAssetTask extends IAssetTask {
-        texture: Texture;
+    export interface ITextureAssetTask<TEX extends BaseTexture, T extends AbstractAssetTask> extends IAssetTask<T> {
+        texture: TEX;
     }
 
-    export class TextureAssetTask extends AbstractAssetTask implements ITextureAssetTask {
+    export class TextureAssetTask extends AbstractAssetTask implements ITextureAssetTask<Texture, TextureAssetTask> {
         public texture: Texture;
 
         constructor(public name: string, public url: string, public noMipmap?: boolean, public invertY?: boolean, public samplingMode: number = Texture.TRILINEAR_SAMPLINGMODE) {
@@ -210,7 +210,7 @@ module BABYLON {
         }
     }
 
-    export class CubeTextureAssetTask extends AbstractAssetTask implements IAssetTask {
+    export class CubeTextureAssetTask extends AbstractAssetTask implements ITextureAssetTask<CubeTexture, CubeTextureAssetTask> {
         public texture: CubeTexture;
 
         constructor(public name: string, public url: string, public extensions?: string[], public noMipmap?: boolean, public files?: string[]) {
@@ -231,7 +231,7 @@ module BABYLON {
         }
     }
 
-    export class HDRCubeTextureAssetTask extends AbstractAssetTask implements IAssetTask {
+    export class HDRCubeTextureAssetTask extends AbstractAssetTask implements ITextureAssetTask<HDRCubeTexture, HDRCubeTextureAssetTask> {
         public texture: HDRCubeTexture;
 
         constructor(public name: string, public url: string, public size?: number, public noMipmap = false, public generateHarmonics = true, public useInGammaSpace = false, public usePMREMGenerator = false) {
@@ -258,16 +258,16 @@ module BABYLON {
         protected tasks = new Array<AbstractAssetTask>();
         protected waitingTasksCount = 0;
 
-        public onFinish: (tasks: IAssetTask[]) => void;
-        public onTaskSuccess: (task: IAssetTask) => void;
-        public onTaskError: (task: IAssetTask) => void;
-        public onProgress: (remainingCount: number, totalCount: number, task: IAssetTask) => void;
+        public onFinish: (tasks: IAssetTask<AbstractAssetTask>[]) => void;
+        public onTaskSuccess: (task: IAssetTask<AbstractAssetTask>) => void;
+        public onTaskError: (task: IAssetTask<AbstractAssetTask>) => void;
+        public onProgress: (remainingCount: number, totalCount: number, task: IAssetTask<AbstractAssetTask>) => void;
 
         //Observables
 
-        public onTaskSuccessObservable = new Observable<IAssetTask>();
-        public onTaskErrorObservable = new Observable<IAssetTask>();
-        public onTasksDoneObservable = new Observable<IAssetTask[]>();
+        public onTaskSuccessObservable = new Observable<IAssetTask<AbstractAssetTask>>();
+        public onTaskErrorObservable = new Observable<IAssetTask<AbstractAssetTask>>();
+        public onTasksDoneObservable = new Observable<IAssetTask<AbstractAssetTask>[]>();
         public onProgressObservable = new Observable<IAssetsProgressEvent>();
 
         public useDefaultLoadingScreen = true;
@@ -276,35 +276,35 @@ module BABYLON {
             this._scene = scene;
         }
 
-        public addMeshTask(taskName: string, meshesNames: any, rootUrl: string, sceneFilename: string): IAssetTask {
+        public addMeshTask(taskName: string, meshesNames: any, rootUrl: string, sceneFilename: string): MeshAssetTask {
             var task = new MeshAssetTask(taskName, meshesNames, rootUrl, sceneFilename);
             this.tasks.push(task);
 
             return task;
         }
 
-        public addTextFileTask(taskName: string, url: string): IAssetTask {
+        public addTextFileTask(taskName: string, url: string): TextFileAssetTask {
             var task = new TextFileAssetTask(taskName, url);
             this.tasks.push(task);
 
             return task;
         }
 
-        public addBinaryFileTask(taskName: string, url: string): IAssetTask {
+        public addBinaryFileTask(taskName: string, url: string): BinaryFileAssetTask {
             var task = new BinaryFileAssetTask(taskName, url);
             this.tasks.push(task);
 
             return task;
         }
 
-        public addImageTask(taskName: string, url: string): IAssetTask {
+        public addImageTask(taskName: string, url: string): ImageAssetTask {
             var task = new ImageAssetTask(taskName, url);
             this.tasks.push(task);
 
             return task;
         }
 
-        public addTextureTask(taskName: string, url: string, noMipmap?: boolean, invertY?: boolean, samplingMode: number = Texture.TRILINEAR_SAMPLINGMODE): IAssetTask {
+        public addTextureTask(taskName: string, url: string, noMipmap?: boolean, invertY?: boolean, samplingMode: number = Texture.TRILINEAR_SAMPLINGMODE): TextureAssetTask {
             var task = new TextureAssetTask(taskName, url, noMipmap, invertY, samplingMode);
             this.tasks.push(task);
 
@@ -312,14 +312,14 @@ module BABYLON {
         }
 
 
-        public addCubeTextureTask(name: string, url: string, extensions?: string[], noMipmap?: boolean, files?: string[]): IAssetTask {
+        public addCubeTextureTask(name: string, url: string, extensions?: string[], noMipmap?: boolean, files?: string[]): CubeTextureAssetTask {
             var task = new CubeTextureAssetTask(name, url, extensions, noMipmap, files);
             this.tasks.push(task);
 
             return task;
         }
 
-        public addHDRCubeTextureTask(name: string, url: string, size?: number, noMipmap = false, generateHarmonics = true, useInGammaSpace = false, usePMREMGenerator = false): IAssetTask {
+        public addHDRCubeTextureTask(name: string, url: string, size?: number, noMipmap = false, generateHarmonics = true, useInGammaSpace = false, usePMREMGenerator = false): HDRCubeTextureAssetTask {
             var task = new HDRCubeTextureAssetTask(name, url, size, noMipmap, generateHarmonics, useInGammaSpace, usePMREMGenerator);
             this.tasks.push(task);