From e41ffb9eb6ce568c64cf42b8d50c5f906fc24fcd 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: Tue, 14 Sep 2021 14:20:34 +0300 Subject: [PATCH] =?UTF-8?q?z64=20=D0=B2=D1=81=D0=B5=D0=B3=D0=B4=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../100.Состояние.js | 61 +++++++++++++++++++ .../700.Игра.js | 10 +++ 3.2/проигрыватель/index.html | 1 + 3.2/редактор/100.Редактор.js | 14 +++-- 4 files changed, 82 insertions(+), 4 deletions(-) create mode 100644 3.2/проигрыватель/100.Состояние.js diff --git a/3.2/проигрыватель/100.Состояние.js b/3.2/проигрыватель/100.Состояние.js new file mode 100644 index 0000000..332e9e3 --- /dev/null +++ b/3.2/проигрыватель/100.Состояние.js @@ -0,0 +1,61 @@ +function Состояние() +{ + this.создать = function() + { + this.обработчик = null; + this.значения = {}; + }; + + this.выпрямить = function(obj) + { + // https://stackoverflow.com/a/42121920 + var newObj = {}; + for (var key in obj) + { + if (typeof obj[key] === 'object' && obj[key] !== null) + { + var temp = this.выпрямить(obj[key]) + for (var key2 in temp) + { + newObj[key + "." + key2] = temp[key2]; + } + } + else + { + newObj[key] = obj[key]; + } + } + return newObj; + }; + + this.лишьНовыеЗначения = function(значения) { + var новые = {}; + for (var ключ in значения) + { + var было = this.значения[ключ]; + var стало = значения[ключ]; + if (!(было != null && было == стало)) + { + новые[ключ] = стало; + this.значения[ключ] = стало; + } + } + return новые; + }; + + this.разобрать = function(словарь) { +/**/console.debug("01"); + var значения = this.лишьНовыеЗначения(this.выпрямить(словарь)); +/**/console.debug("02"); + for (var ключ in значения) + { + var путь = ключ.split("."); + var значение = значения[ключ]; + this.обработчик(ключ, путь, значение); + } + }; + + + // Конструктор. + this.создать(); +} diff --git a/3.2/проигрыватель/700.Игра.js b/3.2/проигрыватель/700.Игра.js index 403f7ab..f9c6b41 100644 --- a/3.2/проигрыватель/700.Игра.js +++ b/3.2/проигрыватель/700.Игра.js @@ -2,6 +2,10 @@ function Игра() { this.создать = function() { + this.состояние = new Состояние(); + this.состояние.обработчик = this.обработатьКлюч; + var тут = this; + мир.разобрать = function(словарь) { тут.состояние.разобрать(словарь); }; this.события = new События(); this.пз = new ПараметрыЗапуска(); var z64 = this.пз.параметры["z64"]; @@ -15,9 +19,15 @@ function Игра() { var код = мир.изZ64(z64); /**/console.debug("Игра.исполнитьКод:", код); + eval(код); } }; + this.обработатьКлюч = function(ключ, путь, значение) + { +/**/console.debug("Игра.обработатьК", ключ, путь, значение); + }; + this.отслеживатьОбновленияКода = function() { var тут = this; diff --git a/3.2/проигрыватель/index.html b/3.2/проигрыватель/index.html index 45a6a67..c55325a 100644 --- a/3.2/проигрыватель/index.html +++ b/3.2/проигрыватель/index.html @@ -16,6 +16,7 @@ +