diff --git a/сцена|scene.js b/сцена|scene.js index 62a6dcc..4c0cb48 100644 --- a/сцена|scene.js +++ b/сцена|scene.js @@ -5,6 +5,135 @@ const ИМЯ_МОДУЛЯ_РЕСУРСОВ = "Ресурсы Маджонга | // // // // +ВывестиКоординатыНажатия = мир => +{ + var п = мир.позицияНажатия; + console.debug("нажатие", п.x, п.y); +}; + + +// // // // + + +ИсправитьОтслеживаниеНажатийНаIOS = мир => +{ + // https://stackoverflow.com/a/31459240/3404710 + мир.отрисовщик.domElement.style.cursor = "pointer"; +}; + + +// // // // + + +ОтслеживатьНажатияПальцем = мир => +{ + window.addEventListener( + "touchstart", + function(событие) { + var позиция = new THREE.Vector2(); + позиция.x = (событие.touches[0].clientX / window.innerWidth) * 2 - 1; + позиция.y = - (событие.touches[0].clientY / window.innerHeight) * 2 + 1; + мир.позицияНажатия = позиция; + мир.уведомить("нажали"); + } + ); + +}; + + +// // // // + + +ОтслеживатьНажатияМышью = мир => +{ + window.addEventListener( + "click", + function(событие) { + var позиция = new THREE.Vector2(); + позиция.x = (событие.clientX / window.innerWidth) * 2 - 1; + позиция.y = - (событие.clientY / window.innerHeight) * 2 + 1; + мир.позицияНажатия = позиция; + мир.уведомить("нажали"); + } + ); +}; + + +// // // // + + +ЗадатьМатериалыФишкамПоГруппам = мир => +{ + for (var номер in мир.группыФишек) + { + var группа = мир.группыФишек[номер]; + var материал = мир.материалыФишек[группа]; + фишка = мир.фишки[номер]; + фишка.material = материал; + } +}; + + +// // // // + + +СоздатьГруппыФишек = мир => +{ + мир.группыФишек = []; + const позиции = мир.раскладкаKMahjongg.позиции; + var группа = 0; + for (var номер in позиции) + { + мир.группыФишек.push(группа); + // Меняем группу каждую пару фишек. + if (номер %2 == 0) + { + ++группа; + // Начинаем группы заново, как только они заканчиваются. + if (группа >= 42) + { + группа = 0; + } + } + } +}; + + +// // // // + + +СоздатьУзлыФишек = мир => +{ + 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 = слой; + } +}; + + +// // // // + + ОтобразитьРаскладкуПоследовательноСоВсемиТекстурами = мир => { var границы = мир.фишка.geometry.boundingBox; @@ -30,12 +159,9 @@ const ИМЯ_МОДУЛЯ_РЕСУРСОВ = "Ресурсы Маджонга | фишка.position.x = столбец * размеры[0]; фишка.position.z = ряд * размеры[1]; фишка.position.y = слой; - // Текстура. - var номерТекстуры = номер % 42; - // Потому что текстуры с индекса 1 начинаются. - номерТекстуры += 1; - var текстура = мир.текстурыТемФишек["отладочная|debug"][номерТекстуры]; - var материал = new THREE.MeshLambertMaterial({map: текстура}); + // Материал. + var номерМатериала = номер % 42; + var материал = мир.материалыФишек[номерМатериала]; фишка.material = материал; } }; @@ -44,6 +170,22 @@ const ИМЯ_МОДУЛЯ_РЕСУРСОВ = "Ресурсы Маджонга | // // // // +СоздатьМатериалыФишекОтладочнойТемы = мир => +{ + мир.материалыФишек = []; + var тема = "отладочная|debug"; + for (var номер = 1; номер <= 42; ++номер) + { + var текстура = мир.текстурыТемФишек[тема][номер]; + var материал = new THREE.MeshLambertMaterial({map: текстура}); + мир.материалыФишек.push(материал); + } +}; + + +// // // // + + ВывестиФактЗагрузкиТемыФишекМаджонга = мир => { console.debug("ВывестиФактЗагрузкиТемыФишекМаджонга"); @@ -52,6 +194,7 @@ const ИМЯ_МОДУЛЯ_РЕСУРСОВ = "Ресурсы Маджонга | // // // // + ЗадатьТемуФишекДляЗагрузки = мир => { мир.темаФишек = "отладочная|debug"; diff --git a/сцена|scene.череда b/сцена|scene.череда index a4e80df..cca71f6 100644 --- a/сцена|scene.череда +++ b/сцена|scene.череда @@ -14,18 +14,26 @@ задать тему фишек для загрузки загрузить тему фишек маджонга загрузили тему фишек маджонга - вывести факт загрузки темы фишек маджонга - +# вывести факт загрузки темы фишек маджонга # загрузить текстуру фишки из модуля #загрузили текстуру фишки из модуля # подготовить фишку # отобразить раскладку одной фишкой - - отобразить раскладку последовательно со всеми текстурами + создать материалы фишек отладочной темы +# отобразить раскладку последовательно со всеми текстурами + создать узлы фишек + создать группы фишек + задать материалы фишкам по группам центрировать сцену + отслеживать нажатия мышью + отслеживать нажатия пальцем + исправить отслеживание нажатий на IOS запустить отрисовку изменили размер окна браузера изменить размер отрисовщика ThreeJS + +нажали + вывести координаты нажатия #поворот фишки # отладка diff --git a/тема|theme.js b/тема|theme.js index 9421c25..e48f704 100644 --- a/тема|theme.js +++ b/тема|theme.js @@ -40,7 +40,6 @@ ЗагрузитьСледующуюТекстуруТемыФишекМаджонга = мир => { - console.debug("ЗагрузитьСледующуюТекстуруТемыФишекМаджонга"); const загрузка = мир.загрузкаТемыФишек; var тема = мир.темыФишек[загрузка.имя]; var имяМодуляРесурсов = тема["🗿"]; @@ -71,8 +70,6 @@ ПодготовитьсяКЗагрузкеТемыФишекМаджонга = мир => { - console.debug("ПодготовитьсяКЗагрузкеТемыФишекМаджонга"); - мир.загрузкаТемыФишек = { "номер": 1, "всего": 42,