const ОТСТУП_МЕЖДУ_ФИШКАМИ = 0.02; const КОЭФФИЦИЕНТ_ВЫСОТЫ = 1.5; // // // // РасположитьКамеруСцены = мир => { var р = мир.размерПоляФишек; var расстояние = р.макс.z - р.мин.z; мир.камера.position.y = расстояние * КОЭФФИЦИЕНТ_ВЫСОТЫ; мир.камера.position.z = расстояние; мир.камера.lookAt(new THREE.Vector3(0, 0, 0)); }; // // // // ЦентрироватьФишкиСцены = мир => { // Возвращаем в центр. мир.сценаМаджонга.position.x = 0; мир.сценаМаджонга.position.z = 0; var р = мир.размерПоляФишек; // Убираем пустоту слева. мир.сценаМаджонга.position.x -= р.мин.x; мир.сценаМаджонга.position.z -= р.мин.z; // Центрируем остаток. мир.сценаМаджонга.position.x -= (р.макс.x - р.мин.x) / 2; мир.сценаМаджонга.position.z -= (р.макс.z - р.мин.z) / 2; }; // // // // ПосчитатьРазмерПоляФишек = мир => { var мин = { "x": 1000000, "z": 1000000, }; 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; } } мир.размерПоляФишек = { "мин": мин, "макс": макс, }; }; // // // // ЗадатьМатериалыФишкамСцены = мир => { 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 отступ = мир.отступМеждуФишкамиСцены; for (var номер in мир.фишкиМаджонга) { // Узел сцены. var ф = мир.фишкиСцены[номер]; ф.layers.set(0); ф.userData = номер; // Расположение. var фм = мир.фишкиМаджонга[номер]; var п = фм["📍"]; var слой = п[0]; var ряд = п[1]; var столбец = п[2]; ф.position.x = столбец * (размеры[0] + отступ); ф.position.z = ряд * (размеры[1] + отступ); ф.position.y = слой * (размеры[2] + отступ); } }; // // // // СкрытьФишкиСцены = мир => { 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(); мир.фишкиСцены = []; };