From f8467cc034b88184f064e344dd40ad01ff02fbc4 Mon Sep 17 00:00:00 2001 From: Michael Kapelko Date: Thu, 12 Sep 2019 12:01:43 +0300 Subject: [PATCH] =?UTF-8?q?=D0=9E=D0=B1=D1=8A=D0=B5=D0=B4=D0=B8=D0=BD?= =?UTF-8?q?=D0=B8=D1=82=D1=8C=20api=20=D0=B8=20=D0=B0=D0=BF=D0=B8=20=D0=B2?= =?UTF-8?q?=20=D0=BE=D0=B4=D0=B8=D0=BD=20=D1=84=D0=B0=D0=B9=D0=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- api/2019-09-12.js | 294 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 294 insertions(+) create mode 100644 api/2019-09-12.js diff --git a/api/2019-09-12.js b/api/2019-09-12.js new file mode 100644 index 0000000..bf9e31f --- /dev/null +++ b/api/2019-09-12.js @@ -0,0 +1,294 @@ + +// ==== ENGLISH API ==== + +// Subscribe several functions in a single call. +Reporter.prototype.subscribeMany = function(funcs) +{ + for (var i = 0; i < funcs.length; ++i) + { + var func = funcs[i]; + this.subscribe(func); + } +} + +murom.getMany = function(items, completionCallback) +{ + var self = this; + var results = {}; + + var count = 0; + function reportCompletion() + { + if (++count == items.length) + { + if (completionCallback) + { + completionCallback(results); + } + } + } + + for (var id in items) + { + const item = items[id]; + const url = item[0]; + const name = item[1]; + var isBinary = (item[2] == "b"); + + function success(contents) + { + results[name] = contents; + reportCompletion() + } + function failure(status) + { + LOG( + formatString( + "ERROR Could not download URL: '{0}' status: '{1}'", + url, + status + ) + ); + reportCompletion() + } + + if (isBinary) + { + murom.getb(url, success, failure); + } + else + { + murom.get(url, success, failure); + } + } +}; + +// ==== РУССКИЙ API ==== + +// Вне классов. + +// 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(элементы, откликЗавершения); +};