function Объекты(состояние) { this.создать = function() { this.умолчание = { пр: [0, 0, 40, 20], }; this.задано = {}; }; this.обновитьИзображение = function(имя, пр, вид) { состояние.разобрать({ изображения: { [имя]: { пр: пр, вид: вид, }, }, }); }; this.обновитьПозициюРазмер = function(имя, пр) { состояние.разобрать({ тела: { [имя]: { пр: пр, }, }, }); }; this.обновитьСлежение = function(имя, пр) { состояние.разобрать({ слежение: { [имя]: { изображение: имя, тело: имя, смещение: [-пр[2] / 2, -пр[3] / 2], }, }, }); }; this.обновитьФизику = function(имя, значение) { состояние.разобрать({ тела: { [имя]: { физика: значение, }, }, }); }; this.обработатьКлюч = function(ключ, путь, значение) { if (путь[0] != "объекты") { return; } let имя = путь[1]; let свойство = путь.slice(2).join("."); if (!this.задано[имя]) { this.задано[имя] = {}; } this.задано[имя][свойство] = значение; let производноеИмя = `объекты-${имя}`; if (свойство.startsWith("пр.")) { let пр = this.пр(имя); this.обновитьПозициюРазмер(производноеИмя, пр); this.обновитьСлежение(производноеИмя, пр); let вид = this.задано[имя]["вид"]; this.обновитьИзображение(производноеИмя, пр, вид); } else if (свойство == "физика") { this.обновитьФизику(производноеИмя, значение); } else if (свойство == "вид") { let пр = this.пр(имя); let вид = this.задано[имя]["вид"]; this.обновитьИзображение(производноеИмя, пр, вид); } }; this.пр = function(имя) { let за = this.задано[имя]; let пр = this.умолчание.пр; return [ за["пр.0"] ? за["пр.0"] : пр[0], за["пр.1"] ? за["пр.1"] : пр[1], за["пр.2"] ? за["пр.2"] : пр[2], за["пр.3"] ? за["пр.3"] : пр[3], ]; }; // Конструктор. this.создать(); };