commit dd2d41cc9e6bdfa90e41d19d36ac9b42e6624eae Author: Michael Kapelko Date: Thu Sep 5 11:41:36 2019 +0300 Добавить API и АПИ от 2019-08-15 diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..3587989 --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +# Временные файлы VIM. +*.swp diff --git a/api/2019-08-15.js b/api/2019-08-15.js new file mode 100644 index 0000000..5ae2534 --- /dev/null +++ b/api/2019-08-15.js @@ -0,0 +1,10 @@ + +// 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); + } +} diff --git a/апи/2019-08-15.js b/апи/2019-08-15.js new file mode 100644 index 0000000..7b2acf5 --- /dev/null +++ b/апи/2019-08-15.js @@ -0,0 +1,189 @@ +// Уведомитель. + +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(имя); +}