|
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153 |
- 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;
- };
|