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 @@ +