From 86bd88e2211b5e7ba4efd33a8ab2ff13250bc411 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=9C=D0=B8=D1=85=D0=B0=D0=B8=D0=BB=20=D0=9A=D0=B0=D0=BF?= =?UTF-8?q?=D0=B5=D0=BB=D1=8C=D0=BA=D0=BE?= Date: Wed, 1 Dec 2021 14:55:19 +0300 Subject: [PATCH] =?UTF-8?q?=D0=BE=D0=B1=D1=8A=D0=B5=D0=BA=D1=82=D1=8B=20?= =?UTF-8?q?=D0=BF=D0=BE=D0=B4=D0=B4=D0=B5=D1=80=D0=B6=D0=B8=D0=B2=D0=B0?= =?UTF-8?q?=D1=8E=D1=82=20=D1=81=D0=BC=D0=B5=D0=BD=D1=83=20=D0=B2=D0=B8?= =?UTF-8?q?=D0=B4=D0=B0/=D0=B0=D0=BD=D0=B8=D0=BC=D0=B0=D1=86=D0=B8=D1=8E?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- 4.1/игра/180.Объекты.js | 137 +++++++++++++++++++++-------- 4.1/игра/700.Игра.js | 2 +- 2 files changed, 99 insertions(+), 40 deletions(-) diff --git a/4.1/игра/180.Объекты.js b/4.1/игра/180.Объекты.js index 88e7677..be41729 100644 --- a/4.1/игра/180.Объекты.js +++ b/4.1/игра/180.Объекты.js @@ -1,4 +1,4 @@ -function Объекты(состояние) +function Объекты(состояние, события) { this.создать = function() { @@ -6,15 +6,111 @@ function Объекты(состояние) пр: [0, 0, 40, 20], }; this.задано = {}; + события.подписать(this); }; - this.обновитьИзображение = function(имя, пр, вид) + // Ключи и события. + + 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.задано[имя]["вид"]; + let анимация = this.задано[имя]["анимация"]; + this.обновитьИзображение(производноеИмя, пр, вид, анимация); + } + }; + + 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.задано[имя]["анимация"]; + let производноеИмя = `объекты-${имя}`; + this.обновитьИзображение(производноеИмя, пр, вид, анимация); + }; + + this.обновитьИзображение = function(имя, пр, вид, анимация) { состояние.разобрать({ изображения: { [имя]: { пр: пр, вид: вид, + анимация: анимация, }, }, }); @@ -55,43 +151,6 @@ function Объекты(состояние) }); }; - this.обработатьКлюч = function(ключ, путь, значение) - { - if (путь[0] != "объекты") - { - return; - } - - let имя = путь[1]; - let свойство = путь.slice(2).join("."); - if (!this.задано[имя]) - { - this.задано[имя] = {}; - } - this.задано[имя][свойство] = значение; - - let производноеИмя = `объекты-${имя}`; - - if (свойство.startsWith("пр.")) - { - let пр = this.пр(имя); - this.обновитьПозициюРазмер(производноеИмя, пр); - this.обновитьСлежение(производноеИмя, пр); - let вид = this.задано[имя]["вид"]; - this.обновитьИзображение(производноеИмя, пр, вид); - } - else if (свойство == "физика") - { - this.обновитьФизику(производноеИмя, значение); - } - else if (свойство == "вид") - { - let пр = this.пр(имя); - let вид = this.задано[имя]["вид"]; - this.обновитьИзображение(производноеИмя, пр, вид); - } - }; - this.пр = function(имя) { let за = this.задано[имя]; diff --git a/4.1/игра/700.Игра.js b/4.1/игра/700.Игра.js index 8fe6095..cc18cc4 100644 --- a/4.1/игра/700.Игра.js +++ b/4.1/игра/700.Игра.js @@ -18,7 +18,7 @@ function Игра() мир.физика = new Физика(мир.события); мир.тела = new Тела(мир.события, мир.физика, мир.физдвижок.world); мир.слежение = new Слежение(мир.состояние, мир.изображения, мир.тела); - мир.объекты = new Объекты(мир.состояние); + мир.объекты = new Объекты(мир.состояние, мир.события); let адресИгры = window.location.pathname + "/../игра.html?z64="; мир.сцена = new Сцена(мир.состояние, мир.события, мир.тела, адресИгры); мир.мышь = new Мышь(мир.события);