101 lines
2.9 KiB
JavaScript
101 lines
2.9 KiB
JavaScript
|
||
|
||
// // // //
|
||
|
||
|
||
сообщитьОНажатии = (мир, событие) =>
|
||
{
|
||
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;
|
||
}; |