From 72b51ab4d56c74e73225191083b1d274cd0ad652 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=93=D0=BB=D0=B0=D0=B2=D1=80=D0=B5=D0=B4=20=7C=20Glavred?= Date: Thu, 3 Sep 2020 16:19:32 +0300 Subject: [PATCH] =?UTF-8?q?=D0=98=D0=B7=D0=BC=D0=B5=D0=BD=D0=B5=D0=BD?= =?UTF-8?q?=D0=B8=D1=8F=20=D0=BE=D1=82=20=D0=93=D0=BB=D0=B0=D0=B2=D1=80?= =?UTF-8?q?=D0=B5=D0=B4=D0=B0=20=D0=93=D0=B8=D1=82=D0=96=D0=A1=20|=20Chang?= =?UTF-8?q?es=20of=20GitJS=20Glavred?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- 0000 | 2 + раскладка|layout.js | 155 +++++++++++++++++++++++++ раскладка|layout.череда | 7 ++ сцена|scene.js | 79 ++++++++++--- сцена|scene.череда | 13 ++- 5 files changed, 232 insertions(+), 24 deletions(-) create mode 100644 раскладка|layout.js create mode 100644 раскладка|layout.череда diff --git a/0000 b/0000 index 7f75c43..a07303a 100644 --- a/0000 +++ b/0000 @@ -6,5 +6,7 @@ x /интерфейс|ui.js /интерфейс|ui.череда x /пуск|run.js /пуск|run.череда +x /раскладка|layout.js +/раскладка|layout.череда x /сцена|scene.js /сцена|scene.череда \ No newline at end of file diff --git a/раскладка|layout.js b/раскладка|layout.js new file mode 100644 index 0000000..d2c6848 --- /dev/null +++ b/раскладка|layout.js @@ -0,0 +1,155 @@ + + +// // // // + + +ВывестиПозицииРаскладкиKMahjongg = мир => +{ + console.debug("Позиции раскладки KMahjongg НАЧАЛО"); + const позиции = мир.раскладкаKMahjongg.позиции; + for (var номер in позиции) { + const позиция = позиции[номер]; + console.debug(позиция); + } + console.debug("Позиции раскладки KMahjongg КОНЕЦ"); +}; + + +// // // // + + +РазобратьПозицииЭлементовРаскладкиKMahjongg = мир => +{ + const параметры = мир.раскладкаKMahjongg.параметры; + const строки = мир.раскладкаKMahjongg.строки; + var позиции = []; + for (var номерСлоя = 0; номерСлоя < параметры.глубина; ++номерСлоя) + { + console.debug("cлой", номерСлоя); + for (var ряд = 0; ряд < параметры.высота - 1; ++ряд) + { + for (var столбец = 0; столбец < параметры.ширина - 1; ++столбец) + { + const рядСлоя = ряд + (номерСлоя * параметры.высота); + if ( + (строки[рядСлоя][столбец] == '1') && + (строки[рядСлоя][столбец + 1] == '2') && + (строки[рядСлоя + 1][столбец] == '4') && + (строки[рядСлоя + 1][столбец + 1] == '3') + ) { + позиции.push([номерСлоя, ряд, столбец]); + } + } + } + } + мир.раскладкаKMahjongg.позиции = позиции; +}; + + +// // // // + + +ВывестиПараметрыРаскладкиKMahjongg = мир => +{ + console.debug("Параметры раскладки KMahjongg", JSON.stringify(мир.раскладкаKMahjongg.параметры)); +}; + + +// // // // + + +РазобратьПараметрыРаскладкиKMahjongg = мир => +{ + var параметры = { + "ширина": 32, + "высота": 16, + "глубина": 0, + "версия": "1.0", + }; + + var префиксы = { + "версия": "kmahjongg-layout-v", + "глубина": "d", + "ширина": "w", + "высота": "h", + }; + + var удалитьЭлементов = 0; + var строки = мир.раскладкаKMahjongg.строки; + for (var номер in строки) + { + var строка = строки[номер]; + // Версия. + if (строка.startsWith(префиксы.версия)) + { + параметры.версия = строка.substring(префиксы.версия.length); + } + // Глубина. + else if (строка.startsWith(префиксы.глубина)) + { + параметры.глубина = строка.substring(префиксы.глубина.length); + } + // Ширина. + else if (строка.startsWith(префиксы.ширина)) + { + параметры.ширина = строка.substring(префиксы.ширина.length); + } + // Высота. + else if (строка.startsWith(префиксы.высота)) + { + параметры.высота = строка.substring(префиксы.высота.length); + } + else + { + удалитьЭлементов = номер; + break; + } + } + + мир.раскладкаKMahjongg.строки.splice(0, удалитьЭлементов); + if (параметры.глубина == 0) + { + параметры.глубина = мир.раскладкаKMahjongg.строки.length / параметры.высота; + } + мир.раскладкаKMahjongg.параметры = параметры; + +}; + + +// // // // + + +ПодготовитьРаскладкуKMahjonggКРазбору = мир => +{ + var строки = мир.раскладкаKMahjongg.содержимое.split(/\n/); + мир.раскладкаKMahjongg.строки = []; + for (var номер in строки) + { + var строка = строки[номер].trim(); + // Пропускаем комментарии и пустые строки. + if (строка.startsWith("#") || !строка.length) + { + continue; + } + мир.раскладкаKMahjongg.строки.push(строка); + } +}; + + +// // // // + + +УведомитьОбОкончанииРазбораРаскладкиKMahjongg = мир => +{ + мир.уведомить("разобрали раскладку KMahjongg"); +}; + + +// // // // + + +РазобратьРаскладкуKMahjongg = мир => +{ + мир.уведомить("надо разобрать раскладку KMahjongg"); +}; + diff --git a/раскладка|layout.череда b/раскладка|layout.череда new file mode 100644 index 0000000..92016b6 --- /dev/null +++ b/раскладка|layout.череда @@ -0,0 +1,7 @@ +надо разобрать раскладку KMahjongg + подготовить раскладку KMahjongg к разбору + разобрать параметры раскладки KMahjongg + вывести параметры раскладки KMahjongg + разобрать позиции элементов раскладки KMahjongg + вывести позиции раскладки KMahjongg + уведомить об окончании разбора раскладки KMahjongg \ No newline at end of file diff --git a/сцена|scene.js b/сцена|scene.js index fa8aca7..d9520a9 100644 --- a/сцена|scene.js +++ b/сцена|scene.js @@ -1,23 +1,59 @@ const ИМЯ = "ОМ | MB"; -const БАЗА = "https://git.opengamestudio.org/mahjong/mahjong-modeli-models/raw/branch/master/"; const ИМЯ_МОДУЛЯ_РЕСУРСОВ = "Ресурсы Маджонга | Mahjong resources"; // // // // -ВключитьКэшированиеРесурсовThreeJSДляЗагрузкиРесурсовИзМодулей = мир => +ЦентрироватьСцену = мир => { - THREE.Cache.enabled = true; + // мир.корень.position +}; + +// // // // + + +ОтобразитьРаскладкуОднойФишкой = мир => +{ + var границы = мир.фишка.geometry.boundingBox; + var размеры = [ + (границы.max.x - границы.min.x) / 2, + (границы.max.z - границы.min.z) / 2, + границы.max.y - границы.min.y, + ]; + + const позиции = мир.раскладкаKMahjongg.позиции; + мир.фишки = []; + for (var номер in позиции) + { + var фишка = мир.фишка.clone(); + мир.фишки.push(фишка); + мир.корень.add(фишка); + + var позиция = позиции[номер]; + var слой = позиция[0]; + var ряд = позиция[1]; + var столбец = позиция[2]; + фишка.position.x = столбец * размеры[0]; + фишка.position.z = ряд * размеры[1]; + фишка.position.y = слой; + + } }; // // // // -УбратьПереворотТекстурыФишки = мир => +ЗагрузитьРаскладку = мир => { - мир.текстураФишки.flipY = false; + var модуль = мир.модули.модульПоИмени(ИМЯ_МОДУЛЯ_РЕСУРСОВ); + //var ресурс = "/cat.layout"; + var ресурс = "/X_shaped.layout"; + var содержимое = модуль.содержимое[ресурс]; + мир.раскладкаKMahjongg = { + "содержимое": содержимое, + }; }; @@ -26,8 +62,8 @@ const ИМЯ_МОДУЛЯ_РЕСУРСОВ = "Ресурсы Маджонга | ПовернутьФишку = мир => { - мир.модельФишки.rotation.x += 0.03; - мир.модельФишки.rotation.y += 0.02; + мир.фишка.rotation.x += 0.03; + мир.фишка.rotation.y += 0.02; }; @@ -61,7 +97,7 @@ const ИМЯ_МОДУЛЯ_РЕСУРСОВ = "Ресурсы Маджонга | ПодготовитьСцену = мир => { var коэффициент = 2; - var расстояние = 5; + var расстояние = 20; мир.камера.position.y = расстояние * коэффициент; мир.камера.position.z = расстояние; мир.камера.lookAt(new THREE.Vector3(0, 0, 0)); @@ -69,22 +105,19 @@ const ИМЯ_МОДУЛЯ_РЕСУРСОВ = "Ресурсы Маджонга | мир.свет = new THREE.DirectionalLight(0xffffff, 1); мир.свет.position.set(-0.5, 1, 0.5).normalize(); мир.сцена.add(мир.свет); + + мир.корень = new THREE.Group(); + мир.сцена.add(мир.корень); }; // // // // -СоздатьФишку = мир => +ПодготовитьФишку = мир => { - мир.сцена.add(мир.модельФишки); var материал = new THREE.MeshLambertMaterial({map: мир.текстураФишки}); - мир.модельФишки.traverse(function(ребёнок) { - if (ребёнок.isMesh) - { - ребёнок.material = материал; - } - }); + мир.фишка.material = материал; }; @@ -102,6 +135,7 @@ const ИМЯ_МОДУЛЯ_РЕСУРСОВ = "Ресурсы Маджонга | адрес, function(текстура) { мир.текстураФишки = текстура; + мир.текстураФишки.flipY = false; мир.уведомить("загрузили текстуру фишки из модуля"); }, null, @@ -124,17 +158,24 @@ const ИМЯ_МОДУЛЯ_РЕСУРСОВ = "Ресурсы Маджонга | // // // // -ЗагрузитьМодельФишки = мир => +ЗагрузитьФишку = мир => { var модуль = мир.модули.модульПоИмени(ИМЯ_МОДУЛЯ_РЕСУРСОВ); var ресурс = "/фишка.gltf"; var адрес = `${window.location.origin}${ресурс}`; + THREE.Cache.enabled = true; THREE.Cache.add(адрес, модуль.содержимое[ресурс]); мир.загрузчикGLTF.load( адрес, function(gltf) { - мир.модельФишки = gltf.scene; - мир.уведомить("загрузили модель фишки"); + // Вычленяем Mesh. + gltf.scene.traverse(function(ребёнок) { + if (ребёнок.isMesh) + { + мир.фишка = ребёнок; + } + }); + мир.уведомить("загрузили фишку"); }, null, function(error) { diff --git a/сцена|scene.череда b/сцена|scene.череда index d50a4e9..08c933e 100644 --- a/сцена|scene.череда +++ b/сцена|scene.череда @@ -5,14 +5,17 @@ изменить размер отрисовщика ThreeJS создать загрузчик GLTF создать загрузчик текстур - включить кэширование ресурсов ThreeJS для загрузки ресурсов из модулей подготовить сцену - загрузить модель фишки -загрузили модель фишки + загрузить фишку +загрузили фишку загрузить текстуру фишки из модуля загрузили текстуру фишки из модуля - убрать переворот текстуры фишки - создать фишку + загрузить раскладку + разобрать раскладку KMahjongg +разобрали раскладку KMahjongg + подготовить фишку + отобразить раскладку одной фишкой + центрировать сцену запустить отрисовку # запустить таймер поворота фишки изменили размер окна браузера