codecombat/app/lib/world/component.coffee
2014-01-03 10:32:13 -08:00

23 lines
907 B
CoffeeScript

componentKeywords = ['attach', 'constructor', 'validateArguments', 'toString', 'isComponent'] # Array is faster than object
module.exports = class Component
@className: "Component"
isComponent: true
constructor: (config) ->
for key, value of config
@[key] = value # Hmm, might want to _.cloneDeep here? What if the config has nested object values and the Thang modifies them, then we re-use the config for, say, missile spawning? Well, for now we'll clone in the missile.
attach: (thang) ->
# Optimize; this is much of the World constructor time
for key, value of @ when key not in componentKeywords and key[0] isnt "_"
oldValue = thang[key]
if typeof oldValue is 'function'
thang.appendMethod key, value
else
thang[key] = value
validateArguments:
additionalProperties: false
toString: ->
"<Component: #{@constructor.className}"