@@ -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.создать(); | |||||
} |
@@ -2,6 +2,10 @@ function Игра() | |||||
{ | { | ||||
this.создать = function() | this.создать = function() | ||||
{ | { | ||||
this.состояние = new Состояние(); | |||||
this.состояние.обработчик = this.обработатьКлюч; | |||||
var тут = this; | |||||
мир.разобрать = function(словарь) { тут.состояние.разобрать(словарь); }; | |||||
this.события = new События(); | this.события = new События(); | ||||
this.пз = new ПараметрыЗапуска(); | this.пз = new ПараметрыЗапуска(); | ||||
var z64 = this.пз.параметры["z64"]; | var z64 = this.пз.параметры["z64"]; | ||||
@@ -15,9 +19,15 @@ function Игра() | |||||
{ | { | ||||
var код = мир.изZ64(z64); | var код = мир.изZ64(z64); | ||||
/**/console.debug("Игра.исполнитьКод:", код); | /**/console.debug("Игра.исполнитьКод:", код); | ||||
eval(код); | |||||
} | } | ||||
}; | }; | ||||
this.обработатьКлюч = function(ключ, путь, значение) | |||||
{ | |||||
/**/console.debug("Игра.обработатьК", ключ, путь, значение); | |||||
}; | |||||
this.отслеживатьОбновленияКода = function() | this.отслеживатьОбновленияКода = function() | ||||
{ | { | ||||
var тут = this; | var тут = this; | ||||
@@ -16,6 +16,7 @@ | |||||
<script src="../общее/100.События.js"></script> | <script src="../общее/100.События.js"></script> | ||||
<script src="../общее/200.функции.js"></script> | <script src="../общее/200.функции.js"></script> | ||||
<script src="../общее/300.ПараметрыЗапуска.js"></script> | <script src="../общее/300.ПараметрыЗапуска.js"></script> | ||||
<script src="100.Состояние.js"></script> | |||||
<script src="700.Игра.js"></script> | <script src="700.Игра.js"></script> | ||||
<script> | <script> | ||||
var игра = new Игра(); | var игра = new Игра(); | ||||
@@ -32,10 +32,6 @@ function Редактор(события, имяРедактора) | |||||
{ | { | ||||
var содержимое = this.ace.session.getValue(); | var содержимое = this.ace.session.getValue(); | ||||
var z64 = мир.вZ64(содержимое); | var z64 = мир.вZ64(содержимое); | ||||
var путь = window.location.pathname + "?z64=" + z64; | |||||
history.pushState(null, "", путь); | |||||
document.title = `${this.первоначальныйЗаголовок} ${z64.length}:${z64.slice(z64.length - 5)}`; | |||||
// Исполняем явно код лишь первый раз. | // Исполняем явно код лишь первый раз. | ||||
var проигрыватель = document.getElementById("проигрыватель"); | var проигрыватель = document.getElementById("проигрыватель"); | ||||
if (!проигрыватель.src) | if (!проигрыватель.src) | ||||
@@ -49,10 +45,20 @@ function Редактор(события, имяРедактора) | |||||
} | } | ||||
}; | }; | ||||
this.обновитьАдреснуюСтрокуИЗаголовок = function() | |||||
{ | |||||
var содержимое = this.ace.session.getValue(); | |||||
var z64 = мир.вZ64(содержимое); | |||||
var путь = window.location.pathname + "?z64=" + z64; | |||||
history.pushState(null, "", путь); | |||||
document.title = `${this.первоначальныйЗаголовок} ${z64.length}:${z64.slice(z64.length - 5)}`; | |||||
}; | |||||
this.обработатьСобытие = function(событие) | this.обработатьСобытие = function(событие) | ||||
{ | { | ||||
if (событие == "завершили редактирование") | if (событие == "завершили редактирование") | ||||
{ | { | ||||
this.обновитьАдреснуюСтрокуИЗаголовок(); | |||||
this.проверитьКорректностьКода(); | this.проверитьКорректностьКода(); | ||||
} | } | ||||
else if (событие == "код корректен") | else if (событие == "код корректен") | ||||