Browse Source

M-3.4

master
parent
commit
4c644ca9ae
33 changed files with 1747 additions and 1 deletions
  1. +36
    -0
      M/3.4/игра.html
  2. +10
    -0
      M/3.4/игра/050.Заголовок.js
  3. +104
    -0
      M/3.4/игра/100.Изображения.js
  4. +19
    -0
      M/3.4/игра/120.Физика.js
  5. +123
    -0
      M/3.4/игра/140.Тела.js
  6. +97
    -0
      M/3.4/игра/160.Слежение.js
  7. +65
    -0
      M/3.4/игра/700.Игра.js
  8. +1
    -0
      M/3.4/игра/matter-js
  9. +31
    -0
      M/3.4/общее/100.События.js
  10. +61
    -0
      M/3.4/общее/150.Состояние.js
  11. +91
    -0
      M/3.4/общее/200.функции.js
  12. +1
    -0
      M/3.4/общее/base64-js
  13. +1
    -0
      M/3.4/общее/pako
  14. +102
    -0
      M/3.4/редактор.html
  15. +127
    -0
      M/3.4/редактор/100.Редактор.js
  16. +53
    -0
      M/3.4/редактор/200.Пульт.js
  17. +13
    -0
      M/3.4/редактор/700.Муром.js
  18. +1
    -0
      M/3.4/редактор/ace
  19. +1
    -0
      M/3.4/редактор/uikit
  20. +11
    -0
      M/doc/pskov.cfg
  21. +115
    -0
      M/doc/ru/bodies.html
  22. +24
    -0
      M/doc/ru/bodies.md
  23. +116
    -0
      M/doc/ru/images.html
  24. +26
    -0
      M/doc/ru/images.md
  25. +4
    -0
      M/doc/ru/index.html
  26. +107
    -0
      M/doc/ru/item.template
  27. +114
    -0
      M/doc/ru/keys.html
  28. +18
    -0
      M/doc/ru/keys.md
  29. +115
    -0
      M/doc/ru/title.html
  30. +23
    -0
      M/doc/ru/title.md
  31. +114
    -0
      M/doc/ru/tracking.html
  32. +22
    -0
      M/doc/ru/tracking.md
  33. +1
    -1
      M/index.html

+ 36
- 0
M/3.4/игра.html View File

@@ -0,0 +1,36 @@
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<script src="общее/base64-js/base64js.min.js"></script>
<script src="общее/pako/pako.min.js"></script>
<script src="игра/matter-js/matter.min.js"></script>
<style>
body {
overflow: hidden;
}
#корень
{
position: relative;
}
</style>
</head>
<body>
<div id="заставка"></div>
<div id="корень"></div>
<div id="отладка"></div>

<script src="общее/100.События.js"></script>
<script src="общее/150.Состояние.js"></script>
<script src="общее/200.функции.js"></script>
<script src="игра/050.Заголовок.js"></script>
<script src="игра/100.Изображения.js"></script>
<script src="игра/120.Физика.js"></script>
<script src="игра/140.Тела.js"></script>
<script src="игра/160.Слежение.js"></script>
<script src="игра/700.Игра.js"></script>
<script>
var игра = new Игра();
</script>
</body>
</html>

+ 10
- 0
M/3.4/игра/050.Заголовок.js View File

@@ -0,0 +1,10 @@
function Заголовок()
{
this.обработатьКлюч = function(ключ, путь, значение)
{
if (ключ == "заголовок")
{
document.title = значение;
}
}
}

+ 104
- 0
M/3.4/игра/100.Изображения.js View File

@@ -0,0 +1,104 @@
function Изображения(корень)
{
this.создать = function()
{
this.умолчание = {
x: 0,
y: 0,
ширина: 100,
высота: 100,
угол: 0,
};
this.задано = {};
this.элементы = {};
};

this.создатьИлиПолучитьЭлемент = function(имя)
{
var эл = this.элементы[имя];
if (эл)
{
return эл;
}

var ум = this.умолчание;
эл = document.createElement("div");
эл.id = `изображения-${имя}`;
эл.style.position = "absolute";
эл.style.display = "block";
// Свойства по умолчанию.
эл.style.left = `${ум.x}px`;
эл.style.top = `${ум.y}px`;
эл.style.width = `${ум.ширина}px`;
эл.style.height = `${ум.высота}px`;
эл.style.transform = `rotate(${ум.угол}rad)`;

this.элементы[имя] = эл;
корень.appendChild(эл);
return эл;
};

this.обновитьЭлемент = function(имя, свойство, значение)
{
if (!this.задано[имя])
{
this.задано[имя] = {};
}
this.задано[имя][свойство] = значение;
var за = this.задано[имя];
var эл = this.создатьИлиПолучитьЭлемент(имя);

if (свойство == "ширина")
{
эл.style.width = `${за.ширина}px`;
}
else if (свойство == "высота")
{
эл.style.height = `${за.высота}px`;
}
else if (
(свойство == "x") ||
(свойство == "y") ||
(свойство == "угол") ||
(свойство == "вид.transform")
) {
var ум = this.умолчание;
var x = за.x ? за.x : ум.x;
var y = за.y ? за.y : ум.y;
var угол = за.угол ? за.угол : ум.угол;
this.обновитьРасположение(имя, x, y, угол);
}
else if (свойство.startsWith("вид"))
{
var параметр = свойство.substring(4);
эл.style.setProperty(параметр, значение);
}
};

this.обновитьРасположение = function(имя, x, y, угол)
{
var за = this.задано[имя];
var эл = this.элементы[имя];
эл.style.left = `${x}px`;
эл.style.top = `${y}px`;
var transform = `rotate(${угол}deg) `;
if (за["вид.transform"])
{
transform += за["вид.transform"];
}
эл.style.transform = transform;
};

this.обработатьКлюч = function(ключ, путь, значение)
{
if (путь[0] == "изображения")
{
var имя = путь[1];
var свойство = путь.slice(2).join(".");
this.обновитьЭлемент(имя, свойство, значение);
}
};

// Конструктор.
this.создать();
}

+ 19
- 0
M/3.4/игра/120.Физика.js View File

@@ -0,0 +1,19 @@
function Физика()
{
this.создать = function()
{
this.движок = Matter.Engine.create({
enableSleeping: true,
gravity: {
y: 2,
},
});
};

this.обновить = function() {
Matter.Engine.update(this.движок);
};

// Конструктор.
this.создать();
}

+ 123
- 0
M/3.4/игра/140.Тела.js View File

