244 lines
5.2 KiB
JavaScript
244 lines
5.2 KiB
JavaScript
|
||
|
||
// // // //
|
||
|
||
|
||
ВыбратьТемуФишекОтладочную = мир =>
|
||
{
|
||
мир.выбраннаяТема = "отладочная|debug";
|
||
//мир.уведомить("выбрали тему");
|
||
};
|
||
|
||
|
||
// // // //
|
||
|
||
|
||
ВыбратьРаскладкуX = мир =>
|
||
{
|
||
мир.выбраннаяРаскладка = "X_shaped";
|
||
мир.уведомить("выбрали раскладку");
|
||
};
|
||
|
||
|
||
// // // //
|
||
|
||
|
||
ИзменитьРазмерОтрисовщикаThreeJS = мир =>
|
||
{
|
||
var ширина = window.innerWidth * мир.масштаб;
|
||
var высота = window.innerHeight * мир.масштаб;
|
||
мир.камера.aspect = ширина / высота;
|
||
мир.камера.updateProjectionMatrix();
|
||
мир.отрисовщик.setSize(ширина, высота);
|
||
|
||
var размер = мир.масштаб * 100;
|
||
мир.канва.style = `
|
||
max-width: ${размер}%;
|
||
max-height: ${размер}%;
|
||
width: ${размер}%;
|
||
height: ${размер}%;
|
||
`;
|
||
};
|
||
|
||
|
||
// // // //
|
||
|
||
|
||
ЗадатьОтладочныйМасштаб = мир =>
|
||
{
|
||
мир.масштаб = 3;
|
||
мир.уведомить("изменили масштаб");
|
||
};
|
||
|
||
|
||
// // // //
|
||
|
||
|
||
ВключитьОтслеживаниеНажатий = мир =>
|
||
{
|
||
мир.отслеживатьНажатия = true;
|
||
};
|
||
|
||
|
||
// // // //
|
||
|
||
|
||
ОтключитьОтслеживаниеНажатий = мир =>
|
||
{
|
||
мир.отслеживатьНажатия = false;
|
||
};
|
||
|
||
|
||
// // // //
|
||
|
||
|
||
ИсправитьОтслеживаниеНажатийНаIOS = мир =>
|
||
{
|
||
// https://stackoverflow.com/a/31459240/3404710
|
||
мир.отрисовщик.domElement.style.cursor = "pointer";
|
||
};
|
||
|
||
|
||
// // // //
|
||
|
||
|
||
ПодготовитьсяКОтслеживаниюНажатий = мир =>
|
||
{
|
||
мир.отслеживатьНажатия = false;
|
||
|
||
// Палец.
|
||
window.addEventListener(
|
||
"touchstart",
|
||
function(событие) {
|
||
сообщитьОНажатии(мир, событие.touches[0]);
|
||
}
|
||
);
|
||
// Мышь.
|
||
window.addEventListener(
|
||
"click",
|
||
function(событие) {
|
||
сообщитьОНажатии(мир, событие);
|
||
}
|
||
);
|
||
};
|
||
|
||
|
||
// // // //
|
||
|
||
|
||
ЦентрироватьСцену = мир =>
|
||
{
|
||
var мин = {
|
||
"x": 0,
|
||
"z": 0,
|
||
};
|
||
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;
|
||
}
|
||
}
|
||
мир.корень.position.x -= (макс.x - мин.x) / 2;
|
||
мир.корень.position.z -= (макс.z - мин.z) / 2;
|
||
};
|
||
|
||
|
||
// // // //
|
||
|
||
|
||
РазобратьРаскладкуKMahjongg = мир =>
|
||
{
|
||
мир.раскладкаKMahjongg.позиции = разобратьРаскладкуKMahjongg(мир.раскладкаKMahjongg.содержимое);
|
||
};
|
||
|
||
|
||
// // // //
|
||
|
||
|
||
ЗагрузитьРесурсыСцены = мир =>
|
||
{
|
||
мир.уведомить("надо загрузить ресурсы сцены");
|
||
};
|
||
|
||
|
||
// // // //
|
||
|
||
|
||
ПодготовитьСцену = мир =>
|
||
{
|
||
var коэффициент = 2;
|
||
var расстояние = 14;
|
||
мир.камера.position.y = расстояние * коэффициент;
|
||
мир.камера.position.z = расстояние;
|
||
мир.камера.lookAt(new THREE.Vector3(0, 0, 0));
|
||
|
||
мир.свет = new THREE.DirectionalLight(0xffffff, 1);
|
||
мир.свет.position.set(-0.5, 1, 0.5).normalize();
|
||
мир.сцена.add(мир.свет);
|
||
};
|
||
|
||
|
||
// // // //
|
||
|
||
|
||
СоздатьЗагрузчикТекстур = мир =>
|
||
{
|
||
мир.загрузчикТекстур = new THREE.TextureLoader();
|
||
};
|
||
|
||
|
||
// // // //
|
||
|
||
|
||
СоздатьЗагрузчикGLTF = мир =>
|
||
{
|
||
мир.загрузчикGLTF = new THREE.GLTFLoader();
|
||
};
|
||
|
||
|
||
// // // //
|
||
|
||
|
||
НастроитьThreeJS = мир =>
|
||
{
|
||
мир.сцена = new THREE.Scene();
|
||
мир.сцена.background = new THREE.Color(0xFFFFFF);
|
||
мир.камера = new THREE.PerspectiveCamera(45, 1, 0.1, 1000);
|
||
мир.ловецНажатий = new THREE.Raycaster();
|
||
мир.отрисовщик = new THREE.WebGLRenderer({canvas: мир.канва, antialias: true});
|
||
};
|
||
|
||
|
||
// // // //
|
||
|
||
|
||
СоздатьКанвуThreeJS = мир =>
|
||
{
|
||
мир.канва = document.createElement("canvas");
|
||
мир.канва.id = "канва-threejs";
|
||
мир.канва.style = `
|
||
position: absolute;
|
||
left: 0;
|
||
top: 0;
|
||
width: 100%;
|
||
height: 100%;
|
||
`;
|
||
var первый = document.body.firstChild;
|
||
if (первый)
|
||
{
|
||
document.body.insertBefore(мир.канва, первый);
|
||
}
|
||
else
|
||
{
|
||
document.body.appendChild(мир.канва);
|
||
}
|
||
};
|
||
|
||
|
||
// // // //
|
||
|
||
|
||
СоздатьМасштаб = мир =>
|
||
{
|
||
мир.масштаб = 1;
|
||
};
|
||
|