Files
CEHMA/🎬.js

170 lines
4.6 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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();
мир.фишкиСцены = [];
};