@@ -0,0 +1,123 @@
function Тела(события, физмир)
{
this.создать = function()
{
this.умолчание = {
x: 0,
y: 0,
ширина: 40,
высота: 20,
часть: false,
физика: {
isStatic: true,
},
};

this.задано = {};
this.тела = {};
this.имена = {};
события.подписать(this);
};

this.именаЧастей = function(за)
{
var имена = [];
for (var ключ in за)
{
if (ключ.startsWith("части"))
{
имена.push(за[ключ]);
}
}
return имена;
};

this.обработатьКлюч = function(ключ, путь, значение)
{
if (путь[0] != "тела")
{
return;
}

var имя = путь[1];
var свойство = путь.slice(2).join(".");
if (!this.задано[имя])
{
this.задано[имя] = {};
}
this.задано[имя][свойство] = значение;

this.пересоздатьТело(имя);
};

this.пересоздатьТело = function(имя) {
// Удаляем старое тело.
if (имя in this.тела)
{
var тело = this.тела[имя];
delete this.имена[тело.id];
// Всегда удаляем из мира: и составные, и несоставные тела.
Matter.Composite.remove(физмир, тело);
}

var за = this.задано[имя];
var ум = this.умолчание;
var x = (за.x != null) ? за.x : ум.x;
var y = (за.y != null) ? за.y : ум.y;
var ширина = за.ширина ? за.ширина : ум.ширина;
var высота = за.высота ? за.высота : ум.высота;
// Переводим x,y из левого верхнего угла в центр.
x = x + ширина / 2.0;
y = y + высота / 2.0;
// Параметры тела.
var параметры = {};
Object.assign(параметры, ум.физика);
for (var путь in за)
{
if (путь.startsWith("физика"))
{
var свойство = путь.slice(7);
мир.задатьПолныйКлюч(параметры, свойство, за[путь]);
}
}

var тело = null;
// Создаём новое составное тело.
if (за["части.0"])
{
параметры["parts"] = this.телаЧастей(this.именаЧастей(за));
тело = Matter.Body.create(параметры);
}
// Создаём новое несоставное тело.
// Вполне может быть частью другого составного тела.
else
{
тело = Matter.Bodies.rectangle(x, y, ширина, высота, параметры);
}
this.тела[имя] = тело;
this.имена[тело.id] = имя;

// Добавляем тело в физический мир, если оно не является частью другого составного тела.
var часть = за.часть ? за.часть : ум.часть;
if (!часть)
{
Matter.Composite.add(физмир, тело);
}
};

this.телаЧастей = function(имена)
{
var тела = [];
for (var н in имена)
{
var имя = имена[н];
var тело = this.тела[имя];
тела.push(тело);
}
return тела;
};

// Конструктор.
this.создать();
}


+ 97
- 0
M/3.4/игра/160.Слежение.js View File

@@ -0,0 +1,97 @@
function Слежение(события, изображения, тела)
{
this.создать = function()
{
this.умолчание = {
смещение: [0, 0],
скорость: 1,
предел: 0,
};
this.задано = {};
события.подписать(this);
};

this.обновить = function()
{
for (var имя in this.задано)
{
var за = this.задано[имя];
this.расположитьИзображение(за);
}
};

this.обработатьКлюч = function(ключ, путь, значение)
{
if (путь[0] != "слежение")
{
return;
}

var имя = путь[1];
var свойство = путь.slice(2).join(".");
if (!this.задано[имя])
{
this.задано[имя] = {};
}
this.задано[имя][свойство] = значение;
};

this.расположитьИзображение = function(за)
{
var тело = тела.тела[за.тело];
if (!тело)
{
return;
}

var элемент = изображения.элементы[за.изображение];
var ум = this.умолчание;

// Параметры.
var скорость = за.скорость ? за.скорость : ум.скорость;
var смещениеX = за["смещение.0"] ? за["смещение.0"] : ум.смещение[0];
var смещениеY = за["смещение.1"] ? за["смещение.1"] : ум.смещение[1];
var предел = за.предел ? за.предел : ум.предел;

// Текущая позиция.
var x0 = 0;
if (элемент.dataset.слежениеX)
{
x0 = элемент.dataset.слежениеX;
}
var y0 = 0;
if (элемент.dataset.слежениеY)
{
y0 = элемент.dataset.слежениеY;
}

// Целевая позиция.
var x1 = тело.position.x + смещениеX;
var y1 = тело.position.y + смещениеY;
// Radians -> Degrees.
var угол = тело.angle * 180 / Math.PI;

// Устанавливаемая плавно позиция.
var x = this.lerp(x0, x1, скорость, предел);
var y = this.lerp(y0, y1, скорость, предел);

элемент.dataset.слежениеX = x;
элемент.dataset.слежениеY = y;
изображения.обновитьРасположение(за.изображение, x, y, угол);
};

this.lerp = function(v0, v1, t, предел) {
// Убираем мельтешение в случае наличия предела.
if (предел)
{
var delta = Math.abs(v0 - v1);
if (delta < предел) {
return v0;
}
}
return v0 * (1 - t) + v1 * t;
};

// Конструктор.
this.создать();
};

+ 65
- 0
M/3.4/игра/700.Игра.js View File

@@ -0,0 +1,65 @@
function Игра()
{
this.создать = function()
{
var корень = document.getElementById("корень");
мир.события = new События();
мир.состояние = new Состояние();
мир.состояние.обработчик = (к, п, з) => { this.обработатьКлюч(к, п, з) };
мир.физика = new Физика();
мир.изображения = new Изображения(корень),
мир.тела = new Тела(мир.события, мир.физика.движок.world);
мир.слежение = new Слежение(мир.события, мир.изображения, мир.тела);
this.ключники = [
new Заголовок(),
мир.изображения,
мир.тела,
мир.слежение,
];

var z64 = мир.параметрыЗапуска()["z64"];
this.исполнитьКод(z64);
this.отслеживатьОбновленияКода();
this.обновить();
};

this.исполнитьКод = function(z64)
{
if (z64)
{
var код = мир.изZ64(z64);
eval(код);
}
};

this.обновить = function()
{
мир.физика.обновить();
мир.слежение.обновить();

var тут = this;
requestAnimationFrame(function() {
тут.обновить();
});
};

this.обработатьКлюч = function(ключ, путь, значение)
{
for (var номер in this.ключники)
{
var ключник = this.ключники[номер];
ключник.обработатьКлюч(ключ, путь, значение);
}
};

this.отслеживатьОбновленияКода = function()
{
var тут = this;
window.addEventListener("message", function(событие) {
тут.исполнитьКод(событие.data);
});
};

// Конструктор.
this.создать();
}

+ 1
- 0
M/3.4/игра/matter-js View File

@@ -0,0 +1 @@
../../стороннее/matter-js

+ 31
- 0
M/3.4/общее/100.События.js View File

@@ -0,0 +1,31 @@
function События()
{
this.создать = function()
{
this.обработчики = [];
};

this.подписать = function(обработчик)
{
this.обработчики.push(обработчик);
};

this.отписать = function(обработчик) {
var номер = this.обработчики.indexOf(обработчик);
if (номер != -1)
{
this.обработчики.splice(номер, 1);
}
};

this.уведомить = function(событие) {
for (var номер in this.обработчики)
{
var обработчик = this.обработчики[номер];
обработчик.обработатьСобытие(событие);
}
};

// Конструктор.
this.создать();
}

+ 61
- 0
M/3.4/общее/150.Состояние.js View 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(словарь) {
var значения = this.лишьНовыеЗначения(this.выпрямить(словарь));
for (var ключ in значения)
{
var путь = ключ.split(".");
var значение = значения[ключ];
if (this.обработчик)
{
this.обработчик(ключ, путь, значение);
}
}
};

// Конструктор.
this.создать();
}

+ 91
- 0
M/3.4/общее/200.функции.js View File

@@ -0,0 +1,91 @@
var мир = {};

мир.uuid = function()
{
// https://stackoverflow.com/a/2117523
return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(
/[xy]/g,
function(c)
{
var r = Math.random() * 16 | 0, v = c == 'x' ? r : (r & 0x3 | 0x8);
return v.toString(16);
}
);
};

мир.вZ64 = function(строка)
{
var байты = new TextEncoder("utf-8").encode(строка);
var архив = pako.deflate(байты, { to: 'string' });
return base64js.fromByteArray(архив);
};

мир.изZ64 = function(строка)
{
var архив = base64js.toByteArray(строка);
var байты = pako.inflate(архив);
return new TextDecoder("utf-8").decode(байты);
};

