Files
CEHMA/🎬.js

153 lines
4.3 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 КОЭФФИЦИЕНТ_ВЫСОТЫ = 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;
};