neft
Version:
Universal Platform
79 lines (62 loc) • 2.1 kB
text/coffeescript
# ResourcesLoader
Access it with:
```javascript
ResourcesLoader {}
```
Example:
```javascript
Item {
ResourcesLoader {
id: loader
resources: app.resources
}
Text {
text: 'Progress: ' + loader.progress * 100 + '%'
}
}
```
'use strict'
assert = require 'src/assert'
utils = require 'src/utils'
log = require 'src/log'
signal = require 'src/signal'
Resources = require 'src/resources'
log = log.scope 'Renderer', 'ResourcesLoader'
module.exports = (Renderer, Impl, itemUtils) -> class ResourcesLoader extends itemUtils.FixedObject
@__name__ = 'ResourcesLoader'
@__path__ = 'Renderer.ResourcesLoader'
getResources = (resources, target=[]) ->
for key, val of resources when resources.hasOwnProperty(key)
if val instanceof Resources.Resource
target.push val
else
getResources val, target
target
## *ResourcesLoader* ResourcesLoader.New([*Component* component, *Object* options])
@New = (component, opts) ->
item = new ResourcesLoader
itemUtils.Object.initialize item, component, opts
item
constructor: ->
super()
@_resources = Renderer.resources
@_progress = 0
setImmediate =>
if @_resources
@progress = 0
Impl.loadResources.call @, getResources(@_resources)
## *Resources* ResourcesLoader::resources
utils.defineProperty @::, 'resources', null, ->
@_resources
, (val) ->
if typeof val is 'string'
val = Renderer.resources.getResource val
assert.instanceOf val, Resources
@_resources = val
## *Float* ResourcesLoader::progress = `0`
## *Signal* ResourcesLoaded::onProgressChange(*Float* oldValue)
itemUtils.defineProperty
constructor: @
name: 'progress'
developmentSetter: (val) ->
assert.isFloat val