мир.задатьПолныйКлюч = function(словарь, полныйКлюч, значение) {
var путь = полныйКлюч.split(".");
var пройти = путь.length - 1;
var вложенность = словарь;
for (var номер = 0; номер < пройти; ++номер)
{
var ключ = путь[номер];
if (!(ключ in вложенность))
{
вложенность[ключ] = {};
вложенность = вложенность[ключ];
}
}
// Значение в конце вложенности.
var ключ = путь[пройти];
вложенность[ключ] = значение;
};

мир.назначитьКнопкамСобытия = function(события, список)
{
for (var номер in список)
{
const пара = список[номер];
var кнопка = document.getElementById(пара[0]);
кнопка.addEventListener("click", function(_) {
события.уведомить(пара[1]);
});
}
};

мир.параметрыЗапуска = function()
{
var параметры = {};
var запрос = window.location.search.substring(1);
var аргументы = запрос.split("&");
for (var номер in аргументы)
{
var арг = аргументы[номер];
var позицияЗнака = арг.indexOf("=");
// Лишь ключ.
if (позицияЗнака == -1)
{
var ключ = decodeURIComponent(арг);
параметры[ключ] = null;
}
// Ключ со значением.
else
{
var сыройКлюч = арг.slice(0, позицияЗнака);
var сыроеЗначение = арг.slice(позицияЗнака + 1);
var ключ = decodeURIComponent(сыройКлюч);
var значение = decodeURIComponent(сыроеЗначение);
параметры[ключ] = значение;
}
}
return параметры;
};

мир.разобрать = function(словарь)
{
мир.состояние.разобрать(словарь);
};

+ 1
- 0
M/3.4/общее/base64-js View File

@@ -0,0 +1 @@
../../стороннее/base64-js

+ 1
- 0
M/3.4/общее/pako View File

@@ -0,0 +1 @@
../../стороннее/pako

+ 102
- 0
M/3.4/редактор.html View File

@@ -0,0 +1,102 @@
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<title>M-3.4</title>

<script src="общее/base64-js/base64js.min.js"></script>
<script src="общее/pako/pako.min.js"></script>
<script src="редактор/ace/ace.js"></script>
<script src="редактор/ace/mode-javascript.js"></script>
<script src="редактор/ace/worker-javascript.js"></script>
<link rel="stylesheet" type="text/css" href="редактор/uikit/uikit.min.css" />
<script src="редактор/uikit/uikit.min.js"></script>
<script src="редактор/uikit/uikit-icons.min.js"></script>

<style>
#редактор
{
position: absolute;
left: 0;
top: 0;
bottom: 0;
width: calc(50% - 2em);
}
#пульт
{
position: absolute;
left: calc(50% - 2em);
top: 0;
bottom: 0;
width: 4em;
display: flex;
flex-direction: column;
border: 1px dashed gainsboro;
}
#проигрыватель
{
position: absolute;
right: 0;
top: 0;
bottom: 0;
width: calc(50% - 2em);
height: 100%;
border: 0px none;
}

.впульте
{
margin: 0 auto;
}
</style>
</head>
<body>
<div id="редактор"></div>
<div id="пульт">
<span id="ошибка" class="впульте">&nbsp;</span>
<a id="перезапустить" class="впульте uk-icon-button uk-margin-top" uk-icon="refresh" uk-tooltip="Перезапустить"></a>
<a id="отдельно" class="впульте uk-icon-button uk-margin-top" uk-icon="desktop" uk-tooltip="Запустить в отдельной вкладке"></a>
<a id="ссылка" class="впульте uk-icon-button uk-margin-top" uk-icon="link" uk-tooltip="Скопировать ссылку"></a>
<a id="документация" class="впульте uk-icon-button uk-margin-top" uk-icon="question" uk-tooltip="Документация"></a>
<a id="версия" class="впульте uk-icon-button uk-margin-top" uk-icon="git-branch" uk-tooltip="Версия"></a>
<div uk-dropdown="mode: click">
<table class="uk-table">
<tbody>
<tr>
<td>3.4</td>
<td>Документация</td>
</tr>
<tr>
<td><a href="../3.3/редактор/index.html">3.3</a></td>
<td>тела, слежение</td>
</tr>
<tr>
<td><a href="../3.2/редактор/index.html">3.2</a></td>
<td>мир.параметрыЗапуска, мир.разобрать, заголовок, изображения, состояние, физика</td>
</tr>
<tr>
<td><a href="../3.1/редактор/index.html">3.1</a></td>
<td>Кнопки перезапуска, копирования ссылки, запуска в отдельной вкладке</td>
</tr>
<tr>
<td><a href="../3.0/редактор/index.html">3.0</a></td>
<td>Проверка введённого кода на отсутствие синтаксических ошибок</td>
</tr>
</tbody>
</table>
</div>
</div>

<iframe id="проигрыватель" name="проигрыватель"></iframe>
<script src="общее/100.События.js"></script>
<script src="общее/150.Состояние.js"></script>
<script src="общее/200.функции.js"></script>
<script src="редактор/100.Редактор.js"></script>
<script src="редактор/200.Пульт.js"></script>
<script src="редактор/700.Муром.js"></script>
<script>
var муром = new Муром();
</script>
</body>
</html>

+ 127
- 0
M/3.4/редактор/100.Редактор.js View File

@@ -0,0 +1,127 @@
function Редактор(события, имяРедактора)
{
this.создать = function()
{
this.первоначальныйЗаголовок = document.title;
this.установитьAce();
this.улавливатьЗавершениеРедактирования();
this.задатьКодПриЗапуске();
события.подписать(this);
};

this.задатьКодПриЗапуске = function()
{
var z64 = мир.параметрыЗапуска()["z64"];
if (z64)
{
var код = мир.изZ64(z64);
this.ace.session.setValue(код);
}
};

this.запуститьОтдельно = function()
{
var содержимое = this.ace.session.getValue();
var z64 = мир.вZ64(содержимое);
var путь = window.location.pathname + "/../игра.html?z64=" + z64;
window.open(путь);
};

this.исполнитьКод = function()
{
var содержимое = this.ace.session.getValue();
var z64 = мир.вZ64(содержимое);
// Исполняем явно код лишь первый раз.
var проигрыватель = document.getElementById("проигрыватель");
if (!проигрыватель.src)
{
проигрыватель.src = "игра.html?z64=" + z64;
}
// После запуска уведомляем iframe о новом коде без перезагрузки.
else
{
window.frames.проигрыватель.postMessage(z64, "*");
}
};

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(событие)
{
if (событие == "завершили редактирование")
{
this.обновитьАдреснуюСтрокуИЗаголовок();
this.проверитьКорректностьКода();
}
else if (событие == "код корректен")
{
this.исполнитьКод();
}
else if (событие == "перезапустить")
{
this.перезапуститьКод();
}
else if (событие == "запустить отдельно")
{
this.запуститьОтдельно();
}
};

this.перезапуститьКод = function()
{
var содержимое = this.ace.session.getValue();
var z64 = мир.вZ64(содержимое);
var проигрыватель = document.getElementById("проигрыватель");
проигрыватель.src = "игра.html?z64=" + z64;
};

this.проверитьКорректностьКода = function()
{
try
{
eval(this.ace.session.getValue());
события.уведомить("код корректен");
}
catch (ошибка)
{
события.уведомить("код некорректен");
}
};

this.улавливатьЗавершениеРедактирования = function()
{
var тут = this;
this.ace.session.on("change", function(дельта) {
const билет = мир.uuid();
тут.билет = билет;
setTimeout(
function()
{
if (билет == тут.билет)
{
события.уведомить("завершили редактирование");
}
},
300
);
});
};

this.установитьAce = function()
{
var область = document.getElementById(имяРедактора);
this.ace = window.ace.edit(имяРедактора);
this.ace.session.setMode("ace/mode/javascript");
this.ace.session.setUseWrapMode(true);
};

// Конструктор.
this.создать();
}

