объекты: тело + изо

This commit is contained in:
2021-10-04 15:10:59 +03:00
parent f879f86879
commit 1b49e1e0b3
2 changed files with 52 additions and 48 deletions

View File

@@ -1,4 +1,4 @@
function Объекты(события, изображения, тела, слежение) function Объекты(события, состояние)
{ {
this.создать = function() this.создать = function()
{ {
@@ -9,6 +9,33 @@ function Объекты(события, изображения, тела, сле
события.подписать(this); события.подписать(this);
}; };
this.обновитьИзображение = function(имя)
{
let имяИзо = `объекты-${имя}`;
let за = this.задано[имя];
let пр = this.умолчание.пр;
var описание = {
ширина: за["пр.2"] ? за["пр.2"] : пр[2],
высота: за["пр.3"] ? за["пр.3"] : пр[3],
вид: {},
};
for (var ключ in за)
{
if (ключ.startsWith("вид."))
{
var к = ключ.substring(4);
var значение = за[ключ];
описание.вид[к] = значение;
}
}
состояние.разобрать({
изображения: {
[имяИзо]: описание,
},
});
};
this.обработатьКлюч = function(ключ, путь, значение) this.обработатьКлюч = function(ключ, путь, значение)
{ {
if (путь[0] != "объекты") if (путь[0] != "объекты")
@@ -16,60 +43,37 @@ function Объекты(события, изображения, тела, сле
return; return;
} }
var имя = путь[1]; let имя = путь[1];
var свойство = путь.slice(2).join("."); let свойство = путь.slice(2).join(".");
if (!this.задано[имя]) if (!this.задано[имя])
{ {
this.задано[имя] = {}; this.задано[имя] = {};
} }
this.задано[имя][свойство] = значение; this.задано[имя][свойство] = значение;
this.обновитьОбъект(имя);
let пр = свойство.startsWith("пр.");
if (пр)
{
this.пересоздатьТело(имя);
}
this.обновитьИзображение(имя);
}; };
this.обновитьОбъект = function(имя) this.пересоздатьТело = function(имя)
{ {
/* let имяТела = `объекты-${имя}`;
var тело = тела.тела[за.тело]; let за = this.задано[имя];
if (!тело) let пр = this.умолчание.пр;
{ состояние.разобрать({
return; тела: {
} [имяТела]: {
x: за["пр.0"] ? за["пр.0"] : пр[0],
var элемент = изображения.элементы[за.изображение]; y: за["пр.1"] ? за["пр.1"] : пр[1],
var ум = this.умолчание; ширина: за["пр.2"] ? за["пр.2"] : пр[2],
высота: за["пр.3"] ? за["пр.3"] : пр[3],
// Параметры. },
var скорость = за.скорость ? за.скорость : ум.скорость; },
var смещениеX = за["смещение.0"] ? за["смещение.0"] : ум.смещение[0]; });
var смещениеY = за["смещение.1"] ? за["смещение.1"] : ум.смещение[1];
var предел = за.предел ? за.предел : ум.предел;
// Текущая позиция.
var x0 = 0;
if (элемент.dataset.слежениеX)
{
x0 = элемент.dataset.слежениеX;
}
var y0 = 0;
if (элемент.dataset.слежениеY)
{
y0 = элемент.dataset.слежениеY;
}
// Целевая позиция.
var x1 = тело.position.x + смещениеX;
var y1 = тело.position.y + смещениеY;
// Radians -> Degrees.
var угол = тело.angle * 180 / Math.PI;
// Устанавливаемая плавно позиция.
var x = this.lerp(x0, x1, скорость, предел);
var y = this.lerp(y0, y1, скорость, предел);
элемент.dataset.слежениеX = x;
элемент.dataset.слежениеY = y;
изображения.обновитьРасположение(за.изображение, x, y, угол);
*/
}; };
// Конструктор. // Конструктор.

View File

@@ -10,7 +10,7 @@ function Игра()
мир.изображения = new Изображения(корень), мир.изображения = new Изображения(корень),
мир.тела = new Тела(мир.события, мир.физика.движок.world); мир.тела = new Тела(мир.события, мир.физика.движок.world);
мир.слежение = new Слежение(мир.события, мир.изображения, мир.тела); мир.слежение = new Слежение(мир.события, мир.изображения, мир.тела);
мир.объекты = new Объекты(мир.события, мир.изображения, мир.тела, мир.слежение); мир.объекты = new Объекты(мир.события, мир.состояние);
this.ключники = [ this.ключники = [
new Заголовок(), new Заголовок(),
мир.изображения, мир.изображения,