|
|
@@ -1,153 +0,0 @@ |
|
|
|
const КОЭФФИЦИЕНТ_ВЫСОТЫ = 1.5; |
|
|
|
|
|
|
|
|
|
|
|
СоздатьОтладочнуюСферуВЦентреКорня = мир => |
|
|
|
{ |
|
|
|
var форма = new THREE.SphereBufferGeometry(0.5, 32, 32); |
|
|
|
var сфера = new THREE.Mesh(форма); |
|
|
|
сфера.material = new THREE.MeshLambertMaterial({ color: 0xAA00AA }); |
|
|
|
мир.кореньСценыМаджонга.add(сфера); |
|
|
|
}; |
|
|
|
|
|
|
|
|
|
|
|
// // // // |
|
|
|
|
|
|
|
|
|
|
|
РасположитьКамеруСцены = мир => |
|
|
|
{ |
|
|
|
var р = мир.размерПоляФишек; |
|
|
|
var расстояние = р.макс.z - р.мин.z; |
|
|
|
мир.камера.position.y = расстояние * КОЭФФИЦИЕНТ_ВЫСОТЫ; |
|
|
|
мир.камера.position.z = расстояние; |
|
|
|
мир.камера.lookAt(new THREE.Vector3(0, 0, 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 = м; |
|
|
|
} |
|
|
|
}; |
|
|
|
|
|
|
|
|
|
|
|
// // // // |
|
|
|
|
|
|
|
|
|
|
|
УбратьСтарыеФишкиСцены = мир => |
|
|
|
{ |
|
|
|
if (мир.сценаМаджонга.children.length) |
|
|
|
{ |
|
|
|
мир.сценаМаджонга.remove(мир.кореньСценыМаджонга); |
|
|
|
} |
|
|
|
мир.кореньСценыМаджонга = new THREE.Group(); |
|
|
|
мир.сценаМаджонга.add(мир.кореньСценыМаджонга); |
|
|
|
мир.фишкиСцены = []; |
|
|
|
}; |
|
|
|
|
|
|
|
|
|
|
|
// // // // |
|
|
|
|
|
|
|
|
|
|
|
СоздатьНовыеФишкиСцены = мир => |
|
|
|
{ |
|
|
|
var фишка = мир.модельФишкиСцены; |
|
|
|
var границы = фишка.geometry.boundingBox; |
|
|
|
var размеры = [ |
|
|
|
(границы.max.x - границы.min.x) / 2, |
|
|
|
(границы.max.z - границы.min.z) / 2, |
|
|
|
(границы.max.y - границы.min.y), |
|
|
|
]; |
|
|
|
var отступ = мир.отступМеждуФишкамиСцены; |
|
|
|
|
|
|
|
for (var номер in мир.фишкиМаджонга) |
|
|
|
{ |
|
|
|
// Узел сцены. |
|
|
|
var фм = мир.фишкиМаджонга[номер]; |
|
|
|
var ф = фишка.clone(); |
|
|
|
ф.userData = номер; |
|
|
|
мир.фишкиСцены.push(ф); |
|
|
|
мир.кореньСценыМаджонга.add(ф); |
|
|
|
// Расположение. |
|
|
|
var п = фм["📍"]; |
|
|
|
var слой = п[0]; |
|
|
|
var ряд = п[1]; |
|
|
|
var столбец = п[2]; |
|
|
|
ф.position.x = столбец * (размеры[0] + отступ); |
|
|
|
ф.position.z = ряд * (размеры[1] + отступ); |
|
|
|
ф.position.y = слой * (размеры[2] + отступ); |
|
|
|
} |
|
|
|
}; |
|
|
|
|
|
|
|
|
|
|
|
// // // // |
|
|
|
|
|
|
|
|
|
|
|
ПодготовитьСценуМаджонга = мир => |
|
|
|
{ |
|
|
|
мир.сценаМаджонга = new THREE.Group(); |
|
|
|
мир.отступМеждуФишкамиСцены = 0.02; |
|
|
|
}; |