Files
mjs/100.мир.js
2021-08-10 14:58:08 +03:00

87 lines
2.7 KiB
JavaScript

мир = {
ключники: [],
выставленныеЗначения: {},
};
мир.выпрямить = 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;
};