+ 53
- 0
M/3.4/редактор/200.Пульт.js View File

@@ -0,0 +1,53 @@
function Пульт(события, имяОшибки, имяПерезапуска, имяОтдельно, имяСсылки, имяДокументации)
{
this.создать = function()
{
var ошибка = document.getElementById(имяОшибки);
мир.назначитьКнопкамСобытия(
события,
[
[имяПерезапуска, "перезапустить"],
[имяОтдельно, "запустить отдельно"],
[имяСсылки, "скопировать ссылку"],
[имяДокументации, "открыть документацию"],
]
);
события.подписать(this);
};

this.обработатьСобытие = function(событие)
{
if (событие == "код корректен")
{
this.показатьОшибку(false);
}
else if (событие == "код некорректен")
{
this.показатьОшибку(true);
}
else if (событие == "скопировать ссылку")
{
navigator.clipboard.writeText(window.location)
.then(() => {
UIkit.notification("Скопировали ссылку", { status: "success", timeout: 1000 });
})
.catch(err => {
UIkit.notification("Не удалось скопировать ссылку :(", { status: "danger", timeout: 5000 });
});
}
else if (событие == "открыть документацию")
{
var путь = window.location.pathname + "/../../doc/ru/index.html";
window.open(путь);
}
};


this.показатьОшибку = function(показать)
{
ошибка.innerHTML = показать ? "<span uk-icon=\"icon: warning\"></span>" : "&nbsp;";
};

// Конструктор.
this.создать();
}

+ 13
- 0
M/3.4/редактор/700.Муром.js View File

@@ -0,0 +1,13 @@
function Муром()
{
this.создать = function()
{
мир.события = new События();
мир.состояние = new Состояние();
мир.редактор = new Редактор(мир.события, "редактор");
мир.пульт = new Пульт(мир.события, "ошибка", "перезапустить", "отдельно", "ссылка", "документация");
};

// Конструктор.
this.создать();
}

+ 1
- 0
M/3.4/редактор/ace View File

@@ -0,0 +1 @@
../../стороннее/ace

+ 1
- 0
M/3.4/редактор/uikit View File

@@ -0,0 +1 @@
../../стороннее/uikit

+ 11
- 0
M/doc/pskov.cfg View File

@@ -0,0 +1,11 @@
input = ru
item = item.template
preview =
index =
paginationPrev =
paginationNext =
paginationPrevNext =
previewSize =
previewEnding =
previewsPerPage =
previewPageBaseName =

+ 115
- 0
M/doc/ru/bodies.html View File

@@ -0,0 +1,115 @@
<!DOCTYPE html>
<html>
<meta charset="utf-8">
<head>
<style>
#header
{
background: #bababf;
padding: 0.7em;
text-align: left;
}
#header a
{
color: white;
text-decoration: none;
padding: 0.5em 1em 0.5em 1em;
}
#title
{
color: #433729;
}
html
{
font-family: sans-serif;
}
body
{
line-height: 1.5em;
}
body
{
background: #FAFAFA;
}
table
{
border-collapse: collapse;
width: 100%;
}
table, th, td
{
border: 1px solid #aaa;
padding: 0.5em;
margin-top: 0.5em;
margin-bottom: 0.5em;
}
code, pre
{
font-family: monospace, serif;
font-size: 1em;
color: #7f0a0c;
background: #f5f5f5;
white-space: pre-wrap;
}
video
{
width: 100%;
}
.contents
{
background: #FFFFFF;
width: 720px;
padding: 1em;
margin-top: 2em;
margin-bottom: 2em;
border: 1px solid #E0E0E0;
text-align: left;
color: #444;
}
#footer
{
text-align: center;
}
#lang
{
float: right;
}
</style>
<title>
Документация МУРОМа
</title>
</head>
<body>
<div id="header">
<strong id="title">Документация МУРОМа</strong>
<a href="http://opengamestudio.org/M">МУРОМ</a>
<a href="keys.html">Ключи (API)</a>
</div>
<center>
<h1>
тела
</h1>
</center>
<center>
<div class="contents">
<p>Добавление одного или нескольких тел, составных либо одиночных.</p>
<p>Тело представляет из себя сущность Matter.js с полной поддержкой свойств, которые можно указывать телам в Matter.js.</p>
<p></div><div class="contents"></p>
<p>Пример № 1. Отображение статичной платформы и падающего на неё самовара.</p>
<iframe style="width: 100%; height: 60em" src="../../3.4/редактор.html?z64=eJy9VNtKw0AQfc9XLEXBgu1WsS8Rv8JHEbrGGGPTJGy2qJRCWxWUCr76Jv5BWowGL/UXZv/I2XpLtlFEwRDC7lzOnLOzE88WRPYgkX15JHv4HZI1UtoVIoxMSh1XVIPQ9h3WsiPR3naDasAd2gy4b3NOW3sR5WyfbnHmW7u0xSJhcyp7JcNDWHiGB4jlQB7DBEs8QozQjTb3FuY6+ZJdihEDFQ03cA+x2vbhCSYwhri6FzrlxuoUEq0xAk3tsvcN3Bj3Z5DSfEI19J0y8YMKt0ObCRJZPPA8UptXLyVW4Avm+ljLwJwU4xE3hjtMH6kVSjlf6BgEH0g/zXALCZJN5YVJXr2ZiOtsfYizEdOosRwiR6UeffXaYs4rTxULRHpS3hXNi5gp3OiI6tliVtPhQdvfNrUjyyN0P7eZ5Rvzq3z35FCvdGCSpSWN06ESMcMzq1HP0DX+SuTsVftaqJExIKVEZWbx8QYNUP4DjLDyfZFonePhbOf+0lcUoTqQqkkoEu5G64IJ1zLJDvMi+0ctnTmff2/mG5v3g+8joeR9ciDJN0AByJPpbF0WzRlar7NNKpirgvlUVUrFY1nSZLxeiwnG52+DHtdHEPWj+cDfqCzXFkllub75lXKjW159Af7tOUk="></iframe>
<p></div><div class="contents"></p>
<p>Пример № 2. Составное тело с сенсором и статичная платформа.</p>
<iframe style="width: 100%; height: 100em" src="../../3.4/редактор.html?z64=eJy9VcFO20AQvfsrVhaViESyBJVDjfoVPSIkjHGNwbGt9UYtQpHilKpUqdRrb4g/MFHcWlDCL8z+EbOGEHvj4IhIWFHs3Zl5+97OzK5ncyL6kIpYfBN9/B+Sj0Q/4jyMDEodl7eC0PYds2NHvHvoBq2AOfQkYL7NGO0cR5SZX+gBM33riHbMiNuMir6ueQgL93ALiRiIc5jgEv8hQej9LvPW187KS/YoegykN4zhBhI5jOEOJjCCpHUcOo39nRwSZxMEyudF/wW4EY5/QkbLAa3QdxrED5rMDm2Tk8higeeRzXfyR4kV+Nx0fVxLw5gM/RE3gX8Yfi2/UMqv9TON4APZbBr+QopkM/HbII/WgsdVcX1Iih6510gMkaNUj7btzY2SVVxIFoh0J63vFStiZjBWEeVzYFonDgu6/qGhbFkZoTcbFj6fmaOqnNuKvLcqeZM64vPlo5B/gftlOVQM1cW+GkRhdSo3eI5pUWW7JjuvSk+tykKKtMIEUkplZBEfa3+A4m/hGle+qZDcVjmezudulYoUP1BKLNvEIJx1bcV6nmcnkx1etS1u9Imb3LUM8tn0InupUr1HvWMkeyHLe0nFH1ZQrNbyyoptPwpYVWy14HI3vzLFU9KQGWRXL1eNvkH08q7qe2+RRqUJ3rhfn7hMeytGOun0WIe03GMSQHzPD/4/Sx3xFVeFxNSrbwhdIf3Y5xP0VxNV9osRRN55z/i7TSxW0tza3ltUSaqQy1na50/MehmF62KxCKW26kW0F4l4emm9xs4D+tFt+Q=="></iframe>
<p></div></p>
</div>
</center>
<div id="footer">
Документация сгенерирована <a href="http://opengamestudio.org/pskov">ПСКОВОМ</a>
из <a href="https://git.opengamestudio.org/kornerr/MYPOM/src/branch/master/doc">
этого исходного кода</a>.
</div>
</body>
</html>


