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

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()
{
@@ -9,6 +9,33 @@ function Объекты(события, изображения, тела, сле
события.подписать(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(ключ, путь, значение)
{
if (путь[0] != "объекты")
@@ -16,60 +43,37 @@ function Объекты(события, изображения, тела, сле
return;
}
var имя = путь[1];
var свойство = путь.slice(2).join(".");
let имя = путь[1];
let свойство = путь.slice(2).join(".");
if (!this.задано[имя])
{
this.задано[имя] = {};
}
this.задано[имя][свойство] = значение;
this.обновитьОбъект(имя);
let пр = свойство.startsWith("пр.");
if (пр)
{
this.пересоздатьТело(имя);
}
this.обновитьИзображение(имя);
};
this.обновитьОбъект = function(имя)
this.пересоздатьТело = function(имя)
{
/*
var тело = тела.тела[за.тело];
if (!тело)
{
return;
}
var элемент = изображения.элементы[за.изображение];
var ум = this.умолчание;
// Параметры.
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, угол);
*/
let имяТела = `объекты-${имя}`;
let за = this.задано[имя];
let пр = this.умолчание.пр;
состояние.разобрать({
тела: {
[имяТела]: {
x: за["пр.0"] ? за["пр.0"] : пр[0],
y: за["пр.1"] ? за["пр.1"] : пр[1],
ширина: за["пр.2"] ? за["пр.2"] : пр[2],
высота: за["пр.3"] ? за["пр.3"] : пр[3],
},
},
});
};
// Конструктор.

View File

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