|
-
-
- // // // //
-
-
- сообщитьОНажатии = (мир, событие) =>
- {
- if (!мир.отслеживатьНажатия)
- {
- return;
- }
-
- 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;
- };
|