Dart DocumentationstagexlResourceManager

ResourceManager class

class ResourceManager extends EventDispatcher {

 final Map<String, ResourceManagerResource> _resources = new Map<String, ResourceManagerResource>();

 static const EventStreamProvider<Event> progressEvent = const EventStreamProvider<Event>(Event.PROGRESS);
 EventStream<Event> get onProgress => ResourceManager.progressEvent.forTarget(this);

 //-----------------------------------------------------------------------------------------------

 _addResource(String kind, String name, String url, Future loader) {

   var key = "$kind.$name";
   var resource = new ResourceManagerResource(kind, name, url, loader);

   if (_resources.containsKey(key)) {
     throw new StateError("ResourceManager already contains a resource called '$name'");
   } else {
     _resources[key] = resource;
   }

   resource.complete.then((_) {
     this.dispatchEvent(new Event(Event.PROGRESS));
   });
 }

 dynamic _getResourceValue(String kind, String name) {

   var key = "$kind.$name";
   var resource = _resources[key];

   if (resource == null) {
     throw new StateError("Resource '$name' does not exist.");
   } else if (resource.value != null) {
     return resource.value;
   } else if (resource.error != null) {
     throw resource.error;
   } else {
     throw new StateError("Resource '$name' has not finished loading yet.");
   }
 }

 //-----------------------------------------------------------------------------------------------
 //-----------------------------------------------------------------------------------------------

 Future<ResourceManager> load() {

   var futures = this.pendingResources.map((r) => r.complete);

   return Future.wait(futures).then((value) {
     var errors = this.failedResources.length;
     if (errors > 0) {
       throw new StateError("Failed to load $errors resource(s).");
     } else {
       return this;
     }
   });
 }

 //-----------------------------------------------------------------------------------------------

 List<ResourceManagerResource> get finishedResources {
   return _resources.values.where((r) => r.value != null).toList();
 }

 List<ResourceManagerResource> get pendingResources {
   return _resources.values.where((r) => r.value == null && r.error == null).toList();
 }

 List<ResourceManagerResource> get failedResources {
   return _resources.values.where((r) => r.error != null).toList();
 }

 List<ResourceManagerResource> get resources {
   return _resources.values.toList();
 }

 //-----------------------------------------------------------------------------------------------

 void addBitmapData(String name, String url, [BitmapDataLoadOptions bitmapDataLoadOptions = null]) {
   _addResource("BitmapData", name, url, BitmapData.load(url, bitmapDataLoadOptions));
 }

 void addSound(String name, String url, [SoundLoadOptions soundFileSupport = null]) {
   _addResource("Sound", name, url, Sound.load(url, soundFileSupport));
 }

 void addTextureAtlas(String name, String url, String textureAtlasFormat) {
   _addResource("TextureAtlas", name, url, TextureAtlas.load(url, textureAtlasFormat));
 }

 void addTextFile(String name, String url) {
   _addResource("TextFile", name, url,
       HttpRequest.getString(url).then((text) => text, onError: (error) {
         throw new StateError("Failed to load text file.");
       }));
 }

 void addText(String name, String text) {
   _addResource("Text", name, "", new Future.value(text));
 }

 void addCustomObject(String name, Future loader) {
   _addResource("CustomObject", name, "", loader);
 }

 //-----------------------------------------------------------------------------------------------

 BitmapData getBitmapData(String name) {
   var value = _getResourceValue("BitmapData", name);
   if (value is! BitmapData) throw "dart2js_hint";
   return value;
 }

 Sound getSound(String name) {
   var value = _getResourceValue("Sound", name);
   if (value is! Sound) throw "dart2js_hint";
   return value;
 }

 TextureAtlas getTextureAtlas(String name) {
   var value = _getResourceValue("TextureAtlas", name);
   if (value is! TextureAtlas) throw "dart2js_hint";
   return value;
 }

 String getTextFile(String name) {
   var value = _getResourceValue("TextFile", name);
   if (value is! String) throw "dart2js_hint";
   return value;
 }

 String getText(String name) {
   var value = _getResourceValue("Text", name);
   if (value is! String) throw "dart2js_hint";
   return value;
 }

 dynamic getCustomObject(String name) {
   return _getResourceValue("CustomObject", name);
 }

}

Extends

EventDispatcher > ResourceManager

Static Properties

const EventStreamProvider<Event> progressEvent #

static const EventStreamProvider<Event> progressEvent = const EventStreamProvider<Event>(Event.PROGRESS)

Properties

final List<ResourceManagerResource> failedResources #

List<ResourceManagerResource> get failedResources {
 return _resources.values.where((r) => r.error != null).toList();
}

final List<ResourceManagerResource> finishedResources #

List<ResourceManagerResource> get finishedResources {
 return _resources.values.where((r) => r.value != null).toList();
}

final EventStream<Event> onProgress #

EventStream<Event> get onProgress => ResourceManager.progressEvent.forTarget(this);

