Files
mjs/240.слежение.js

156 lines
4.2 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.

мир.слежение = {
умолчание: {
смещение: [0, 0],
скорость: 1,
},
задано: {},
};
// // // //
мир.ключники.push(function(ключ, путь, значение){
if (!путь[0].startsWith("слежение"))
{
return;
}
var имя = путь[1];
var свойство = путь.slice(2).join(".");
if (!мир.слежение.задано[имя])
{
мир.слежение.задано[имя] = {};
}
мир.слежение.задано[имя][свойство] = значение;
});
// // // //
мир.слежение.обновить = function()
{
var за = мир.слежение.задано;
var ум = мир.слежение.умолчание;
for (var имя in за)
{
var эл = null;
if (имя == "камера")
{
эл = document.getElementById("корень");
}
else
{
эл = мир.слежение.элемент(за[имя]);
}
var тело = null;
var имяТела = за[имя]["объект"];
if (имяТела)
{
тело = мир.объекты.тела[имяТела];
}
мир.слежение.обновитьЭлемент(эл, тело, за[имя], ум);
}
};
// // // //
мир.слежение.элемент = function(задано)
{
var id = null;
var изображение = задано["изображение"];
if (изображение)
{
id = мир.изображения.элементы[изображение].id;
}
return document.getElementById(id);
};
// // // //
мир.слежение.обновитьЭлемент = function(элемент, тело, задано, умолчание)
{
if (!элемент || !тело)
{
return;
}
var скорость = задано.скорость ? задано.скорость : умолчание.скорость;
var смещениеX = задано["смещение.0"] ? задано["смещение.0"] : умолчание.смещение[0];
var смещениеY = задано["смещение.1"] ? задано["смещение.1"] : умолчание.смещение[1];
// Сейчас.
var x0 = 0;
if (элемент.style.left.endsWith("px"))
{
x0 = элемент.style.left.slice(0, -2);
}
var y0 = 0;
if (элемент.style.top.endsWith("px"))
{
y0 = элемент.style.top.slice(0, -2);
}
// Цель.
//var x1 = window.innerWidth / 2 - тело.position.x;
//var y1 = window.innerHeight / 2 - тело.position.y;
var x1 = тело.position.x + смещениеX;
var y1 = тело.position.y + смещениеY;
// Плавно.
function lerp(v0, v1, t) {
return v0 * (1 - t) + v1 * t;
}
var x = lerp(x0, x1, скорость);
var y = lerp(y0, y1, скорость);
элемент.style.left = `${x}px`;
элемент.style.top = `${y}px`;
};
// // // //
/*
function обновитьКамеру()
{
var объект = мир.камера.задано.объект;
var центрировать = мир.камера.задано.центрировать;
var тело = мир.объекты.тела[объект];
if (!тело || !центрировать)
{
return;
}
var корень = document.getElementById("корень");
// Сейчас.
var x0 = 0;
if (корень.style.left.endsWith("px"))
{
x0 = корень.style.left.slice(0, -2);
}
var y0 = 0;
if (корень.style.top.endsWith("px"))
{
y0 = корень.style.top.slice(0, -2);
}
// Цель.
var x1 = window.innerWidth / 2 - тело.position.x;
var y1 = window.innerHeight / 2 - тело.position.y;
// Плавно.
function lerp(v0, v1, t) {
return v0 * (1 - t) + v1 * t;
}
var x = lerp(x0, x1, центрировать);
var y = lerp(y0, y1, центрировать);
корень.style.left = `${x}px`;
корень.style.top = `${y}px`;
}
*/