Files
mjs/00130.платформы.js
2021-06-04 15:27:07 +03:00

122 lines
4.1 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

мир.платформы = {
умолчание: {
x: 100,
y: 100,
ширина: 40,
высота: 20,
цвет: "#ff0000",
статика: true,
},
задано: {},
тела: {},
элементы: {},
свойстваТела: ["x", "y", "ширина", "высота"],
обновить: обновитьПлатформы,
/*
задатьФизику: задатьФизикуПлатформы,
задатьDiv: задатьDivПлатформы,
*/
};
// // // //
мир.ключники.push(function(ключ, путь, значение){
if (!ключ.startsWith("платформы"))
{
return;
}
var имя = путь[1];
var свойство = путь[2];
// Сохранить заданные значения.
if (!(имя in мир.платформы.задано))
{
мир.платформы.задано[имя] = {};
}
мир.платформы.задано[имя][свойство] = значение;
console.debug("задано", мир.платформы.задано[имя]);
// Удалить физическое тело.
if (имя in мир.платформы.тела)
{
var тело = мир.платформы.тела[имя];
Matter.Composite.remove(мир.физика.движок.world, тело);
}
// Пересоздать физическое тело.
var задано = мир.платформы.задано[имя];
var умолчание = мир.платформы.умолчание;
var ширина = задано["ширина"] ? задано["ширина"] : умолчание["ширина"];
var высота = задано["высота"] ? задано["высота"] : умолчание["высота"];
var тело = Matter.Bodies.rectangle(
задано["x"] ? задано["x"] : умолчание["x"],
задано["y"] ? задано["y"] : умолчание["y"],
ширина,
высота,
{
isStatic: ("статика" in задано) ? задано["статика"] : умолчание["статика"],
}
);
console.debug("создать тело", тело);
Matter.Composite.add(мир.физика.движок.world, тело);
мир.платформы.тела[имя] = тело;
// Создать div.
if (!(имя in мир.платформы.элементы))
{
var элемент = document.createElement("div");
элемент.style.position = "absolute";
элемент.style.display = "block";
элемент.style.backgroundColor = умолчание["цвет"];
элемент.style.width = `${ширина}px`;
элемент.style.height = `${высота}px`;
элемент.style.transformOrigin = `center`;
document.body.appendChild(элемент);
мир.платформы.элементы[имя] = элемент;
}
// Обновить div.
var элемент = мир.платформы.элементы[имя];
if (свойство == "ширина")
{
элемент.style.width = `${ширина}px`;
}
else if (свойство == "высота")
{
элемент.style.height = `${высота}px`;
}
else if (свойство == "цвет")
{
элемент.style.backgroundColor = задано["цвет"];
}
});
// // // //
function обновитьПлатформы()
{
for (var имя in мир.платформы.тела)
{
var тело = мир.платформы.тела[имя];
if (тело.isSleeping)
{
continue;
}
var элемент = мир.платформы.элементы[имя];
let x = тело.position.x - элемент.offsetWidth / 2;
let y = тело.position.y - элемент.offsetHeight / 2;
let угол = тело.angle;
элемент.style.transform = `translate(${x}px, ${y}px) rotate(${угол}rad)`;
}
};