+ 24
- 0
M/doc/ru/bodies.md View File

@@ -0,0 +1,24 @@
Title: тела
Date: 2021-09-27 00:00
Category: Страница
Slug: bodies
Lang: ru

Добавление одного или нескольких тел, составных либо одиночных.

Тело представляет из себя сущность Matter.js с полной поддержкой свойств, которые можно указывать телам в Matter.js.

</div><div class="contents">

Пример № 1. Отображение статичной платформы и падающего на неё самовара.

<iframe style="width: 100%; height: 60em" src="../../3.4/редактор.html?z64=eJy9VNtKw0AQfc9XLEXBgu1WsS8Rv8JHEbrGGGPTJGy2qJRCWxWUCr76Jv5BWowGL/UXZv/I2XpLtlFEwRDC7lzOnLOzE88WRPYgkX15JHv4HZI1UtoVIoxMSh1XVIPQ9h3WsiPR3naDasAd2gy4b3NOW3sR5WyfbnHmW7u0xSJhcyp7JcNDWHiGB4jlQB7DBEs8QozQjTb3FuY6+ZJdihEDFQ03cA+x2vbhCSYwhri6FzrlxuoUEq0xAk3tsvcN3Bj3Z5DSfEI19J0y8YMKt0ObCRJZPPA8UptXLyVW4Avm+ljLwJwU4xE3hjtMH6kVSjlf6BgEH0g/zXALCZJN5YVJXr2ZiOtsfYizEdOosRwiR6UeffXaYs4rTxULRHpS3hXNi5gp3OiI6tliVtPhQdvfNrUjyyN0P7eZ5Rvzq3z35FCvdGCSpSWN06ESMcMzq1HP0DX+SuTsVftaqJExIKVEZWbx8QYNUP4DjLDyfZFonePhbOf+0lcUoTqQqkkoEu5G64IJ1zLJDvMi+0ctnTmff2/mG5v3g+8joeR9ciDJN0AByJPpbF0WzRlar7NNKpirgvlUVUrFY1nSZLxeiwnG52+DHtdHEPWj+cDfqCzXFkllub75lXKjW159Af7tOUk="></iframe>

</div><div class="contents">

Пример № 2. Составное тело с сенсором и статичная платформа.

<iframe style="width: 100%; height: 100em" src="../../3.4/редактор.html?z64=eJy9VcFO20AQvfsrVhaViESyBJVDjfoVPSIkjHGNwbGt9UYtQpHilKpUqdRrb4g/MFHcWlDCL8z+EbOGEHvj4IhIWFHs3Zl5+97OzK5ncyL6kIpYfBN9/B+Sj0Q/4jyMDEodl7eC0PYds2NHvHvoBq2AOfQkYL7NGO0cR5SZX+gBM33riHbMiNuMir6ueQgL93ALiRiIc5jgEv8hQej9LvPW187KS/YoegykN4zhBhI5jOEOJjCCpHUcOo39nRwSZxMEyudF/wW4EY5/QkbLAa3QdxrED5rMDm2Tk8higeeRzXfyR4kV+Nx0fVxLw5gM/RE3gX8Yfi2/UMqv9TON4APZbBr+QopkM/HbII/WgsdVcX1Iih6510gMkaNUj7btzY2SVVxIFoh0J63vFStiZjBWEeVzYFonDgu6/qGhbFkZoTcbFj6fmaOqnNuKvLcqeZM64vPlo5B/gftlOVQM1cW+GkRhdSo3eI5pUWW7JjuvSk+tykKKtMIEUkplZBEfa3+A4m/hGle+qZDcVjmezudulYoUP1BKLNvEIJx1bcV6nmcnkx1etS1u9Imb3LUM8tn0InupUr1HvWMkeyHLe0nFH1ZQrNbyyoptPwpYVWy14HI3vzLFU9KQGWRXL1eNvkH08q7qe2+RRqUJ3rhfn7hMeytGOun0WIe03GMSQHzPD/4/Sx3xFVeFxNSrbwhdIf3Y5xP0VxNV9osRRN55z/i7TSxW0tza3ltUSaqQy1na50/MehmF62KxCKW26kW0F4l4emm9xs4D+tFt+Q=="></iframe>

</div>


+ 116
- 0
M/doc/ru/images.html View File

@@ -0,0 +1,116 @@
<!DOCTYPE html>
<html>
<meta charset="utf-8">
<head>
<style>
#header
{
background: #bababf;
padding: 0.7em;
text-align: left;
}
#header a
{
color: white;
text-decoration: none;
padding: 0.5em 1em 0.5em 1em;
}
#title
{
color: #433729;
}
html
{
font-family: sans-serif;
}
body
{
line-height: 1.5em;
}
body
{
background: #FAFAFA;
}
table
{
border-collapse: collapse;
width: 100%;
}
table, th, td
{
border: 1px solid #aaa;
padding: 0.5em;
margin-top: 0.5em;
margin-bottom: 0.5em;
}
code, pre
{
font-family: monospace, serif;
font-size: 1em;
color: #7f0a0c;
background: #f5f5f5;
white-space: pre-wrap;
}
video
{
width: 100%;
}
.contents
{
background: #FFFFFF;
width: 720px;
padding: 1em;
margin-top: 2em;
margin-bottom: 2em;
border: 1px solid #E0E0E0;
text-align: left;
color: #444;
}
#footer
{
text-align: center;
}
#lang
{
float: right;
}
</style>
<title>
Документация МУРОМа
</title>
</head>
<body>
<div id="header">
<strong id="title">Документация МУРОМа</strong>
<a href="http://opengamestudio.org/M">МУРОМ</a>
<a href="keys.html">Ключи (API)</a>
</div>
<center>
<h1>
изображения
</h1>
</center>
<center>
<div class="contents">
<p>Добавление одного или нескольких изображений.</p>
<p>Изображения чаще всего являются статичным фоном уровня либо движущимся предметом/игроком.</p>
<p>Изображение представляет из себя отдельный <code>&lt;div&gt;</code>, который можно исследовать в отладке браузера.</p>
<p></div><div class="contents"></p>
<p>Пример № 1. Отображение статичного изображения под углом.</p>
<iframe style="width: 100%; height: 25em" src="../../3.4/редактор.html?z64=eJxtkE1uwjAQhfecwmIFUpUBqWzc0xiIzE8TR46jFlVIgW6QWomrpC20UYH0CjM36hgqUSLexjPvzdifjHssKQ8oxwK/sMI3X9GSXltPDcHC8mzjJ27xwPNrKU7pceKHsxL3uKX8v+/1KEW307m58GZS1Bx8pxdaYEVLLK4s0Moj8hMHH/fq6TN+MOBOitte/Vre2dSRvPpqMNXWZPFQimZm71sj55JUAuixC0wSxlpFYeqy4dgExmqYGhuH1kI0ScGqB+hbFQ9GEKnUhRYohyP7jn9og99Y+HbBtBUTFMEk0e3mJdn83P6VfMzbdw2vX92vltE="></iframe>
<p></div><div class="contents"></p>
<p>Пример № 2. Отображение статичной платформы и падающего на неё самовара.</p>
<iframe style="width: 100%; height: 60em" src="../../3.4/редактор.html?z64=eJy9VNtKw0AQfc9XLEXBgu1WsS8Rv8JHEbrGGGPTJGy2qJRCWxWUCr76Jv5BWowGL/UXZv/I2XpLtlFEwRDC7lzOnLOzE88WRPYgkX15JHv4HZI1UtoVIoxMSh1XVIPQ9h3WsiPR3naDasAd2gy4b3NOW3sR5WyfbnHmW7u0xSJhcyp7JcNDWHiGB4jlQB7DBEs8QozQjTb3FuY6+ZJdihEDFQ03cA+x2vbhCSYwhri6FzrlxuoUEq0xAk3tsvcN3Bj3Z5DSfEI19J0y8YMKt0ObCRJZPPA8UptXLyVW4Avm+ljLwJwU4xE3hjtMH6kVSjlf6BgEH0g/zXALCZJN5YVJXr2ZiOtsfYizEdOosRwiR6UeffXaYs4rTxULRHpS3hXNi5gp3OiI6tliVtPhQdvfNrUjyyN0P7eZ5Rvzq3z35FCvdGCSpSWN06ESMcMzq1HP0DX+SuTsVftaqJExIKVEZWbx8QYNUP4DjLDyfZFonePhbOf+0lcUoTqQqkkoEu5G64IJ1zLJDvMi+0ctnTmff2/mG5v3g+8joeR9ciDJN0AByJPpbF0WzRlar7NNKpirgvlUVUrFY1nSZLxeiwnG52+DHtdHEPWj+cDfqCzXFkllub75lXKjW159Af7tOUk="></iframe>
<p></div></p>
</div>
</center>
<div id="footer">
Документация сгенерирована <a href="http://opengamestudio.org/pskov">ПСКОВОМ</a>
из <a href="https://git.opengamestudio.org/kornerr/MYPOM/src/branch/master/doc">
этого исходного кода</a>.
</div>
</body>
</html>


