// Вне классов. // JavaScript equivalent to printf/String.Format // https://stackoverflow.com/a/4673436 function форматСтроки() { // How to shift “arguments” // https://stackoverflow.com/questions/4775895/how-to-shift-arguments var args = Array.prototype.slice.call(arguments); var str = args.shift(); return str.replace(/{(\d+)}/g, function(match, number) { return typeof args[number] != 'undefined' ? args[number] : match ; }); } // Уведомитель. var Уведомитель = Reporter; Reporter.prototype.уведомить = function() { this.report(); }; Reporter.prototype.подписать = function(функция) { this.subscribe(функция); }; // Подписать сразу несколько функций за один вызов. Reporter.prototype.подписатьМного = function(funcs) { this.subscribeMany(funcs); }; //var муром = {}; // Камера. муром.камера = {}; Object.defineProperty(муром.камера, "цветОчистки", { get: function() { return murom.camera.clearColor; }, set: function(values) { murom.camera.clearColor = values; } }); Object.defineProperty(муром.камера, "позиция", { get: function() { return murom.camera.position; }, set: function(values) { murom.camera.position = values; } }); Object.defineProperty(муром.камера, "вращение", { get: function() { return murom.camera.rotation; }, set: function(values) { murom.camera.rotation = values; } }); муром.камера.узелВПозиции = function(позиция, маска) { return murom.camera.nodeAtPosition(позиция, маска); }; // Мышь. муром.мышь = {}; Object.defineProperty(муром.мышь, "нажатыеКнопки", { get: function() { return murom.mouse.pressedButtons; } }); Object.defineProperty(муром.мышь, "позиция", { get: function() { return murom.mouse.position; } }); муром.мышь.позицияИзменилась = new Уведомитель(); murom.mouse.positionChanged.subscribe(function(){ муром.мышь.позицияИзменилась.уведомить(); }); муром.мышь.нажатыеКнопкиИзменились = new Уведомитель(); murom.mouse.pressedButtonsChanged.subscribe(function(){ муром.мышь.нажатыеКнопкиИзменились.уведомить(); }); // Узел. Object.defineProperty(Node.prototype, "имя", { get: function() { return this.name; } }); Object.defineProperty(Node.prototype, "позиция", { get: function() { return this.position; }, set: function(values) { this.position = values; } }); Object.defineProperty(Node.prototype, "вращение", { get: function() { return this.rotation; }, set: function(values) { this.rotation = values; } }); Node.prototype.добавитьДитя = function(дитя) { this.addChild(дитя); }; Node.prototype.задатьМаску = function(маска) { this.setMask(маска); }; Node.prototype.задатьМатериал = function(материал) { this.setMaterial(материал); }; // Узлы. муром.узлы = {}; муром.узлы.узел = function(имя) { return murom.nodes.node(имя); }; муром.узлы.создатьСферу = function(имя, радиус) { return murom.nodes.createSphere(имя, радиус); }; муром.узлы.создатьУзел = function(имя, модель) { return murom.nodes.createNode(имя, модель); }; // Материал. Material.prototype.задатьШейдеры = function(вершинный, фрагментный) { this.setShaders(вершинный, фрагментный); }; Material.prototype.задатьЮниформ = function(имя, значение) { this.setUniform(имя, значение) }; Material.prototype.задатьТекстуру = function(имяЮниформа, текстура) { this.setTexture(имяЮниформа, текстура) }; // Материалы. муром.материалы = {}; муром.материалы.создатьМатериал = function(имя) { return murom.materials.createMaterial(имя); }; // Ресурс. Object.defineProperty(Resource.prototype, "имя", { get: function() { return this.name; } }); Object.defineProperty(Resource.prototype, "содержимое", { get: function() { return this.contents; } }); // Ресурсы. муром.ресурсы = {}; муром.ресурсы.получить = function(ресурсы, отклик) { murom.resources.get(ресурсы, отклик); }; муром.ресурсы.ресурс = function(имя) { return murom.resources.resource(имя); }; муром.ресурсы.создатьРесурс = function(имя, содержимое) { return murom.resources.createResource(имя, содержимое); }; // Функции. муром.получить = function(адрес, откликУспеха, откликПровала) { murom.get(адрес, откликУспеха, откликПровала); }; муром.получитьб = function(адрес, откликУспеха, откликПровала) { murom.getb(адрес, откликУспеха, откликПровала); }; муром.получитьМного = function(элементы, откликЗавершения) { murom.getMany(элементы, откликЗавершения); };