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();
}