+ 26
- 0
M/doc/ru/images.md View File

@@ -0,0 +1,26 @@
Title: изображения
Date: 2021-09-24 00:00
Category: Страница
Slug: images
Lang: ru

Добавление одного или нескольких изображений.

Изображения чаще всего являются статичным фоном уровня либо движущимся предметом/игроком.

Изображение представляет из себя отдельный `<div>`, который можно исследовать в отладке браузера.

</div><div class="contents">

Пример № 1. Отображение статичного изображения под углом.

<iframe style="width: 100%; height: 25em" src="../../3.4/редактор.html?z64=eJxtkE1uwjAQhfecwmIFUpUBqWzc0xiIzE8TR46jFlVIgW6QWomrpC20UYH0CjM36hgqUSLexjPvzdifjHssKQ8oxwK/sMI3X9GSXltPDcHC8mzjJ27xwPNrKU7pceKHsxL3uKX8v+/1KEW307m58GZS1Bx8pxdaYEVLLK4s0Moj8hMHH/fq6TN+MOBOitte/Vre2dSRvPpqMNXWZPFQimZm71sj55JUAuixC0wSxlpFYeqy4dgExmqYGhuH1kI0ScGqB+hbFQ9GEKnUhRYohyP7jn9og99Y+HbBtBUTFMEk0e3mJdn83P6VfMzbdw2vX92vltE="></iframe>

</div><div class="contents">

Пример № 2. Отображение статичной платформы и падающего на неё самовара.

<iframe style="width: 100%; height: 60em" src="../../3.4/редактор.html?z64=eJy9VNtKw0AQfc9XLEXBgu1WsS8Rv8JHEbrGGGPTJGy2qJRCWxWUCr76Jv5BWowGL/UXZv/I2XpLtlFEwRDC7lzOnLOzE88WRPYgkX15JHv4HZI1UtoVIoxMSh1XVIPQ9h3WsiPR3naDasAd2gy4b3NOW3sR5WyfbnHmW7u0xSJhcyp7JcNDWHiGB4jlQB7DBEs8QozQjTb3FuY6+ZJdihEDFQ03cA+x2vbhCSYwhri6FzrlxuoUEq0xAk3tsvcN3Bj3Z5DSfEI19J0y8YMKt0ObCRJZPPA8UptXLyVW4Avm+ljLwJwU4xE3hjtMH6kVSjlf6BgEH0g/zXALCZJN5YVJXr2ZiOtsfYizEdOosRwiR6UeffXaYs4rTxULRHpS3hXNi5gp3OiI6tliVtPhQdvfNrUjyyN0P7eZ5Rvzq3z35FCvdGCSpSWN06ESMcMzq1HP0DX+SuTsVftaqJExIKVEZWbx8QYNUP4DjLDyfZFonePhbOf+0lcUoTqQqkkoEu5G64IJ1zLJDvMi+0ctnTmff2/mG5v3g+8joeR9ciDJN0AByJPpbF0WzRlar7NNKpirgvlUVUrFY1nSZLxeiwnG52+DHtdHEPWj+cDfqCzXFkllub75lXKjW159Af7tOUk="></iframe>

</div>


+ 4
- 0
M/doc/ru/index.html View File

@@ -0,0 +1,4 @@
<!DOCTYPE html>
<html>
<meta http-equiv="refresh" content="0; URL='keys.html'"/>
</html>

+ 107
- 0
M/doc/ru/item.template View File

@@ -0,0 +1,107 @@
<!DOCTYPE html>
<html>
<meta charset="utf-8">
<head>
<style>
#header
{
background: #bababf;
padding: 0.7em;
text-align: left;
}
#header a
{
color: white;
text-decoration: none;
padding: 0.5em 1em 0.5em 1em;
}
#title
{
color: #433729;
}
html
{
font-family: sans-serif;
}
body
{
line-height: 1.5em;
}
body
{
background: #FAFAFA;
}
table
{
border-collapse: collapse;
width: 100%;
}
table, th, td
{
border: 1px solid #aaa;
padding: 0.5em;
margin-top: 0.5em;
margin-bottom: 0.5em;
}
code, pre
{
font-family: monospace, serif;
font-size: 1em;
color: #7f0a0c;
background: #f5f5f5;
white-space: pre-wrap;
}
video
{
width: 100%;
}
.contents
{
background: #FFFFFF;
width: 720px;
padding: 1em;
margin-top: 2em;
margin-bottom: 2em;
border: 1px solid #E0E0E0;
text-align: left;
color: #444;
}
#footer
{
text-align: center;
}
#lang
{
float: right;
}
</style>
<title>
Документация МУРОМа
</title>
</head>
<body>
<div id="header">
<strong id="title">Документация МУРОМа</strong>
<a href="http://opengamestudio.org/M">МУРОМ</a>
<a href="keys.html">Ключи (API)</a>
</div>
<center>
<h1>
PSKOV_ITEM_TITLE
</h1>
</center>
<center>
<div class="contents">
PSKOV_ITEM_CONTENTS
</div>
</center>
<div id="footer">
Документация сгенерирована <a href="http://opengamestudio.org/pskov">ПСКОВОМ</a>
из <a href="https://git.opengamestudio.org/kornerr/MYPOM/src/branch/master/doc">
этого исходного кода</a>.
</div>
</body>
</html>


