|
|
@@ -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(элементы, откликЗавершения); |
|
|
|
}; |