112 lines
3.3 KiB
JavaScript
112 lines
3.3 KiB
JavaScript
function Объекты(события, состояние)
|
|
{
|
|
this.создать = function()
|
|
{
|
|
this.умолчание = {
|
|
пр: [0, 0, 40, 20],
|
|
};
|
|
this.задано = {};
|
|
события.подписать(this);
|
|
};
|
|
|
|
this.обновитьИзображение = function(имя)
|
|
{
|
|
let имяИзо = `объекты-${имя}`;
|
|
let за = this.задано[имя];
|
|
let пр = this.пр(имя);
|
|
var описание = {
|
|
ширина: пр[2],
|
|
высота: пр[3],
|
|
вид: {},
|
|
};
|
|
for (var ключ in за)
|
|
{
|
|
if (ключ.startsWith("вид."))
|
|
{
|
|
var к = ключ.substring(4);
|
|
var значение = за[ключ];
|
|
описание.вид[к] = значение;
|
|
}
|
|
}
|
|
|
|
состояние.разобрать({
|
|
изображения: {
|
|
[имяИзо]: описание,
|
|
},
|
|
});
|
|
};
|
|
|
|
this.обновитьСлежение = function(имя)
|
|
{
|
|
let имяС = `объекты-${имя}`;
|
|
let пр = this.пр(имя);
|
|
состояние.разобрать({
|
|
слежение: {
|
|
[имяС]: {
|
|
изображение: имяС,
|
|
тело: имяС,
|
|
смещение: [-пр[2] / 2, -пр[3] / 2],
|
|
},
|
|
},
|
|
});
|
|
};
|
|
|
|
this.обработатьКлюч = function(ключ, путь, значение)
|
|
{
|
|
if (путь[0] != "объекты")
|
|
{
|
|
return;
|
|
}
|
|
|
|
let имя = путь[1];
|
|
let свойство = путь.slice(2).join(".");
|
|
if (!this.задано[имя])
|
|
{
|
|
this.задано[имя] = {};
|
|
}
|
|
this.задано[имя][свойство] = значение;
|
|
|
|
let пр = свойство.startsWith("пр.");
|
|
if (пр)
|
|
{
|
|
this.пересоздатьТело(имя);
|
|
this.обновитьСлежение(имя);
|
|
}
|
|
this.обновитьИзображение(имя);
|
|
};
|
|
|
|
this.пересоздатьТело = function(имя)
|
|
{
|
|
let имяТела = `объекты-${имя}`;
|
|
let пр = this.пр(имя);
|
|
состояние.разобрать({
|
|
тела: {
|
|
[имяТела]: {
|
|
x: пр[0],
|
|
y: пр[1],
|
|
ширина: пр[2],
|
|
высота: пр[3],
|
|
физика: {
|
|
isStatic: false,
|
|
},
|
|
},
|
|
},
|
|
});
|
|
};
|
|
|
|
this.пр = function(имя)
|
|
{
|
|
let за = this.задано[имя];
|
|
let пр = this.умолчание.пр;
|
|
return [
|
|
за["пр.0"] ? за["пр.0"] : пр[0],
|
|
за["пр.1"] ? за["пр.1"] : пр[1],
|
|
за["пр.2"] ? за["пр.2"] : пр[2],
|
|
за["пр.3"] ? за["пр.3"] : пр[3],
|
|
];
|
|
};
|
|
|
|
// Конструктор.
|
|
this.создать();
|
|
};
|