мир = { ключники: [], выставленныеЗначения: {}, }; мир.выпрямить = function(obj) { // https://stackoverflow.com/a/42121920 var newObj = {}; for (var key in obj) { if (typeof obj[key] === 'object' && obj[key] !== null) { var temp = мир.выпрямить(obj[key]) for (var key2 in temp) { newObj[key + "." + key2] = temp[key2]; } } else { newObj[key] = obj[key]; } } return newObj; }; мир.лишьНовыеЗначения = function(значения) { var новые = {}; for (var ключ in значения) { var было = мир.выставленныеЗначения[ключ]; var стало = значения[ключ]; if (!(было != null && было == стало)) { новые[ключ] = стало; мир.выставленныеЗначения[ключ] = стало; } } return новые; }; мир.разобрать = function(словарь) { var значения = мир.лишьНовыеЗначения(мир.выпрямить(словарь)); for (var ключ in значения) { var путь = ключ.split("."); var значение = значения[ключ]; for (var номер in мир.ключники) { мир.ключники[номер](ключ, путь, значение); } } }; мир.задать = function(словарь, полныйКлюч, значение) { var путь = полныйКлюч.split("."); var пройти = путь.length - 1; var вложенность = словарь; for (var номер = 0; номер < пройти; ++номер) { var ключ = путь[номер]; if (!(ключ in вложенность)) { вложенность[ключ] = {}; вложенность = вложенность[ключ]; } } // Значение в конце вложенности. var ключ = путь[пройти]; вложенность[ключ] = значение; }; мир.синхронизироватьЭлементТело = function(элемент, тело) { if (тело.isSleeping) { return false; } let x = тело.position.x - элемент.offsetWidth / 2; let y = тело.position.y - элемент.offsetHeight / 2; let угол = тело.angle; элемент.style.transform = `translate(${x}px, ${y}px) rotate(${угол}rad)`; console.debug("синхра тела", элемент.id); return true; };