|
- function Объекты(состояние, события)
- {
- this.создать = function()
- {
- this.умолчание = {
- пр: [0, 0, 40, 20],
- };
- this.задано = {};
- события.подписать(this);
- };
-
- // Ключи и события.
-
- this.обработатьКлюч = function(ключ, путь, значение)
- {
- if (путь[0] != "объекты")
- {
- return;
- }
-
- let имя = путь[1];
- let свойство = путь.slice(2).join(".");
- if (!this.задано[имя])
- {
- this.задано[имя] = {};
- }
- this.задано[имя][свойство] = значение;
-
- let производноеИмя = `объекты-${имя}`;
-
- if (свойство.startsWith("пр."))
- {
- let пр = this.пр(имя);
- this.обновитьПозициюРазмер(производноеИмя, пр);
- this.обновитьСлежение(производноеИмя, пр);
- let вид = this.задано[имя]["вид"];
- let анимация = this.задано[имя]["анимация"];
- this.обновитьИзображение(производноеИмя, пр, вид, анимация);
- }
- else if (свойство == "физика")
- {
- this.обновитьФизику(производноеИмя, значение);
- }
- else if (
- свойство == "вид" ||
- свойство == "анимация"
- ) {
- let вид = this.задано[имя]["вид"];
- let анимация = this.задано[имя]["анимация"];
- this.обновитьИзображение(производноеИмя, null, вид, анимация);
- }
- };
-
- this.обработатьСобытие = function(событие)
- {
- let в = "виды/";
- let а = "анимации/";
- if (событие.startsWith(в))
- {
- let вид = событие.substring(в.length);
- this.обновитьОбъектыВида(вид);
- }
- else if (событие.startsWith(а))
- {
- let анимация = событие.substring(а.length);
- this.обновитьОбъектыАнимации(анимация);
- }
- };
-
- this.обновитьОбъектыАнимации = function(анимация)
- {
- for (let имя in this.задано)
- {
- let за = this.задано[имя];
- let зан = за["анимация"];
- if (зан && зан == анимация)
- {
- this.обновитьВидАнимацию(имя);
- }
- }
- };
-
- this.обновитьОбъектыВида = function(вид)
- {
- for (let имя in this.задано)
- {
- let за = this.задано[имя];
- let зви = за["вид"];
- if (зви && зви == вид)
- {
- this.обновитьВидАнимацию(имя);
- }
- }
- };
-
- this.обновитьВидАнимацию = function(имя)
- {
- let вид = this.задано[имя]["вид"];
- let анимация = this.задано[имя]["анимация"];
- let производноеИмя = `объекты-${имя}`;
- this.обновитьИзображение(производноеИмя, null, вид, анимация);
- };
-
- this.обновитьИзображение = function(имя, пр, вид, анимация)
- {
- var описание = {
- вид: вид,
- анимация: анимация,
- };
- if (пр)
- {
- описание["пр"] = пр;
- }
- состояние.разобрать({
- изображения: {
- [имя]: описание,
- },
- });
- };
-
- this.обновитьПозициюРазмер = function(имя, пр)
- {
- состояние.разобрать({
- тела: {
- [имя]: {
- пр: пр,
- },
- },
- });
- };
-
- this.обновитьСлежение = function(имя, пр)
- {
- состояние.разобрать({
- слежение: {
- [имя]: {
- изображение: имя,
- тело: имя,
- смещение: [-пр[2] / 2, -пр[3] / 2],
- },
- },
- });
- };
-
- this.обновитьФизику = function(имя, значение)
- {
- состояние.разобрать({
- тела: {
- [имя]: {
- физика: значение,
- },
- },
- });
- };
-
- this.пр = function(имя)
- {
- let за = this.задано[имя];
- let пр = this.умолчание.пр;
- return [
- за["пр.0"] ? за["пр.0"] : пр[0],
- за["пр.1"] ? за["пр.1"] : пр[1],
- за["пр.2"] ? за["пр.2"] : пр[2],
- за["пр.3"] ? за["пр.3"] : пр[3],
- ];
- };
-
- // Конструктор.
- this.создать();
- };
|