module.exports = { type: 'prophecies', list: [], init: function (blueprint) { (blueprint.list || []).forEach(function (p) { let template = null; try { let template = require('config/prophecies/' + p); } catch (e) { console.log(e); } if (template === null) return; else if (this.list.some(l => (l.type === p))) return; let prophecy = extend(true, {}, template); prophecy.obj = this.obj; prophecy.init(); this.list.push(prophecy); }, this); delete blueprint.list; }, hasProphecy: function (type) { return this.list.some(l => (l.type === type)); }, transfer: function () { let transferList = this.list; this.list = []; this.init({ list: transferList }); }, fireEvent: function (event, args) { let list = this.list; let lLen = list.length; for (let i = 0; i < lLen; i++) { let l = list[i]; let events = l.events; if (!events) continue; let callback = events[event]; if (!callback) continue; callback.apply(l, args); } }, simplify: function (self) { let e = { type: 'prophecies' }; if ((this.list.length > 0) && (this.list[0].simplify)) e.list = this.list.map(p => p.simplify()); else e.list = this.list; return e; } };