function Объекты(события, состояние) { this.создать = function() { this.умолчание = { пр: [0, 0, 40, 20], }; this.задано = {}; события.подписать(this); }; this.обновитьИзображение = function(имя) { let имяИзо = `объекты-${имя}`; let за = this.задано[имя]; let пр = this.пр(имя); var описание = { ширина: пр[2], высота: пр[3], вид: {}, }; for (var ключ in за) { if (ключ.startsWith("вид.")) { var к = ключ.substring(4); var значение = за[ключ]; описание.вид[к] = значение; } } состояние.разобрать({ изображения: { [имяИзо]: описание, }, }); }; this.обновитьСлежение = function(имя) { let имяС = `объекты-${имя}`; let пр = this.пр(имя); состояние.разобрать({ слежение: { [имяС]: { изображение: имяС, тело: имяС, смещение: [-пр[2] / 2, -пр[3] / 2], }, }, }); }; this.обработатьКлюч = function(ключ, путь, значение) { if (путь[0] != "объекты") { return; } let имя = путь[1]; let свойство = путь.slice(2).join("."); if (!this.задано[имя]) { this.задано[имя] = {}; } this.задано[имя][свойство] = значение; let пр = свойство.startsWith("пр."); if (пр) { this.пересоздатьТело(имя); this.обновитьСлежение(имя); } this.обновитьИзображение(имя); }; this.пересоздатьТело = function(имя) { let имяТела = `объекты-${имя}`; let пр = this.пр(имя); состояние.разобрать({ тела: { [имяТела]: { x: пр[0], y: пр[1], ширина: пр[2], высота: пр[3], физика: { isStatic: false, }, }, }, }); }; this.пр = function(имя) { let за = this.задано[имя]; let пр = this.умолчание.пр; return [ за["пр.0"] ? за["пр.0"] : пр[0], за["пр.1"] ? за["пр.1"] : пр[1], за["пр.2"] ? за["пр.2"] : пр[2], за["пр.3"] ? за["пр.3"] : пр[3], ]; }; // Конструктор. this.создать(); };