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