+ 114
- 0
M/doc/ru/keys.html View File

@@ -0,0 +1,114 @@
<!DOCTYPE html>
<html>
<meta charset="utf-8">
<head>
<style>
#header
{
background: #bababf;
padding: 0.7em;
text-align: left;
}
#header a
{
color: white;
text-decoration: none;
padding: 0.5em 1em 0.5em 1em;
}
#title
{
color: #433729;
}
html
{
font-family: sans-serif;
}
body
{
line-height: 1.5em;
}
body
{
background: #FAFAFA;
}
table
{
border-collapse: collapse;
width: 100%;
}
table, th, td
{
border: 1px solid #aaa;
padding: 0.5em;
margin-top: 0.5em;
margin-bottom: 0.5em;
}
code, pre
{
font-family: monospace, serif;
font-size: 1em;
color: #7f0a0c;
background: #f5f5f5;
white-space: pre-wrap;
}
video
{
width: 100%;
}
.contents
{
background: #FFFFFF;
width: 720px;
padding: 1em;
margin-top: 2em;
margin-bottom: 2em;
border: 1px solid #E0E0E0;
text-align: left;
color: #444;
}
#footer
{
text-align: center;
}
#lang
{
float: right;
}
</style>
<title>
Документация МУРОМа
</title>
</head>
<body>
<div id="header">
<strong id="title">Документация МУРОМа</strong>
<a href="http://opengamestudio.org/M">МУРОМ</a>
<a href="keys.html">Ключи (API)</a>
</div>
<center>
<h1>
Ключи (API)
</h1>
</center>
<center>
<div class="contents">
<p>Ниже представлены страницы с описанием каждого отдельного поддерживаемого ключа
и примерами их использования:</p>
<ol>
<li><a href="title.html">заголовок</a></li>
<li><a href="images.html">изображения</a></li>
<li><a href="tracking.html">слежение</a></li>
<li><a href="bodies.html">тела</a></li>
</ol>
</div>
</center>
<div id="footer">
Документация сгенерирована <a href="http://opengamestudio.org/pskov">ПСКОВОМ</a>
из <a href="https://git.opengamestudio.org/kornerr/MYPOM/src/branch/master/doc">
этого исходного кода</a>.
</div>
</body>
</html>


+ 18
- 0
M/doc/ru/keys.md View File

@@ -0,0 +1,18 @@
Title: Ключи (API)
Date: 2021-09-23 00:00
Category: Страница
Slug: keys
Lang: ru

Ниже представлены страницы с описанием каждого отдельного поддерживаемого ключа
и примерами их использования:

1. [заголовок][title]
1. [изображения][images]
1. [слежение][tracking]
1. [тела][bodies]

[bodies]: bodies.html
[images]: images.html
[title]: title.html
[tracking]: tracking.html

+ 115
- 0
M/doc/ru/title.html View File

@@ -0,0 +1,115 @@
<!DOCTYPE html>
<html>
<meta charset="utf-8">
<head>
<style>
#header
{
background: #bababf;
padding: 0.7em;
text-align: left;
}
#header a
{
color: white;
text-decoration: none;
padding: 0.5em 1em 0.5em 1em;
}
#title
{
color: #433729;
}
html
{
font-family: sans-serif;
}
body
{
line-height: 1.5em;
}
body
{
background: #FAFAFA;
}
table
{
border-collapse: collapse;
width: 100%;
}
table, th, td
{
border: 1px solid #aaa;
padding: 0.5em;
margin-top: 0.5em;
margin-bottom: 0.5em;
}
code, pre
{
font-family: monospace, serif;
font-size: 1em;
color: #7f0a0c;
background: #f5f5f5;
white-space: pre-wrap;
}
video
{
width: 100%;
}
.contents
{
background: #FFFFFF;
width: 720px;
padding: 1em;
margin-top: 2em;
margin-bottom: 2em;
border: 1px solid #E0E0E0;
text-align: left;
color: #444;
}
#footer
{
text-align: center;
}
#lang
{
float: right;
}
</style>
<title>
Документация МУРОМа
</title>
</head>
<body>
<div id="header">
<strong id="title">Документация МУРОМа</strong>
<a href="http://opengamestudio.org/M">МУРОМ</a>
<a href="keys.html">Ключи (API)</a>
</div>
<center>
<h1>
заголовок
</h1>
</center>
<center>
<div class="contents">
<p>Задание заголовка страницы браузера. Чаще всего это название игры.</p>
<p></div><div class="contents"></p>
<p>Пример:</p>
<pre><code>мир.разобрать({
заголовок: "Колобок",
});
</code></pre>
<p><a href="../../3.4/игра.html?z64=eJy7sOfCjosNehcbLmy4sP3CvgsbQayLTRd7NKq5FIAAKLjhwmagxG4g3gTEu6wUlC7MggpsBAko6XDValoDAL+VLNM=">Посмотреть результат</a>.</p>
<p></div></p>
</div>
</center>
<div id="footer">
Документация сгенерирована <a href="http://opengamestudio.org/pskov">ПСКОВОМ</a>
из <a href="https://git.opengamestudio.org/kornerr/MYPOM/src/branch/master/doc">
этого исходного кода</a>.
</div>
</body>
</html>


+ 23
- 0
M/doc/ru/title.md View File

@@ -0,0 +1,23 @@
Title: заголовок
Date: 2021-09-23 00:00
Category: Страница
Slug: title
Lang: ru

Задание заголовка страницы браузера. Чаще всего это название игры.

</div><div class="contents">

Пример:

```
мир.разобрать({
заголовок: "Колобок",
});
```

[Посмотреть результат][result].

</div>

[result]: ../../3.4/игра.html?z64=eJy7sOfCjosNehcbLmy4sP3CvgsbQayLTRd7NKq5FIAAKLjhwmagxG4g3gTEu6wUlC7MggpsBAko6XDValoDAL+VLNM=

+ 114
- 0
M/doc/ru/tracking.html View File

