diff --git a/0000 b/0000 index 601f31d..ad29761 100644 --- a/0000 +++ b/0000 @@ -6,8 +6,6 @@ x /интерфейс|ui.js /интерфейс|ui.череда x /пуск|run.js /пуск|run.череда -/сцена|scene.js -/сцена|scene.череда x /тема|theme.js /тема|theme.череда x /функции|functions.js \ No newline at end of file diff --git a/сцена|scene.js b/сцена|scene.js deleted file mode 100644 index a788666..0000000 --- a/сцена|scene.js +++ /dev/null @@ -1,432 +0,0 @@ -const ИМЯ = "ОМ | MB"; -const ИМЯ_МОДУЛЯ_РЕСУРСОВ = "Ресурсы Маджонга | Mahjong resources"; -const ИМЯ_ОТЛ_РАСКЛАДКИ = "Отладочные раскладки Маджонга | Mahjong debug layouts"; - - -// // // // - - -ОкраситьВыбранныеФишки = мир => -{ - // Очищаем цвета всех фишек. - for (var номер in мир.фишки) - { - var фишка = мир.фишки[номер]; - var группа = мир.группыФишек[номер]; - var материал = мир.материалыФишек[группа]; - фишка.material = материал; - } - // Окрашиваем выбранные фишки. - for (var id in мир.номераВыбранныхФишек) - { - var номер = мир.номераВыбранныхФишек[id]; - var фишка = мир.фишки[номер]; - var группа = мир.группыФишек[номер]; - var материал = мир.материалыВыбранныхФишек[группа]; - фишка.material = материал; - } -}; - - -// // // // - - -ВывестиВыбранныеФишки = мир => -{ - var номер = мир.номерВыбраннойФишки; - var группа = мир.группыФишек[номер]; - console.debug(`Выбрали фишку. номер: '${номер}' группа: '${группа}'`); - console.debug("Номера выбранных фишек", мир.номераВыбранныхФишек); -}; - - -// // // // - - -ПодготовитьВыборФишек = мир => -{ - мир.номераВыбранныхФишек = []; -}; - - -// // // // - - -ВыбратьФишкуВКоординатахНажатия = мир => -{ - мир.ловецНажатий.setFromCamera(мир.позицияНажатия, мир.камера); - var пересечения = мир.ловецНажатий.intersectObjects(мир.корень.children); - if (пересечения.length) - { - var фишка = пересечения[0].object; - var номер = номерФишки(мир.фишки, фишка.id); - if (номер) - { - мир.номерВыбраннойФишки = номер; - мир.номераВыбранныхФишек.push(номер); - мир.уведомить("выбор фишки"); - } - } - -}; - - -// // // // - - -СоздатьМатериалыВыбранныхФишекОтладочнойТемы = мир => -{ - мир.материалыВыбранныхФишек = []; - for (var номер in мир.материалыФишек) - { - var материал = мир.материалыФишек[номер].clone(); - материал.color = new THREE.Color(0xff0000); - мир.материалыВыбранныхФишек.push(материал); - } -}; - - -// // // // - - -ВывестиКоординатыНажатия = мир => -{ - 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 == 1) - { - ++группа; - // Начинаем группы заново, как только они заканчиваются. - 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; - 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 номерМатериала = номер % 42; - var материал = мир.материалыФишек[номерМатериала]; - фишка.material = материал; - } -}; - - -// // // // - - -СоздатьМатериалыФишекОтладочнойТемы = мир => -{ - мир.материалыФишек = []; - var тема = "отладочная|debug"; - for (var номер = 1; номер <= 42; ++номер) - { - var текстура = мир.текстурыТемФишек[тема][номер]; - var материал = new THREE.MeshLambertMaterial({map: текстура}); - мир.материалыФишек.push(материал); - } -}; - - -// // // // - - -ВывестиФактЗагрузкиТемыФишекМаджонга = мир => -{ - console.debug("ВывестиФактЗагрузкиТемыФишекМаджонга"); -}; - - -// // // // - - -ЦентрироватьСцену = мир => -{ - var мин = { - "x": 0, - "z": 0, - }; - var макс = { - "x": 0, - "z": 0, - }; - for (var номер in мир.фишки) - { - const фишка = мир.фишки[номер]; - if (фишка.position.x < мин.x) - { - мин.x = фишка.position.x; - } - if (фишка.position.x > макс.x) - { - макс.x = фишка.position.x; - } - if (фишка.position.z < мин.z) - { - мин.z = фишка.position.z; - } - if (фишка.position.z > макс.z) - { - макс.z = фишка.position.z; - } - } - мир.корень.position.x -= (макс.x - мин.x) / 2; - мир.корень.position.z -= (макс.z - мин.z) / 2; -}; - - -// // // // - - -ОтобразитьРаскладкуОднойФишкой = мир => -{ - 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 модуль = мир.модули.модульПоИмени(ИМЯ_МОДУЛЯ_РЕСУРСОВ); - //var ресурс = "/cat.layout"; - var ресурс = "/X_shaped.layout"; - var содержимое = модуль.содержимое[ресурс]; - мир.раскладкаKMahjongg = { - "содержимое": содержимое, - }; -}; - - -// // // // - - -ПовернутьФишку = мир => -{ - мир.фишка.rotation.x += 0.03; - мир.фишка.rotation.y += 0.02; -}; - - -// // // // - - -Отладка = мир => -{ - console.debug("Отладка", Date()); -}; - - -// // // // - - -ЗапуститьТаймерПоворотаФишки = мир => -{ - setInterval( - function() { - мир.уведомить("поворот фишки"); - }, - 60 - ); - -}; - - -// // // // - - -ПодготовитьФишку = мир => -{ - var материал = new THREE.MeshLambertMaterial({map: мир.текстураФишки}); - мир.фишка.material = материал; -}; - - -// // // // - - -ЗагрузитьТекстуруФишкиИзМодуля = мир => -{ - var модуль = мир.модули.модульПоИмени(ИМЯ_МОДУЛЯ_РЕСУРСОВ); - var ресурс = "/текстура.png"; - var содержимое = модуль.содержимое[ресурс]; - var b64 = base64js.fromByteArray(new Uint8Array(содержимое)); - var адрес = `data:image/png;base64,${b64}`; - мир.загрузчикТекстур.load( - адрес, - function(текстура) { - мир.текстураФишки = текстура; - мир.текстураФишки.flipY = false; - мир.уведомить("загрузили текстуру фишки из модуля"); - }, - null, - function(error) { - console.error("ОШИБКА | ERROR", error); - } - ); -}; - - diff --git a/сцена|scene.череда b/сцена|scene.череда deleted file mode 100644 index 82495ab..0000000 --- a/сцена|scene.череда +++ /dev/null @@ -1,65 +0,0 @@ -пуск модулей маджонга - настроить ThreeJS - встроить отрисовщика ThreeJS - отслеживать изменение размера окна браузера - изменить размер отрисовщика ThreeJS - создать загрузчик GLTF - создать загрузчик текстур - подготовить сцену - - - - - загрузить фишку -загрузили фишку -# загрузить раскладку - загрузить отладочную раскладку - разобрать раскладку KMahjongg -разобрали раскладку KMahjongg - задать тему фишек для загрузки - загрузить тему фишек маджонга -загрузили тему фишек маджонга - - - - - - - -# вывести факт загрузки темы фишек маджонга -# загрузить текстуру фишки из модуля -#загрузили текстуру фишки из модуля -# подготовить фишку -# отобразить раскладку одной фишкой -# отобразить раскладку последовательно со всеми текстурами - создать материалы фишек отладочной темы - создать узлы фишек - создать группы фишек - задать материалы фишкам по группам - центрировать сцену - отслеживать нажатия мышью - отслеживать нажатия пальцем - исправить отслеживание нажатий на IOS - подготовить выбор фишек - создать материалы выбранных фишек отладочной темы - запустить отрисовку - - - - - - -изменили размер окна браузера - изменить размер отрисовщика ThreeJS - -нажали -# вывести координаты нажатия - выбрать фишку в координатах нажатия - -выбор фишки - вывести выбранные фишки - окрасить выбранные фишки - -#поворот фишки -# отладка -# повернуть фишку \ No newline at end of file