Files
MYPOM/4.0/игра/180.Объекты.js

111 lines
3.2 KiB
JavaScript

function Объекты(состояние)
{
this.создать = function()
{
this.умолчание = {
пр: [0, 0, 40, 20],
};
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.создать();
};