@@ -0,0 +1,114 @@
<!DOCTYPE html>
<html>
<meta charset="utf-8">
<head>
<style>
#header
{
background: #bababf;
padding: 0.7em;
text-align: left;
}
#header a
{
color: white;
text-decoration: none;
padding: 0.5em 1em 0.5em 1em;
}
#title
{
color: #433729;
}
html
{
font-family: sans-serif;
}
body
{
line-height: 1.5em;
}
body
{
background: #FAFAFA;
}
table
{
border-collapse: collapse;
width: 100%;
}
table, th, td
{
border: 1px solid #aaa;
padding: 0.5em;
margin-top: 0.5em;
margin-bottom: 0.5em;
}
code, pre
{
font-family: monospace, serif;
font-size: 1em;
color: #7f0a0c;
background: #f5f5f5;
white-space: pre-wrap;
}
video
{
width: 100%;
}
.contents
{
background: #FFFFFF;
width: 720px;
padding: 1em;
margin-top: 2em;
margin-bottom: 2em;
border: 1px solid #E0E0E0;
text-align: left;
color: #444;
}
#footer
{
text-align: center;
}
#lang
{
float: right;
}
</style>
<title>
Документация МУРОМа
</title>
</head>
<body>
<div id="header">
<strong id="title">Документация МУРОМа</strong>
<a href="http://opengamestudio.org/M">МУРОМ</a>
<a href="keys.html">Ключи (API)</a>
</div>
<center>
<h1>
слежение
</h1>
</center>
<center>
<div class="contents">
<p>Синхронизация изображения с телом. Исполняется каждый кадр.</p>
<p></div><div class="contents"></p>
<p>Пример № 1. Мгновенное следование изображения за телом.</p>
<iframe style="width: 100%; height: 60em" src="../../3.4/редактор.html?z64=eJzVVFtKw0AU/c8qhqLQgs3UYn8irsJPETqNMU1NkzCZoiKFtiooFVyDO4il0eCjbuHOjrxTX3lYFf1yCGFm7r3nnpMzE9cSRA4glkN5LAf4HpMNUmoLEYQGpbYjdD+wPJt1rVD0dhxf97lN93zuWZzTbieknO3TFmee2aZdFgqLUzkoaS7CwhPcQyRH8gRm2OIBIoRu9rhbXjrKtuxTzBipbJjCHURqOYRHmMEEIr0T2JXm+hwSdyMEmu/LwRdwE1yfQ0KzBXrg2RXi+VVuBRYTJDS577qktqweSkzfE8zxsJeGNQnmI24Et1h+rWYo5aJ8pBEckHxsww3ESDaRlwZ5iaqR7ZyOzOsncowZSnVkkEZtJROVZ6o79nhU0bVcFBETmOYR1Wgxc8/mfs/bMXL9swj9j2VqWvQr3+PAIDkuh4pegV9a2+o32n4lrkh1sUAttYGUYlX5c6MOlIKi6Lxjf/ETRajTlKiT/5lwJ9wUTDimQXaZG1r/wspXLm+ffYh04rd7AnHu8yOAPJ3fpKu0FUXSn906hVbKeljK0XwxffZt3hBD6rfxjrtVrddWSLXe2F6kTOtX1p8Bv1gVxQ=="></iframe>
<p></div><div class="contents"></p>
<p>Пример № 2. Замедленное следование изображения за телом со смещением и пределом для ограничения мельтешения.</p>
<iframe style="width: 100%; height: 60em" src="../../3.4/редактор.html?z64=eJzVVF1O20AQfs8pVlGRiJR4AyovRj1FHxESi3GNE8e21hsRFEVKKEggkDhDb+BGuLXSEq4we6POmNLYa/4ET11FkXdn5pvvm9mdwFVMTyHTM/1VT/H/kn1izUOl4sTm3POVFcVu6ImBm6jhgR9ZkfR4P5KhKyUf9BIuxRHflyJ0DvlAJMqVXE+bjQBh4Q5+QapP9CksMcVvSBF6byiD9Q/jasoJR48T8oYbWEBK2xncwhLmkFq92GvtbReQeJoiUHGup8/AzXF/ATmvBlhx6LVYGHWkG7tCscSRURCw7hr9OHOiUAk/xFwNjMnRH3FT+Inh3+kLpVytjxsMF+SrY/gBGZLN9bXN7q20qpnLliJ+ri/Rg1SnNtvqtitWfU7ZMcctWT8aVkTM4cZEpLUvnL4no2F4YBv5qwiT1bb0We+XmWNkM4PLMdGr8Str23hB25vE1ak+LbBROkBKGUW+vlEjUlAXbXbsPf1EEXSbcrr5jwn3k89KKN+x2RcRJO5/0cq/XB7KPkM62cM7gcwoPwLos+IlfSu3ok76sVdHaM1qD5sGzfumL1/0m6GJxsY/3J3OZrfNOptbuzXPRVFYHFM0FLCWVnfDKN0dDSWcZ5i7eiNWtZm0tv8AHwUuww=="></iframe>
<p></div></p>
</div>
</center>
<div id="footer">
Документация сгенерирована <a href="http://opengamestudio.org/pskov">ПСКОВОМ</a>
из <a href="https://git.opengamestudio.org/kornerr/MYPOM/src/branch/master/doc">
этого исходного кода</a>.
</div>
</body>
</html>


+ 22
- 0
M/doc/ru/tracking.md View File

@@ -0,0 +1,22 @@
Title: слежение
Date: 2021-09-27 00:00
Category: Страница
Slug: tracking
Lang: ru

Синхронизация изображения с телом. Исполняется каждый кадр.

</div><div class="contents">

Пример № 1. Мгновенное следование изображения за телом.

<iframe style="width: 100%; height: 60em" src="../../3.4/редактор.html?z64=eJzVVFtKw0AU/c8qhqLQgs3UYn8irsJPETqNMU1NkzCZoiKFtiooFVyDO4il0eCjbuHOjrxTX3lYFf1yCGFm7r3nnpMzE9cSRA4glkN5LAf4HpMNUmoLEYQGpbYjdD+wPJt1rVD0dhxf97lN93zuWZzTbieknO3TFmee2aZdFgqLUzkoaS7CwhPcQyRH8gRm2OIBIoRu9rhbXjrKtuxTzBipbJjCHURqOYRHmMEEIr0T2JXm+hwSdyMEmu/LwRdwE1yfQ0KzBXrg2RXi+VVuBRYTJDS577qktqweSkzfE8zxsJeGNQnmI24Et1h+rWYo5aJ8pBEckHxsww3ESDaRlwZ5iaqR7ZyOzOsncowZSnVkkEZtJROVZ6o79nhU0bVcFBETmOYR1Wgxc8/mfs/bMXL9swj9j2VqWvQr3+PAIDkuh4pegV9a2+o32n4lrkh1sUAttYGUYlX5c6MOlIKi6Lxjf/ETRajTlKiT/5lwJ9wUTDimQXaZG1r/wspXLm+ffYh04rd7AnHu8yOAPJ3fpKu0FUXSn906hVbKeljK0XwxffZt3hBD6rfxjrtVrddWSLXe2F6kTOtX1p8Bv1gVxQ=="></iframe>

</div><div class="contents">

Пример № 2. Замедленное следование изображения за телом со смещением и пределом для ограничения мельтешения.

<iframe style="width: 100%; height: 60em" src="../../3.4/редактор.html?z64=eJzVVF1O20AQfs8pVlGRiJR4AyovRj1FHxESi3GNE8e21hsRFEVKKEggkDhDb+BGuLXSEq4we6POmNLYa/4ET11FkXdn5pvvm9mdwFVMTyHTM/1VT/H/kn1izUOl4sTm3POVFcVu6ImBm6jhgR9ZkfR4P5KhKyUf9BIuxRHflyJ0DvlAJMqVXE+bjQBh4Q5+QapP9CksMcVvSBF6byiD9Q/jasoJR48T8oYbWEBK2xncwhLmkFq92GvtbReQeJoiUHGup8/AzXF/ATmvBlhx6LVYGHWkG7tCscSRURCw7hr9OHOiUAk/xFwNjMnRH3FT+Inh3+kLpVytjxsMF+SrY/gBGZLN9bXN7q20qpnLliJ+ri/Rg1SnNtvqtitWfU7ZMcctWT8aVkTM4cZEpLUvnL4no2F4YBv5qwiT1bb0We+XmWNkM4PLMdGr8Str23hB25vE1ak+LbBROkBKGUW+vlEjUlAXbXbsPf1EEXSbcrr5jwn3k89KKN+x2RcRJO5/0cq/XB7KPkM62cM7gcwoPwLos+IlfSu3ok76sVdHaM1qD5sGzfumL1/0m6GJxsY/3J3OZrfNOptbuzXPRVFYHFM0FLCWVnfDKN0dDSWcZ5i7eiNWtZm0tv8AHwUuww=="></iframe>

</div>


+ 1
- 1
M/index.html View File

@@ -1,4 +1,4 @@
<!DOCTYPE html>
<html>
<meta http-equiv="refresh" content="0; URL='3.3/редактор/index.html'"/>
<meta http-equiv="refresh" content="0; URL='3.4/редактор.html'"/>
</html>

Loading…
Cancel
Save