final List<ResourceManagerResource> pendingResources #

List<ResourceManagerResource> get pendingResources {
 return _resources.values.where((r) => r.value == null && r.error == null).toList();
}

final List<ResourceManagerResource> resources #

List<ResourceManagerResource> get resources {
 return _resources.values.toList();
}

Methods

void addBitmapData(String name, String url, [BitmapDataLoadOptions bitmapDataLoadOptions = null]) #

void addBitmapData(String name, String url, [BitmapDataLoadOptions bitmapDataLoadOptions = null]) {
 _addResource("BitmapData", name, url, BitmapData.load(url, bitmapDataLoadOptions));
}

void addCustomObject(String name, Future loader) #

void addCustomObject(String name, Future loader) {
 _addResource("CustomObject", name, "", loader);
}

StreamSubscription<Event> addEventListener(String eventType, EventListener eventListener, {bool useCapture: false, int priority: 0}) #

inherited from EventDispatcher
StreamSubscription<Event> addEventListener(String eventType, EventListener eventListener, {
 bool useCapture: false, int priority: 0 }) {

 return this.on(eventType)._subscribe(eventListener, useCapture, priority);
}

void addSound(String name, String url, [SoundLoadOptions soundFileSupport = null]) #

void addSound(String name, String url, [SoundLoadOptions soundFileSupport = null]) {
 _addResource("Sound", name, url, Sound.load(url, soundFileSupport));
}

void addText(String name, String text) #

void addText(String name, String text) {
 _addResource("Text", name, "", new Future.value(text));
}

void addTextFile(String name, String url) #

void addTextFile(String name, String url) {
 _addResource("TextFile", name, url,
     HttpRequest.getString(url).then((text) => text, onError: (error) {
       throw new StateError("Failed to load text file.");
     }));
}

void addTextureAtlas(String name, String url, String textureAtlasFormat) #

void addTextureAtlas(String name, String url, String textureAtlasFormat) {
 _addResource("TextureAtlas", name, url, TextureAtlas.load(url, textureAtlasFormat));
}

void dispatchEvent(Event event) #

inherited from EventDispatcher
void dispatchEvent(Event event) {
 _dispatchEventInternal(event, this, EventPhase.AT_TARGET);
}

BitmapData getBitmapData(String name) #

BitmapData getBitmapData(String name) {
 var value = _getResourceValue("BitmapData", name);
 if (value is! BitmapData) throw "dart2js_hint";
 return value;
}

dynamic getCustomObject(String name) #

dynamic getCustomObject(String name) {
 return _getResourceValue("CustomObject", name);
}

Sound getSound(String name) #

Sound getSound(String name) {
 var value = _getResourceValue("Sound", name);
 if (value is! Sound) throw "dart2js_hint";
 return value;
}

String getText(String name) #

String getText(String name) {
 var value = _getResourceValue("Text", name);
 if (value is! String) throw "dart2js_hint";
 return value;
}

String getTextFile(String name) #

String getTextFile(String name) {
 var value = _getResourceValue("TextFile", name);
 if (value is! String) throw "dart2js_hint";
 return value;
}

TextureAtlas getTextureAtlas(String name) #

TextureAtlas getTextureAtlas(String name) {
 var value = _getResourceValue("TextureAtlas", name);
 if (value is! TextureAtlas) throw "dart2js_hint";
 return value;
}

bool hasEventListener(String eventType) #

inherited from EventDispatcher
bool hasEventListener(String eventType) {

 var eventStreams = _eventStreams;
 if (eventStreams == null) return false;
 var eventStream = eventStreams[eventType];
 if (eventStream == null) return false;

 return eventStream.hasSubscriptions;
}

Future<ResourceManager> load() #

Future<ResourceManager> load() {

 var futures = this.pendingResources.map((r) => r.complete);

 return Future.wait(futures).then((value) {
   var errors = this.failedResources.length;
   if (errors > 0) {
     throw new StateError("Failed to load $errors resource(s).");
   } else {
     return this;
   }
 });
}

EventStream<Event> on(String eventType) #

inherited from EventDispatcher
EventStream<Event> on(String eventType) {

 var eventStreams = _eventStreams;
 if (eventStreams == null) {
   eventStreams = new Map<String, EventStream>();
   _eventStreams = eventStreams;
 }

 var eventStream = eventStreams[eventType];
 if (eventStream == null) {
   eventStream = new EventStream._internal(this, eventType);
   eventStreams[eventType] = eventStream;
 }

 return eventStream;
}

void removeEventListener(String eventType, EventListener eventListener, {bool useCapture: false}) #

inherited from EventDispatcher
void removeEventListener(String eventType, EventListener eventListener, {
 bool useCapture: false }) {

 this.on(eventType)._unsubscribe(eventListener, useCapture);
}

void removeEventListeners(String eventType) #

inherited from EventDispatcher
void removeEventListeners(String eventType) {
 this.on(eventType).cancelSubscriptions();
}