z64 всегда
This commit is contained in:
61
3.2/проигрыватель/100.Состояние.js
Normal file
61
3.2/проигрыватель/100.Состояние.js
Normal file
@@ -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 (событие == "код корректен")
|
||||||
|
|||||||
Reference in New Issue
Block a user