--world.js
var default_prefs = { boundingWalls: true, size: { width: 100, height: 200}, default_player: {defaultSize: 0.01}};
module.exports = function make_world(preferences) {
preferences = _.extend(default_prefs, preferences);
var units = [];
// bla-bla-bla
var listeners = {};
var trigger = function (eventType) {
if (listeners[eventType]) {
listeners[eventType].forEach(function (item) {
item ? item() : 0;
});
}
}
var obj = {
prefs: preferences
make_player: function (opts) {
var p = make_player.apply(this, [units.length, _.extend(preferences.default_player, opts)]);
units.push(p);
return p;
},
bind: function (eventType, listener) {
if (!listeners[eventType]) {
listeners[eventType] = [];
}
listeners[eventType].push(listener);
},
unbind: function (eventType, listener) {
if (listeners[eventType]) {
delete listeners[eventType][listeners[eventType].indexOf(listener)];
}
}
// bla-bla-bla
};
return obj;
}
--player.js
module.exports = function make_player(id, preferences) {
// bla-bla-bla
var size = this.prefs.size.width * preferences.defaultSize;
var that = {
id: id,
type: 'player',
size: size
}
return that;
}