diff --git a/0000 b/0000 index a3fbadb..995788b 100644 --- a/0000 +++ b/0000 @@ -1,7 +1,8 @@ Сцена Маджонга -0.5.1 +1.0.0 https://git.opengamestudio.org/MAOH/CEHMA x /🎬.js /🎬.череда +/🐛.js x /📖.js \ No newline at end of file diff --git a/🎬.js b/🎬.js index 47df495..d778f76 100644 --- a/🎬.js +++ b/🎬.js @@ -1,15 +1,7 @@ +const ОТСТУП_МЕЖДУ_ФИШКАМИ = 0.02; const КОЭФФИЦИЕНТ_ВЫСОТЫ = 1.5; -СоздатьОтладочнуюСферуВЦентреКорня = мир => -{ - var форма = new THREE.SphereBufferGeometry(0.5, 32, 32); - var сфера = new THREE.Mesh(форма); - сфера.material = new THREE.MeshLambertMaterial({ color: 0xAA00AA }); - мир.кореньСценыМаджонга.add(сфера); -}; - - // // // // @@ -28,13 +20,17 @@ const КОЭФФИЦИЕНТ_ВЫСОТЫ = 1.5; ЦентрироватьФишкиСцены = мир => { + // Возвращаем в центр. + мир.сценаМаджонга.position.x = 0; + мир.сценаМаджонга.position.z = 0; + var р = мир.размерПоляФишек; // Убираем пустоту слева. - мир.кореньСценыМаджонга.position.x -= р.мин.x; - мир.кореньСценыМаджонга.position.z -= р.мин.z; + мир.сценаМаджонга.position.x -= р.мин.x; + мир.сценаМаджонга.position.z -= р.мин.z; // Центрируем остаток. - мир.кореньСценыМаджонга.position.x -= (р.макс.x - р.мин.x) / 2; - мир.кореньСценыМаджонга.position.z -= (р.макс.z - р.мин.z) / 2; + мир.сценаМаджонга.position.x -= (р.макс.x - р.мин.x) / 2; + мир.сценаМаджонга.position.z -= (р.макс.z - р.мин.z) / 2; }; @@ -51,7 +47,7 @@ const КОЭФФИЦИЕНТ_ВЫСОТЫ = 1.5; "x": 0, "z": 0, }; - for (var номер in мир.фишкиСцены) + for (var номер in мир.фишкиМаджонга) { const ф = мир.фишкиСцены[номер]; if (ф.position.x < мин.x) @@ -84,7 +80,7 @@ const КОЭФФИЦИЕНТ_ВЫСОТЫ = 1.5; ЗадатьМатериалыФишкамСцены = мир => { - for (var н in мир.фишкиСцены) + for (var н in мир.фишкиМаджонга) { var ф = мир.фишкиСцены[н]; var г = мир.фишкиМаджонга[н]["🚩"]; @@ -94,25 +90,11 @@ const КОЭФФИЦИЕНТ_ВЫСОТЫ = 1.5; }; -// // // // - - -УбратьСтарыеФишкиСцены = мир => -{ - if (мир.сценаМаджонга.children.length) - { - мир.сценаМаджонга.remove(мир.кореньСценыМаджонга); - } - мир.кореньСценыМаджонга = new THREE.Group(); - мир.сценаМаджонга.add(мир.кореньСценыМаджонга); - мир.фишкиСцены = []; -}; - // // // // -СоздатьНовыеФишкиСцены = мир => +ПерезадатьФишкиСцены = мир => { var фишка = мир.модельФишкиСцены; var границы = фишка.geometry.boundingBox; @@ -122,16 +104,14 @@ const КОЭФФИЦИЕНТ_ВЫСОТЫ = 1.5; (границы.max.y - границы.min.y), ]; var отступ = мир.отступМеждуФишкамиСцены; - for (var номер in мир.фишкиМаджонга) { // Узел сцены. - var фм = мир.фишкиМаджонга[номер]; - var ф = фишка.clone(); + var ф = мир.фишкиСцены[номер]; + ф.layers.set(0); ф.userData = номер; - мир.фишкиСцены.push(ф); - мир.кореньСценыМаджонга.add(ф); // Расположение. + var фм = мир.фишкиМаджонга[номер]; var п = фм["📍"]; var слой = п[0]; var ряд = п[1]; @@ -146,8 +126,45 @@ const КОЭФФИЦИЕНТ_ВЫСОТЫ = 1.5; // // // // +СкрытьФишкиСцены = мир => +{ + var фишки = мир.фишкиСцены; + for (var н in фишки) + { + var ф = фишки[н]; + ф.layers.set(1); + } +}; + + +// // // // + + +ДосоздатьФишкиСцены = мир => +{ + // Если фишек в сцене уже достаточно, то ничего не делаем. + if (мир.фишкиСцены.length >= мир.фишкиМаджонга.length) + { + return; + } + + var фишка = мир.модельФишкиСцены; + var колво = мир.фишкиМаджонга.length - мир.фишкиСцены.length; + for (var н = 0; н < колво; ++н) + { + var ф = фишка.clone(); + мир.фишкиСцены.push(ф); + мир.кореньСценыМаджонга.add(ф); + } +} + + +// // // // + + ПодготовитьСценуМаджонга = мир => { + мир.отступМеждуФишкамиСцены = ОТСТУП_МЕЖДУ_ФИШКАМИ; мир.сценаМаджонга = new THREE.Group(); - мир.отступМеждуФишкамиСцены = 0.02; + мир.фишкиСцены = []; }; \ No newline at end of file diff --git a/🎬.череда b/🎬.череда index cbb0631..8931540 100644 --- a/🎬.череда +++ b/🎬.череда @@ -3,9 +3,10 @@ надо создать фишки в сцене засечь время Б - убрать старые фишки сцены + досоздать фишки сцены + скрыть фишки сцены засечь время Б - создать новые фишки сцены + перезадать фишки сцены засечь время Б посчитать размер поля фишек засечь время Б diff --git a/🐛.js b/🐛.js new file mode 100644 index 0000000..4158e55 --- /dev/null +++ b/🐛.js @@ -0,0 +1,7 @@ +СоздатьОтладочнуюСферуВЦентреКорня = мир => +{ + var форма = new THREE.SphereBufferGeometry(0.5, 32, 32); + var сфера = new THREE.Mesh(форма); + сфера.material = new THREE.MeshLambertMaterial({ color: 0xAA00AA }); + мир.кореньСценыМаджонга.add(сфера); +}; \ No newline at end of file diff --git a/📖.js b/📖.js index fcebc18..2f6e1fa 100644 --- a/📖.js +++ b/📖.js @@ -1,3 +1,18 @@ +УдалитьФишкиСцены = мир => +{ + if (мир.сценаМаджонга.children.length) + { + мир.сценаМаджонга.remove(мир.кореньСценыМаджонга); + } + мир.кореньСценыМаджонга = new THREE.Group(); + мир.сценаМаджонга.add(мир.кореньСценыМаджонга); + мир.фишкиСцены = []; +}; + + +// // // // + + СкрытьУбранныеФишкиВСцене = мир => { for (var номер in мир.убранныеФишкиМаджонга)