diff --git a/0000 b/0000
index 267bdd0..4f3d3b2 100644
--- a/0000
+++ b/0000
@@ -1,16 +1,15 @@
МАОН
-0.2.5
+0.2.6
https://git.opengamestudio.org/KH/MAOH
-x /⨐.js
x /🎬.js
/🎬.череда
/🏁.js
/🏁.череда
/📦
+x /📦.js
+/📦.череда
x /🔄.js
/🔄.череда
/🙈.css
-/🙈.html
-x /🙈.js
-x /🧱.js
\ No newline at end of file
+/🙈.html
\ No newline at end of file
diff --git a/⨐.js b/⨐.js
deleted file mode 100644
index 8b69d16..0000000
--- a/⨐.js
+++ /dev/null
@@ -1,33 +0,0 @@
-function сделатьПараллельно(мир, список, функция, откликУспех, откликПровал = null)
-{
- for (const номер in список)
- {
- функция(мир, список, номер, готово, провал);
- }
-
- var всего = 0;
-
- function готово()
- {
- всего += 1;
- if (всего == список.length)
- {
- откликУспех();
- }
- }
-
- var провалУжеСообщили = false;
-
- function провал()
- {
- if (провалУжеСообщили)
- {
- return;
- }
- провалУжеСообщили = true;
- if (откликПровал)
- {
- откликПровал();
- }
- }
-}
\ No newline at end of file
diff --git a/🎬.js b/🎬.js
index a13215b..23c977b 100644
--- a/🎬.js
+++ b/🎬.js
@@ -1,40 +1,26 @@
-
-
-// // // //
-
-
-ОкончитьЗагрузкуМаджонга = мир =>
+ЗадатьЗаголовок = мир =>
{
- мир.уведомить("надо окончить загрузку маджонга");
+ document.title = "🀄 МАОН";
};
// // // //
-ЗагрузитьЧередуОкончания = мир =>
+ОтобразитьСтраницуЗагрузки = мир =>
{
var м = мир.модули.модульПоУказателю(УКАЗАТЕЛЬ_ЭТОГО_МОДУЛЯ);
- var содержимое = м.содержимое["/🏁.js"];
- eval(содержимое);
- м.исполнитьЧереду(мир, "/🏁.череда");
-};
-
-
-// // // //
-
-
-ПроверитьНаличиеОбновленийПриложения = мир =>
-{
- // Эта функция находится вне "/🔄.js", т.к. "/🔄.js" отключаем,
- // отчего этой функции просто не будет в пространстве имён.
- var событие = "надо обновить приложение при наличии обновлений";
- if (событие in мир.события)
- {
- мир.уведомить(событие);
- }
- else
- {
- мир.уведомить("обновления приложения отсутствуют");
- }
+
+ var вид = document.createElement("style");
+ document.head.appendChild(вид);
+ вид.innerHTML = м.содержимое["/🙈.css"];
+
+ var структура = м.содержимое["/🙈.html"]
+ .replace(/\${версия}/g, м.версия);
+ // Вставляем содержимое в рамку, чтобы применяемые стили UIkit не
+ // дёргали надписи.
+ // https://stackoverflow.com/a/8322025
+ var рамка = "";
+ document.body.insertAdjacentHTML("afterbegin", рамка);
+ document.getElementById("экран-загрузки").src = "data:text/html;charset=utf-8," + структура;
};
\ No newline at end of file
diff --git a/🎬.череда b/🎬.череда
index 5191c1a..d2c2894 100644
--- a/🎬.череда
+++ b/🎬.череда
@@ -1,9 +1,3 @@
пуск
задать заголовок
- отобразить страницу загрузки маджонга
- проверить наличие обновлений приложения
-обновления приложения отсутствуют
- загрузить библиотеки приложения
-загрузили библиотеки приложения
- загрузить череду окончания
- окончить загрузку маджонга
\ No newline at end of file
+ отобразить страницу загрузки
\ No newline at end of file
diff --git a/🏁.js b/🏁.js
index 00c1e9d..5ec8341 100644
--- a/🏁.js
+++ b/🏁.js
@@ -1,9 +1,206 @@
+const РЕСУРСЫ = "https://git.opengamestudio.org/PuCOBATEJlb/PECYPCbl/raw/branch/master/0000";
+const ФИШКА = "/фишка.gltf";
+const ТЕМА_ОТЛАДОЧНАЯ = "https://git.opengamestudio.org/MAOH/MAOH_TEMA_OTAK/raw/branch/master/0000";
+
+
+// // // //
+
+
+СкрытьУбранныеФишки = мир =>
+{
+ for (var номер in мир.убранныеФишкиМаджонга)
+ {
+ var н = мир.убранныеФишкиМаджонга[номер];
+ // Перемещаем фишку на другой слой для исключения её из отрисовки и выбора.
+ var ф = мир.фишки[н];
+ ф.layers.set(1);
+ }
+}
+
+
+// // // //
+
+
+ЗадатьФишкуДляВыбора = мир =>
+{
+ var номер = мир.выбранныйУзел.userData;
+ мир.фишкаМаджонгаДляВыбора = номер;
+}
+
+
+// // // //
+
+
+ПодготовитьФишкиКВыбору = мир =>
+{
+ мир.выборныеУзлы = мир.фишки;
+ мир.задержкаОтображенияВыбранныхФишек = 0;
+};
+
+
+// // // //
+
+
+ВыделитьВыбранныеФишки = мир =>
+{
+ for (var номер in мир.выбранныеФишкиМаджонга)
+ {
+ var н = мир.выбранныеФишкиМаджонга[номер];
+ var ф = мир.фишки[н];
+ var г = мир.фишкиМаджонга[н]["🚩"];
+ var м = мир.выбранныеМатериалы[г];
+ ф.material = м;
+ }
+};
+
+
+// // // //
+
+
+ЗадатьМатериалыФишкам = мир =>
+{
+ for (var н in мир.фишки)
+ {
+ var ф = мир.фишки[н];
+ var г = мир.фишкиМаджонга[н]["🚩"];
+ var м = мир.материалы[г];
+ ф.material = м;
+ }
+};
+
+
+// // // //
+
+
+СоздатьФишки = мир =>
+{
+ var фишка = мир.полигональныеСетки[РЕСУРСЫ][ФИШКА];
+ var границы = фишка.geometry.boundingBox;
+ var размеры = [
+ (границы.max.x - границы.min.x) / 2,
+ (границы.max.z - границы.min.z) / 2,
+ //границы.max.y - границы.min.y,
+ ];
+ var отступ = 0.02;
+
+ мир.фишки = [];
+ for (var номер in мир.фишкиМаджонга)
+ {
+ // Узел сцены.
+ var фм = мир.фишкиМаджонга[номер];
+ var ф = фишка.clone();
+ ф.userData = номер;
+ мир.фишки.push(ф);
+ мир.сцена.add(ф);
+ // Расположение.
+ var позиция = фм["📍"];
+ /*
+ var слой = позиция[0];
+ var ряд = позиция[1];
+ var столбец = позиция[2];
+ */
+ var слой = 0;
+ var ряд = позиция[0];
+ var столбец = позиция[1];
+
+ ф.position.x = столбец * (размеры[0] + отступ);
+ ф.position.z = ряд * (размеры[1] + отступ);
+ ф.position.y = слой;
+ }
+};
+
+
+// // // //
+
+
+ЗадатьФишки = мир =>
+{
+ мир.фишкиМаджонга = [
+ {
+ "📍": [0, 0],
+ "🚩": 0,
+ },
+ {
+ "📍": [2, 0],
+ "🚩": 0,
+ },
+ {
+ "📍": [0, 2],
+ "🚩": 1,
+ },
+ ];
+};
+
+
+// // // //
+
+
+СоздатьПримерСцены = мир =>
+{
+ мир.сцена.background = new THREE.Color(0xFFFFFF);
+ мир.камера.position.y = 10;
+ мир.камера.position.z = 5;
+ мир.камера.lookAt(new THREE.Vector3(0, 0, 0));
+
+ мир.свет = new THREE.DirectionalLight(0xFFFFFF, 1);
+ мир.свет.position.set(-0.5, 1, 0.5).normalize();
+ мир.сцена.add(мир.свет);
+};
+
+
+// // // //
+
+
+СоздатьМатериалыФишек = мир =>
+{
+ мир.материалы = [];
+ мир.выбранныеМатериалы = [];
+ var текстуры = мир.текстуры[ТЕМА_ОТЛАДОЧНАЯ];
+ for (var имя in текстуры)
+ {
+ var текстура = текстуры[имя];
+ var материал = new THREE.MeshLambertMaterial({
+ map: текстура,
+ color: new THREE.Color(0xAAAAAA),
+ });
+ мир.материалы.push(материал);
+ var выбранныйМатериал = new THREE.MeshLambertMaterial({
+ map: текстура,
+ color: new THREE.Color(0xFFFFFF),
+ });
+ мир.выбранныеМатериалы.push(выбранныйМатериал);
+ }
+};
+
+// // // //
+
+
+ПодготовитьсяКЗагрузкеРесурсов = мир =>
+{
+ мир.полигональныеСетки = {
+ [РЕСУРСЫ]: {
+ [ФИШКА]: null,
+ },
+ };
+
+ мир.текстуры = {
+ [ТЕМА_ОТЛАДОЧНАЯ]: { },
+ };
+ var м = мир.модули.модульПоУказателю(ТЕМА_ОТЛАДОЧНАЯ);
+ var файлы = Object.keys(м.структура).sort();
+ for (var номер in файлы)
+ {
+ var файл = файлы[номер];
+ мир.текстуры[ТЕМА_ОТЛАДОЧНАЯ][файл] = null;
+ }
+};
+
// // // //
-ПлавноУбратьСтраницуЗагрузкиМаджонгаИСкрытьКрутилку = мир =>
+ПлавноУбратьСтраницуЗагрузкиИСкрытьКрутилку = мир =>
{
плавноСкрытьИУдалить("экран-загрузки", { "задержка": 0.4 });
плавноСкрыть("крутилка", { "задержка": 0.4 });
diff --git a/🏁.череда b/🏁.череда
index 2e7041c..ce84c9c 100644
--- a/🏁.череда
+++ b/🏁.череда
@@ -1,2 +1,25 @@
-надо окончить загрузку маджонга
- плавно убрать страницу загрузки маджонга и скрыть крутилку
\ No newline at end of file
+надо окончить загрузку приложения
+ плавно убрать страницу загрузки и скрыть крутилку
+ подготовиться к загрузке ресурсов
+ загрузить полигональные сетки
+загрузили полигональные сетки
+ загрузить текстуры
+загрузили текстуры
+ создать материалы фишек
+ создать пример сцены
+ подготовить механику маджонга
+ задать фишки
+ создать фишки
+ задать материалы фишкам
+ подготовить фишки к выбору
+
+нажатие в рисователе
+ выбрать узел сцены
+выбрали узел сцены
+ задать фишку для выбора
+ выбрать фишку маджонга
+изменили выбранные фишки маджонга
+ задать материалы фишкам
+ выделить выбранные фишки
+убрали фишки маджонга
+ скрыть убранные фишки
\ No newline at end of file
diff --git a/📦 b/📦
index 8611b46..40e7330 100644
--- a/📦
+++ b/📦
@@ -4,7 +4,9 @@
https://bitbucket.org/gitjs/jquery/raw/3.5.1/0000
https://bitbucket.org/gitjs/uikit/raw/3.2.0/0000
-https://git.opengamestudio.org/mahjong/base64/raw/branch/master/0000
https://git.opengamestudio.org/mahjong/mahjong-raskladka-layout/raw/branch/master/0000
https://git.opengamestudio.org/mahjong/povtorniy-repeating-ui/raw/branch/master/0000
-https://git.opengamestudio.org/KH/PuCOBATEJlb-renderer/raw/branch/master/0000
\ No newline at end of file
+https://git.opengamestudio.org/PuCOBATEJlb/PuCOBATEJlb/raw/branch/master/0000
+https://git.opengamestudio.org/PuCOBATEJlb/PECYPCbl/raw/branch/master/0000
+https://git.opengamestudio.org/MAOH/MAOH_TEMA_OTAK/raw/branch/master/0000
+https://git.opengamestudio.org/MAOH/MEXMA/raw/branch/master/0000
\ No newline at end of file
diff --git a/📦.js b/📦.js
new file mode 100644
index 0000000..78322a3
--- /dev/null
+++ b/📦.js
@@ -0,0 +1,69 @@
+ОкончитьЗагрузкуПриложения = мир =>
+{
+ мир.уведомить("надо окончить загрузку приложения");
+};
+
+
+// // // //
+
+
+ЗагрузитьОкончание = мир =>
+{
+ var м = мир.модули.модульПоУказателю(УКАЗАТЕЛЬ_ЭТОГО_МОДУЛЯ);
+ eval(м.содержимое["/🏁.js"]);
+ мир.разобрать(м.содержимое["/🏁.череда"]);
+};
+
+
+// // // //
+
+
+ЗагрузитьБиблиотекиПриложения = мир =>
+{
+ var указатели = [];
+ var м = мир.модули.модульПоУказателю(УКАЗАТЕЛЬ_ЭТОГО_МОДУЛЯ);
+ var содержимое = м.содержимое["/📦"];
+ var строки = содержимое.split(/\n/);
+ for (var номер in строки)
+ {
+ var строка = строки[номер];
+ if (!строка.startsWith("#") && строка.length)
+ {
+ указатели.push(строка);
+ }
+ }
+
+ if (указатели.length)
+ {
+ var сообщение = "Загрузка библиотек ⚬ 加载库 ⚬ Loading libraries";
+ console.debug(сообщение, указатели);
+ мир.модули.использовали.подписатьРаз(function() {
+ мир.уведомить("ручной пуск");
+ мир.уведомить("загрузили библиотеки приложения");
+ });
+ мир.модули.использовать(указатели);
+ }
+ else
+ {
+ мир.уведомить("загрузили библиотеки приложения");
+ }
+};
+
+
+// // // //
+
+
+ПроверитьНаличиеОбновленийПриложения = мир =>
+{
+ // Эта функция находится вне "/🔄.js", т.к. "/🔄.js" отключаем,
+ // отчего этой функции просто не будет в пространстве имён.
+ var событие = "надо обновить приложение при наличии обновлений";
+ if (событие in мир.события)
+ {
+ мир.уведомить(событие);
+ }
+ else
+ {
+ мир.уведомить("обновления приложения отсутствуют");
+ }
+};
\ No newline at end of file
diff --git a/📦.череда b/📦.череда
new file mode 100644
index 0000000..49f92ca
--- /dev/null
+++ b/📦.череда
@@ -0,0 +1,7 @@
+пуск
+ проверить наличие обновлений приложения
+обновления приложения отсутствуют
+ загрузить библиотеки приложения
+загрузили библиотеки приложения
+ загрузить окончание
+ окончить загрузку приложения
\ No newline at end of file
diff --git a/🔄.js b/🔄.js
index 54f093c..25dc85b 100644
--- a/🔄.js
+++ b/🔄.js
@@ -1,8 +1,3 @@
-
-
-// // // //
-
-
ПерезагрузитьПриложениеПослеОбновления = мир =>
{
window.location.reload(false);
diff --git a/🙈.js b/🙈.js
deleted file mode 100644
index b829ecb..0000000
--- a/🙈.js
+++ /dev/null
@@ -1,31 +0,0 @@
-
-
-// // // //
-
-
-ЗадатьЗаголовок = мир =>
-{
- document.title = "🀄 МАОН";
-};
-
-
-// // // //
-
-
-ОтобразитьСтраницуЗагрузкиМаджонга = мир =>
-{
- var м = мир.модули.модульПоУказателю(УКАЗАТЕЛЬ_ЭТОГО_МОДУЛЯ);
-
- var вид = document.createElement("style");
- document.head.appendChild(вид);
- вид.innerHTML = м.содержимое["/🙈.css"];
-
- var структура = м.содержимое["/🙈.html"]
- .replace(/\${версия}/g, м.версия);
- // Вставляем содержимое в рамку, чтобы применяемые стили UIkit не
- // дёргали надписи.
- // https://stackoverflow.com/a/8322025
- var рамка = "";
- document.body.insertAdjacentHTML("afterbegin", рамка);
- document.getElementById("экран-загрузки").src = "data:text/html;charset=utf-8," + структура;
-};
\ No newline at end of file
diff --git a/🧱.js b/🧱.js
deleted file mode 100644
index c85bdc9..0000000
--- a/🧱.js
+++ /dev/null
@@ -1,24 +0,0 @@
-ЗагрузитьБиблиотекиПриложения = мир =>
-{
- var указатели = [];
- var м = мир.модули.модульПоУказателю(УКАЗАТЕЛЬ_ЭТОГО_МОДУЛЯ);
- var содержимое = м.содержимое["/📦"];
- var строки = содержимое.split(/\n/);
- for (var номер in строки)
- {
- var строка = строки[номер];
- if (!строка.startsWith("#") && строка.length)
- {
- указатели.push(строка);
- }
- }
-
- var сообщение = "Загрузка библиотек ⚬ 加载库 ⚬ Loading libraries";
- console.debug(сообщение, указатели);
-
- мир.модули.использовали.подписатьРаз(function() {
- мир.уведомить("ручной пуск");
- мир.уведомить("загрузили библиотеки приложения");
- });
- мир.модули.использовать(указатели);
-};
\ No newline at end of file