@@ -3,8 +3,9 @@ var CONST = require('./const');
33var Set = require ( '../structs/Set' ) ;
44var XHRSettings = require ( './XHRSettings' ) ;
55var Event = require ( './events/' ) ;
6- var EventDispatcher = require ( '../events/EventDispatcher' ) ;
6+ // var EventDispatcher = require('../events/EventDispatcher');
77var Class = require ( '../utils/Class' ) ;
8+ var ParseXMLBitmapFont = require ( '../gameobjects/bitmaptext/ParseXMLBitmapFont' ) ;
89
910// Phaser.Loader.BaseLoader
1011
@@ -16,9 +17,11 @@ var BaseLoader = new Class({
1617
1718 initialize :
1819
19- function BaseLoader ( )
20+ function BaseLoader ( scene )
2021 {
21- this . events = new EventDispatcher ( ) ;
22+ this . scene = scene ;
23+
24+ this . events = scene . sys . events ;
2225
2326 // Move to a 'setURL' method?
2427 this . baseURL = '' ;
@@ -268,16 +271,163 @@ var BaseLoader = new Class({
268271 this . inflight . clear ( ) ;
269272 this . queue . clear ( ) ;
270273
271- if ( this . processCallback )
272- {
273- this . processCallback ( ) ;
274- }
274+ this . processCallback ( ) ;
275275
276276 this . state = CONST . LOADER_COMPLETE ;
277277
278278 this . events . dispatch ( new Event . LOADER_COMPLETE_EVENT ( this ) ) ;
279279 } ,
280280
281+ // The Loader has finished
282+ processCallback : function ( )
283+ {
284+ if ( this . storage . size === 0 )
285+ {
286+ return ;
287+ }
288+
289+ // The global Texture Manager
290+ var cache = this . scene . sys . cache ;
291+ var textures = this . scene . sys . textures ;
292+ var anims = this . scene . sys . anims ;
293+
294+ // Process multiatlas groups first
295+
296+ var file ;
297+ var fileA ;
298+ var fileB ;
299+
300+ for ( var key in this . _multilist )
301+ {
302+ var data = [ ] ;
303+ var images = [ ] ;
304+ var keys = this . _multilist [ key ] ;
305+
306+ for ( var i = 0 ; i < keys . length ; i ++ )
307+ {
308+ file = this . storage . get ( 'key' , keys [ i ] ) ;
309+
310+ if ( file )
311+ {
312+ if ( file . type === 'image' )
313+ {
314+ images . push ( file . data ) ;
315+ }
316+ else if ( file . type === 'json' )
317+ {
318+ data . push ( file . data ) ;
319+ }
320+
321+ this . storage . delete ( file ) ;
322+ }
323+ }
324+
325+ // Do we have everything needed?
326+ if ( images . length + data . length === keys . length )
327+ {
328+ // Yup, add them to the Texture Manager
329+
330+ // Is the data JSON Hash or JSON Array?
331+ if ( Array . isArray ( data [ 0 ] . frames ) )
332+ {
333+ textures . addAtlasJSONArray ( key , images , data ) ;
334+ }
335+ else
336+ {
337+ textures . addAtlasJSONHash ( key , images , data ) ;
338+ }
339+ }
340+ }
341+
342+ // Process all of the files
343+
344+ // Because AnimationJSON may require images to be loaded first, we process them last
345+ var animJSON = [ ] ;
346+
347+ this . storage . each ( function ( file )
348+ {
349+ switch ( file . type )
350+ {
351+ case 'animationJSON' :
352+ animJSON . push ( file ) ;
353+ break ;
354+
355+ case 'image' :
356+ case 'svg' :
357+ case 'html' :
358+ textures . addImage ( file . key , file . data ) ;
359+ break ;
360+
361+ case 'atlasjson' :
362+
363+ fileA = file . fileA ;
364+ fileB = file . fileB ;
365+
366+ if ( fileA . type === 'image' )
367+ {
368+ textures . addAtlas ( fileA . key , fileA . data , fileB . data ) ;
369+ }
370+ else
371+ {
372+ textures . addAtlas ( fileB . key , fileB . data , fileA . data ) ;
373+ }
374+ break ;
375+
376+ case 'bitmapfont' :
377+
378+ fileA = file . fileA ;
379+ fileB = file . fileB ;
380+
381+ if ( fileA . type === 'image' )
382+ {
383+ cache . bitmapFont . add ( fileB . key , { data : ParseXMLBitmapFont ( fileB . data ) , texture : fileA . key , frame : null } ) ;
384+ textures . addImage ( fileA . key , fileA . data ) ;
385+ }
386+ else
387+ {
388+ cache . bitmapFont . add ( fileA . key , { data : ParseXMLBitmapFont ( fileA . data ) , texture : fileB . key , frame : null } ) ;
389+ textures . addImage ( fileB . key , fileB . data ) ;
390+ }
391+ break ;
392+
393+ case 'spritesheet' :
394+ textures . addSpriteSheet ( file . key , file . data , file . config ) ;
395+ break ;
396+
397+ case 'json' :
398+ cache . json . add ( file . key , file . data ) ;
399+ break ;
400+
401+ case 'xml' :
402+ cache . xml . add ( file . key , file . data ) ;
403+ break ;
404+
405+ case 'text' :
406+ cache . text . add ( file . key , file . data ) ;
407+ break ;
408+
409+ case 'binary' :
410+ cache . binary . add ( file . key , file . data ) ;
411+ break ;
412+
413+ case 'sound' :
414+ cache . sound . add ( file . key , file . data ) ;
415+ break ;
416+
417+ case 'glsl' :
418+ cache . shader . add ( file . key , file . data ) ;
419+ break ;
420+ }
421+ } ) ;
422+
423+ animJSON . forEach ( function ( file )
424+ {
425+ anims . fromJSON ( file . data ) ;
426+ } ) ;
427+
428+ this . storage . clear ( ) ;
429+ } ,
430+
281431 reset : function ( )
282432 {
283433 this . list . clear ( ) ;
0 commit comments