Files
mahjong-scena/функции|functions.js

101 lines
2.9 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.

// // // //
сообщитьОНажатии = (мир, событие) =>
{
var позиция = new THREE.Vector2();
var ширина = window.innerWidth * мир.масштаб;
var высота = window.innerHeight * мир.масштаб;
позиция.x = ((событие.clientX + window.pageXOffset) / ширина ) * 2 - 1;
позиция.y = - ((событие.clientY + window.pageYOffset) / высота) * 2 + 1;
мир.позицияНажатия = позиция;
мир.уведомить("нажали");
};
// // // //
фишкуМожноВыбрать = (индексы, индекс) =>
{
var позиция = позицияИндексаФишки(индекс);
// Проверяем заблокированность фишки одновременно с обеих сторон.
var слева = уФишкиЕстьСоседи(индексы, позиция, 0, -2);
var справа = уФишкиЕстьСоседи(индексы, позиция, 0, 2);
if (слева && справа)
{
return false;
}
// Проверяем заблокированность сверху.
for (var смещениеСтолбца = -1; смещениеСтолбца < 2; ++смещениеСтолбца)
{
if (уФишкиЕстьСоседи(индексы, позиция, 1, смещениеСтолбца))
{
return false;
}
}
return true;
};
// // // //
уФишкиЕстьСоседи = (индексы, позиция, смещениеСлоя, смещениеСтолбца) =>
{
for (var смещениеРяда = -1; смещениеРяда < 2; ++смещениеРяда)
{
var позицияСоседа = [
позиция[0] + смещениеСлоя,
позиция[1] + смещениеРяда,
позиция[2] + смещениеСтолбца,
];
var индексСоседа = индексПозицииФишки(позицияСоседа);
if (индексСоседа in индексы)
{
return true;
}
}
return false;
};
// // // //
позицияИндексаФишки = (индекс) =>
{
const x = Math.round(индекс / 1000000);
const y = Math.round((индекс - x * 1000000) / 1000);
const z = индекс - x * 1000000 - y * 1000;
return [x, y, z];
};
// // // //
индексПозицииФишки = (позиция) =>
{
return позиция[0] * 1000000 + позиция[1] * 1000 + позиция[2];
};
// // // //
номерФишки = (фишки, id) =>
{
for (var номер in фишки)
{
var фишка = фишки[номер];
if (фишка.id == id)
{
return номер;
}
}
return null;
};