|
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111 |
- 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.создать();
- };
|