class DXOpal::RemoteResource
A base class for resources acquired through JS Promises. Provides `<klass>.register` and `<klass>`. A subclass must impelment `<klass>._load`.
TODO: better name? (SoundEffect
is not actually 'remote')
Public Class Methods
[](name)
click to toggle source
Return instance of loaded resource (call on subclasses)
# File lib/dxopal/remote_resource.rb, line 28 def self.[](name) if (ret = @@instances[_klass_name][name]) return ret else raise "#{_klass_name} #{name.inspect} is not registered" end end
_klass_name()
click to toggle source
Return a string like “Image” or “Sound”
# File lib/dxopal/remote_resource.rb, line 63 def self._klass_name return self.name.split(/::/).last end
_load(*args)
click to toggle source
Load actual content (defined on subclasses) Return `[instance, promise]`
# File lib/dxopal/remote_resource.rb, line 58 def self._load(*args) raise "override me" end
_load_resources(&block)
click to toggle source
Called from Window.load_resources
# File lib/dxopal/remote_resource.rb, line 37 def self._load_resources(&block) @@resources.each do |klass_name, items| klass = @@klasses[klass_name] items.each do |name, (block2, args)| if !@@promises[klass_name][name] instance, promise = klass._load(*args, &block2) @@instances[klass_name][name] = instance @@promises[klass_name][name] = promise end end end promises = @@promises.values.flat_map(&:values) %x{ Promise.all(#{promises}).then(function() { #{block.call} }); } end
add_class(subklass)
click to toggle source
# File lib/dxopal/remote_resource.rb, line 17 def self.add_class(subklass) @@klasses[subklass._klass_name] = subklass end
register(name, *args, &block)
click to toggle source
Reserve instance generation
# File lib/dxopal/remote_resource.rb, line 22 def self.register(name, *args, &block) @@resources[_klass_name] ||= {} @@resources[_klass_name][name] = [block, args] end