мир = {
    ключники: [],
    выставленныеЗначения: {},
};

мир.выпрямить = 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)`;

    return true;
};
